Fossil SCM

Merge trunk into markdown-tagrefs branch.

stephan 2022-09-15 17:48 markdown-tagrefs merge
Commit 8ef0347fd36952d04bf70e5df3c01087d6494fa3b0d7e530fd39a8131adbe53e
162 files changed -23 +111 -26 +26 +1 -1 +11 +1 -1 +112 -49 +407 -4 +23 -25 +7 -4 +28 -22 -21 +1 -1 +1 -1 +1 -1 +3 -3 +8 -4 +1 -1 +11 -10 +14 -4 +5 -3 +17 -18 +21 -20 +17 -14 +6 -6 +18 -18 +11 -6 +1 -1 +1 -1 +4 -4 +5 +4 -4 +5 +4 -4 +5 +4 -4 +5 +4 -4 +5 +994 -320 +9441 -436 +78 -30 +12 -15 +5 +433 -408 +1 -1 +4 -2 +466 +172 -102 +7 +3 -2 +5 -3 +5 -7 +25 -13 +2 -1 +14 -14 +39 -8 +3 -2 +3 -3 +1 -1 +3 -3 +5 -5 +2 -3 +2 -2 +27 -48 -1 -5 -4 +2 -2 +3 +2 -2 +3 -3 +123 -100 +6 +2 -2 +12 -9 +11 +1200 +2 -2 +4 -6 +234 -90 +1218 -754 +17 -9 +34 -8 +96 -23 +27 -29 +12 -2 +12 -2 +1 -1 +2 -1 +55 -10 +2 -2 +116 -6 +116 -6 +11 -4 +2 -2 +2 +19 -11 +9 +2 +39 -1 +124 -31 +5 -7 +2 -1 +3 -3 +1 -1 +12 -7 +1 -1 +1 -1 +7 -6 +82 -40 +3 -2 +16 -12 +16 -12 +1 -1 +1 -1 +5 -5 +1 -1 +20 +40 -32 +1 -1 +1 -1 +4 -3 +9 -1 +4 -1 +1 -1 +1 -1 +1 -1 +1 -1 +1 -1 +8 -8 +1 -1 +41 -5 +5 -5 +2 -2 +1 -1 +1 -1 +1 -1 +1 -1 +2 -2 +7 +6 -4 +1 -1 +20 -5 +3 -2 +44 -42 +2 -2 +1 -1 +13 -77 +24 -4 +17 -2 +12 +795 +71 -50 +80 -69 +4 -4 +3 +3 +6 +1 -1
- .dockerignore ~ Dockerfile ~ Makefile.in ~ VERSION ~ auto.def ~ compat/zlib/CMakeLists.txt ~ compat/zlib/ChangeLog ~ compat/zlib/Makefile ~ compat/zlib/Makefile.in ~ compat/zlib/README ~ compat/zlib/configure ~ compat/zlib/contrib/README.contrib ~ compat/zlib/contrib/blast/blast.h ~ compat/zlib/contrib/delphi/ZLib.pas ~ compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs ~ compat/zlib/contrib/infback9/inftree9.c ~ compat/zlib/contrib/minizip/Makefile ~ compat/zlib/contrib/minizip/configure.ac ~ compat/zlib/contrib/minizip/crypt.h ~ compat/zlib/contrib/minizip/ioapi.c ~ compat/zlib/contrib/minizip/ioapi.h ~ compat/zlib/contrib/minizip/miniunz.c ~ compat/zlib/contrib/minizip/minizip.c ~ compat/zlib/contrib/minizip/unzip.c ~ compat/zlib/contrib/minizip/unzip.h ~ compat/zlib/contrib/minizip/zip.c ~ compat/zlib/contrib/minizip/zip.h ~ compat/zlib/contrib/pascal/zlibpas.pas ~ compat/zlib/contrib/vstudio/readme.txt ~ compat/zlib/contrib/vstudio/vc10/zlib.rc ~ compat/zlib/contrib/vstudio/vc10/zlibvc.def ~ compat/zlib/contrib/vstudio/vc11/zlib.rc ~ compat/zlib/contrib/vstudio/vc11/zlibvc.def ~ compat/zlib/contrib/vstudio/vc12/zlib.rc ~ compat/zlib/contrib/vstudio/vc12/zlibvc.def ~ compat/zlib/contrib/vstudio/vc14/zlib.rc ~ compat/zlib/contrib/vstudio/vc14/zlibvc.def ~ compat/zlib/contrib/vstudio/vc9/zlib.rc ~ compat/zlib/contrib/vstudio/vc9/zlibvc.def ~ compat/zlib/crc32.c ~ compat/zlib/crc32.h ~ compat/zlib/deflate.c ~ compat/zlib/deflate.h ~ compat/zlib/examples/README.examples ~ compat/zlib/examples/enough.c ~ compat/zlib/examples/gzappend.c ~ compat/zlib/examples/gzlog.c ~ compat/zlib/examples/gznorm.c ~ compat/zlib/examples/zran.c ~ compat/zlib/examples/zran.h ~ compat/zlib/gzguts.h ~ compat/zlib/gzlib.c ~ compat/zlib/gzread.c ~ compat/zlib/gzwrite.c ~ compat/zlib/infback.c ~ compat/zlib/inffast.c ~ compat/zlib/inflate.c ~ compat/zlib/inflate.h ~ compat/zlib/inftrees.c ~ compat/zlib/os400/README400 ~ compat/zlib/os400/zlib.inc ~ compat/zlib/qnx/package.qpg ~ compat/zlib/test/example.c ~ compat/zlib/treebuild.xml ~ compat/zlib/trees.c ~ compat/zlib/win32/Makefile.bor ~ compat/zlib/win32/Makefile.gcc ~ compat/zlib/win32/Makefile.msc ~ compat/zlib/win32/README-WIN32.txt ~ compat/zlib/win32/zlib.def ~ compat/zlib/zconf.h ~ compat/zlib/zlib.3 ~ compat/zlib/zlib.3.pdf ~ compat/zlib/zlib.h ~ compat/zlib/zlib.map ~ compat/zlib/zutil.c ~ compat/zlib/zutil.h ~ containers/Dockerfile-nojail.patch ~ containers/busybox-config ~ extsrc/pikchr-worker.js ~ extsrc/pikchr.c ~ extsrc/pikchr.wasm ~ extsrc/shell.c ~ extsrc/sqlite3.c ~ extsrc/sqlite3.h ~ src/accordion.js ~ src/alerts.c ~ src/allrepo.c ~ src/backlink.c ~ src/backlink.c ~ src/backoffice.c ~ src/bisect.c ~ src/branch.c ~ src/builtin.c ~ src/chat.c ~ src/chat.c ~ src/checkin.c ~ src/checkout.c ~ src/configure.c ~ src/db.c ~ src/default.css ~ src/diff.c ~ src/diffcmd.c ~ src/dispatch.c ~ src/file.c ~ src/forum.c ~ src/fossil.page.pikchrshowasm.js ~ src/http_ssl.c ~ src/info.c ~ src/interwiki.c ~ src/json_branch.c ~ src/login.c ~ src/main.c ~ src/main.mk ~ src/markdown.c ~ src/markdown.c ~ src/md5.c ~ src/name.c ~ src/patch.c ~ src/printf.c ~ src/repolist.c ~ src/rss.c ~ src/schema.c ~ src/search.c ~ src/security_audit.c ~ src/setup.c ~ src/setupuser.c ~ src/sha1.c ~ src/sha3.c ~ src/skins.c ~ src/stat.c ~ src/style.c ~ src/tag.c ~ src/tar.c ~ src/timeline.c ~ src/unversioned.c ~ src/wiki.c ~ src/wikiformat.c ~ src/wikiformat.c ~ src/winhttp.c ~ src/xfer.c ~ src/zip.c ~ test/markdown-test3.md ~ tools/makemake.tcl ~ tools/mkbuiltin.c ~ tools/mkindex.c ~ win/Makefile.mingw ~ win/Makefile.mingw.mistachkin ~ win/fossil.exe.manifest ~ www/alerts.md ~ www/build.wiki ~ www/cgi.wiki ~ www/changes.wiki ~ www/chat.md ~ www/containers.md ~ www/fossil-v-git.wiki ~ www/gitusers.md ~ www/index.wiki ~ www/mkindex.tcl ~ www/permutedindex.html ~ www/quotes.wiki ~ www/sync.wiki
D .dockerignore
-23
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,23 +0,0 @@
1
-_FOSSIL_
2
-.fslckout
3
-ajax
4
-art
5
-autosetup
6
-bld
7
-compat
8
-debian
9
-fossil
10
-fossil.exe
11
-msvcbld
12
-setup
13
-src
14
-test
15
-tools
16
-win
17
-wbld
18
-win
19
-www
20
-*.a
21
-*.lib
22
-*.log
23
-*.mani
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,23 +0,0 @@
1 _FOSSIL_
2 .fslckout
3 ajax
4 art
5 autosetup
6 bld
7 compat
8 debian
9 fossil
10 fossil.exe
11 msvcbld
12 setup
13 src
14 test
15 tools
16 win
17 wbld
18 win
19 www
20 *.a
21 *.lib
22 *.log
23 *.mani
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,23 +0,0 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
+111 -26
--- Dockerfile
+++ Dockerfile
@@ -1,26 +1,111 @@
1
-###
2
-# Dockerfile for Fossil
3
-###
4
-FROM fedora:29
5
-
6
-### Now install some additional parts we will need for the build
7
-RUN dnf update -y && dnf install -y gcc make tcl tcl-devel zlib-devel openssl-devel tar && dnf clean all && groupadd -r fossil -g 433 && useradd -u 431 -r -g fossil -d /opt/fossil -s /sbin/nologin -c "Fossil user" fossil
8
-
9
-### If you want to build "trunk", change the next line accordingly.
10
-ENV FOSSIL_INSTALL_VERSION release
11
-
12
-RUN curl "https://fossil-scm.org/home/tarball/fossil-src.tar.gz?name=fossil-src&uuid=${FOSSIL_INSTALL_VERSION}" | tar zx
13
-RUN cd fossil-src && ./configure --disable-fusefs --json --with-th1-docs --with-th1-hooks --with-tcl=1 --with-tcl-stubs --with-tcl-private-stubs
14
-RUN cd fossil-src/src && mv main.c main.c.orig && sed s/\"now\"/0/ <main.c.orig >main.c
15
-RUN cd fossil-src && make && strip fossil && cp fossil /usr/bin && cd .. && rm -rf fossil-src && chmod a+rx /usr/bin/fossil && mkdir -p /opt/fossil && chown fossil:fossil /opt/fossil
16
-
17
-### Build is done, remove modules no longer needed
18
-RUN dnf remove -y gcc make zlib-devel tcl-devel openssl-devel tar && dnf clean all
19
-
20
-USER fossil
21
-
22
-ENV HOME /opt/fossil
23
-
24
-EXPOSE 8080
25
-
26
-CMD ["/usr/bin/fossil", "server", "--create", "--user", "admin", "/opt/fossil/repository.fossil"]
1
+# See www/containers.md for documentation on how to use this file.
2
+
3
+## ---------------------------------------------------------------------
4
+## STAGE 1: Build static Fossil & BusyBox binaries atop Alpine Linux
5
+## ---------------------------------------------------------------------
6
+
7
+FROM alpine:latest AS builder
8
+WORKDIR /tmp
9
+
10
+### Bake the basic Alpine Linux into a base layer so we never have to
11
+### repeat that step unless we change the package set. Although we're
12
+### going to throw this layer away below, we still pass --no-cache
13
+### because that cache is of no use in an immutable layer. Note that
14
+### we allow the UPX step to fail: it isn't in the ARM distros. We'll
15
+### check whether this optional piece exists before using it below.
16
+RUN set -x \
17
+ && apk update \
18
+ && apk upgrade --no-cache \
19
+ && apk add --no-cache \
20
+ gcc make moreutils \
21
+ linux-headers musl-dev \
22
+ openssl-dev openssl-libs-static \
23
+ zlib-dev zlib-static \
24
+ ; apk add --no-cache upx
25
+
26
+### Bake the custom BusyBox into another layer. The intent is that this
27
+### changes only when we change BBXVER. That will force an update of
28
+### the layers below, but this is a rare occurrence.
29
+ARG BBXVER="1_35_0"
30
+ENV BBXURL "https://github.com/mirror/busybox/tarball/${BBXVER}"
31
+COPY containers/busybox-config /tmp/bbx/.config
32
+ADD $BBXURL /tmp/bbx/src.tar.gz
33
+RUN set -x \
34
+ && tar --strip-components=1 -C bbx -xzf bbx/src.tar.gz \
35
+ && ( cd bbx && yes "" | make oldconfig && make -j11 ) \
36
+ && if [ -x /usr/bin/upx ] ; then upx -9q bbx/busybox ; fi
37
+
38
+### The changeable Fossil layer is the only one in the first stage that
39
+### changes often, so add it last, to make it independent of the others.
40
+###
41
+### $FSLSTB can be either a file or a directory due to a ADD's bizarre
42
+### behavior: it unpacks tarballs when added from a local file but not
43
+### from a URL! It matters because we default to a URL in case you're
44
+### building outside a Fossil checkout, but when building via the
45
+### container-image target, we can avoid a costly hit on the Fossil
46
+### project's home site by pulling the data from the local repo via the
47
+### "tarball" command. This is a DVCS, after all!
48
+ARG FSLVER="trunk"
49
+ARG FSLURL="https://fossil-scm.org/home/tarball/src?r=${FSLVER}"
50
+ENV FSLSTB=/tmp/fsl/src.tar.gz
51
+ADD $FSLURL $FSLSTB
52
+RUN set -x \
53
+ && if [ -d $FSLSTB ] ; then mv $FSLSTB/src fsl ; \
54
+ else tar -C fsl -xzf fsl/src.tar.gz ; fi \
55
+ && m=fsl/src/src/main.mk \
56
+ && grep -v '/skins/[a-ce-z]' $m | sponge $m \
57
+ && fsl/src/configure --static CFLAGS='-Os -s' && make -j11 \
58
+ && if [ -x /usr/bin/upx ] ; then upx -9q fossil ; fi
59
+
60
+
61
+## ---------------------------------------------------------------------
62
+## STAGE 2: Pare that back to the bare essentials.
63
+## ---------------------------------------------------------------------
64
+
65
+FROM scratch
66
+WORKDIR /jail
67
+ARG UID=499
68
+ENV PATH "/bin:/jail/bin"
69
+
70
+### Lay BusyBox down as the first base layer. Coupled with the host's
71
+### kernel, this is the "OS."
72
+COPY --from=builder /tmp/bbx/busybox /bin/
73
+RUN [ "/bin/busybox", "--install", "/bin" ]
74
+
75
+### Set up that base OS for our specific use without tying it to
76
+### anything likely to change often. So long as the user leaves
77
+### UID alone, this layer will be durable.
78
+RUN set -x \
79
+ && echo 'root:x:0:0:SysAdmin:/:/bin/nologin' > /etc/passwd \
80
+ && echo 'root:x:0:root' > /etc/group \
81
+ && addgroup -S -g ${UID} fossil \
82
+ && adduser -S -h `pwd` -g 'Fossil User' -G fossil -u ${UID} fossil \
83
+ && install -d -m 700 -o fossil -g fossil log museum \
84
+ && install -d -m 755 -o fossil -g fossil dev \
85
+ && mknod -m 666 dev/null c 1 3 \
86
+ && mknod -m 444 dev/urandom c 1 9
87
+
88
+### Do Fossil-specific things atop those base layers; this will change
89
+### as often as the Fossil build-from-source layer above.
90
+COPY --from=builder /tmp/fossil bin/
91
+RUN set -x \
92
+ && ln -s /jail/bin/fossil /bin/f \
93
+ && echo -e '#!/bin/sh\nfossil sha1sum "$@"' > /bin/sha1sum \
94
+ && echo -e '#!/bin/sh\nfossil sha3sum "$@"' > /bin/sha3sum \
95
+ && echo -e '#!/bin/sh\nfossil sqlite3 --no-repository "$@"' > \
96
+ /bin/sqlite3 \
97
+ && chmod +x /bin/sha?sum /bin/sqlite3
98
+
99
+
100
+## ---------------------------------------------------------------------
101
+## STAGE 3: Run!
102
+## ---------------------------------------------------------------------
103
+
104
+EXPOSE 8080/tcp
105
+CMD [ \
106
+ "bin/fossil", "server", \
107
+ "--chroot", "/jail", \
108
+ "--create", \
109
+ "--jsmode", "bundled", \
110
+ "--user", "admin", \
111
+ "museum/repo.fossil"]
27112
--- Dockerfile
+++ Dockerfile
@@ -1,26 +1,111 @@
1 ###
2 # Dockerfile for Fossil
3 ###
4 FROM fedora:29
5
6 ### Now install some additional parts we will need for the build
7 RUN dnf update -y && dnf install -y gcc make tcl tcl-devel zlib-devel openssl-devel tar && dnf clean all && groupadd -r fossil -g 433 && useradd -u 431 -r -g fossil -d /opt/fossil -s /sbin/nologin -c "Fossil user" fossil
8
9 ### If you want to build "trunk", change the next line accordingly.
10 ENV FOSSIL_INSTALL_VERSION release
11
12 RUN curl "https://fossil-scm.org/home/tarball/fossil-src.tar.gz?name=fossil-src&uuid=${FOSSIL_INSTALL_VERSION}" | tar zx
13 RUN cd fossil-src && ./configure --disable-fusefs --json --with-th1-docs --with-th1-hooks --with-tcl=1 --with-tcl-stubs --with-tcl-private-stubs
14 RUN cd fossil-src/src && mv main.c main.c.orig && sed s/\"now\"/0/ <main.c.orig >main.c
15 RUN cd fossil-src && make && strip fossil && cp fossil /usr/bin && cd .. && rm -rf fossil-src && chmod a+rx /usr/bin/fossil && mkdir -p /opt/fossil && chown fossil:fossil /opt/fossil
16
17 ### Build is done, remove modules no longer needed
18 RUN dnf remove -y gcc make zlib-devel tcl-devel openssl-devel tar && dnf clean all
19
20 USER fossil
21
22 ENV HOME /opt/fossil
23
24 EXPOSE 8080
25
26 CMD ["/usr/bin/fossil", "server", "--create", "--user", "admin", "/opt/fossil/repository.fossil"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
--- Dockerfile
+++ Dockerfile
@@ -1,26 +1,111 @@
1 # See www/containers.md for documentation on how to use this file.
2
3 ## ---------------------------------------------------------------------
4 ## STAGE 1: Build static Fossil & BusyBox binaries atop Alpine Linux
5 ## ---------------------------------------------------------------------
6
7 FROM alpine:latest AS builder
8 WORKDIR /tmp
9
10 ### Bake the basic Alpine Linux into a base layer so we never have to
11 ### repeat that step unless we change the package set. Although we're
12 ### going to throw this layer away below, we still pass --no-cache
13 ### because that cache is of no use in an immutable layer. Note that
14 ### we allow the UPX step to fail: it isn't in the ARM distros. We'll
15 ### check whether this optional piece exists before using it below.
16 RUN set -x \
17 && apk update \
18 && apk upgrade --no-cache \
19 && apk add --no-cache \
20 gcc make moreutils \
21 linux-headers musl-dev \
22 openssl-dev openssl-libs-static \
23 zlib-dev zlib-static \
24 ; apk add --no-cache upx
25
26 ### Bake the custom BusyBox into another layer. The intent is that this
27 ### changes only when we change BBXVER. That will force an update of
28 ### the layers below, but this is a rare occurrence.
29 ARG BBXVER="1_35_0"
30 ENV BBXURL "https://github.com/mirror/busybox/tarball/${BBXVER}"
31 COPY containers/busybox-config /tmp/bbx/.config
32 ADD $BBXURL /tmp/bbx/src.tar.gz
33 RUN set -x \
34 && tar --strip-components=1 -C bbx -xzf bbx/src.tar.gz \
35 && ( cd bbx && yes "" | make oldconfig && make -j11 ) \
36 && if [ -x /usr/bin/upx ] ; then upx -9q bbx/busybox ; fi
37
38 ### The changeable Fossil layer is the only one in the first stage that
39 ### changes often, so add it last, to make it independent of the others.
40 ###
41 ### $FSLSTB can be either a file or a directory due to a ADD's bizarre
42 ### behavior: it unpacks tarballs when added from a local file but not
43 ### from a URL! It matters because we default to a URL in case you're
44 ### building outside a Fossil checkout, but when building via the
45 ### container-image target, we can avoid a costly hit on the Fossil
46 ### project's home site by pulling the data from the local repo via the
47 ### "tarball" command. This is a DVCS, after all!
48 ARG FSLVER="trunk"
49 ARG FSLURL="https://fossil-scm.org/home/tarball/src?r=${FSLVER}"
50 ENV FSLSTB=/tmp/fsl/src.tar.gz
51 ADD $FSLURL $FSLSTB
52 RUN set -x \
53 && if [ -d $FSLSTB ] ; then mv $FSLSTB/src fsl ; \
54 else tar -C fsl -xzf fsl/src.tar.gz ; fi \
55 && m=fsl/src/src/main.mk \
56 && grep -v '/skins/[a-ce-z]' $m | sponge $m \
57 && fsl/src/configure --static CFLAGS='-Os -s' && make -j11 \
58 && if [ -x /usr/bin/upx ] ; then upx -9q fossil ; fi
59
60
61 ## ---------------------------------------------------------------------
62 ## STAGE 2: Pare that back to the bare essentials.
63 ## ---------------------------------------------------------------------
64
65 FROM scratch
66 WORKDIR /jail
67 ARG UID=499
68 ENV PATH "/bin:/jail/bin"
69
70 ### Lay BusyBox down as the first base layer. Coupled with the host's
71 ### kernel, this is the "OS."
72 COPY --from=builder /tmp/bbx/busybox /bin/
73 RUN [ "/bin/busybox", "--install", "/bin" ]
74
75 ### Set up that base OS for our specific use without tying it to
76 ### anything likely to change often. So long as the user leaves
77 ### UID alone, this layer will be durable.
78 RUN set -x \
79 && echo 'root:x:0:0:SysAdmin:/:/bin/nologin' > /etc/passwd \
80 && echo 'root:x:0:root' > /etc/group \
81 && addgroup -S -g ${UID} fossil \
82 && adduser -S -h `pwd` -g 'Fossil User' -G fossil -u ${UID} fossil \
83 && install -d -m 700 -o fossil -g fossil log museum \
84 && install -d -m 755 -o fossil -g fossil dev \
85 && mknod -m 666 dev/null c 1 3 \
86 && mknod -m 444 dev/urandom c 1 9
87
88 ### Do Fossil-specific things atop those base layers; this will change
89 ### as often as the Fossil build-from-source layer above.
90 COPY --from=builder /tmp/fossil bin/
91 RUN set -x \
92 && ln -s /jail/bin/fossil /bin/f \
93 && echo -e '#!/bin/sh\nfossil sha1sum "$@"' > /bin/sha1sum \
94 && echo -e '#!/bin/sh\nfossil sha3sum "$@"' > /bin/sha3sum \
95 && echo -e '#!/bin/sh\nfossil sqlite3 --no-repository "$@"' > \
96 /bin/sqlite3 \
97 && chmod +x /bin/sha?sum /bin/sqlite3
98
99
100 ## ---------------------------------------------------------------------
101 ## STAGE 3: Run!
102 ## ---------------------------------------------------------------------
103
104 EXPOSE 8080/tcp
105 CMD [ \
106 "bin/fossil", "server", \
107 "--chroot", "/jail", \
108 "--create", \
109 "--jsmode", "bundled", \
110 "--user", "admin", \
111 "museum/repo.fossil"]
112
+26
--- Makefile.in
+++ Makefile.in
@@ -116,5 +116,31 @@
116116
# of delegating to it with "$(MAKE) reconfig": having children running
117117
# around interfering makes this failure mode even worse.
118118
Makefile: @srcdir@/Makefile.in $(SRCDIR)/main.mk @AUTODEPS@
119119
@AUTOREMAKE@
120120
touch @builddir@/Makefile
121
+
122
+# Container stuff
123
+SRCTB := src-@[email protected]
124
+container-image:
125
+ $(APPNAME) tarball --name src @FOSSIL_CI_PFX@ $(SRCTB)
126
+ docker build \
127
+ --tag fossil:@FOSSIL_CI_PFX@ \
128
+ --build-arg FSLURL=$(SRCTB) \
129
+ $(DBFLAGS) @srcdir@
130
+ rm -f $(SRCTB)
131
+
132
+container-run: container-image
133
+ docker run \
134
+ --name fossil-@FOSSIL_CI_PFX@ \
135
+ --cap-drop AUDIT_WRITE \
136
+ --cap-drop CHOWN \
137
+ --cap-drop FSETID \
138
+ --cap-drop KILL \
139
+ --cap-drop MKNOD \
140
+ --cap-drop NET_BIND_SERVICE \
141
+ --cap-drop NET_RAW \
142
+ --cap-drop SETFCAP \
143
+ --cap-drop SETPCAP \
144
+ --detach --publish 8080:8080 \
145
+ $(DRFLAGS) fossil:@FOSSIL_CI_PFX@
146
+ docker container logs fossil-@FOSSIL_CI_PFX@
121147
--- Makefile.in
+++ Makefile.in
@@ -116,5 +116,31 @@
116 # of delegating to it with "$(MAKE) reconfig": having children running
117 # around interfering makes this failure mode even worse.
118 Makefile: @srcdir@/Makefile.in $(SRCDIR)/main.mk @AUTODEPS@
119 @AUTOREMAKE@
120 touch @builddir@/Makefile
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
--- Makefile.in
+++ Makefile.in
@@ -116,5 +116,31 @@
116 # of delegating to it with "$(MAKE) reconfig": having children running
117 # around interfering makes this failure mode even worse.
118 Makefile: @srcdir@/Makefile.in $(SRCDIR)/main.mk @AUTODEPS@
119 @AUTOREMAKE@
120 touch @builddir@/Makefile
121
122 # Container stuff
123 SRCTB := src-@[email protected]
124 container-image:
125 $(APPNAME) tarball --name src @FOSSIL_CI_PFX@ $(SRCTB)
126 docker build \
127 --tag fossil:@FOSSIL_CI_PFX@ \
128 --build-arg FSLURL=$(SRCTB) \
129 $(DBFLAGS) @srcdir@
130 rm -f $(SRCTB)
131
132 container-run: container-image
133 docker run \
134 --name fossil-@FOSSIL_CI_PFX@ \
135 --cap-drop AUDIT_WRITE \
136 --cap-drop CHOWN \
137 --cap-drop FSETID \
138 --cap-drop KILL \
139 --cap-drop MKNOD \
140 --cap-drop NET_BIND_SERVICE \
141 --cap-drop NET_RAW \
142 --cap-drop SETFCAP \
143 --cap-drop SETPCAP \
144 --detach --publish 8080:8080 \
145 $(DRFLAGS) fossil:@FOSSIL_CI_PFX@
146 docker container logs fossil-@FOSSIL_CI_PFX@
147
+1 -1
--- VERSION
+++ VERSION
@@ -1,1 +1,1 @@
1
-2.19
1
+2.20
22
--- VERSION
+++ VERSION
@@ -1,1 +1,1 @@
1 2.19
2
--- VERSION
+++ VERSION
@@ -1,1 +1,1 @@
1 2.20
2
+11
--- auto.def
+++ auto.def
@@ -349,10 +349,12 @@
349349
set zlibpath [opt-val with-zlib]
350350
if {$zlibpath eq "tree"} {
351351
set zlibdir [file dirname $autosetup(dir)]/compat/zlib
352352
if {![file isdirectory $zlibdir]} {
353353
user-error "The zlib in source tree directory does not exist"
354
+ } elseif { ([llength [glob -nocomplain -directory $zlibdir libz*]] == 0) } {
355
+ user-error "With --with-zlib=tree, $zlibdir must be configured and built first."
354356
}
355357
cc-with [list -cflags "-I$zlibdir -L$zlibdir"]
356358
define-append EXTRA_CFLAGS -I$zlibdir
357359
define-append LIBS $zlibdir/libz.a
358360
set ::zlib_lib $zlibdir/libz.a
@@ -762,8 +764,17 @@
762764
catch {exec chmod u+x tools/emcc.sh}
763765
} else {
764766
define EMCC_WRAPPER ""
765767
catch {exec rm -f tools/emcc.sh}
766768
}
769
+
770
+# Tag container builds with a prefix of the checkin ID of the version
771
+# of Fossil each one contains. This not only allows multiple images
772
+# to coexist and multiple containers to be created unamgiguosly from
773
+# them, it also changes the URL we fetch the source tarball from, so
774
+# repeated builds of a given version generate and fetch the source
775
+# tarball once only, keeping it in the local Docker/Podman cache.
776
+set ci [readfile "$::autosetup(srcdir)/manifest.uuid"]
777
+define FOSSIL_CI_PFX [string range $ci 0 11]
767778
768779
make-template Makefile.in
769780
make-config-header autoconfig.h -auto {USE_* FOSSIL_*}
770781
--- auto.def
+++ auto.def
@@ -349,10 +349,12 @@
349 set zlibpath [opt-val with-zlib]
350 if {$zlibpath eq "tree"} {
351 set zlibdir [file dirname $autosetup(dir)]/compat/zlib
352 if {![file isdirectory $zlibdir]} {
353 user-error "The zlib in source tree directory does not exist"
 
 
354 }
355 cc-with [list -cflags "-I$zlibdir -L$zlibdir"]
356 define-append EXTRA_CFLAGS -I$zlibdir
357 define-append LIBS $zlibdir/libz.a
358 set ::zlib_lib $zlibdir/libz.a
@@ -762,8 +764,17 @@
762 catch {exec chmod u+x tools/emcc.sh}
763 } else {
764 define EMCC_WRAPPER ""
765 catch {exec rm -f tools/emcc.sh}
766 }
 
 
 
 
 
 
 
 
 
767
768 make-template Makefile.in
769 make-config-header autoconfig.h -auto {USE_* FOSSIL_*}
770
--- auto.def
+++ auto.def
@@ -349,10 +349,12 @@
349 set zlibpath [opt-val with-zlib]
350 if {$zlibpath eq "tree"} {
351 set zlibdir [file dirname $autosetup(dir)]/compat/zlib
352 if {![file isdirectory $zlibdir]} {
353 user-error "The zlib in source tree directory does not exist"
354 } elseif { ([llength [glob -nocomplain -directory $zlibdir libz*]] == 0) } {
355 user-error "With --with-zlib=tree, $zlibdir must be configured and built first."
356 }
357 cc-with [list -cflags "-I$zlibdir -L$zlibdir"]
358 define-append EXTRA_CFLAGS -I$zlibdir
359 define-append LIBS $zlibdir/libz.a
360 set ::zlib_lib $zlibdir/libz.a
@@ -762,8 +764,17 @@
764 catch {exec chmod u+x tools/emcc.sh}
765 } else {
766 define EMCC_WRAPPER ""
767 catch {exec rm -f tools/emcc.sh}
768 }
769
770 # Tag container builds with a prefix of the checkin ID of the version
771 # of Fossil each one contains. This not only allows multiple images
772 # to coexist and multiple containers to be created unamgiguosly from
773 # them, it also changes the URL we fetch the source tarball from, so
774 # repeated builds of a given version generate and fetch the source
775 # tarball once only, keeping it in the local Docker/Podman cache.
776 set ci [readfile "$::autosetup(srcdir)/manifest.uuid"]
777 define FOSSIL_CI_PFX [string range $ci 0 11]
778
779 make-template Makefile.in
780 make-config-header autoconfig.h -auto {USE_* FOSSIL_*}
781
--- compat/zlib/CMakeLists.txt
+++ compat/zlib/CMakeLists.txt
@@ -1,11 +1,11 @@
11
cmake_minimum_required(VERSION 2.4.4)
22
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
33
44
project(zlib C)
55
6
-set(VERSION "1.2.11")
6
+set(VERSION "1.2.12")
77
88
option(ASM686 "Enable building i686 assembly implementation")
99
option(AMD64 "Enable building amd64 assembly implementation")
1010
1111
set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
1212
--- compat/zlib/CMakeLists.txt
+++ compat/zlib/CMakeLists.txt
@@ -1,11 +1,11 @@
1 cmake_minimum_required(VERSION 2.4.4)
2 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
3
4 project(zlib C)
5
6 set(VERSION "1.2.11")
7
8 option(ASM686 "Enable building i686 assembly implementation")
9 option(AMD64 "Enable building amd64 assembly implementation")
10
11 set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
12
--- compat/zlib/CMakeLists.txt
+++ compat/zlib/CMakeLists.txt
@@ -1,11 +1,11 @@
1 cmake_minimum_required(VERSION 2.4.4)
2 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
3
4 project(zlib C)
5
6 set(VERSION "1.2.12")
7
8 option(ASM686 "Enable building i686 assembly implementation")
9 option(AMD64 "Enable building amd64 assembly implementation")
10
11 set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
12
--- compat/zlib/ChangeLog
+++ compat/zlib/ChangeLog
@@ -1,8 +1,71 @@
11
22
ChangeLog file for zlib
33
4
+Changes in 1.2.12 (27 Mar 2022)
5
+- Cygwin does not have _wopen(), so do not create gzopen_w() there
6
+- Permit a deflateParams() parameter change as soon as possible
7
+- Limit hash table inserts after switch from stored deflate
8
+- Fix bug when window full in deflate_stored()
9
+- Fix CLEAR_HASH macro to be usable as a single statement
10
+- Avoid a conversion error in gzseek when off_t type too small
11
+- Have Makefile return non-zero error code on test failure
12
+- Avoid some conversion warnings in gzread.c and gzwrite.c
13
+- Update use of errno for newer Windows CE versions
14
+- Small speedup to inflate [psumbera]
15
+- Return an error if the gzputs string length can't fit in an int
16
+- Add address checking in clang to -w option of configure
17
+- Don't compute check value for raw inflate if asked to validate
18
+- Handle case where inflateSync used when header never processed
19
+- Avoid the use of ptrdiff_t
20
+- Avoid an undefined behavior of memcpy() in gzappend()
21
+- Avoid undefined behaviors of memcpy() in gz*printf()
22
+- Avoid an undefined behavior of memcpy() in _tr_stored_block()
23
+- Make the names in functions declarations identical to definitions
24
+- Remove old assembler code in which bugs have manifested
25
+- Fix deflateEnd() to not report an error at start of raw deflate
26
+- Add legal disclaimer to README
27
+- Emphasize the need to continue decompressing gzip members
28
+- Correct the initialization requirements for deflateInit2()
29
+- Fix a bug that can crash deflate on some input when using Z_FIXED
30
+- Assure that the number of bits for deflatePrime() is valid
31
+- Use a structure to make globals in enough.c evident
32
+- Use a macro for the printf format of big_t in enough.c
33
+- Clean up code style in enough.c, update version
34
+- Use inline function instead of macro for index in enough.c
35
+- Clarify that prefix codes are counted in enough.c
36
+- Show all the codes for the maximum tables size in enough.c
37
+- Add gznorm.c example, which normalizes gzip files
38
+- Fix the zran.c example to work on a multiple-member gzip file
39
+- Add tables for crc32_combine(), to speed it up by a factor of 200
40
+- Add crc32_combine_gen() and crc32_combine_op() for fast combines
41
+- Speed up software CRC-32 computation by a factor of 1.5 to 3
42
+- Use atomic test and set, if available, for dynamic CRC tables
43
+- Don't bother computing check value after successful inflateSync()
44
+- Correct comment in crc32.c
45
+- Add use of the ARMv8 crc32 instructions when requested
46
+- Use ARM crc32 instructions if the ARM architecture has them
47
+- Explicitly note that the 32-bit check values are 32 bits
48
+- Avoid adding empty gzip member after gzflush with Z_FINISH
49
+- Fix memory leak on error in gzlog.c
50
+- Fix error in comment on the polynomial representation of a byte
51
+- Clarify gz* function interfaces, referring to parameter names
52
+- Change macro name in inflate.c to avoid collision in VxWorks
53
+- Correct typo in blast.c
54
+- Improve portability of contrib/minizip
55
+- Fix indentation in minizip's zip.c
56
+- Replace black/white with allow/block. (theresa-m)
57
+- minizip warning fix if MAXU32 already defined. (gvollant)
58
+- Fix unztell64() in minizip to work past 4GB. (Daniël Hörchner)
59
+- Clean up minizip to reduce warnings for testing
60
+- Add fallthrough comments for gcc
61
+- Eliminate use of ULL constants
62
+- Separate out address sanitizing from warnings in configure
63
+- Remove destructive aspects of make distclean
64
+- Check for cc masquerading as gcc or clang in configure
65
+- Fix crc32.c to compile local functions only if used
66
+
467
Changes in 1.2.11 (15 Jan 2017)
568
- Fix deflate stored bug when pulling last block from window
669
- Permit immediate deflateParams changes before any deflate input
770
871
Changes in 1.2.10 (2 Jan 2017)
@@ -509,11 +572,11 @@
509572
- Replace use of errno in gz* with functions, support WinCE [Alves]
510573
- Provide alternative to perror() in minigzip.c for WinCE [Alves]
511574
- Don't use _vsnprintf on later versions of MSVC [Lowman]
512575
- Add CMake build script and input file [Lowman]
513576
- Update contrib/minizip to 1.1 [Svensson, Vollant]
514
-- Moved nintendods directory from contrib to .
577
+- Moved nintendods directory from contrib to root
515578
- Replace gzio.c with a new set of routines with the same functionality
516579
- Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above
517580
- Update contrib/minizip to 1.1b
518581
- Change gzeof() to return 0 on error instead of -1 to agree with zlib.h
519582
@@ -683,11 +746,11 @@
683746
- Update make_vms.com [Zinser]
684747
- Initialize state->write in inflateReset() since copied in inflate_fast()
685748
- Be more strict on incomplete code sets in inflate_table() and increase
686749
ENOUGH and MAXD -- this repairs a possible security vulnerability for
687750
invalid inflate input. Thanks to Tavis Ormandy and Markus Oberhumer for
688
- discovering the vulnerability and providing test cases.
751
+ discovering the vulnerability and providing test cases
689752
- Add ia64 support to configure for HP-UX [Smith]
690753
- Add error return to gzread() for format or i/o error [Levin]
691754
- Use malloc.h for OS/2 [Necasek]
692755
693756
Changes in 1.2.2.3 (27 May 2005)
@@ -719,11 +782,11 @@
719782
- Improve WinCE errno handling and comments [Chang]
720783
- Remove comment about no gzip header processing in FAQ
721784
- Add Z_FIXED strategy option to deflateInit2() to force fixed trees
722785
- Add updated make_vms.com [Coghlan], update README
723786
- Create a new "examples" directory, move gzappend.c there, add zpipe.c,
724
- fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html.
787
+ fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html
725788
- Add FAQ entry and comments in deflate.c on uninitialized memory access
726789
- Add Solaris 9 make options in configure [Gilbert]
727790
- Allow strerror() usage in gzio.c for STDC
728791
- Fix DecompressBuf in contrib/delphi/ZLib.pas [ManChesTer]
729792
- Update contrib/masmx86/inffas32.asm and gvmat32.asm [Vollant]
@@ -790,11 +853,11 @@
790853
- Update email address in README
791854
- Several FAQ updates
792855
- Fix a big fat bug in inftrees.c that prevented decoding valid
793856
dynamic blocks with only literals and no distance codes --
794857
Thanks to "Hot Emu" for the bug report and sample file
795
-- Add a note to puff.c on no distance codes case.
858
+- Add a note to puff.c on no distance codes case
796859
797860
Changes in 1.2.1 (17 November 2003)
798861
- Remove a tab in contrib/gzappend/gzappend.c
799862
- Update some interfaces in contrib for new zlib functions
800863
- Update zlib version number in some contrib entries
@@ -1034,18 +1097,18 @@
10341097
- Add contrib/inflate86/ for x86 faster inflate
10351098
- Add contrib/blast/ for PKWare Data Compression Library decompression
10361099
- Add contrib/puff/ simple inflate for deflate format description
10371100
10381101
Changes in 1.1.4 (11 March 2002)
1039
-- ZFREE was repeated on same allocation on some error conditions.
1102
+- ZFREE was repeated on same allocation on some error conditions
10401103
This creates a security problem described in
10411104
http://www.zlib.org/advisory-2002-03-11.txt
10421105
- Returned incorrect error (Z_MEM_ERROR) on some invalid data
10431106
- Avoid accesses before window for invalid distances with inflate window
1044
- less than 32K.
1107
+ less than 32K
10451108
- force windowBits > 8 to avoid a bug in the encoder for a window size
1046
- of 256 bytes. (A complete fix will be available in 1.1.5).
1109
+ of 256 bytes. (A complete fix will be available in 1.1.5)
10471110
10481111
Changes in 1.1.3 (9 July 1998)
10491112
- fix "an inflate input buffer bug that shows up on rare but persistent
10501113
occasions" (Mark)
10511114
- fix gzread and gztell for concatenated .gz files (Didier Le Botlan)
@@ -1115,11 +1178,11 @@
11151178
Changes in 1.1.1 (27 Feb 98)
11161179
- fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson)
11171180
- remove block truncation heuristic which had very marginal effect for zlib
11181181
(smaller lit_bufsize than in gzip 1.2.4) and degraded a little the
11191182
compression ratio on some files. This also allows inlining _tr_tally for
1120
- matches in deflate_slow.
1183
+ matches in deflate_slow
11211184
- added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier)
11221185
11231186
Changes in 1.1.0 (24 Feb 98)
11241187
- do not return STREAM_END prematurely in inflate (John Bowler)
11251188
- revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler)
@@ -1160,11 +1223,11 @@
11601223
- fix gzgetc and gzputc for big endian systems (Markus Oberhumer)
11611224
- added compress2() to allow setting the compression level
11621225
- include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong)
11631226
- use constant arrays for the static trees in trees.c instead of computing
11641227
them at run time (thanks to Ken Raeburn for this suggestion). To create
1165
- trees.h, compile with GEN_TREES_H and run "make test".
1228
+ trees.h, compile with GEN_TREES_H and run "make test"
11661229
- check return code of example in "make test" and display result
11671230
- pass minigzip command line options to file_compress
11681231
- simplifying code of inflateSync to avoid gcc 2.8 bug
11691232
11701233
- support CC="gcc -Wall" in configure -s (QingLong)
@@ -1199,16 +1262,16 @@
11991262
12001263
Changes in 1.0.6 (19 Jan 1998)
12011264
- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and
12021265
gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code)
12031266
- Fix a deflate bug occurring only with compression level 0 (thanks to
1204
- Andy Buckler for finding this one).
1205
-- In minigzip, pass transparently also the first byte for .Z files.
1267
+ Andy Buckler for finding this one)
1268
+- In minigzip, pass transparently also the first byte for .Z files
12061269
- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress()
12071270
- check Z_FINISH in inflate (thanks to Marc Schluper)
12081271
- Implement deflateCopy (thanks to Adam Costello)
1209
-- make static libraries by default in configure, add --shared option.
1272
+- make static libraries by default in configure, add --shared option
12101273
- move MSDOS or Windows specific files to directory msdos
12111274
- suppress the notion of partial flush to simplify the interface
12121275
(but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4)
12131276
- suppress history buffer provided by application to simplify the interface
12141277
(this feature was not implemented anyway in 1.0.4)
@@ -1216,29 +1279,29 @@
12161279
inflateInit2
12171280
- add EXPORT in all exported functions (for Windows DLL)
12181281
- added Makefile.nt (thanks to Stephen Williams)
12191282
- added the unsupported "contrib" directory:
12201283
contrib/asm386/ by Gilles Vollant <[email protected]>
1221
- 386 asm code replacing longest_match().
1284
+ 386 asm code replacing longest_match()
12221285
contrib/iostream/ by Kevin Ruland <[email protected]>
12231286
A C++ I/O streams interface to the zlib gz* functions
12241287
contrib/iostream2/ by Tyge Løvset <[email protected]>
12251288
Another C++ I/O streams interface
12261289
contrib/untgz/ by "Pedro A. Aranda Guti\irrez" <[email protected]>
12271290
A very simple tar.gz file extractor using zlib
12281291
contrib/visual-basic.txt by Carlos Rios <[email protected]>
1229
- How to use compress(), uncompress() and the gz* functions from VB.
1292
+ How to use compress(), uncompress() and the gz* functions from VB
12301293
- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression
12311294
level) in minigzip (thanks to Tom Lane)
12321295
12331296
- use const for rommable constants in deflate
12341297
- added test for gzseek and gztell in example.c
12351298
- add undocumented function inflateSyncPoint() (hack for Paul Mackerras)
12361299
- add undocumented function zError to convert error code to string
12371300
(for Tim Smithers)
1238
-- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code.
1239
-- Use default memcpy for Symantec MSDOS compiler.
1301
+- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code
1302
+- Use default memcpy for Symantec MSDOS compiler
12401303
- Add EXPORT keyword for check_func (needed for Windows DLL)
12411304
- add current directory to LD_LIBRARY_PATH for "make test"
12421305
- create also a link for libz.so.1
12431306
- added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura)
12441307
- use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX)
@@ -1247,21 +1310,21 @@
12471310
- add advice in zlib.h for best usage of deflateSetDictionary
12481311
- work around compiler bug on Atari (cast Z_NULL in call of s->checkfn)
12491312
- allow compilation with ANSI keywords only enabled for TurboC in large model
12501313
- avoid "versionString"[0] (Borland bug)
12511314
- add NEED_DUMMY_RETURN for Borland
1252
-- use variable z_verbose for tracing in debug mode (L. Peter Deutsch).
1315
+- use variable z_verbose for tracing in debug mode (L. Peter Deutsch)
12531316
- allow compilation with CC
12541317
- defined STDC for OS/2 (David Charlap)
12551318
- limit external names to 8 chars for MVS (Thomas Lund)
12561319
- in minigzip.c, use static buffers only for 16-bit systems
12571320
- fix suffix check for "minigzip -d foo.gz"
12581321
- do not return an error for the 2nd of two consecutive gzflush() (Felix Lee)
12591322
- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau)
12601323
- added makelcc.bat for lcc-win32 (Tom St Denis)
12611324
- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe)
1262
-- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion.
1325
+- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion
12631326
- check for unistd.h in configure (for off_t)
12641327
- remove useless check parameter in inflate_blocks_free
12651328
- avoid useless assignment of s->check to itself in inflate_blocks_new
12661329
- do not flush twice in gzclose (thanks to Ken Raeburn)
12671330
- rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h
@@ -1278,11 +1341,11 @@
12781341
- Update web address in README
12791342
12801343
Changes in 1.0.4 (24 Jul 96)
12811344
- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF
12821345
bit, so the decompressor could decompress all the correct data but went
1283
- on to attempt decompressing extra garbage data. This affected minigzip too.
1346
+ on to attempt decompressing extra garbage data. This affected minigzip too
12841347
- zlibVersion and gzerror return const char* (needed for DLL)
12851348
- port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno)
12861349
- use z_error only for DEBUG (avoid problem with DLLs)
12871350
12881351
Changes in 1.0.3 (2 Jul 96)
@@ -1308,11 +1371,11 @@
13081371
13091372
Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion]
13101373
- fix array overlay in deflate.c which sometimes caused bad compressed data
13111374
- fix inflate bug with empty stored block
13121375
- fix MSDOS medium model which was broken in 0.99
1313
-- fix deflateParams() which could generate bad compressed data.
1376
+- fix deflateParams() which could generate bad compressed data
13141377
- Bytef is define'd instead of typedef'ed (work around Borland bug)
13151378
- added an INDEX file
13161379
- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
13171380
Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas)
13181381
- speed up adler32 for modern machines without auto-increment
@@ -1329,11 +1392,11 @@
13291392
13301393
Changes in 0.99 (27 Jan 96)
13311394
- allow preset dictionary shared between compressor and decompressor
13321395
- allow compression level 0 (no compression)
13331396
- add deflateParams in zlib.h: allow dynamic change of compression level
1334
- and compression strategy.
1397
+ and compression strategy
13351398
- test large buffers and deflateParams in example.c
13361399
- add optional "configure" to build zlib as a shared library
13371400
- suppress Makefile.qnx, use configure instead
13381401
- fixed deflate for 64-bit systems (detected on Cray)
13391402
- fixed inflate_blocks for 64-bit systems (detected on Alpha)
@@ -1371,48 +1434,48 @@
13711434
- in fcalloc, normalize pointer if size > 65520 bytes
13721435
- don't use special fcalloc for 32 bit Borland C++
13731436
- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc...
13741437
- use Z_BINARY instead of BINARY
13751438
- document that gzclose after gzdopen will close the file
1376
-- allow "a" as mode in gzopen.
1439
+- allow "a" as mode in gzopen
13771440
- fix error checking in gzread
13781441
- allow skipping .gz extra-field on pipes
13791442
- added reference to Perl interface in README
13801443
- put the crc table in FAR data (I dislike more and more the medium model :)
13811444
- added get_crc_table
1382
-- added a dimension to all arrays (Borland C can't count).
1445
+- added a dimension to all arrays (Borland C can't count)
13831446
- workaround Borland C bug in declaration of inflate_codes_new & inflate_fast
13841447
- guard against multiple inclusion of *.h (for precompiled header on Mac)
1385
-- Watcom C pretends to be Microsoft C small model even in 32 bit mode.
1448
+- Watcom C pretends to be Microsoft C small model even in 32 bit mode
13861449
- don't use unsized arrays to avoid silly warnings by Visual C++:
13871450
warning C4746: 'inflate_mask' : unsized array treated as '__far'
1388
- (what's wrong with far data in far model?).
1451
+ (what's wrong with far data in far model?)
13891452
- define enum out of inflate_blocks_state to allow compilation with C++
13901453
13911454
Changes in 0.95 (16 Aug 95)
13921455
- fix MSDOS small and medium model (now easier to adapt to any compiler)
13931456
- inlined send_bits
13941457
- fix the final (:-) bug for deflate with flush (output was correct but
1395
- not completely flushed in rare occasions).
1458
+ not completely flushed in rare occasions)
13961459
- default window size is same for compression and decompression
1397
- (it's now sufficient to set MAX_WBITS in zconf.h).
1460
+ (it's now sufficient to set MAX_WBITS in zconf.h)
13981461
- voidp -> voidpf and voidnp -> voidp (for consistency with other
1399
- typedefs and because voidnp was not near in large model).
1462
+ typedefs and because voidnp was not near in large model)
14001463
14011464
Changes in 0.94 (13 Aug 95)
14021465
- support MSDOS medium model
14031466
- fix deflate with flush (could sometimes generate bad output)
14041467
- fix deflateReset (zlib header was incorrectly suppressed)
14051468
- added support for VMS
14061469
- allow a compression level in gzopen()
14071470
- gzflush now calls fflush
1408
-- For deflate with flush, flush even if no more input is provided.
1471
+- For deflate with flush, flush even if no more input is provided
14091472
- rename libgz.a as libz.a
14101473
- avoid complex expression in infcodes.c triggering Turbo C bug
14111474
- work around a problem with gcc on Alpha (in INSERT_STRING)
14121475
- don't use inline functions (problem with some gcc versions)
1413
-- allow renaming of Byte, uInt, etc... with #define.
1476
+- allow renaming of Byte, uInt, etc... with #define
14141477
- avoid warning about (unused) pointer before start of array in deflate.c
14151478
- avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c
14161479
- avoid reserved word 'new' in trees.c
14171480
14181481
Changes in 0.93 (25 June 95)
@@ -1427,11 +1490,11 @@
14271490
- don't assume that char is signed (problem on SGI)
14281491
- Clear bit buffer when starting a stored block
14291492
- no memcpy on Pyramid
14301493
- suppressed inftest.c
14311494
- optimized fill_window, put longest_match inline for gcc
1432
-- optimized inflate on stored blocks.
1495
+- optimized inflate on stored blocks
14331496
- untabify all sources to simplify patches
14341497
14351498
Changes in 0.91 (2 May 95)
14361499
- Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h
14371500
- Document the memory requirements in zconf.h
@@ -1445,71 +1508,71 @@
14451508
- don't assume that zalloc clears the allocated memory (the TurboC bug
14461509
was Mark's bug after all :)
14471510
- let again gzread copy uncompressed data unchanged (was working in 0.71)
14481511
- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented
14491512
- added a test of inflateSync in example.c
1450
-- moved MAX_WBITS to zconf.h because users might want to change that.
1513
+- moved MAX_WBITS to zconf.h because users might want to change that
14511514
- document explicitly that zalloc(64K) on MSDOS must return a normalized
14521515
pointer (zero offset)
14531516
- added Makefiles for Microsoft C, Turbo C, Borland C++
14541517
- faster crc32()
14551518
14561519
Changes in 0.8 (29 April 95)
14571520
- added fast inflate (inffast.c)
14581521
- deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this
1459
- is incompatible with previous versions of zlib which returned Z_OK.
1522
+ is incompatible with previous versions of zlib which returned Z_OK
14601523
- work around a TurboC compiler bug (bad code for b << 0, see infutil.h)
14611524
(actually that was not a compiler bug, see 0.81 above)
14621525
- gzread no longer reads one extra byte in certain cases
14631526
- In gzio destroy(), don't reference a freed structure
14641527
- avoid many warnings for MSDOS
14651528
- avoid the ERROR symbol which is used by MS Windows
14661529
14671530
Changes in 0.71 (14 April 95)
14681531
- Fixed more MSDOS compilation problems :( There is still a bug with
1469
- TurboC large model.
1532
+ TurboC large model
14701533
14711534
Changes in 0.7 (14 April 95)
1472
-- Added full inflate support.
1535
+- Added full inflate support
14731536
- Simplified the crc32() interface. The pre- and post-conditioning
14741537
(one's complement) is now done inside crc32(). WARNING: this is
1475
- incompatible with previous versions; see zlib.h for the new usage.
1538
+ incompatible with previous versions; see zlib.h for the new usage
14761539
14771540
Changes in 0.61 (12 April 95)
1478
-- workaround for a bug in TurboC. example and minigzip now work on MSDOS.
1541
+- workaround for a bug in TurboC. example and minigzip now work on MSDOS
14791542
14801543
Changes in 0.6 (11 April 95)
14811544
- added minigzip.c
14821545
- added gzdopen to reopen a file descriptor as gzFile
1483
-- added transparent reading of non-gziped files in gzread.
1546
+- added transparent reading of non-gziped files in gzread
14841547
- fixed bug in gzread (don't read crc as data)
1485
-- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose).
1548
+- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose)
14861549
- don't allocate big arrays in the stack (for MSDOS)
14871550
- fix some MSDOS compilation problems
14881551
14891552
Changes in 0.5:
14901553
- do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but
1491
- not yet Z_FULL_FLUSH.
1554
+ not yet Z_FULL_FLUSH
14921555
- support decompression but only in a single step (forced Z_FINISH)
1493
-- added opaque object for zalloc and zfree.
1556
+- added opaque object for zalloc and zfree
14941557
- added deflateReset and inflateReset
1495
-- added a variable zlib_version for consistency checking.
1496
-- renamed the 'filter' parameter of deflateInit2 as 'strategy'.
1497
- Added Z_FILTERED and Z_HUFFMAN_ONLY constants.
1558
+- added a variable zlib_version for consistency checking
1559
+- renamed the 'filter' parameter of deflateInit2 as 'strategy'
1560
+ Added Z_FILTERED and Z_HUFFMAN_ONLY constants
14981561
14991562
Changes in 0.4:
1500
-- avoid "zip" everywhere, use zlib instead of ziplib.
1563
+- avoid "zip" everywhere, use zlib instead of ziplib
15011564
- suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush
1502
- if compression method == 8.
1565
+ if compression method == 8
15031566
- added adler32 and crc32
15041567
- renamed deflateOptions as deflateInit2, call one or the other but not both
1505
-- added the method parameter for deflateInit2.
1568
+- added the method parameter for deflateInit2
15061569
- added inflateInit2
15071570
- simplied considerably deflateInit and inflateInit by not supporting
15081571
user-provided history buffer. This is supported only in deflateInit2
1509
- and inflateInit2.
1572
+ and inflateInit2
15101573
15111574
Changes in 0.3:
15121575
- prefix all macro names with Z_
1513
-- use Z_FINISH instead of deflateEnd to finish compression.
1576
+- use Z_FINISH instead of deflateEnd to finish compression
15141577
- added Z_HUFFMAN_ONLY
15151578
- added gzerror()
15161579
--- compat/zlib/ChangeLog
+++ compat/zlib/ChangeLog
@@ -1,8 +1,71 @@
1
2 ChangeLog file for zlib
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4 Changes in 1.2.11 (15 Jan 2017)
5 - Fix deflate stored bug when pulling last block from window
6 - Permit immediate deflateParams changes before any deflate input
7
8 Changes in 1.2.10 (2 Jan 2017)
@@ -509,11 +572,11 @@
509 - Replace use of errno in gz* with functions, support WinCE [Alves]
510 - Provide alternative to perror() in minigzip.c for WinCE [Alves]
511 - Don't use _vsnprintf on later versions of MSVC [Lowman]
512 - Add CMake build script and input file [Lowman]
513 - Update contrib/minizip to 1.1 [Svensson, Vollant]
514 - Moved nintendods directory from contrib to .
515 - Replace gzio.c with a new set of routines with the same functionality
516 - Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above
517 - Update contrib/minizip to 1.1b
518 - Change gzeof() to return 0 on error instead of -1 to agree with zlib.h
519
@@ -683,11 +746,11 @@
683 - Update make_vms.com [Zinser]
684 - Initialize state->write in inflateReset() since copied in inflate_fast()
685 - Be more strict on incomplete code sets in inflate_table() and increase
686 ENOUGH and MAXD -- this repairs a possible security vulnerability for
687 invalid inflate input. Thanks to Tavis Ormandy and Markus Oberhumer for
688 discovering the vulnerability and providing test cases.
689 - Add ia64 support to configure for HP-UX [Smith]
690 - Add error return to gzread() for format or i/o error [Levin]
691 - Use malloc.h for OS/2 [Necasek]
692
693 Changes in 1.2.2.3 (27 May 2005)
@@ -719,11 +782,11 @@
719 - Improve WinCE errno handling and comments [Chang]
720 - Remove comment about no gzip header processing in FAQ
721 - Add Z_FIXED strategy option to deflateInit2() to force fixed trees
722 - Add updated make_vms.com [Coghlan], update README
723 - Create a new "examples" directory, move gzappend.c there, add zpipe.c,
724 fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html.
725 - Add FAQ entry and comments in deflate.c on uninitialized memory access
726 - Add Solaris 9 make options in configure [Gilbert]
727 - Allow strerror() usage in gzio.c for STDC
728 - Fix DecompressBuf in contrib/delphi/ZLib.pas [ManChesTer]
729 - Update contrib/masmx86/inffas32.asm and gvmat32.asm [Vollant]
@@ -790,11 +853,11 @@
790 - Update email address in README
791 - Several FAQ updates
792 - Fix a big fat bug in inftrees.c that prevented decoding valid
793 dynamic blocks with only literals and no distance codes --
794 Thanks to "Hot Emu" for the bug report and sample file
795 - Add a note to puff.c on no distance codes case.
796
797 Changes in 1.2.1 (17 November 2003)
798 - Remove a tab in contrib/gzappend/gzappend.c
799 - Update some interfaces in contrib for new zlib functions
800 - Update zlib version number in some contrib entries
@@ -1034,18 +1097,18 @@
1034 - Add contrib/inflate86/ for x86 faster inflate
1035 - Add contrib/blast/ for PKWare Data Compression Library decompression
1036 - Add contrib/puff/ simple inflate for deflate format description
1037
1038 Changes in 1.1.4 (11 March 2002)
1039 - ZFREE was repeated on same allocation on some error conditions.
1040 This creates a security problem described in
1041 http://www.zlib.org/advisory-2002-03-11.txt
1042 - Returned incorrect error (Z_MEM_ERROR) on some invalid data
1043 - Avoid accesses before window for invalid distances with inflate window
1044 less than 32K.
1045 - force windowBits > 8 to avoid a bug in the encoder for a window size
1046 of 256 bytes. (A complete fix will be available in 1.1.5).
1047
1048 Changes in 1.1.3 (9 July 1998)
1049 - fix "an inflate input buffer bug that shows up on rare but persistent
1050 occasions" (Mark)
1051 - fix gzread and gztell for concatenated .gz files (Didier Le Botlan)
@@ -1115,11 +1178,11 @@
1115 Changes in 1.1.1 (27 Feb 98)
1116 - fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson)
1117 - remove block truncation heuristic which had very marginal effect for zlib
1118 (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the
1119 compression ratio on some files. This also allows inlining _tr_tally for
1120 matches in deflate_slow.
1121 - added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier)
1122
1123 Changes in 1.1.0 (24 Feb 98)
1124 - do not return STREAM_END prematurely in inflate (John Bowler)
1125 - revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler)
@@ -1160,11 +1223,11 @@
1160 - fix gzgetc and gzputc for big endian systems (Markus Oberhumer)
1161 - added compress2() to allow setting the compression level
1162 - include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong)
1163 - use constant arrays for the static trees in trees.c instead of computing
1164 them at run time (thanks to Ken Raeburn for this suggestion). To create
1165 trees.h, compile with GEN_TREES_H and run "make test".
1166 - check return code of example in "make test" and display result
1167 - pass minigzip command line options to file_compress
1168 - simplifying code of inflateSync to avoid gcc 2.8 bug
1169
1170 - support CC="gcc -Wall" in configure -s (QingLong)
@@ -1199,16 +1262,16 @@
1199
1200 Changes in 1.0.6 (19 Jan 1998)
1201 - add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and
1202 gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code)
1203 - Fix a deflate bug occurring only with compression level 0 (thanks to
1204 Andy Buckler for finding this one).
1205 - In minigzip, pass transparently also the first byte for .Z files.
1206 - return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress()
1207 - check Z_FINISH in inflate (thanks to Marc Schluper)
1208 - Implement deflateCopy (thanks to Adam Costello)
1209 - make static libraries by default in configure, add --shared option.
1210 - move MSDOS or Windows specific files to directory msdos
1211 - suppress the notion of partial flush to simplify the interface
1212 (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4)
1213 - suppress history buffer provided by application to simplify the interface
1214 (this feature was not implemented anyway in 1.0.4)
@@ -1216,29 +1279,29 @@
1216 inflateInit2
1217 - add EXPORT in all exported functions (for Windows DLL)
1218 - added Makefile.nt (thanks to Stephen Williams)
1219 - added the unsupported "contrib" directory:
1220 contrib/asm386/ by Gilles Vollant <[email protected]>
1221 386 asm code replacing longest_match().
1222 contrib/iostream/ by Kevin Ruland <[email protected]>
1223 A C++ I/O streams interface to the zlib gz* functions
1224 contrib/iostream2/ by Tyge Løvset <[email protected]>
1225 Another C++ I/O streams interface
1226 contrib/untgz/ by "Pedro A. Aranda Guti\irrez" <[email protected]>
1227 A very simple tar.gz file extractor using zlib
1228 contrib/visual-basic.txt by Carlos Rios <[email protected]>
1229 How to use compress(), uncompress() and the gz* functions from VB.
1230 - pass params -f (filtered data), -h (huffman only), -1 to -9 (compression
1231 level) in minigzip (thanks to Tom Lane)
1232
1233 - use const for rommable constants in deflate
1234 - added test for gzseek and gztell in example.c
1235 - add undocumented function inflateSyncPoint() (hack for Paul Mackerras)
1236 - add undocumented function zError to convert error code to string
1237 (for Tim Smithers)
1238 - Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code.
1239 - Use default memcpy for Symantec MSDOS compiler.
1240 - Add EXPORT keyword for check_func (needed for Windows DLL)
1241 - add current directory to LD_LIBRARY_PATH for "make test"
1242 - create also a link for libz.so.1
1243 - added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura)
1244 - use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX)
@@ -1247,21 +1310,21 @@
1247 - add advice in zlib.h for best usage of deflateSetDictionary
1248 - work around compiler bug on Atari (cast Z_NULL in call of s->checkfn)
1249 - allow compilation with ANSI keywords only enabled for TurboC in large model
1250 - avoid "versionString"[0] (Borland bug)
1251 - add NEED_DUMMY_RETURN for Borland
1252 - use variable z_verbose for tracing in debug mode (L. Peter Deutsch).
1253 - allow compilation with CC
1254 - defined STDC for OS/2 (David Charlap)
1255 - limit external names to 8 chars for MVS (Thomas Lund)
1256 - in minigzip.c, use static buffers only for 16-bit systems
1257 - fix suffix check for "minigzip -d foo.gz"
1258 - do not return an error for the 2nd of two consecutive gzflush() (Felix Lee)
1259 - use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau)
1260 - added makelcc.bat for lcc-win32 (Tom St Denis)
1261 - in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe)
1262 - Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion.
1263 - check for unistd.h in configure (for off_t)
1264 - remove useless check parameter in inflate_blocks_free
1265 - avoid useless assignment of s->check to itself in inflate_blocks_new
1266 - do not flush twice in gzclose (thanks to Ken Raeburn)
1267 - rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h
@@ -1278,11 +1341,11 @@
1278 - Update web address in README
1279
1280 Changes in 1.0.4 (24 Jul 96)
1281 - In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF
1282 bit, so the decompressor could decompress all the correct data but went
1283 on to attempt decompressing extra garbage data. This affected minigzip too.
1284 - zlibVersion and gzerror return const char* (needed for DLL)
1285 - port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno)
1286 - use z_error only for DEBUG (avoid problem with DLLs)
1287
1288 Changes in 1.0.3 (2 Jul 96)
@@ -1308,11 +1371,11 @@
1308
1309 Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion]
1310 - fix array overlay in deflate.c which sometimes caused bad compressed data
1311 - fix inflate bug with empty stored block
1312 - fix MSDOS medium model which was broken in 0.99
1313 - fix deflateParams() which could generate bad compressed data.
1314 - Bytef is define'd instead of typedef'ed (work around Borland bug)
1315 - added an INDEX file
1316 - new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
1317 Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas)
1318 - speed up adler32 for modern machines without auto-increment
@@ -1329,11 +1392,11 @@
1329
1330 Changes in 0.99 (27 Jan 96)
1331 - allow preset dictionary shared between compressor and decompressor
1332 - allow compression level 0 (no compression)
1333 - add deflateParams in zlib.h: allow dynamic change of compression level
1334 and compression strategy.
1335 - test large buffers and deflateParams in example.c
1336 - add optional "configure" to build zlib as a shared library
1337 - suppress Makefile.qnx, use configure instead
1338 - fixed deflate for 64-bit systems (detected on Cray)
1339 - fixed inflate_blocks for 64-bit systems (detected on Alpha)
@@ -1371,48 +1434,48 @@
1371 - in fcalloc, normalize pointer if size > 65520 bytes
1372 - don't use special fcalloc for 32 bit Borland C++
1373 - use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc...
1374 - use Z_BINARY instead of BINARY
1375 - document that gzclose after gzdopen will close the file
1376 - allow "a" as mode in gzopen.
1377 - fix error checking in gzread
1378 - allow skipping .gz extra-field on pipes
1379 - added reference to Perl interface in README
1380 - put the crc table in FAR data (I dislike more and more the medium model :)
1381 - added get_crc_table
1382 - added a dimension to all arrays (Borland C can't count).
1383 - workaround Borland C bug in declaration of inflate_codes_new & inflate_fast
1384 - guard against multiple inclusion of *.h (for precompiled header on Mac)
1385 - Watcom C pretends to be Microsoft C small model even in 32 bit mode.
1386 - don't use unsized arrays to avoid silly warnings by Visual C++:
1387 warning C4746: 'inflate_mask' : unsized array treated as '__far'
1388 (what's wrong with far data in far model?).
1389 - define enum out of inflate_blocks_state to allow compilation with C++
1390
1391 Changes in 0.95 (16 Aug 95)
1392 - fix MSDOS small and medium model (now easier to adapt to any compiler)
1393 - inlined send_bits
1394 - fix the final (:-) bug for deflate with flush (output was correct but
1395 not completely flushed in rare occasions).
1396 - default window size is same for compression and decompression
1397 (it's now sufficient to set MAX_WBITS in zconf.h).
1398 - voidp -> voidpf and voidnp -> voidp (for consistency with other
1399 typedefs and because voidnp was not near in large model).
1400
1401 Changes in 0.94 (13 Aug 95)
1402 - support MSDOS medium model
1403 - fix deflate with flush (could sometimes generate bad output)
1404 - fix deflateReset (zlib header was incorrectly suppressed)
1405 - added support for VMS
1406 - allow a compression level in gzopen()
1407 - gzflush now calls fflush
1408 - For deflate with flush, flush even if no more input is provided.
1409 - rename libgz.a as libz.a
1410 - avoid complex expression in infcodes.c triggering Turbo C bug
1411 - work around a problem with gcc on Alpha (in INSERT_STRING)
1412 - don't use inline functions (problem with some gcc versions)
1413 - allow renaming of Byte, uInt, etc... with #define.
1414 - avoid warning about (unused) pointer before start of array in deflate.c
1415 - avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c
1416 - avoid reserved word 'new' in trees.c
1417
1418 Changes in 0.93 (25 June 95)
@@ -1427,11 +1490,11 @@
1427 - don't assume that char is signed (problem on SGI)
1428 - Clear bit buffer when starting a stored block
1429 - no memcpy on Pyramid
1430 - suppressed inftest.c
1431 - optimized fill_window, put longest_match inline for gcc
1432 - optimized inflate on stored blocks.
1433 - untabify all sources to simplify patches
1434
1435 Changes in 0.91 (2 May 95)
1436 - Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h
1437 - Document the memory requirements in zconf.h
@@ -1445,71 +1508,71 @@
1445 - don't assume that zalloc clears the allocated memory (the TurboC bug
1446 was Mark's bug after all :)
1447 - let again gzread copy uncompressed data unchanged (was working in 0.71)
1448 - deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented
1449 - added a test of inflateSync in example.c
1450 - moved MAX_WBITS to zconf.h because users might want to change that.
1451 - document explicitly that zalloc(64K) on MSDOS must return a normalized
1452 pointer (zero offset)
1453 - added Makefiles for Microsoft C, Turbo C, Borland C++
1454 - faster crc32()
1455
1456 Changes in 0.8 (29 April 95)
1457 - added fast inflate (inffast.c)
1458 - deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this
1459 is incompatible with previous versions of zlib which returned Z_OK.
1460 - work around a TurboC compiler bug (bad code for b << 0, see infutil.h)
1461 (actually that was not a compiler bug, see 0.81 above)
1462 - gzread no longer reads one extra byte in certain cases
1463 - In gzio destroy(), don't reference a freed structure
1464 - avoid many warnings for MSDOS
1465 - avoid the ERROR symbol which is used by MS Windows
1466
1467 Changes in 0.71 (14 April 95)
1468 - Fixed more MSDOS compilation problems :( There is still a bug with
1469 TurboC large model.
1470
1471 Changes in 0.7 (14 April 95)
1472 - Added full inflate support.
1473 - Simplified the crc32() interface. The pre- and post-conditioning
1474 (one's complement) is now done inside crc32(). WARNING: this is
1475 incompatible with previous versions; see zlib.h for the new usage.
1476
1477 Changes in 0.61 (12 April 95)
1478 - workaround for a bug in TurboC. example and minigzip now work on MSDOS.
1479
1480 Changes in 0.6 (11 April 95)
1481 - added minigzip.c
1482 - added gzdopen to reopen a file descriptor as gzFile
1483 - added transparent reading of non-gziped files in gzread.
1484 - fixed bug in gzread (don't read crc as data)
1485 - fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose).
1486 - don't allocate big arrays in the stack (for MSDOS)
1487 - fix some MSDOS compilation problems
1488
1489 Changes in 0.5:
1490 - do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but
1491 not yet Z_FULL_FLUSH.
1492 - support decompression but only in a single step (forced Z_FINISH)
1493 - added opaque object for zalloc and zfree.
1494 - added deflateReset and inflateReset
1495 - added a variable zlib_version for consistency checking.
1496 - renamed the 'filter' parameter of deflateInit2 as 'strategy'.
1497 Added Z_FILTERED and Z_HUFFMAN_ONLY constants.
1498
1499 Changes in 0.4:
1500 - avoid "zip" everywhere, use zlib instead of ziplib.
1501 - suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush
1502 if compression method == 8.
1503 - added adler32 and crc32
1504 - renamed deflateOptions as deflateInit2, call one or the other but not both
1505 - added the method parameter for deflateInit2.
1506 - added inflateInit2
1507 - simplied considerably deflateInit and inflateInit by not supporting
1508 user-provided history buffer. This is supported only in deflateInit2
1509 and inflateInit2.
1510
1511 Changes in 0.3:
1512 - prefix all macro names with Z_
1513 - use Z_FINISH instead of deflateEnd to finish compression.
1514 - added Z_HUFFMAN_ONLY
1515 - added gzerror()
1516
--- compat/zlib/ChangeLog
+++ compat/zlib/ChangeLog
@@ -1,8 +1,71 @@
1
2 ChangeLog file for zlib
3
4 Changes in 1.2.12 (27 Mar 2022)
5 - Cygwin does not have _wopen(), so do not create gzopen_w() there
6 - Permit a deflateParams() parameter change as soon as possible
7 - Limit hash table inserts after switch from stored deflate
8 - Fix bug when window full in deflate_stored()
9 - Fix CLEAR_HASH macro to be usable as a single statement
10 - Avoid a conversion error in gzseek when off_t type too small
11 - Have Makefile return non-zero error code on test failure
12 - Avoid some conversion warnings in gzread.c and gzwrite.c
13 - Update use of errno for newer Windows CE versions
14 - Small speedup to inflate [psumbera]
15 - Return an error if the gzputs string length can't fit in an int
16 - Add address checking in clang to -w option of configure
17 - Don't compute check value for raw inflate if asked to validate
18 - Handle case where inflateSync used when header never processed
19 - Avoid the use of ptrdiff_t
20 - Avoid an undefined behavior of memcpy() in gzappend()
21 - Avoid undefined behaviors of memcpy() in gz*printf()
22 - Avoid an undefined behavior of memcpy() in _tr_stored_block()
23 - Make the names in functions declarations identical to definitions
24 - Remove old assembler code in which bugs have manifested
25 - Fix deflateEnd() to not report an error at start of raw deflate
26 - Add legal disclaimer to README
27 - Emphasize the need to continue decompressing gzip members
28 - Correct the initialization requirements for deflateInit2()
29 - Fix a bug that can crash deflate on some input when using Z_FIXED
30 - Assure that the number of bits for deflatePrime() is valid
31 - Use a structure to make globals in enough.c evident
32 - Use a macro for the printf format of big_t in enough.c
33 - Clean up code style in enough.c, update version
34 - Use inline function instead of macro for index in enough.c
35 - Clarify that prefix codes are counted in enough.c
36 - Show all the codes for the maximum tables size in enough.c
37 - Add gznorm.c example, which normalizes gzip files
38 - Fix the zran.c example to work on a multiple-member gzip file
39 - Add tables for crc32_combine(), to speed it up by a factor of 200
40 - Add crc32_combine_gen() and crc32_combine_op() for fast combines
41 - Speed up software CRC-32 computation by a factor of 1.5 to 3
42 - Use atomic test and set, if available, for dynamic CRC tables
43 - Don't bother computing check value after successful inflateSync()
44 - Correct comment in crc32.c
45 - Add use of the ARMv8 crc32 instructions when requested
46 - Use ARM crc32 instructions if the ARM architecture has them
47 - Explicitly note that the 32-bit check values are 32 bits
48 - Avoid adding empty gzip member after gzflush with Z_FINISH
49 - Fix memory leak on error in gzlog.c
50 - Fix error in comment on the polynomial representation of a byte
51 - Clarify gz* function interfaces, referring to parameter names
52 - Change macro name in inflate.c to avoid collision in VxWorks
53 - Correct typo in blast.c
54 - Improve portability of contrib/minizip
55 - Fix indentation in minizip's zip.c
56 - Replace black/white with allow/block. (theresa-m)
57 - minizip warning fix if MAXU32 already defined. (gvollant)
58 - Fix unztell64() in minizip to work past 4GB. (Daniël Hörchner)
59 - Clean up minizip to reduce warnings for testing
60 - Add fallthrough comments for gcc
61 - Eliminate use of ULL constants
62 - Separate out address sanitizing from warnings in configure
63 - Remove destructive aspects of make distclean
64 - Check for cc masquerading as gcc or clang in configure
65 - Fix crc32.c to compile local functions only if used
66
67 Changes in 1.2.11 (15 Jan 2017)
68 - Fix deflate stored bug when pulling last block from window
69 - Permit immediate deflateParams changes before any deflate input
70
71 Changes in 1.2.10 (2 Jan 2017)
@@ -509,11 +572,11 @@
572 - Replace use of errno in gz* with functions, support WinCE [Alves]
573 - Provide alternative to perror() in minigzip.c for WinCE [Alves]
574 - Don't use _vsnprintf on later versions of MSVC [Lowman]
575 - Add CMake build script and input file [Lowman]
576 - Update contrib/minizip to 1.1 [Svensson, Vollant]
577 - Moved nintendods directory from contrib to root
578 - Replace gzio.c with a new set of routines with the same functionality
579 - Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above
580 - Update contrib/minizip to 1.1b
581 - Change gzeof() to return 0 on error instead of -1 to agree with zlib.h
582
@@ -683,11 +746,11 @@
746 - Update make_vms.com [Zinser]
747 - Initialize state->write in inflateReset() since copied in inflate_fast()
748 - Be more strict on incomplete code sets in inflate_table() and increase
749 ENOUGH and MAXD -- this repairs a possible security vulnerability for
750 invalid inflate input. Thanks to Tavis Ormandy and Markus Oberhumer for
751 discovering the vulnerability and providing test cases
752 - Add ia64 support to configure for HP-UX [Smith]
753 - Add error return to gzread() for format or i/o error [Levin]
754 - Use malloc.h for OS/2 [Necasek]
755
756 Changes in 1.2.2.3 (27 May 2005)
@@ -719,11 +782,11 @@
782 - Improve WinCE errno handling and comments [Chang]
783 - Remove comment about no gzip header processing in FAQ
784 - Add Z_FIXED strategy option to deflateInit2() to force fixed trees
785 - Add updated make_vms.com [Coghlan], update README
786 - Create a new "examples" directory, move gzappend.c there, add zpipe.c,
787 fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html
788 - Add FAQ entry and comments in deflate.c on uninitialized memory access
789 - Add Solaris 9 make options in configure [Gilbert]
790 - Allow strerror() usage in gzio.c for STDC
791 - Fix DecompressBuf in contrib/delphi/ZLib.pas [ManChesTer]
792 - Update contrib/masmx86/inffas32.asm and gvmat32.asm [Vollant]
@@ -790,11 +853,11 @@
853 - Update email address in README
854 - Several FAQ updates
855 - Fix a big fat bug in inftrees.c that prevented decoding valid
856 dynamic blocks with only literals and no distance codes --
857 Thanks to "Hot Emu" for the bug report and sample file
858 - Add a note to puff.c on no distance codes case
859
860 Changes in 1.2.1 (17 November 2003)
861 - Remove a tab in contrib/gzappend/gzappend.c
862 - Update some interfaces in contrib for new zlib functions
863 - Update zlib version number in some contrib entries
@@ -1034,18 +1097,18 @@
1097 - Add contrib/inflate86/ for x86 faster inflate
1098 - Add contrib/blast/ for PKWare Data Compression Library decompression
1099 - Add contrib/puff/ simple inflate for deflate format description
1100
1101 Changes in 1.1.4 (11 March 2002)
1102 - ZFREE was repeated on same allocation on some error conditions
1103 This creates a security problem described in
1104 http://www.zlib.org/advisory-2002-03-11.txt
1105 - Returned incorrect error (Z_MEM_ERROR) on some invalid data
1106 - Avoid accesses before window for invalid distances with inflate window
1107 less than 32K
1108 - force windowBits > 8 to avoid a bug in the encoder for a window size
1109 of 256 bytes. (A complete fix will be available in 1.1.5)
1110
1111 Changes in 1.1.3 (9 July 1998)
1112 - fix "an inflate input buffer bug that shows up on rare but persistent
1113 occasions" (Mark)
1114 - fix gzread and gztell for concatenated .gz files (Didier Le Botlan)
@@ -1115,11 +1178,11 @@
1178 Changes in 1.1.1 (27 Feb 98)
1179 - fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson)
1180 - remove block truncation heuristic which had very marginal effect for zlib
1181 (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the
1182 compression ratio on some files. This also allows inlining _tr_tally for
1183 matches in deflate_slow
1184 - added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier)
1185
1186 Changes in 1.1.0 (24 Feb 98)
1187 - do not return STREAM_END prematurely in inflate (John Bowler)
1188 - revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler)
@@ -1160,11 +1223,11 @@
1223 - fix gzgetc and gzputc for big endian systems (Markus Oberhumer)
1224 - added compress2() to allow setting the compression level
1225 - include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong)
1226 - use constant arrays for the static trees in trees.c instead of computing
1227 them at run time (thanks to Ken Raeburn for this suggestion). To create
1228 trees.h, compile with GEN_TREES_H and run "make test"
1229 - check return code of example in "make test" and display result
1230 - pass minigzip command line options to file_compress
1231 - simplifying code of inflateSync to avoid gcc 2.8 bug
1232
1233 - support CC="gcc -Wall" in configure -s (QingLong)
@@ -1199,16 +1262,16 @@
1262
1263 Changes in 1.0.6 (19 Jan 1998)
1264 - add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and
1265 gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code)
1266 - Fix a deflate bug occurring only with compression level 0 (thanks to
1267 Andy Buckler for finding this one)
1268 - In minigzip, pass transparently also the first byte for .Z files
1269 - return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress()
1270 - check Z_FINISH in inflate (thanks to Marc Schluper)
1271 - Implement deflateCopy (thanks to Adam Costello)
1272 - make static libraries by default in configure, add --shared option
1273 - move MSDOS or Windows specific files to directory msdos
1274 - suppress the notion of partial flush to simplify the interface
1275 (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4)
1276 - suppress history buffer provided by application to simplify the interface
1277 (this feature was not implemented anyway in 1.0.4)
@@ -1216,29 +1279,29 @@
1279 inflateInit2
1280 - add EXPORT in all exported functions (for Windows DLL)
1281 - added Makefile.nt (thanks to Stephen Williams)
1282 - added the unsupported "contrib" directory:
1283 contrib/asm386/ by Gilles Vollant <[email protected]>
1284 386 asm code replacing longest_match()
1285 contrib/iostream/ by Kevin Ruland <[email protected]>
1286 A C++ I/O streams interface to the zlib gz* functions
1287 contrib/iostream2/ by Tyge Løvset <[email protected]>
1288 Another C++ I/O streams interface
1289 contrib/untgz/ by "Pedro A. Aranda Guti\irrez" <[email protected]>
1290 A very simple tar.gz file extractor using zlib
1291 contrib/visual-basic.txt by Carlos Rios <[email protected]>
1292 How to use compress(), uncompress() and the gz* functions from VB
1293 - pass params -f (filtered data), -h (huffman only), -1 to -9 (compression
1294 level) in minigzip (thanks to Tom Lane)
1295
1296 - use const for rommable constants in deflate
1297 - added test for gzseek and gztell in example.c
1298 - add undocumented function inflateSyncPoint() (hack for Paul Mackerras)
1299 - add undocumented function zError to convert error code to string
1300 (for Tim Smithers)
1301 - Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code
1302 - Use default memcpy for Symantec MSDOS compiler
1303 - Add EXPORT keyword for check_func (needed for Windows DLL)
1304 - add current directory to LD_LIBRARY_PATH for "make test"
1305 - create also a link for libz.so.1
1306 - added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura)
1307 - use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX)
@@ -1247,21 +1310,21 @@
1310 - add advice in zlib.h for best usage of deflateSetDictionary
1311 - work around compiler bug on Atari (cast Z_NULL in call of s->checkfn)
1312 - allow compilation with ANSI keywords only enabled for TurboC in large model
1313 - avoid "versionString"[0] (Borland bug)
1314 - add NEED_DUMMY_RETURN for Borland
1315 - use variable z_verbose for tracing in debug mode (L. Peter Deutsch)
1316 - allow compilation with CC
1317 - defined STDC for OS/2 (David Charlap)
1318 - limit external names to 8 chars for MVS (Thomas Lund)
1319 - in minigzip.c, use static buffers only for 16-bit systems
1320 - fix suffix check for "minigzip -d foo.gz"
1321 - do not return an error for the 2nd of two consecutive gzflush() (Felix Lee)
1322 - use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau)
1323 - added makelcc.bat for lcc-win32 (Tom St Denis)
1324 - in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe)
1325 - Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion
1326 - check for unistd.h in configure (for off_t)
1327 - remove useless check parameter in inflate_blocks_free
1328 - avoid useless assignment of s->check to itself in inflate_blocks_new
1329 - do not flush twice in gzclose (thanks to Ken Raeburn)
1330 - rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h
@@ -1278,11 +1341,11 @@
1341 - Update web address in README
1342
1343 Changes in 1.0.4 (24 Jul 96)
1344 - In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF
1345 bit, so the decompressor could decompress all the correct data but went
1346 on to attempt decompressing extra garbage data. This affected minigzip too
1347 - zlibVersion and gzerror return const char* (needed for DLL)
1348 - port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno)
1349 - use z_error only for DEBUG (avoid problem with DLLs)
1350
1351 Changes in 1.0.3 (2 Jul 96)
@@ -1308,11 +1371,11 @@
1371
1372 Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion]
1373 - fix array overlay in deflate.c which sometimes caused bad compressed data
1374 - fix inflate bug with empty stored block
1375 - fix MSDOS medium model which was broken in 0.99
1376 - fix deflateParams() which could generate bad compressed data
1377 - Bytef is define'd instead of typedef'ed (work around Borland bug)
1378 - added an INDEX file
1379 - new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
1380 Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas)
1381 - speed up adler32 for modern machines without auto-increment
@@ -1329,11 +1392,11 @@
1392
1393 Changes in 0.99 (27 Jan 96)
1394 - allow preset dictionary shared between compressor and decompressor
1395 - allow compression level 0 (no compression)
1396 - add deflateParams in zlib.h: allow dynamic change of compression level
1397 and compression strategy
1398 - test large buffers and deflateParams in example.c
1399 - add optional "configure" to build zlib as a shared library
1400 - suppress Makefile.qnx, use configure instead
1401 - fixed deflate for 64-bit systems (detected on Cray)
1402 - fixed inflate_blocks for 64-bit systems (detected on Alpha)
@@ -1371,48 +1434,48 @@
1434 - in fcalloc, normalize pointer if size > 65520 bytes
1435 - don't use special fcalloc for 32 bit Borland C++
1436 - use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc...
1437 - use Z_BINARY instead of BINARY
1438 - document that gzclose after gzdopen will close the file
1439 - allow "a" as mode in gzopen
1440 - fix error checking in gzread
1441 - allow skipping .gz extra-field on pipes
1442 - added reference to Perl interface in README
1443 - put the crc table in FAR data (I dislike more and more the medium model :)
1444 - added get_crc_table
1445 - added a dimension to all arrays (Borland C can't count)
1446 - workaround Borland C bug in declaration of inflate_codes_new & inflate_fast
1447 - guard against multiple inclusion of *.h (for precompiled header on Mac)
1448 - Watcom C pretends to be Microsoft C small model even in 32 bit mode
1449 - don't use unsized arrays to avoid silly warnings by Visual C++:
1450 warning C4746: 'inflate_mask' : unsized array treated as '__far'
1451 (what's wrong with far data in far model?)
1452 - define enum out of inflate_blocks_state to allow compilation with C++
1453
1454 Changes in 0.95 (16 Aug 95)
1455 - fix MSDOS small and medium model (now easier to adapt to any compiler)
1456 - inlined send_bits
1457 - fix the final (:-) bug for deflate with flush (output was correct but
1458 not completely flushed in rare occasions)
1459 - default window size is same for compression and decompression
1460 (it's now sufficient to set MAX_WBITS in zconf.h)
1461 - voidp -> voidpf and voidnp -> voidp (for consistency with other
1462 typedefs and because voidnp was not near in large model)
1463
1464 Changes in 0.94 (13 Aug 95)
1465 - support MSDOS medium model
1466 - fix deflate with flush (could sometimes generate bad output)
1467 - fix deflateReset (zlib header was incorrectly suppressed)
1468 - added support for VMS
1469 - allow a compression level in gzopen()
1470 - gzflush now calls fflush
1471 - For deflate with flush, flush even if no more input is provided
1472 - rename libgz.a as libz.a
1473 - avoid complex expression in infcodes.c triggering Turbo C bug
1474 - work around a problem with gcc on Alpha (in INSERT_STRING)
1475 - don't use inline functions (problem with some gcc versions)
1476 - allow renaming of Byte, uInt, etc... with #define
1477 - avoid warning about (unused) pointer before start of array in deflate.c
1478 - avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c
1479 - avoid reserved word 'new' in trees.c
1480
1481 Changes in 0.93 (25 June 95)
@@ -1427,11 +1490,11 @@
1490 - don't assume that char is signed (problem on SGI)
1491 - Clear bit buffer when starting a stored block
1492 - no memcpy on Pyramid
1493 - suppressed inftest.c
1494 - optimized fill_window, put longest_match inline for gcc
1495 - optimized inflate on stored blocks
1496 - untabify all sources to simplify patches
1497
1498 Changes in 0.91 (2 May 95)
1499 - Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h
1500 - Document the memory requirements in zconf.h
@@ -1445,71 +1508,71 @@
1508 - don't assume that zalloc clears the allocated memory (the TurboC bug
1509 was Mark's bug after all :)
1510 - let again gzread copy uncompressed data unchanged (was working in 0.71)
1511 - deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented
1512 - added a test of inflateSync in example.c
1513 - moved MAX_WBITS to zconf.h because users might want to change that
1514 - document explicitly that zalloc(64K) on MSDOS must return a normalized
1515 pointer (zero offset)
1516 - added Makefiles for Microsoft C, Turbo C, Borland C++
1517 - faster crc32()
1518
1519 Changes in 0.8 (29 April 95)
1520 - added fast inflate (inffast.c)
1521 - deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this
1522 is incompatible with previous versions of zlib which returned Z_OK
1523 - work around a TurboC compiler bug (bad code for b << 0, see infutil.h)
1524 (actually that was not a compiler bug, see 0.81 above)
1525 - gzread no longer reads one extra byte in certain cases
1526 - In gzio destroy(), don't reference a freed structure
1527 - avoid many warnings for MSDOS
1528 - avoid the ERROR symbol which is used by MS Windows
1529
1530 Changes in 0.71 (14 April 95)
1531 - Fixed more MSDOS compilation problems :( There is still a bug with
1532 TurboC large model
1533
1534 Changes in 0.7 (14 April 95)
1535 - Added full inflate support
1536 - Simplified the crc32() interface. The pre- and post-conditioning
1537 (one's complement) is now done inside crc32(). WARNING: this is
1538 incompatible with previous versions; see zlib.h for the new usage
1539
1540 Changes in 0.61 (12 April 95)
1541 - workaround for a bug in TurboC. example and minigzip now work on MSDOS
1542
1543 Changes in 0.6 (11 April 95)
1544 - added minigzip.c
1545 - added gzdopen to reopen a file descriptor as gzFile
1546 - added transparent reading of non-gziped files in gzread
1547 - fixed bug in gzread (don't read crc as data)
1548 - fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose)
1549 - don't allocate big arrays in the stack (for MSDOS)
1550 - fix some MSDOS compilation problems
1551
1552 Changes in 0.5:
1553 - do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but
1554 not yet Z_FULL_FLUSH
1555 - support decompression but only in a single step (forced Z_FINISH)
1556 - added opaque object for zalloc and zfree
1557 - added deflateReset and inflateReset
1558 - added a variable zlib_version for consistency checking
1559 - renamed the 'filter' parameter of deflateInit2 as 'strategy'
1560 Added Z_FILTERED and Z_HUFFMAN_ONLY constants
1561
1562 Changes in 0.4:
1563 - avoid "zip" everywhere, use zlib instead of ziplib
1564 - suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush
1565 if compression method == 8
1566 - added adler32 and crc32
1567 - renamed deflateOptions as deflateInit2, call one or the other but not both
1568 - added the method parameter for deflateInit2
1569 - added inflateInit2
1570 - simplied considerably deflateInit and inflateInit by not supporting
1571 user-provided history buffer. This is supported only in deflateInit2
1572 and inflateInit2
1573
1574 Changes in 0.3:
1575 - prefix all macro names with Z_
1576 - use Z_FINISH instead of deflateEnd to finish compression
1577 - added Z_HUFFMAN_ONLY
1578 - added gzerror()
1579
--- compat/zlib/Makefile
+++ compat/zlib/Makefile
@@ -1,5 +1,408 @@
1
-all:
2
- -@echo "Please use ./configure first. Thank you."
1
+# Makefile for zlib
2
+# Copyright (C) 1995-2017 Jean-loup Gailly, Mark Adler
3
+# For conditions of distribution and use, see copyright notice in zlib.h
4
+
5
+# To compile and test, type:
6
+# ./configure; make test
7
+# Normally configure builds both a static and a shared library.
8
+# If you want to build just a static library, use: ./configure --static
9
+
10
+# To use the asm code, type:
11
+# cp contrib/asm?86/match.S ./match.S
12
+# make LOC=-DASMV OBJA=match.o
13
+
14
+# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type:
15
+# make install
16
+# To install in $HOME instead of /usr/local, use:
17
+# make install prefix=$HOME
18
+
19
+CC=gcc
20
+
21
+CFLAGS=-O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN
22
+#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
23
+#CFLAGS=-g -DZLIB_DEBUG
24
+#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
25
+# -Wstrict-prototypes -Wmissing-prototypes
26
+
27
+SFLAGS=-O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN
28
+LDFLAGS=
29
+TEST_LDFLAGS=-L. libz.a
30
+LDSHARED=gcc
31
+CPP=gcc -E
32
+
33
+STATICLIB=libz.a
34
+SHAREDLIB=
35
+SHAREDLIBV=
36
+SHAREDLIBM=
37
+LIBS=$(STATICLIB) $(SHAREDLIBV)
38
+
39
+AR=ar
40
+ARFLAGS=rc
41
+RANLIB=ranlib
42
+LDCONFIG=ldconfig
43
+LDSHAREDLIBC=-lc
44
+TAR=tar
45
+SHELL=/bin/sh
46
+EXE=
47
+
48
+prefix =/usr/local
49
+exec_prefix =${prefix}
50
+libdir =${exec_prefix}/lib
51
+sharedlibdir =${libdir}
52
+includedir =${prefix}/include
53
+mandir =${prefix}/share/man
54
+man3dir = ${mandir}/man3
55
+pkgconfigdir = ${libdir}/pkgconfig
56
+SRCDIR=
57
+ZINC=
58
+ZINCOUT=-I.
59
+
60
+OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o
61
+OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o
62
+OBJC = $(OBJZ) $(OBJG)
63
+
64
+PIC_OBJZ = adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo
65
+PIC_OBJG = compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo
66
+PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG)
67
+
68
+# to use the asm code: make OBJA=match.o, PIC_OBJA=match.lo
69
+OBJA =
70
+PIC_OBJA =
71
+
72
+OBJS = $(OBJC) $(OBJA)
73
+
74
+PIC_OBJS = $(PIC_OBJC) $(PIC_OBJA)
75
+
76
+all: static all64
77
+
78
+static: example$(EXE) minigzip$(EXE)
79
+
80
+shared: examplesh$(EXE) minigzipsh$(EXE)
81
+
82
+all64: example64$(EXE) minigzip64$(EXE)
83
+
84
+check: test
85
+
86
+test: all teststatic test64
87
+
88
+teststatic: static
89
+ @TMPST=tmpst_$$; \
90
+ if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \
91
+ echo ' *** zlib test OK ***'; \
92
+ else \
93
+ echo ' *** zlib test FAILED ***'; false; \
94
+ fi
95
+ @rm -f tmpst_$$
96
+
97
+testshared: shared
98
+ @LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
99
+ LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \
100
+ DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \
101
+ SHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \
102
+ TMPSH=tmpsh_$$; \
103
+ if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \
104
+ echo ' *** zlib shared test OK ***'; \
105
+ else \
106
+ echo ' *** zlib shared test FAILED ***'; false; \
107
+ fi
108
+ @rm -f tmpsh_$$
109
+
110
+test64: all64
111
+ @TMP64=tmp64_$$; \
112
+ if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \
113
+ echo ' *** zlib 64-bit test OK ***'; \
114
+ else \
115
+ echo ' *** zlib 64-bit test FAILED ***'; false; \
116
+ fi
117
+ @rm -f tmp64_$$
118
+
119
+infcover.o: $(SRCDIR)test/infcover.c $(SRCDIR)zlib.h zconf.h
120
+ $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/infcover.c
121
+
122
+infcover: infcover.o libz.a
123
+ $(CC) $(CFLAGS) -o $@ infcover.o libz.a
124
+
125
+cover: infcover
126
+ rm -f *.gcda
127
+ ./infcover
128
+ gcov inf*.c
129
+
130
+libz.a: $(OBJS)
131
+ $(AR) $(ARFLAGS) $@ $(OBJS)
132
+ -@ ($(RANLIB) $@ || true) >/dev/null 2>&1
133
+
134
+match.o: match.S
135
+ $(CPP) match.S > _match.s
136
+ $(CC) -c _match.s
137
+ mv _match.o match.o
138
+ rm -f _match.s
139
+
140
+match.lo: match.S
141
+ $(CPP) match.S > _match.s
142
+ $(CC) -c -fPIC _match.s
143
+ mv _match.o match.lo
144
+ rm -f _match.s
145
+
146
+example.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h
147
+ $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/example.c
148
+
149
+minigzip.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h
150
+ $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/minigzip.c
151
+
152
+example64.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h
153
+ $(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/example.c
154
+
155
+minigzip64.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h
156
+ $(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/minigzip.c
157
+
158
+
159
+adler32.o: $(SRCDIR)adler32.c
160
+ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)adler32.c
161
+
162
+crc32.o: $(SRCDIR)crc32.c
163
+ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c
164
+
165
+deflate.o: $(SRCDIR)deflate.c
166
+ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c
167
+
168
+infback.o: $(SRCDIR)infback.c
169
+ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)infback.c
170
+
171
+inffast.o: $(SRCDIR)inffast.c
172
+ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inffast.c
173
+
174
+inflate.o: $(SRCDIR)inflate.c
175
+ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inflate.c
176
+
177
+inftrees.o: $(SRCDIR)inftrees.c
178
+ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inftrees.c
179
+
180
+trees.o: $(SRCDIR)trees.c
181
+ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)trees.c
182
+
183
+zutil.o: $(SRCDIR)zutil.c
184
+ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)zutil.c
185
+
186
+compress.o: $(SRCDIR)compress.c
187
+ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)compress.c
188
+
189
+uncompr.o: $(SRCDIR)uncompr.c
190
+ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)uncompr.c
191
+
192
+gzclose.o: $(SRCDIR)gzclose.c
193
+ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzclose.c
194
+
195
+gzlib.o: $(SRCDIR)gzlib.c
196
+ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzlib.c
197
+
198
+gzread.o: $(SRCDIR)gzread.c
199
+ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzread.c
200
+
201
+gzwrite.o: $(SRCDIR)gzwrite.c
202
+ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzwrite.c
203
+
204
+
205
+adler32.lo: $(SRCDIR)adler32.c
206
+ -@mkdir objs 2>/dev/null || test -d objs
207
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/adler32.o $(SRCDIR)adler32.c
208
+ -@mv objs/adler32.o $@
209
+
210
+crc32.lo: $(SRCDIR)crc32.c
211
+ -@mkdir objs 2>/dev/null || test -d objs
212
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/crc32.o $(SRCDIR)crc32.c
213
+ -@mv objs/crc32.o $@
214
+
215
+deflate.lo: $(SRCDIR)deflate.c
216
+ -@mkdir objs 2>/dev/null || test -d objs
217
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/deflate.o $(SRCDIR)deflate.c
218
+ -@mv objs/deflate.o $@
219
+
220
+infback.lo: $(SRCDIR)infback.c
221
+ -@mkdir objs 2>/dev/null || test -d objs
222
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/infback.o $(SRCDIR)infback.c
223
+ -@mv objs/infback.o $@
224
+
225
+inffast.lo: $(SRCDIR)inffast.c
226
+ -@mkdir objs 2>/dev/null || test -d objs
227
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inffast.o $(SRCDIR)inffast.c
228
+ -@mv objs/inffast.o $@
229
+
230
+inflate.lo: $(SRCDIR)inflate.c
231
+ -@mkdir objs 2>/dev/null || test -d objs
232
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inflate.o $(SRCDIR)inflate.c
233
+ -@mv objs/inflate.o $@
234
+
235
+inftrees.lo: $(SRCDIR)inftrees.c
236
+ -@mkdir objs 2>/dev/null || test -d objs
237
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c
238
+ -@mv objs/inftrees.o $@
239
+
240
+trees.lo: $(SRCDIR)trees.c
241
+ -@mkdir objs 2>/dev/null || test -d objs
242
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/trees.o $(SRCDIR)trees.c
243
+ -@mv objs/trees.o $@
244
+
245
+zutil.lo: $(SRCDIR)zutil.c
246
+ -@mkdir objs 2>/dev/null || test -d objs
247
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/zutil.o $(SRCDIR)zutil.c
248
+ -@mv objs/zutil.o $@
249
+
250
+compress.lo: $(SRCDIR)compress.c
251
+ -@mkdir objs 2>/dev/null || test -d objs
252
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/compress.o $(SRCDIR)compress.c
253
+ -@mv objs/compress.o $@
254
+
255
+uncompr.lo: $(SRCDIR)uncompr.c
256
+ -@mkdir objs 2>/dev/null || test -d objs
257
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c
258
+ -@mv objs/uncompr.o $@
259
+
260
+gzclose.lo: $(SRCDIR)gzclose.c
261
+ -@mkdir objs 2>/dev/null || test -d objs
262
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c
263
+ -@mv objs/gzclose.o $@
264
+
265
+gzlib.lo: $(SRCDIR)gzlib.c
266
+ -@mkdir objs 2>/dev/null || test -d objs
267
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c
268
+ -@mv objs/gzlib.o $@
269
+
270
+gzread.lo: $(SRCDIR)gzread.c
271
+ -@mkdir objs 2>/dev/null || test -d objs
272
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzread.o $(SRCDIR)gzread.c
273
+ -@mv objs/gzread.o $@
274
+
275
+gzwrite.lo: $(SRCDIR)gzwrite.c
276
+ -@mkdir objs 2>/dev/null || test -d objs
277
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c
278
+ -@mv objs/gzwrite.o $@
279
+
280
+
281
+placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a
282
+ $(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS)
283
+ rm -f $(SHAREDLIB) $(SHAREDLIBM)
284
+ ln -s $@ $(SHAREDLIB)
285
+ ln -s $@ $(SHAREDLIBM)
286
+ -@rmdir objs
287
+
288
+example$(EXE): example.o $(STATICLIB)
289
+ $(CC) $(CFLAGS) -o $@ example.o $(TEST_LDFLAGS)
290
+
291
+minigzip$(EXE): minigzip.o $(STATICLIB)
292
+ $(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS)
293
+
294
+examplesh$(EXE): example.o $(SHAREDLIBV)
295
+ $(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIBV)
296
+
297
+minigzipsh$(EXE): minigzip.o $(SHAREDLIBV)
298
+ $(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIBV)
299
+
300
+example64$(EXE): example64.o $(STATICLIB)
301
+ $(CC) $(CFLAGS) -o $@ example64.o $(TEST_LDFLAGS)
302
+
303
+minigzip64$(EXE): minigzip64.o $(STATICLIB)
304
+ $(CC) $(CFLAGS) -o $@ minigzip64.o $(TEST_LDFLAGS)
305
+
306
+install-libs: $(LIBS)
307
+ -@if [ ! -d $(DESTDIR)$(exec_prefix) ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi
308
+ -@if [ ! -d $(DESTDIR)$(libdir) ]; then mkdir -p $(DESTDIR)$(libdir); fi
309
+ -@if [ ! -d $(DESTDIR)$(sharedlibdir) ]; then mkdir -p $(DESTDIR)$(sharedlibdir); fi
310
+ -@if [ ! -d $(DESTDIR)$(man3dir) ]; then mkdir -p $(DESTDIR)$(man3dir); fi
311
+ -@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi
312
+ rm -f $(DESTDIR)$(libdir)/$(STATICLIB)
313
+ cp $(STATICLIB) $(DESTDIR)$(libdir)
314
+ chmod 644 $(DESTDIR)$(libdir)/$(STATICLIB)
315
+ -@($(RANLIB) $(DESTDIR)$(libdir)/libz.a || true) >/dev/null 2>&1
316
+ -@if test -n "$(SHAREDLIBV)"; then \
317
+ rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \
318
+ cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir); \
319
+ echo "cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)"; \
320
+ chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \
321
+ echo "chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV)"; \
322
+ rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \
323
+ ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB); \
324
+ ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \
325
+ ($(LDCONFIG) || true) >/dev/null 2>&1; \
326
+ fi
327
+ rm -f $(DESTDIR)$(man3dir)/zlib.3
328
+ cp $(SRCDIR)zlib.3 $(DESTDIR)$(man3dir)
329
+ chmod 644 $(DESTDIR)$(man3dir)/zlib.3
330
+ rm -f $(DESTDIR)$(pkgconfigdir)/zlib.pc
331
+ cp zlib.pc $(DESTDIR)$(pkgconfigdir)
332
+ chmod 644 $(DESTDIR)$(pkgconfigdir)/zlib.pc
333
+# The ranlib in install is needed on NeXTSTEP which checks file times
334
+# ldconfig is for Linux
335
+
336
+install: install-libs
337
+ -@if [ ! -d $(DESTDIR)$(includedir) ]; then mkdir -p $(DESTDIR)$(includedir); fi
338
+ rm -f $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h
339
+ cp $(SRCDIR)zlib.h zconf.h $(DESTDIR)$(includedir)
340
+ chmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h
341
+
342
+uninstall:
343
+ cd $(DESTDIR)$(includedir) && rm -f zlib.h zconf.h
344
+ cd $(DESTDIR)$(libdir) && rm -f libz.a; \
345
+ if test -n "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \
346
+ rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \
347
+ fi
348
+ cd $(DESTDIR)$(man3dir) && rm -f zlib.3
349
+ cd $(DESTDIR)$(pkgconfigdir) && rm -f zlib.pc
350
+
351
+docs: zlib.3.pdf
352
+
353
+zlib.3.pdf: $(SRCDIR)zlib.3
354
+ groff -mandoc -f H -T ps $(SRCDIR)zlib.3 | ps2pdf - $@
355
+
356
+zconf.h.cmakein: $(SRCDIR)zconf.h.in
357
+ -@ TEMPFILE=zconfh_$$; \
358
+ echo "/#define ZCONF_H/ a\\\\\n#cmakedefine Z_PREFIX\\\\\n#cmakedefine Z_HAVE_UNISTD_H\n" >> $$TEMPFILE &&\
359
+ sed -f $$TEMPFILE $(SRCDIR)zconf.h.in > $@ &&\
360
+ touch -r $(SRCDIR)zconf.h.in $@ &&\
361
+ rm $$TEMPFILE
362
+
363
+zconf: $(SRCDIR)zconf.h.in
364
+ cp -p $(SRCDIR)zconf.h.in zconf.h
365
+
366
+mostlyclean: clean
367
+clean:
368
+ rm -f *.o *.lo *~ \
369
+ example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \
370
+ example64$(EXE) minigzip64$(EXE) \
371
+ infcover \
372
+ libz.* foo.gz so_locations \
373
+ _match.s maketree contrib/infback9/*.o
374
+ rm -rf objs
375
+ rm -f *.gcda *.gcno *.gcov
376
+ rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov
377
+
378
+maintainer-clean: distclean
379
+distclean: clean zconf zconf.h.cmakein
380
+ rm -f Makefile zlib.pc configure.log
381
+ -@rm -f .DS_Store
382
+ @if [ -f Makefile.in ]; then \
383
+ printf 'all:\n\t-@echo "Please use ./configure first. Thank you."\n' > Makefile ; \
384
+ printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile ; \
385
+ touch -r $(SRCDIR)Makefile.in Makefile ; fi
386
+
387
+tags:
388
+ etags $(SRCDIR)*.[ch]
389
+
390
+adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
391
+gzclose.o gzlib.o gzread.o gzwrite.o: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h
392
+compress.o example.o minigzip.o uncompr.o: $(SRCDIR)zlib.h zconf.h
393
+crc32.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h
394
+deflate.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
395
+infback.o inflate.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h
396
+inffast.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h
397
+inftrees.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h
398
+trees.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h
3399
4
-distclean:
5
- make -f Makefile.in distclean
400
+adler32.lo zutil.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
401
+gzclose.lo gzlib.lo gzread.lo gzwrite.lo: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h
402
+compress.lo example.lo minigzip.lo uncompr.lo: $(SRCDIR)zlib.h zconf.h
403
+crc32.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h
404
+deflate.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
405
+infback.lo inflate.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h
406
+inffast.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h
407
+inftrees.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h
408
+trees.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h
6409
--- compat/zlib/Makefile
+++ compat/zlib/Makefile
@@ -1,5 +1,408 @@
1 all:
2 -@echo "Please use ./configure first. Thank you."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
4 distclean:
5 make -f Makefile.in distclean
 
 
 
 
 
 
 
6
--- compat/zlib/Makefile
+++ compat/zlib/Makefile
@@ -1,5 +1,408 @@
1 # Makefile for zlib
2 # Copyright (C) 1995-2017 Jean-loup Gailly, Mark Adler
3 # For conditions of distribution and use, see copyright notice in zlib.h
4
5 # To compile and test, type:
6 # ./configure; make test
7 # Normally configure builds both a static and a shared library.
8 # If you want to build just a static library, use: ./configure --static
9
10 # To use the asm code, type:
11 # cp contrib/asm?86/match.S ./match.S
12 # make LOC=-DASMV OBJA=match.o
13
14 # To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type:
15 # make install
16 # To install in $HOME instead of /usr/local, use:
17 # make install prefix=$HOME
18
19 CC=gcc
20
21 CFLAGS=-O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN
22 #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
23 #CFLAGS=-g -DZLIB_DEBUG
24 #CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
25 # -Wstrict-prototypes -Wmissing-prototypes
26
27 SFLAGS=-O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN
28 LDFLAGS=
29 TEST_LDFLAGS=-L. libz.a
30 LDSHARED=gcc
31 CPP=gcc -E
32
33 STATICLIB=libz.a
34 SHAREDLIB=
35 SHAREDLIBV=
36 SHAREDLIBM=
37 LIBS=$(STATICLIB) $(SHAREDLIBV)
38
39 AR=ar
40 ARFLAGS=rc
41 RANLIB=ranlib
42 LDCONFIG=ldconfig
43 LDSHAREDLIBC=-lc
44 TAR=tar
45 SHELL=/bin/sh
46 EXE=
47
48 prefix =/usr/local
49 exec_prefix =${prefix}
50 libdir =${exec_prefix}/lib
51 sharedlibdir =${libdir}
52 includedir =${prefix}/include
53 mandir =${prefix}/share/man
54 man3dir = ${mandir}/man3
55 pkgconfigdir = ${libdir}/pkgconfig
56 SRCDIR=
57 ZINC=
58 ZINCOUT=-I.
59
60 OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o
61 OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o
62 OBJC = $(OBJZ) $(OBJG)
63
64 PIC_OBJZ = adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo
65 PIC_OBJG = compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo
66 PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG)
67
68 # to use the asm code: make OBJA=match.o, PIC_OBJA=match.lo
69 OBJA =
70 PIC_OBJA =
71
72 OBJS = $(OBJC) $(OBJA)
73
74 PIC_OBJS = $(PIC_OBJC) $(PIC_OBJA)
75
76 all: static all64
77
78 static: example$(EXE) minigzip$(EXE)
79
80 shared: examplesh$(EXE) minigzipsh$(EXE)
81
82 all64: example64$(EXE) minigzip64$(EXE)
83
84 check: test
85
86 test: all teststatic test64
87
88 teststatic: static
89 @TMPST=tmpst_$$; \
90 if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \
91 echo ' *** zlib test OK ***'; \
92 else \
93 echo ' *** zlib test FAILED ***'; false; \
94 fi
95 @rm -f tmpst_$$
96
97 testshared: shared
98 @LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
99 LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \
100 DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \
101 SHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \
102 TMPSH=tmpsh_$$; \
103 if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \
104 echo ' *** zlib shared test OK ***'; \
105 else \
106 echo ' *** zlib shared test FAILED ***'; false; \
107 fi
108 @rm -f tmpsh_$$
109
110 test64: all64
111 @TMP64=tmp64_$$; \
112 if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \
113 echo ' *** zlib 64-bit test OK ***'; \
114 else \
115 echo ' *** zlib 64-bit test FAILED ***'; false; \
116 fi
117 @rm -f tmp64_$$
118
119 infcover.o: $(SRCDIR)test/infcover.c $(SRCDIR)zlib.h zconf.h
120 $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/infcover.c
121
122 infcover: infcover.o libz.a
123 $(CC) $(CFLAGS) -o $@ infcover.o libz.a
124
125 cover: infcover
126 rm -f *.gcda
127 ./infcover
128 gcov inf*.c
129
130 libz.a: $(OBJS)
131 $(AR) $(ARFLAGS) $@ $(OBJS)
132 -@ ($(RANLIB) $@ || true) >/dev/null 2>&1
133
134 match.o: match.S
135 $(CPP) match.S > _match.s
136 $(CC) -c _match.s
137 mv _match.o match.o
138 rm -f _match.s
139
140 match.lo: match.S
141 $(CPP) match.S > _match.s
142 $(CC) -c -fPIC _match.s
143 mv _match.o match.lo
144 rm -f _match.s
145
146 example.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h
147 $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/example.c
148
149 minigzip.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h
150 $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/minigzip.c
151
152 example64.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h
153 $(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/example.c
154
155 minigzip64.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h
156 $(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/minigzip.c
157
158
159 adler32.o: $(SRCDIR)adler32.c
160 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)adler32.c
161
162 crc32.o: $(SRCDIR)crc32.c
163 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c
164
165 deflate.o: $(SRCDIR)deflate.c
166 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c
167
168 infback.o: $(SRCDIR)infback.c
169 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)infback.c
170
171 inffast.o: $(SRCDIR)inffast.c
172 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inffast.c
173
174 inflate.o: $(SRCDIR)inflate.c
175 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inflate.c
176
177 inftrees.o: $(SRCDIR)inftrees.c
178 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inftrees.c
179
180 trees.o: $(SRCDIR)trees.c
181 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)trees.c
182
183 zutil.o: $(SRCDIR)zutil.c
184 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)zutil.c
185
186 compress.o: $(SRCDIR)compress.c
187 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)compress.c
188
189 uncompr.o: $(SRCDIR)uncompr.c
190 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)uncompr.c
191
192 gzclose.o: $(SRCDIR)gzclose.c
193 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzclose.c
194
195 gzlib.o: $(SRCDIR)gzlib.c
196 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzlib.c
197
198 gzread.o: $(SRCDIR)gzread.c
199 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzread.c
200
201 gzwrite.o: $(SRCDIR)gzwrite.c
202 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzwrite.c
203
204
205 adler32.lo: $(SRCDIR)adler32.c
206 -@mkdir objs 2>/dev/null || test -d objs
207 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/adler32.o $(SRCDIR)adler32.c
208 -@mv objs/adler32.o $@
209
210 crc32.lo: $(SRCDIR)crc32.c
211 -@mkdir objs 2>/dev/null || test -d objs
212 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/crc32.o $(SRCDIR)crc32.c
213 -@mv objs/crc32.o $@
214
215 deflate.lo: $(SRCDIR)deflate.c
216 -@mkdir objs 2>/dev/null || test -d objs
217 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/deflate.o $(SRCDIR)deflate.c
218 -@mv objs/deflate.o $@
219
220 infback.lo: $(SRCDIR)infback.c
221 -@mkdir objs 2>/dev/null || test -d objs
222 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/infback.o $(SRCDIR)infback.c
223 -@mv objs/infback.o $@
224
225 inffast.lo: $(SRCDIR)inffast.c
226 -@mkdir objs 2>/dev/null || test -d objs
227 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inffast.o $(SRCDIR)inffast.c
228 -@mv objs/inffast.o $@
229
230 inflate.lo: $(SRCDIR)inflate.c
231 -@mkdir objs 2>/dev/null || test -d objs
232 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inflate.o $(SRCDIR)inflate.c
233 -@mv objs/inflate.o $@
234
235 inftrees.lo: $(SRCDIR)inftrees.c
236 -@mkdir objs 2>/dev/null || test -d objs
237 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c
238 -@mv objs/inftrees.o $@
239
240 trees.lo: $(SRCDIR)trees.c
241 -@mkdir objs 2>/dev/null || test -d objs
242 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/trees.o $(SRCDIR)trees.c
243 -@mv objs/trees.o $@
244
245 zutil.lo: $(SRCDIR)zutil.c
246 -@mkdir objs 2>/dev/null || test -d objs
247 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/zutil.o $(SRCDIR)zutil.c
248 -@mv objs/zutil.o $@
249
250 compress.lo: $(SRCDIR)compress.c
251 -@mkdir objs 2>/dev/null || test -d objs
252 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/compress.o $(SRCDIR)compress.c
253 -@mv objs/compress.o $@
254
255 uncompr.lo: $(SRCDIR)uncompr.c
256 -@mkdir objs 2>/dev/null || test -d objs
257 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c
258 -@mv objs/uncompr.o $@
259
260 gzclose.lo: $(SRCDIR)gzclose.c
261 -@mkdir objs 2>/dev/null || test -d objs
262 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c
263 -@mv objs/gzclose.o $@
264
265 gzlib.lo: $(SRCDIR)gzlib.c
266 -@mkdir objs 2>/dev/null || test -d objs
267 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c
268 -@mv objs/gzlib.o $@
269
270 gzread.lo: $(SRCDIR)gzread.c
271 -@mkdir objs 2>/dev/null || test -d objs
272 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzread.o $(SRCDIR)gzread.c
273 -@mv objs/gzread.o $@
274
275 gzwrite.lo: $(SRCDIR)gzwrite.c
276 -@mkdir objs 2>/dev/null || test -d objs
277 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c
278 -@mv objs/gzwrite.o $@
279
280
281 placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a
282 $(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS)
283 rm -f $(SHAREDLIB) $(SHAREDLIBM)
284 ln -s $@ $(SHAREDLIB)
285 ln -s $@ $(SHAREDLIBM)
286 -@rmdir objs
287
288 example$(EXE): example.o $(STATICLIB)
289 $(CC) $(CFLAGS) -o $@ example.o $(TEST_LDFLAGS)
290
291 minigzip$(EXE): minigzip.o $(STATICLIB)
292 $(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS)
293
294 examplesh$(EXE): example.o $(SHAREDLIBV)
295 $(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIBV)
296
297 minigzipsh$(EXE): minigzip.o $(SHAREDLIBV)
298 $(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIBV)
299
300 example64$(EXE): example64.o $(STATICLIB)
301 $(CC) $(CFLAGS) -o $@ example64.o $(TEST_LDFLAGS)
302
303 minigzip64$(EXE): minigzip64.o $(STATICLIB)
304 $(CC) $(CFLAGS) -o $@ minigzip64.o $(TEST_LDFLAGS)
305
306 install-libs: $(LIBS)
307 -@if [ ! -d $(DESTDIR)$(exec_prefix) ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi
308 -@if [ ! -d $(DESTDIR)$(libdir) ]; then mkdir -p $(DESTDIR)$(libdir); fi
309 -@if [ ! -d $(DESTDIR)$(sharedlibdir) ]; then mkdir -p $(DESTDIR)$(sharedlibdir); fi
310 -@if [ ! -d $(DESTDIR)$(man3dir) ]; then mkdir -p $(DESTDIR)$(man3dir); fi
311 -@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi
312 rm -f $(DESTDIR)$(libdir)/$(STATICLIB)
313 cp $(STATICLIB) $(DESTDIR)$(libdir)
314 chmod 644 $(DESTDIR)$(libdir)/$(STATICLIB)
315 -@($(RANLIB) $(DESTDIR)$(libdir)/libz.a || true) >/dev/null 2>&1
316 -@if test -n "$(SHAREDLIBV)"; then \
317 rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \
318 cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir); \
319 echo "cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)"; \
320 chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \
321 echo "chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV)"; \
322 rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \
323 ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB); \
324 ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \
325 ($(LDCONFIG) || true) >/dev/null 2>&1; \
326 fi
327 rm -f $(DESTDIR)$(man3dir)/zlib.3
328 cp $(SRCDIR)zlib.3 $(DESTDIR)$(man3dir)
329 chmod 644 $(DESTDIR)$(man3dir)/zlib.3
330 rm -f $(DESTDIR)$(pkgconfigdir)/zlib.pc
331 cp zlib.pc $(DESTDIR)$(pkgconfigdir)
332 chmod 644 $(DESTDIR)$(pkgconfigdir)/zlib.pc
333 # The ranlib in install is needed on NeXTSTEP which checks file times
334 # ldconfig is for Linux
335
336 install: install-libs
337 -@if [ ! -d $(DESTDIR)$(includedir) ]; then mkdir -p $(DESTDIR)$(includedir); fi
338 rm -f $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h
339 cp $(SRCDIR)zlib.h zconf.h $(DESTDIR)$(includedir)
340 chmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h
341
342 uninstall:
343 cd $(DESTDIR)$(includedir) && rm -f zlib.h zconf.h
344 cd $(DESTDIR)$(libdir) && rm -f libz.a; \
345 if test -n "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \
346 rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \
347 fi
348 cd $(DESTDIR)$(man3dir) && rm -f zlib.3
349 cd $(DESTDIR)$(pkgconfigdir) && rm -f zlib.pc
350
351 docs: zlib.3.pdf
352
353 zlib.3.pdf: $(SRCDIR)zlib.3
354 groff -mandoc -f H -T ps $(SRCDIR)zlib.3 | ps2pdf - $@
355
356 zconf.h.cmakein: $(SRCDIR)zconf.h.in
357 -@ TEMPFILE=zconfh_$$; \
358 echo "/#define ZCONF_H/ a\\\\\n#cmakedefine Z_PREFIX\\\\\n#cmakedefine Z_HAVE_UNISTD_H\n" >> $$TEMPFILE &&\
359 sed -f $$TEMPFILE $(SRCDIR)zconf.h.in > $@ &&\
360 touch -r $(SRCDIR)zconf.h.in $@ &&\
361 rm $$TEMPFILE
362
363 zconf: $(SRCDIR)zconf.h.in
364 cp -p $(SRCDIR)zconf.h.in zconf.h
365
366 mostlyclean: clean
367 clean:
368 rm -f *.o *.lo *~ \
369 example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \
370 example64$(EXE) minigzip64$(EXE) \
371 infcover \
372 libz.* foo.gz so_locations \
373 _match.s maketree contrib/infback9/*.o
374 rm -rf objs
375 rm -f *.gcda *.gcno *.gcov
376 rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov
377
378 maintainer-clean: distclean
379 distclean: clean zconf zconf.h.cmakein
380 rm -f Makefile zlib.pc configure.log
381 -@rm -f .DS_Store
382 @if [ -f Makefile.in ]; then \
383 printf 'all:\n\t-@echo "Please use ./configure first. Thank you."\n' > Makefile ; \
384 printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile ; \
385 touch -r $(SRCDIR)Makefile.in Makefile ; fi
386
387 tags:
388 etags $(SRCDIR)*.[ch]
389
390 adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
391 gzclose.o gzlib.o gzread.o gzwrite.o: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h
392 compress.o example.o minigzip.o uncompr.o: $(SRCDIR)zlib.h zconf.h
393 crc32.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h
394 deflate.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
395 infback.o inflate.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h
396 inffast.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h
397 inftrees.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h
398 trees.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h
399
400 adler32.lo zutil.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
401 gzclose.lo gzlib.lo gzread.lo gzwrite.lo: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h
402 compress.lo example.lo minigzip.lo uncompr.lo: $(SRCDIR)zlib.h zconf.h
403 crc32.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h
404 deflate.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
405 infback.lo inflate.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h
406 inffast.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h
407 inftrees.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h
408 trees.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h
409
--- compat/zlib/Makefile.in
+++ compat/zlib/Makefile.in
@@ -30,11 +30,11 @@
3030
LDSHARED=$(CC)
3131
CPP=$(CC) -E
3232
3333
STATICLIB=libz.a
3434
SHAREDLIB=libz.so
35
-SHAREDLIBV=libz.so.1.2.11
35
+SHAREDLIBV=libz.so.1.2.12
3636
SHAREDLIBM=libz.so.1
3737
LIBS=$(STATICLIB) $(SHAREDLIBV)
3838
3939
AR=ar
4040
ARFLAGS=rc
@@ -89,12 +89,12 @@
8989
@TMPST=tmpst_$$; \
9090
if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \
9191
echo ' *** zlib test OK ***'; \
9292
else \
9393
echo ' *** zlib test FAILED ***'; false; \
94
- fi; \
95
- rm -f $$TMPST
94
+ fi
95
+ @rm -f tmpst_$$
9696
9797
testshared: shared
9898
@LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
9999
LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \
100100
DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \
@@ -102,21 +102,21 @@
102102
TMPSH=tmpsh_$$; \
103103
if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \
104104
echo ' *** zlib shared test OK ***'; \
105105
else \
106106
echo ' *** zlib shared test FAILED ***'; false; \
107
- fi; \
108
- rm -f $$TMPSH
107
+ fi
108
+ @rm -f tmpsh_$$
109109
110110
test64: all64
111111
@TMP64=tmp64_$$; \
112112
if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \
113113
echo ' *** zlib 64-bit test OK ***'; \
114114
else \
115115
echo ' *** zlib 64-bit test FAILED ***'; false; \
116
- fi; \
117
- rm -f $$TMP64
116
+ fi
117
+ @rm -f tmp64_$$
118118
119119
infcover.o: $(SRCDIR)test/infcover.c $(SRCDIR)zlib.h zconf.h
120120
$(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/infcover.c
121121
122122
infcover: infcover.o libz.a
@@ -202,81 +202,81 @@
202202
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzwrite.c
203203
204204
205205
adler32.lo: $(SRCDIR)adler32.c
206206
-@mkdir objs 2>/dev/null || test -d objs
207
- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/adler32.o $(SRCDIR)adler32.c
207
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/adler32.o $(SRCDIR)adler32.c
208208
-@mv objs/adler32.o $@
209209
210210
crc32.lo: $(SRCDIR)crc32.c
211211
-@mkdir objs 2>/dev/null || test -d objs
212
- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c
212
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/crc32.o $(SRCDIR)crc32.c
213213
-@mv objs/crc32.o $@
214214
215215
deflate.lo: $(SRCDIR)deflate.c
216216
-@mkdir objs 2>/dev/null || test -d objs
217
- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c
217
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/deflate.o $(SRCDIR)deflate.c
218218
-@mv objs/deflate.o $@
219219
220220
infback.lo: $(SRCDIR)infback.c
221221
-@mkdir objs 2>/dev/null || test -d objs
222
- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/infback.o $(SRCDIR)infback.c
222
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/infback.o $(SRCDIR)infback.c
223223
-@mv objs/infback.o $@
224224
225225
inffast.lo: $(SRCDIR)inffast.c
226226
-@mkdir objs 2>/dev/null || test -d objs
227
- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inffast.o $(SRCDIR)inffast.c
227
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inffast.o $(SRCDIR)inffast.c
228228
-@mv objs/inffast.o $@
229229
230230
inflate.lo: $(SRCDIR)inflate.c
231231
-@mkdir objs 2>/dev/null || test -d objs
232
- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inflate.o $(SRCDIR)inflate.c
232
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inflate.o $(SRCDIR)inflate.c
233233
-@mv objs/inflate.o $@
234234
235235
inftrees.lo: $(SRCDIR)inftrees.c
236236
-@mkdir objs 2>/dev/null || test -d objs
237
- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c
237
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c
238238
-@mv objs/inftrees.o $@
239239
240240
trees.lo: $(SRCDIR)trees.c
241241
-@mkdir objs 2>/dev/null || test -d objs
242
- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/trees.o $(SRCDIR)trees.c
242
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/trees.o $(SRCDIR)trees.c
243243
-@mv objs/trees.o $@
244244
245245
zutil.lo: $(SRCDIR)zutil.c
246246
-@mkdir objs 2>/dev/null || test -d objs
247
- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/zutil.o $(SRCDIR)zutil.c
247
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/zutil.o $(SRCDIR)zutil.c
248248
-@mv objs/zutil.o $@
249249
250250
compress.lo: $(SRCDIR)compress.c
251251
-@mkdir objs 2>/dev/null || test -d objs
252
- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/compress.o $(SRCDIR)compress.c
252
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/compress.o $(SRCDIR)compress.c
253253
-@mv objs/compress.o $@
254254
255255
uncompr.lo: $(SRCDIR)uncompr.c
256256
-@mkdir objs 2>/dev/null || test -d objs
257
- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c
257
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c
258258
-@mv objs/uncompr.o $@
259259
260260
gzclose.lo: $(SRCDIR)gzclose.c
261261
-@mkdir objs 2>/dev/null || test -d objs
262
- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c
262
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c
263263
-@mv objs/gzclose.o $@
264264
265265
gzlib.lo: $(SRCDIR)gzlib.c
266266
-@mkdir objs 2>/dev/null || test -d objs
267
- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c
267
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c
268268
-@mv objs/gzlib.o $@
269269
270270
gzread.lo: $(SRCDIR)gzread.c
271271
-@mkdir objs 2>/dev/null || test -d objs
272
- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzread.o $(SRCDIR)gzread.c
272
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzread.o $(SRCDIR)gzread.c
273273
-@mv objs/gzread.o $@
274274
275275
gzwrite.lo: $(SRCDIR)gzwrite.c
276276
-@mkdir objs 2>/dev/null || test -d objs
277
- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c
277
+ $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c
278278
-@mv objs/gzwrite.o $@
279279
280280
281281
placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a
282282
$(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS)
@@ -374,19 +374,17 @@
374374
rm -rf objs
375375
rm -f *.gcda *.gcno *.gcov
376376
rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov
377377
378378
maintainer-clean: distclean
379
-distclean: clean zconf zconf.h.cmakein docs
379
+distclean: clean zconf zconf.h.cmakein
380380
rm -f Makefile zlib.pc configure.log
381381
-@rm -f .DS_Store
382382
@if [ -f Makefile.in ]; then \
383383
printf 'all:\n\t-@echo "Please use ./configure first. Thank you."\n' > Makefile ; \
384384
printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile ; \
385385
touch -r $(SRCDIR)Makefile.in Makefile ; fi
386
- @if [ ! -f zconf.h.in ]; then rm -f zconf.h zconf.h.cmakein ; fi
387
- @if [ ! -f zlib.3 ]; then rm -f zlib.3.pdf ; fi
388386
389387
tags:
390388
etags $(SRCDIR)*.[ch]
391389
392390
adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
393391
--- compat/zlib/Makefile.in
+++ compat/zlib/Makefile.in
@@ -30,11 +30,11 @@
30 LDSHARED=$(CC)
31 CPP=$(CC) -E
32
33 STATICLIB=libz.a
34 SHAREDLIB=libz.so
35 SHAREDLIBV=libz.so.1.2.11
36 SHAREDLIBM=libz.so.1
37 LIBS=$(STATICLIB) $(SHAREDLIBV)
38
39 AR=ar
40 ARFLAGS=rc
@@ -89,12 +89,12 @@
89 @TMPST=tmpst_$$; \
90 if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \
91 echo ' *** zlib test OK ***'; \
92 else \
93 echo ' *** zlib test FAILED ***'; false; \
94 fi; \
95 rm -f $$TMPST
96
97 testshared: shared
98 @LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
99 LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \
100 DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \
@@ -102,21 +102,21 @@
102 TMPSH=tmpsh_$$; \
103 if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \
104 echo ' *** zlib shared test OK ***'; \
105 else \
106 echo ' *** zlib shared test FAILED ***'; false; \
107 fi; \
108 rm -f $$TMPSH
109
110 test64: all64
111 @TMP64=tmp64_$$; \
112 if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \
113 echo ' *** zlib 64-bit test OK ***'; \
114 else \
115 echo ' *** zlib 64-bit test FAILED ***'; false; \
116 fi; \
117 rm -f $$TMP64
118
119 infcover.o: $(SRCDIR)test/infcover.c $(SRCDIR)zlib.h zconf.h
120 $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/infcover.c
121
122 infcover: infcover.o libz.a
@@ -202,81 +202,81 @@
202 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzwrite.c
203
204
205 adler32.lo: $(SRCDIR)adler32.c
206 -@mkdir objs 2>/dev/null || test -d objs
207 $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/adler32.o $(SRCDIR)adler32.c
208 -@mv objs/adler32.o $@
209
210 crc32.lo: $(SRCDIR)crc32.c
211 -@mkdir objs 2>/dev/null || test -d objs
212 $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c
213 -@mv objs/crc32.o $@
214
215 deflate.lo: $(SRCDIR)deflate.c
216 -@mkdir objs 2>/dev/null || test -d objs
217 $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c
218 -@mv objs/deflate.o $@
219
220 infback.lo: $(SRCDIR)infback.c
221 -@mkdir objs 2>/dev/null || test -d objs
222 $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/infback.o $(SRCDIR)infback.c
223 -@mv objs/infback.o $@
224
225 inffast.lo: $(SRCDIR)inffast.c
226 -@mkdir objs 2>/dev/null || test -d objs
227 $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inffast.o $(SRCDIR)inffast.c
228 -@mv objs/inffast.o $@
229
230 inflate.lo: $(SRCDIR)inflate.c
231 -@mkdir objs 2>/dev/null || test -d objs
232 $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inflate.o $(SRCDIR)inflate.c
233 -@mv objs/inflate.o $@
234
235 inftrees.lo: $(SRCDIR)inftrees.c
236 -@mkdir objs 2>/dev/null || test -d objs
237 $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c
238 -@mv objs/inftrees.o $@
239
240 trees.lo: $(SRCDIR)trees.c
241 -@mkdir objs 2>/dev/null || test -d objs
242 $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/trees.o $(SRCDIR)trees.c
243 -@mv objs/trees.o $@
244
245 zutil.lo: $(SRCDIR)zutil.c
246 -@mkdir objs 2>/dev/null || test -d objs
247 $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/zutil.o $(SRCDIR)zutil.c
248 -@mv objs/zutil.o $@
249
250 compress.lo: $(SRCDIR)compress.c
251 -@mkdir objs 2>/dev/null || test -d objs
252 $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/compress.o $(SRCDIR)compress.c
253 -@mv objs/compress.o $@
254
255 uncompr.lo: $(SRCDIR)uncompr.c
256 -@mkdir objs 2>/dev/null || test -d objs
257 $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c
258 -@mv objs/uncompr.o $@
259
260 gzclose.lo: $(SRCDIR)gzclose.c
261 -@mkdir objs 2>/dev/null || test -d objs
262 $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c
263 -@mv objs/gzclose.o $@
264
265 gzlib.lo: $(SRCDIR)gzlib.c
266 -@mkdir objs 2>/dev/null || test -d objs
267 $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c
268 -@mv objs/gzlib.o $@
269
270 gzread.lo: $(SRCDIR)gzread.c
271 -@mkdir objs 2>/dev/null || test -d objs
272 $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzread.o $(SRCDIR)gzread.c
273 -@mv objs/gzread.o $@
274
275 gzwrite.lo: $(SRCDIR)gzwrite.c
276 -@mkdir objs 2>/dev/null || test -d objs
277 $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c
278 -@mv objs/gzwrite.o $@
279
280
281 placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a
282 $(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS)
@@ -374,19 +374,17 @@
374 rm -rf objs
375 rm -f *.gcda *.gcno *.gcov
376 rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov
377
378 maintainer-clean: distclean
379 distclean: clean zconf zconf.h.cmakein docs
380 rm -f Makefile zlib.pc configure.log
381 -@rm -f .DS_Store
382 @if [ -f Makefile.in ]; then \
383 printf 'all:\n\t-@echo "Please use ./configure first. Thank you."\n' > Makefile ; \
384 printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile ; \
385 touch -r $(SRCDIR)Makefile.in Makefile ; fi
386 @if [ ! -f zconf.h.in ]; then rm -f zconf.h zconf.h.cmakein ; fi
387 @if [ ! -f zlib.3 ]; then rm -f zlib.3.pdf ; fi
388
389 tags:
390 etags $(SRCDIR)*.[ch]
391
392 adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
393
--- compat/zlib/Makefile.in
+++ compat/zlib/Makefile.in
@@ -30,11 +30,11 @@
30 LDSHARED=$(CC)
31 CPP=$(CC) -E
32
33 STATICLIB=libz.a
34 SHAREDLIB=libz.so
35 SHAREDLIBV=libz.so.1.2.12
36 SHAREDLIBM=libz.so.1
37 LIBS=$(STATICLIB) $(SHAREDLIBV)
38
39 AR=ar
40 ARFLAGS=rc
@@ -89,12 +89,12 @@
89 @TMPST=tmpst_$$; \
90 if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \
91 echo ' *** zlib test OK ***'; \
92 else \
93 echo ' *** zlib test FAILED ***'; false; \
94 fi
95 @rm -f tmpst_$$
96
97 testshared: shared
98 @LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
99 LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \
100 DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \
@@ -102,21 +102,21 @@
102 TMPSH=tmpsh_$$; \
103 if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \
104 echo ' *** zlib shared test OK ***'; \
105 else \
106 echo ' *** zlib shared test FAILED ***'; false; \
107 fi
108 @rm -f tmpsh_$$
109
110 test64: all64
111 @TMP64=tmp64_$$; \
112 if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \
113 echo ' *** zlib 64-bit test OK ***'; \
114 else \
115 echo ' *** zlib 64-bit test FAILED ***'; false; \
116 fi
117 @rm -f tmp64_$$
118
119 infcover.o: $(SRCDIR)test/infcover.c $(SRCDIR)zlib.h zconf.h
120 $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/infcover.c
121
122 infcover: infcover.o libz.a
@@ -202,81 +202,81 @@
202 $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzwrite.c
203
204
205 adler32.lo: $(SRCDIR)adler32.c
206 -@mkdir objs 2>/dev/null || test -d objs
207 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/adler32.o $(SRCDIR)adler32.c
208 -@mv objs/adler32.o $@
209
210 crc32.lo: $(SRCDIR)crc32.c
211 -@mkdir objs 2>/dev/null || test -d objs
212 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/crc32.o $(SRCDIR)crc32.c
213 -@mv objs/crc32.o $@
214
215 deflate.lo: $(SRCDIR)deflate.c
216 -@mkdir objs 2>/dev/null || test -d objs
217 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/deflate.o $(SRCDIR)deflate.c
218 -@mv objs/deflate.o $@
219
220 infback.lo: $(SRCDIR)infback.c
221 -@mkdir objs 2>/dev/null || test -d objs
222 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/infback.o $(SRCDIR)infback.c
223 -@mv objs/infback.o $@
224
225 inffast.lo: $(SRCDIR)inffast.c
226 -@mkdir objs 2>/dev/null || test -d objs
227 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inffast.o $(SRCDIR)inffast.c
228 -@mv objs/inffast.o $@
229
230 inflate.lo: $(SRCDIR)inflate.c
231 -@mkdir objs 2>/dev/null || test -d objs
232 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inflate.o $(SRCDIR)inflate.c
233 -@mv objs/inflate.o $@
234
235 inftrees.lo: $(SRCDIR)inftrees.c
236 -@mkdir objs 2>/dev/null || test -d objs
237 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c
238 -@mv objs/inftrees.o $@
239
240 trees.lo: $(SRCDIR)trees.c
241 -@mkdir objs 2>/dev/null || test -d objs
242 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/trees.o $(SRCDIR)trees.c
243 -@mv objs/trees.o $@
244
245 zutil.lo: $(SRCDIR)zutil.c
246 -@mkdir objs 2>/dev/null || test -d objs
247 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/zutil.o $(SRCDIR)zutil.c
248 -@mv objs/zutil.o $@
249
250 compress.lo: $(SRCDIR)compress.c
251 -@mkdir objs 2>/dev/null || test -d objs
252 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/compress.o $(SRCDIR)compress.c
253 -@mv objs/compress.o $@
254
255 uncompr.lo: $(SRCDIR)uncompr.c
256 -@mkdir objs 2>/dev/null || test -d objs
257 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c
258 -@mv objs/uncompr.o $@
259
260 gzclose.lo: $(SRCDIR)gzclose.c
261 -@mkdir objs 2>/dev/null || test -d objs
262 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c
263 -@mv objs/gzclose.o $@
264
265 gzlib.lo: $(SRCDIR)gzlib.c
266 -@mkdir objs 2>/dev/null || test -d objs
267 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c
268 -@mv objs/gzlib.o $@
269
270 gzread.lo: $(SRCDIR)gzread.c
271 -@mkdir objs 2>/dev/null || test -d objs
272 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzread.o $(SRCDIR)gzread.c
273 -@mv objs/gzread.o $@
274
275 gzwrite.lo: $(SRCDIR)gzwrite.c
276 -@mkdir objs 2>/dev/null || test -d objs
277 $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c
278 -@mv objs/gzwrite.o $@
279
280
281 placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a
282 $(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS)
@@ -374,19 +374,17 @@
374 rm -rf objs
375 rm -f *.gcda *.gcno *.gcov
376 rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov
377
378 maintainer-clean: distclean
379 distclean: clean zconf zconf.h.cmakein
380 rm -f Makefile zlib.pc configure.log
381 -@rm -f .DS_Store
382 @if [ -f Makefile.in ]; then \
383 printf 'all:\n\t-@echo "Please use ./configure first. Thank you."\n' > Makefile ; \
384 printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile ; \
385 touch -r $(SRCDIR)Makefile.in Makefile ; fi
 
 
386
387 tags:
388 etags $(SRCDIR)*.[ch]
389
390 adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
391
--- compat/zlib/README
+++ compat/zlib/README
@@ -1,8 +1,8 @@
11
ZLIB DATA COMPRESSION LIBRARY
22
3
-zlib 1.2.11 is a general purpose data compression library. All the code is
3
+zlib 1.2.12 is a general purpose data compression library. All the code is
44
thread safe. The data format used by the zlib library is described by RFCs
55
(Request for Comments) 1950 to 1952 in the files
66
http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
77
rfc1952 (gzip format).
88
@@ -29,11 +29,11 @@
2929
3030
Mark Nelson <[email protected]> wrote an article about zlib for the Jan. 1997
3131
issue of Dr. Dobb's Journal; a copy of the article is available at
3232
http://marknelson.us/1997/01/01/zlib-engine/ .
3333
34
-The changes made in version 1.2.11 are documented in the file ChangeLog.
34
+The changes made in version 1.2.12 are documented in the file ChangeLog.
3535
3636
Unsupported third party contributions are provided in directory contrib/ .
3737
3838
zlib is available in Java using the java.util.zip package, documented at
3939
http://java.sun.com/developer/technicalArticles/Programming/compression/ .
@@ -82,11 +82,11 @@
8282
people who reported problems and suggested various improvements in zlib; they
8383
are too numerous to cite here.
8484
8585
Copyright notice:
8686
87
- (C) 1995-2017 Jean-loup Gailly and Mark Adler
87
+ (C) 1995-2022 Jean-loup Gailly and Mark Adler
8888
8989
This software is provided 'as-is', without any express or implied
9090
warranty. In no event will the authors be held liable for any damages
9191
arising from the use of this software.
9292
@@ -106,10 +106,13 @@
106106
[email protected] [email protected]
107107
108108
If you use the zlib library in a product, we would appreciate *not* receiving
109109
lengthy legal documents to sign. The sources are provided for free but without
110110
warranty of any kind. The library has been entirely written by Jean-loup
111
-Gailly and Mark Adler; it does not include third-party code.
111
+Gailly and Mark Adler; it does not include third-party code. We make all
112
+contributions to and distributions of this project solely in our personal
113
+capacity, and are not conveying any rights to any intellectual property of
114
+any third parties.
112115
113116
If you redistribute modified sources, we would appreciate that you include in
114117
the file ChangeLog history information documenting your changes. Please read
115118
the FAQ for more information on the distribution of modified source versions.
116119
--- compat/zlib/README
+++ compat/zlib/README
@@ -1,8 +1,8 @@
1 ZLIB DATA COMPRESSION LIBRARY
2
3 zlib 1.2.11 is a general purpose data compression library. All the code is
4 thread safe. The data format used by the zlib library is described by RFCs
5 (Request for Comments) 1950 to 1952 in the files
6 http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
7 rfc1952 (gzip format).
8
@@ -29,11 +29,11 @@
29
30 Mark Nelson <[email protected]> wrote an article about zlib for the Jan. 1997
31 issue of Dr. Dobb's Journal; a copy of the article is available at
32 http://marknelson.us/1997/01/01/zlib-engine/ .
33
34 The changes made in version 1.2.11 are documented in the file ChangeLog.
35
36 Unsupported third party contributions are provided in directory contrib/ .
37
38 zlib is available in Java using the java.util.zip package, documented at
39 http://java.sun.com/developer/technicalArticles/Programming/compression/ .
@@ -82,11 +82,11 @@
82 people who reported problems and suggested various improvements in zlib; they
83 are too numerous to cite here.
84
85 Copyright notice:
86
87 (C) 1995-2017 Jean-loup Gailly and Mark Adler
88
89 This software is provided 'as-is', without any express or implied
90 warranty. In no event will the authors be held liable for any damages
91 arising from the use of this software.
92
@@ -106,10 +106,13 @@
106 [email protected] [email protected]
107
108 If you use the zlib library in a product, we would appreciate *not* receiving
109 lengthy legal documents to sign. The sources are provided for free but without
110 warranty of any kind. The library has been entirely written by Jean-loup
111 Gailly and Mark Adler; it does not include third-party code.
 
 
 
112
113 If you redistribute modified sources, we would appreciate that you include in
114 the file ChangeLog history information documenting your changes. Please read
115 the FAQ for more information on the distribution of modified source versions.
116
--- compat/zlib/README
+++ compat/zlib/README
@@ -1,8 +1,8 @@
1 ZLIB DATA COMPRESSION LIBRARY
2
3 zlib 1.2.12 is a general purpose data compression library. All the code is
4 thread safe. The data format used by the zlib library is described by RFCs
5 (Request for Comments) 1950 to 1952 in the files
6 http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
7 rfc1952 (gzip format).
8
@@ -29,11 +29,11 @@
29
30 Mark Nelson <[email protected]> wrote an article about zlib for the Jan. 1997
31 issue of Dr. Dobb's Journal; a copy of the article is available at
32 http://marknelson.us/1997/01/01/zlib-engine/ .
33
34 The changes made in version 1.2.12 are documented in the file ChangeLog.
35
36 Unsupported third party contributions are provided in directory contrib/ .
37
38 zlib is available in Java using the java.util.zip package, documented at
39 http://java.sun.com/developer/technicalArticles/Programming/compression/ .
@@ -82,11 +82,11 @@
82 people who reported problems and suggested various improvements in zlib; they
83 are too numerous to cite here.
84
85 Copyright notice:
86
87 (C) 1995-2022 Jean-loup Gailly and Mark Adler
88
89 This software is provided 'as-is', without any express or implied
90 warranty. In no event will the authors be held liable for any damages
91 arising from the use of this software.
92
@@ -106,10 +106,13 @@
106 [email protected] [email protected]
107
108 If you use the zlib library in a product, we would appreciate *not* receiving
109 lengthy legal documents to sign. The sources are provided for free but without
110 warranty of any kind. The library has been entirely written by Jean-loup
111 Gailly and Mark Adler; it does not include third-party code. We make all
112 contributions to and distributions of this project solely in our personal
113 capacity, and are not conveying any rights to any intellectual property of
114 any third parties.
115
116 If you redistribute modified sources, we would appreciate that you include in
117 the file ChangeLog history information documenting your changes. Please read
118 the FAQ for more information on the distribution of modified source versions.
119
--- compat/zlib/configure
+++ compat/zlib/configure
@@ -85,10 +85,11 @@
8585
zconst=0
8686
build64=0
8787
gcc=0
8888
warn=0
8989
debug=0
90
+sanitize=0
9091
old_cc="$CC"
9192
old_cflags="$CFLAGS"
9293
OBJC='$(OBJZ) $(OBJG)'
9394
PIC_OBJC='$(PIC_OBJZ) $(PIC_OBJG)'
9495
@@ -135,10 +136,11 @@
135136
--sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;;
136137
--localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;;
137138
-c* | --const) zconst=1; shift ;;
138139
-w* | --warn) warn=1; shift ;;
139140
-d* | --debug) debug=1; shift ;;
141
+ --sanitize) sanitize=1; shift ;;
140142
*)
141143
echo "unknown option: $1" | tee -a configure.log
142144
echo "$0 --help for help" | tee -a configure.log
143145
leave 1;;
144146
esac
@@ -163,12 +165,18 @@
163165
cat > $test.c <<EOF
164166
extern int getchar();
165167
int hello() {return getchar();}
166168
EOF
167169
168
-test -z "$CC" && echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log
169
-cc=${CC-${CROSS_PREFIX}gcc}
170
+if test -z "$CC"; then
171
+ echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log
172
+ if ${CROSS_PREFIX}gcc -v >/dev/null 2>&1; then
173
+ cc=${CROSS_PREFIX}gcc
174
+ else
175
+ cc=${CROSS_PREFIX}cc
176
+ fi
177
+fi
170178
cflags=${CFLAGS-"-O3"}
171179
# to force the asm version use: CFLAGS="-O3 -DASMV" ./configure
172180
case "$cc" in
173181
*gcc*) gcc=1 ;;
174182
*clang*) gcc=1 ;;
@@ -197,10 +205,13 @@
197205
CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual -pedantic -DZLIB_CONST"
198206
else
199207
CFLAGS="${CFLAGS} -Wall -Wextra -pedantic"
200208
fi
201209
fi
210
+ if test $sanitize -eq 1; then
211
+ CFLAGS="${CFLAGS} -fsanitize=address"
212
+ fi
202213
if test $debug -eq 1; then
203214
CFLAGS="${CFLAGS} -DZLIB_DEBUG"
204215
SFLAGS="${SFLAGS} -DZLIB_DEBUG"
205216
fi
206217
if test -z "$uname"; then
@@ -365,12 +376,15 @@
365376
echo - using any output from compiler to indicate an error >> configure.log
366377
else
367378
try()
368379
{
369380
show $*
370
- ( $* ) >> configure.log 2>&1
381
+ got=`( $* ) 2>&1`
371382
ret=$?
383
+ if test "$got" != ""; then
384
+ printf "%s\n" "$got" >> configure.log
385
+ fi
372386
if test $ret -ne 0; then
373387
echo "(exit code "$ret")" >> configure.log
374388
fi
375389
return $ret
376390
}
@@ -379,12 +393,15 @@
379393
tryboth()
380394
{
381395
show $*
382396
got=`( $* ) 2>&1`
383397
ret=$?
384
- printf %s "$got" >> configure.log
398
+ if test "$got" != ""; then
399
+ printf "%s\n" "$got" >> configure.log
400
+ fi
385401
if test $ret -ne 0; then
402
+ echo "(exit code "$ret")" >> configure.log
386403
return $ret
387404
fi
388405
test "$got" = ""
389406
}
390407
@@ -455,21 +472,15 @@
455472
#include <stdlib.h>
456473
size_t dummy = 0;
457474
EOF
458475
if try $CC -c $CFLAGS $test.c; then
459476
echo "Checking for size_t... Yes." | tee -a configure.log
460
- need_sizet=0
461477
else
462478
echo "Checking for size_t... No." | tee -a configure.log
463
- need_sizet=1
464
-fi
465
-
466
-echo >> configure.log
467
-
468
-# find the size_t integer type, if needed
469
-if test $need_sizet -eq 1; then
470
- cat > $test.c <<EOF
479
+ # find a size_t integer type
480
+ # check for long long
481
+ cat > $test.c << EOF
471482
long long dummy = 0;
472483
EOF
473484
if try $CC -c $CFLAGS $test.c; then
474485
echo "Checking for long long... Yes." | tee -a configure.log
475486
cat > $test.c <<EOF
@@ -493,19 +504,15 @@
493504
EOF
494505
fi
495506
if try $CC $CFLAGS -o $test $test.c; then
496507
sizet=`./$test`
497508
echo "Checking for a pointer-size integer type..." $sizet"." | tee -a configure.log
509
+ CFLAGS="${CFLAGS} -DNO_SIZE_T=${sizet}"
510
+ SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}"
498511
else
499
- echo "Failed to find a pointer-size integer type." | tee -a configure.log
500
- leave 1
501
- fi
502
-fi
503
-
504
-if test $need_sizet -eq 1; then
505
- CFLAGS="${CFLAGS} -DNO_SIZE_T=${sizet}"
506
- SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}"
512
+ echo "Checking for a pointer-size integer type... not found." | tee -a configure.log
513
+ fi
507514
fi
508515
509516
echo >> configure.log
510517
511518
# check for large file support, and if none, check for fseeko()
@@ -847,11 +854,10 @@
847854
echo SHAREDLIBM = $SHAREDLIBM >> configure.log
848855
echo SHAREDLIBV = $SHAREDLIBV >> configure.log
849856
echo STATICLIB = $STATICLIB >> configure.log
850857
echo TEST = $TEST >> configure.log
851858
echo VER = $VER >> configure.log
852
-echo Z_U4 = $Z_U4 >> configure.log
853859
echo SRCDIR = $SRCDIR >> configure.log
854860
echo exec_prefix = $exec_prefix >> configure.log
855861
echo includedir = $includedir >> configure.log
856862
echo libdir = $libdir >> configure.log
857863
echo mandir = $mandir >> configure.log
858864
--- compat/zlib/configure
+++ compat/zlib/configure
@@ -85,10 +85,11 @@
85 zconst=0
86 build64=0
87 gcc=0
88 warn=0
89 debug=0
 
90 old_cc="$CC"
91 old_cflags="$CFLAGS"
92 OBJC='$(OBJZ) $(OBJG)'
93 PIC_OBJC='$(PIC_OBJZ) $(PIC_OBJG)'
94
@@ -135,10 +136,11 @@
135 --sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;;
136 --localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;;
137 -c* | --const) zconst=1; shift ;;
138 -w* | --warn) warn=1; shift ;;
139 -d* | --debug) debug=1; shift ;;
 
140 *)
141 echo "unknown option: $1" | tee -a configure.log
142 echo "$0 --help for help" | tee -a configure.log
143 leave 1;;
144 esac
@@ -163,12 +165,18 @@
163 cat > $test.c <<EOF
164 extern int getchar();
165 int hello() {return getchar();}
166 EOF
167
168 test -z "$CC" && echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log
169 cc=${CC-${CROSS_PREFIX}gcc}
 
 
 
 
 
 
170 cflags=${CFLAGS-"-O3"}
171 # to force the asm version use: CFLAGS="-O3 -DASMV" ./configure
172 case "$cc" in
173 *gcc*) gcc=1 ;;
174 *clang*) gcc=1 ;;
@@ -197,10 +205,13 @@
197 CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual -pedantic -DZLIB_CONST"
198 else
199 CFLAGS="${CFLAGS} -Wall -Wextra -pedantic"
200 fi
201 fi
 
 
 
202 if test $debug -eq 1; then
203 CFLAGS="${CFLAGS} -DZLIB_DEBUG"
204 SFLAGS="${SFLAGS} -DZLIB_DEBUG"
205 fi
206 if test -z "$uname"; then
@@ -365,12 +376,15 @@
365 echo - using any output from compiler to indicate an error >> configure.log
366 else
367 try()
368 {
369 show $*
370 ( $* ) >> configure.log 2>&1
371 ret=$?
 
 
 
372 if test $ret -ne 0; then
373 echo "(exit code "$ret")" >> configure.log
374 fi
375 return $ret
376 }
@@ -379,12 +393,15 @@
379 tryboth()
380 {
381 show $*
382 got=`( $* ) 2>&1`
383 ret=$?
384 printf %s "$got" >> configure.log
 
 
385 if test $ret -ne 0; then
 
386 return $ret
387 fi
388 test "$got" = ""
389 }
390
@@ -455,21 +472,15 @@
455 #include <stdlib.h>
456 size_t dummy = 0;
457 EOF
458 if try $CC -c $CFLAGS $test.c; then
459 echo "Checking for size_t... Yes." | tee -a configure.log
460 need_sizet=0
461 else
462 echo "Checking for size_t... No." | tee -a configure.log
463 need_sizet=1
464 fi
465
466 echo >> configure.log
467
468 # find the size_t integer type, if needed
469 if test $need_sizet -eq 1; then
470 cat > $test.c <<EOF
471 long long dummy = 0;
472 EOF
473 if try $CC -c $CFLAGS $test.c; then
474 echo "Checking for long long... Yes." | tee -a configure.log
475 cat > $test.c <<EOF
@@ -493,19 +504,15 @@
493 EOF
494 fi
495 if try $CC $CFLAGS -o $test $test.c; then
496 sizet=`./$test`
497 echo "Checking for a pointer-size integer type..." $sizet"." | tee -a configure.log
 
 
498 else
499 echo "Failed to find a pointer-size integer type." | tee -a configure.log
500 leave 1
501 fi
502 fi
503
504 if test $need_sizet -eq 1; then
505 CFLAGS="${CFLAGS} -DNO_SIZE_T=${sizet}"
506 SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}"
507 fi
508
509 echo >> configure.log
510
511 # check for large file support, and if none, check for fseeko()
@@ -847,11 +854,10 @@
847 echo SHAREDLIBM = $SHAREDLIBM >> configure.log
848 echo SHAREDLIBV = $SHAREDLIBV >> configure.log
849 echo STATICLIB = $STATICLIB >> configure.log
850 echo TEST = $TEST >> configure.log
851 echo VER = $VER >> configure.log
852 echo Z_U4 = $Z_U4 >> configure.log
853 echo SRCDIR = $SRCDIR >> configure.log
854 echo exec_prefix = $exec_prefix >> configure.log
855 echo includedir = $includedir >> configure.log
856 echo libdir = $libdir >> configure.log
857 echo mandir = $mandir >> configure.log
858
--- compat/zlib/configure
+++ compat/zlib/configure
@@ -85,10 +85,11 @@
85 zconst=0
86 build64=0
87 gcc=0
88 warn=0
89 debug=0
90 sanitize=0
91 old_cc="$CC"
92 old_cflags="$CFLAGS"
93 OBJC='$(OBJZ) $(OBJG)'
94 PIC_OBJC='$(PIC_OBJZ) $(PIC_OBJG)'
95
@@ -135,10 +136,11 @@
136 --sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;;
137 --localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;;
138 -c* | --const) zconst=1; shift ;;
139 -w* | --warn) warn=1; shift ;;
140 -d* | --debug) debug=1; shift ;;
141 --sanitize) sanitize=1; shift ;;
142 *)
143 echo "unknown option: $1" | tee -a configure.log
144 echo "$0 --help for help" | tee -a configure.log
145 leave 1;;
146 esac
@@ -163,12 +165,18 @@
165 cat > $test.c <<EOF
166 extern int getchar();
167 int hello() {return getchar();}
168 EOF
169
170 if test -z "$CC"; then
171 echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log
172 if ${CROSS_PREFIX}gcc -v >/dev/null 2>&1; then
173 cc=${CROSS_PREFIX}gcc
174 else
175 cc=${CROSS_PREFIX}cc
176 fi
177 fi
178 cflags=${CFLAGS-"-O3"}
179 # to force the asm version use: CFLAGS="-O3 -DASMV" ./configure
180 case "$cc" in
181 *gcc*) gcc=1 ;;
182 *clang*) gcc=1 ;;
@@ -197,10 +205,13 @@
205 CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual -pedantic -DZLIB_CONST"
206 else
207 CFLAGS="${CFLAGS} -Wall -Wextra -pedantic"
208 fi
209 fi
210 if test $sanitize -eq 1; then
211 CFLAGS="${CFLAGS} -fsanitize=address"
212 fi
213 if test $debug -eq 1; then
214 CFLAGS="${CFLAGS} -DZLIB_DEBUG"
215 SFLAGS="${SFLAGS} -DZLIB_DEBUG"
216 fi
217 if test -z "$uname"; then
@@ -365,12 +376,15 @@
376 echo - using any output from compiler to indicate an error >> configure.log
377 else
378 try()
379 {
380 show $*
381 got=`( $* ) 2>&1`
382 ret=$?
383 if test "$got" != ""; then
384 printf "%s\n" "$got" >> configure.log
385 fi
386 if test $ret -ne 0; then
387 echo "(exit code "$ret")" >> configure.log
388 fi
389 return $ret
390 }
@@ -379,12 +393,15 @@
393 tryboth()
394 {
395 show $*
396 got=`( $* ) 2>&1`
397 ret=$?
398 if test "$got" != ""; then
399 printf "%s\n" "$got" >> configure.log
400 fi
401 if test $ret -ne 0; then
402 echo "(exit code "$ret")" >> configure.log
403 return $ret
404 fi
405 test "$got" = ""
406 }
407
@@ -455,21 +472,15 @@
472 #include <stdlib.h>
473 size_t dummy = 0;
474 EOF
475 if try $CC -c $CFLAGS $test.c; then
476 echo "Checking for size_t... Yes." | tee -a configure.log
 
477 else
478 echo "Checking for size_t... No." | tee -a configure.log
479 # find a size_t integer type
480 # check for long long
481 cat > $test.c << EOF
 
 
 
 
 
482 long long dummy = 0;
483 EOF
484 if try $CC -c $CFLAGS $test.c; then
485 echo "Checking for long long... Yes." | tee -a configure.log
486 cat > $test.c <<EOF
@@ -493,19 +504,15 @@
504 EOF
505 fi
506 if try $CC $CFLAGS -o $test $test.c; then
507 sizet=`./$test`
508 echo "Checking for a pointer-size integer type..." $sizet"." | tee -a configure.log
509 CFLAGS="${CFLAGS} -DNO_SIZE_T=${sizet}"
510 SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}"
511 else
512 echo "Checking for a pointer-size integer type... not found." | tee -a configure.log
513 fi
 
 
 
 
 
 
514 fi
515
516 echo >> configure.log
517
518 # check for large file support, and if none, check for fseeko()
@@ -847,11 +854,10 @@
854 echo SHAREDLIBM = $SHAREDLIBM >> configure.log
855 echo SHAREDLIBV = $SHAREDLIBV >> configure.log
856 echo STATICLIB = $STATICLIB >> configure.log
857 echo TEST = $TEST >> configure.log
858 echo VER = $VER >> configure.log
 
859 echo SRCDIR = $SRCDIR >> configure.log
860 echo exec_prefix = $exec_prefix >> configure.log
861 echo includedir = $includedir >> configure.log
862 echo libdir = $libdir >> configure.log
863 echo mandir = $mandir >> configure.log
864
--- compat/zlib/contrib/README.contrib
+++ compat/zlib/contrib/README.contrib
@@ -6,18 +6,10 @@
66
77
ada/ by Dmitriy Anisimkov <[email protected]>
88
Support for Ada
99
See http://zlib-ada.sourceforge.net/
1010
11
-amd64/ by Mikhail Teterin <[email protected]>
12
- asm code for AMD64
13
- See patch at http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/96393
14
-
15
-asm686/ by Brian Raiter <[email protected]>
16
- asm code for Pentium and PPro/PII, using the AT&T (GNU as) syntax
17
- See http://www.muppetlabs.com/~breadbox/software/assembly.html
18
-
1911
blast/ by Mark Adler <[email protected]>
2012
Decompressor for output of PKWare Data Compression Library (DCL)
2113
2214
delphi/ by Cosmin Truta <[email protected]>
2315
Support for Delphi and C++ Builder
@@ -30,13 +22,10 @@
3022
assembler to replace longest_match() and inflate_fast()
3123
3224
infback9/ by Mark Adler <[email protected]>
3325
Unsupported diffs to infback to decode the deflate64 format
3426
35
-inflate86/ by Chris Anderson <[email protected]>
36
- Tuned x86 gcc asm code to replace inflate_fast()
37
-
3827
iostream/ by Kevin Ruland <[email protected]>
3928
A C++ I/O streams interface to the zlib gz* functions
4029
4130
iostream2/ by Tyge Løvset <[email protected]>
4231
Another C++ I/O streams interface
@@ -43,20 +32,10 @@
4332
4433
iostream3/ by Ludwig Schwardt <[email protected]>
4534
and Kevin Ruland <[email protected]>
4635
Yet another C++ I/O streams interface
4736
48
-masmx64/ by Gilles Vollant <[email protected]>
49
- x86 64-bit (AMD64 and Intel EM64t) code for x64 assembler to
50
- replace longest_match() and inflate_fast(), also masm x86
51
- 64-bits translation of Chris Anderson inflate_fast()
52
-
53
-masmx86/ by Gilles Vollant <[email protected]>
54
- x86 asm code to replace longest_match() and inflate_fast(),
55
- for Visual C++ and MASM (32 bits).
56
- Based on Brian Raiter (asm686) and Chris Anderson (inflate86)
57
-
5837
minizip/ by Gilles Vollant <[email protected]>
5938
Mini zip and unzip based on zlib
6039
Includes Zip64 support by Mathias Svensson <[email protected]>
6140
See http://www.winimage.com/zLibDll/minizip.html
6241
6342
--- compat/zlib/contrib/README.contrib
+++ compat/zlib/contrib/README.contrib
@@ -6,18 +6,10 @@
6
7 ada/ by Dmitriy Anisimkov <[email protected]>
8 Support for Ada
9 See http://zlib-ada.sourceforge.net/
10
11 amd64/ by Mikhail Teterin <[email protected]>
12 asm code for AMD64
13 See patch at http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/96393
14
15 asm686/ by Brian Raiter <[email protected]>
16 asm code for Pentium and PPro/PII, using the AT&T (GNU as) syntax
17 See http://www.muppetlabs.com/~breadbox/software/assembly.html
18
19 blast/ by Mark Adler <[email protected]>
20 Decompressor for output of PKWare Data Compression Library (DCL)
21
22 delphi/ by Cosmin Truta <[email protected]>
23 Support for Delphi and C++ Builder
@@ -30,13 +22,10 @@
30 assembler to replace longest_match() and inflate_fast()
31
32 infback9/ by Mark Adler <[email protected]>
33 Unsupported diffs to infback to decode the deflate64 format
34
35 inflate86/ by Chris Anderson <[email protected]>
36 Tuned x86 gcc asm code to replace inflate_fast()
37
38 iostream/ by Kevin Ruland <[email protected]>
39 A C++ I/O streams interface to the zlib gz* functions
40
41 iostream2/ by Tyge Løvset <[email protected]>
42 Another C++ I/O streams interface
@@ -43,20 +32,10 @@
43
44 iostream3/ by Ludwig Schwardt <[email protected]>
45 and Kevin Ruland <[email protected]>
46 Yet another C++ I/O streams interface
47
48 masmx64/ by Gilles Vollant <[email protected]>
49 x86 64-bit (AMD64 and Intel EM64t) code for x64 assembler to
50 replace longest_match() and inflate_fast(), also masm x86
51 64-bits translation of Chris Anderson inflate_fast()
52
53 masmx86/ by Gilles Vollant <[email protected]>
54 x86 asm code to replace longest_match() and inflate_fast(),
55 for Visual C++ and MASM (32 bits).
56 Based on Brian Raiter (asm686) and Chris Anderson (inflate86)
57
58 minizip/ by Gilles Vollant <[email protected]>
59 Mini zip and unzip based on zlib
60 Includes Zip64 support by Mathias Svensson <[email protected]>
61 See http://www.winimage.com/zLibDll/minizip.html
62
63
--- compat/zlib/contrib/README.contrib
+++ compat/zlib/contrib/README.contrib
@@ -6,18 +6,10 @@
6
7 ada/ by Dmitriy Anisimkov <[email protected]>
8 Support for Ada
9 See http://zlib-ada.sourceforge.net/
10
 
 
 
 
 
 
 
 
11 blast/ by Mark Adler <[email protected]>
12 Decompressor for output of PKWare Data Compression Library (DCL)
13
14 delphi/ by Cosmin Truta <[email protected]>
15 Support for Delphi and C++ Builder
@@ -30,13 +22,10 @@
22 assembler to replace longest_match() and inflate_fast()
23
24 infback9/ by Mark Adler <[email protected]>
25 Unsupported diffs to infback to decode the deflate64 format
26
 
 
 
27 iostream/ by Kevin Ruland <[email protected]>
28 A C++ I/O streams interface to the zlib gz* functions
29
30 iostream2/ by Tyge Løvset <[email protected]>
31 Another C++ I/O streams interface
@@ -43,20 +32,10 @@
32
33 iostream3/ by Ludwig Schwardt <[email protected]>
34 and Kevin Ruland <[email protected]>
35 Yet another C++ I/O streams interface
36
 
 
 
 
 
 
 
 
 
 
37 minizip/ by Gilles Vollant <[email protected]>
38 Mini zip and unzip based on zlib
39 Includes Zip64 support by Mathias Svensson <[email protected]>
40 See http://www.winimage.com/zLibDll/minizip.html
41
42
--- compat/zlib/contrib/blast/blast.h
+++ compat/zlib/contrib/blast/blast.h
@@ -55,11 +55,11 @@
5555
* available bytes there. If infun() returns zero, then blast() returns with
5656
* an input error. (blast() only asks for input if it needs it.) inhow is for
5757
* use by the application to pass an input descriptor to infun(), if desired.
5858
*
5959
* If left and in are not NULL and *left is not zero when blast() is called,
60
- * then the *left bytes are *in are consumed for input before infun() is used.
60
+ * then the *left bytes at *in are consumed for input before infun() is used.
6161
*
6262
* The output function is invoked: err = outfun(how, buf, len), where the bytes
6363
* to be written are buf[0..len-1]. If err is not zero, then blast() returns
6464
* with an output error. outfun() is always called with len <= 4096. outhow
6565
* is for use by the application to pass an output descriptor to outfun(), if
6666
--- compat/zlib/contrib/blast/blast.h
+++ compat/zlib/contrib/blast/blast.h
@@ -55,11 +55,11 @@
55 * available bytes there. If infun() returns zero, then blast() returns with
56 * an input error. (blast() only asks for input if it needs it.) inhow is for
57 * use by the application to pass an input descriptor to infun(), if desired.
58 *
59 * If left and in are not NULL and *left is not zero when blast() is called,
60 * then the *left bytes are *in are consumed for input before infun() is used.
61 *
62 * The output function is invoked: err = outfun(how, buf, len), where the bytes
63 * to be written are buf[0..len-1]. If err is not zero, then blast() returns
64 * with an output error. outfun() is always called with len <= 4096. outhow
65 * is for use by the application to pass an output descriptor to outfun(), if
66
--- compat/zlib/contrib/blast/blast.h
+++ compat/zlib/contrib/blast/blast.h
@@ -55,11 +55,11 @@
55 * available bytes there. If infun() returns zero, then blast() returns with
56 * an input error. (blast() only asks for input if it needs it.) inhow is for
57 * use by the application to pass an input descriptor to infun(), if desired.
58 *
59 * If left and in are not NULL and *left is not zero when blast() is called,
60 * then the *left bytes at *in are consumed for input before infun() is used.
61 *
62 * The output function is invoked: err = outfun(how, buf, len), where the bytes
63 * to be written are buf[0..len-1]. If err is not zero, then blast() returns
64 * with an output error. outfun() is always called with len <= 4096. outhow
65 * is for use by the application to pass an output descriptor to outfun(), if
66
--- compat/zlib/contrib/delphi/ZLib.pas
+++ compat/zlib/contrib/delphi/ZLib.pas
@@ -150,11 +150,11 @@
150150
BufSize = number of bytes in OutBuf }
151151
procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer;
152152
const OutBuf: Pointer; BufSize: Integer);
153153
154154
const
155
- zlib_version = '1.2.11';
155
+ zlib_version = '1.2.12';
156156
157157
type
158158
EZlibError = class(Exception);
159159
ECompressionError = class(EZlibError);
160160
EDecompressionError = class(EZlibError);
161161
--- compat/zlib/contrib/delphi/ZLib.pas
+++ compat/zlib/contrib/delphi/ZLib.pas
@@ -150,11 +150,11 @@
150 BufSize = number of bytes in OutBuf }
151 procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer;
152 const OutBuf: Pointer; BufSize: Integer);
153
154 const
155 zlib_version = '1.2.11';
156
157 type
158 EZlibError = class(Exception);
159 ECompressionError = class(EZlibError);
160 EDecompressionError = class(EZlibError);
161
--- compat/zlib/contrib/delphi/ZLib.pas
+++ compat/zlib/contrib/delphi/ZLib.pas
@@ -150,11 +150,11 @@
150 BufSize = number of bytes in OutBuf }
151 procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer;
152 const OutBuf: Pointer; BufSize: Integer);
153
154 const
155 zlib_version = '1.2.12';
156
157 type
158 EZlibError = class(Exception);
159 ECompressionError = class(EZlibError);
160 EDecompressionError = class(EZlibError);
161
--- compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
+++ compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
@@ -154,11 +154,11 @@
154154
#region Info tests
155155
[Test]
156156
public void Info_Version()
157157
{
158158
Info info = new Info();
159
- Assert.AreEqual("1.2.11", Info.Version);
159
+ Assert.AreEqual("1.2.12", Info.Version);
160160
Assert.AreEqual(32, info.SizeOfUInt);
161161
Assert.AreEqual(32, info.SizeOfULong);
162162
Assert.AreEqual(32, info.SizeOfPointer);
163163
Assert.AreEqual(32, info.SizeOfOffset);
164164
}
165165
--- compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
+++ compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
@@ -154,11 +154,11 @@
154 #region Info tests
155 [Test]
156 public void Info_Version()
157 {
158 Info info = new Info();
159 Assert.AreEqual("1.2.11", Info.Version);
160 Assert.AreEqual(32, info.SizeOfUInt);
161 Assert.AreEqual(32, info.SizeOfULong);
162 Assert.AreEqual(32, info.SizeOfPointer);
163 Assert.AreEqual(32, info.SizeOfOffset);
164 }
165
--- compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
+++ compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
@@ -154,11 +154,11 @@
154 #region Info tests
155 [Test]
156 public void Info_Version()
157 {
158 Info info = new Info();
159 Assert.AreEqual("1.2.12", Info.Version);
160 Assert.AreEqual(32, info.SizeOfUInt);
161 Assert.AreEqual(32, info.SizeOfULong);
162 Assert.AreEqual(32, info.SizeOfPointer);
163 Assert.AreEqual(32, info.SizeOfOffset);
164 }
165
--- compat/zlib/contrib/infback9/inftree9.c
+++ compat/zlib/contrib/infback9/inftree9.c
@@ -1,17 +1,17 @@
11
/* inftree9.c -- generate Huffman trees for efficient decoding
2
- * Copyright (C) 1995-2017 Mark Adler
2
+ * Copyright (C) 1995-2022 Mark Adler
33
* For conditions of distribution and use, see copyright notice in zlib.h
44
*/
55
66
#include "zutil.h"
77
#include "inftree9.h"
88
99
#define MAXBITS 15
1010
1111
const char inflate9_copyright[] =
12
- " inflate9 1.2.11 Copyright 1995-2017 Mark Adler ";
12
+ " inflate9 1.2.12 Copyright 1995-2022 Mark Adler ";
1313
/*
1414
If you use the zlib library in a product, an acknowledgment is welcome
1515
in the documentation of your product. If for some reason you cannot
1616
include such an acknowledgment, I would appreciate that you keep this
1717
copyright string in the executable of your product.
@@ -62,11 +62,11 @@
6262
19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115,
6363
131, 163, 195, 227, 3, 0, 0};
6464
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
6565
128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129,
6666
130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132,
67
- 133, 133, 133, 133, 144, 77, 202};
67
+ 133, 133, 133, 133, 144, 199, 202};
6868
static const unsigned short dbase[32] = { /* Distance codes 0..31 base */
6969
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49,
7070
65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073,
7171
4097, 6145, 8193, 12289, 16385, 24577, 32769, 49153};
7272
static const unsigned short dext[32] = { /* Distance codes 0..31 extra */
7373
--- compat/zlib/contrib/infback9/inftree9.c
+++ compat/zlib/contrib/infback9/inftree9.c
@@ -1,17 +1,17 @@
1 /* inftree9.c -- generate Huffman trees for efficient decoding
2 * Copyright (C) 1995-2017 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 #include "zutil.h"
7 #include "inftree9.h"
8
9 #define MAXBITS 15
10
11 const char inflate9_copyright[] =
12 " inflate9 1.2.11 Copyright 1995-2017 Mark Adler ";
13 /*
14 If you use the zlib library in a product, an acknowledgment is welcome
15 in the documentation of your product. If for some reason you cannot
16 include such an acknowledgment, I would appreciate that you keep this
17 copyright string in the executable of your product.
@@ -62,11 +62,11 @@
62 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115,
63 131, 163, 195, 227, 3, 0, 0};
64 static const unsigned short lext[31] = { /* Length codes 257..285 extra */
65 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129,
66 130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132,
67 133, 133, 133, 133, 144, 77, 202};
68 static const unsigned short dbase[32] = { /* Distance codes 0..31 base */
69 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49,
70 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073,
71 4097, 6145, 8193, 12289, 16385, 24577, 32769, 49153};
72 static const unsigned short dext[32] = { /* Distance codes 0..31 extra */
73
--- compat/zlib/contrib/infback9/inftree9.c
+++ compat/zlib/contrib/infback9/inftree9.c
@@ -1,17 +1,17 @@
1 /* inftree9.c -- generate Huffman trees for efficient decoding
2 * Copyright (C) 1995-2022 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 #include "zutil.h"
7 #include "inftree9.h"
8
9 #define MAXBITS 15
10
11 const char inflate9_copyright[] =
12 " inflate9 1.2.12 Copyright 1995-2022 Mark Adler ";
13 /*
14 If you use the zlib library in a product, an acknowledgment is welcome
15 in the documentation of your product. If for some reason you cannot
16 include such an acknowledgment, I would appreciate that you keep this
17 copyright string in the executable of your product.
@@ -62,11 +62,11 @@
62 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115,
63 131, 163, 195, 227, 3, 0, 0};
64 static const unsigned short lext[31] = { /* Length codes 257..285 extra */
65 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129,
66 130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132,
67 133, 133, 133, 133, 144, 199, 202};
68 static const unsigned short dbase[32] = { /* Distance codes 0..31 base */
69 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49,
70 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073,
71 4097, 6145, 8193, 12289, 16385, 24577, 32769, 49153};
72 static const unsigned short dext[32] = { /* Distance codes 0..31 extra */
73
--- compat/zlib/contrib/minizip/Makefile
+++ compat/zlib/contrib/minizip/Makefile
@@ -1,7 +1,7 @@
11
CC=cc
2
-CFLAGS=-O -I../..
2
+CFLAGS := $(CFLAGS) -O -I../..
33
44
UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a
55
ZIP_OBJS = minizip.o zip.o ioapi.o ../../libz.a
66
77
.c.o:
@@ -14,12 +14,16 @@
1414
1515
minizip: $(ZIP_OBJS)
1616
$(CC) $(CFLAGS) -o $@ $(ZIP_OBJS)
1717
1818
test: miniunz minizip
19
- ./minizip test readme.txt
19
+ @rm -f test.*
20
+ @echo hello hello hello > test.txt
21
+ ./minizip test test.txt
2022
./miniunz -l test.zip
21
- mv readme.txt readme.old
23
+ @mv test.txt test.old
2224
./miniunz test.zip
25
+ @cmp test.txt test.old
26
+ @rm -f test.*
2327
2428
clean:
25
- /bin/rm -f *.o *~ minizip miniunz
29
+ /bin/rm -f *.o *~ minizip miniunz test.*
2630
--- compat/zlib/contrib/minizip/Makefile
+++ compat/zlib/contrib/minizip/Makefile
@@ -1,7 +1,7 @@
1 CC=cc
2 CFLAGS=-O -I../..
3
4 UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a
5 ZIP_OBJS = minizip.o zip.o ioapi.o ../../libz.a
6
7 .c.o:
@@ -14,12 +14,16 @@
14
15 minizip: $(ZIP_OBJS)
16 $(CC) $(CFLAGS) -o $@ $(ZIP_OBJS)
17
18 test: miniunz minizip
19 ./minizip test readme.txt
 
 
20 ./miniunz -l test.zip
21 mv readme.txt readme.old
22 ./miniunz test.zip
 
 
23
24 clean:
25 /bin/rm -f *.o *~ minizip miniunz
26
--- compat/zlib/contrib/minizip/Makefile
+++ compat/zlib/contrib/minizip/Makefile
@@ -1,7 +1,7 @@
1 CC=cc
2 CFLAGS := $(CFLAGS) -O -I../..
3
4 UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a
5 ZIP_OBJS = minizip.o zip.o ioapi.o ../../libz.a
6
7 .c.o:
@@ -14,12 +14,16 @@
14
15 minizip: $(ZIP_OBJS)
16 $(CC) $(CFLAGS) -o $@ $(ZIP_OBJS)
17
18 test: miniunz minizip
19 @rm -f test.*
20 @echo hello hello hello > test.txt
21 ./minizip test test.txt
22 ./miniunz -l test.zip
23 @mv test.txt test.old
24 ./miniunz test.zip
25 @cmp test.txt test.old
26 @rm -f test.*
27
28 clean:
29 /bin/rm -f *.o *~ minizip miniunz test.*
30
--- compat/zlib/contrib/minizip/configure.ac
+++ compat/zlib/contrib/minizip/configure.ac
@@ -1,9 +1,9 @@
11
# -*- Autoconf -*-
22
# Process this file with autoconf to produce a configure script.
33
4
-AC_INIT([minizip], [1.2.11], [bugzilla.redhat.com])
4
+AC_INIT([minizip], [1.2.12], [bugzilla.redhat.com])
55
AC_CONFIG_SRCDIR([minizip.c])
66
AM_INIT_AUTOMAKE([foreign])
77
LT_INIT
88
99
AC_MSG_CHECKING([whether to build example programs])
1010
--- compat/zlib/contrib/minizip/configure.ac
+++ compat/zlib/contrib/minizip/configure.ac
@@ -1,9 +1,9 @@
1 # -*- Autoconf -*-
2 # Process this file with autoconf to produce a configure script.
3
4 AC_INIT([minizip], [1.2.11], [bugzilla.redhat.com])
5 AC_CONFIG_SRCDIR([minizip.c])
6 AM_INIT_AUTOMAKE([foreign])
7 LT_INIT
8
9 AC_MSG_CHECKING([whether to build example programs])
10
--- compat/zlib/contrib/minizip/configure.ac
+++ compat/zlib/contrib/minizip/configure.ac
@@ -1,9 +1,9 @@
1 # -*- Autoconf -*-
2 # Process this file with autoconf to produce a configure script.
3
4 AC_INIT([minizip], [1.2.12], [bugzilla.redhat.com])
5 AC_CONFIG_SRCDIR([minizip.c])
6 AM_INIT_AUTOMAKE([foreign])
7 LT_INIT
8
9 AC_MSG_CHECKING([whether to build example programs])
10
--- compat/zlib/contrib/minizip/crypt.h
+++ compat/zlib/contrib/minizip/crypt.h
@@ -36,10 +36,11 @@
3636
{
3737
unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an
3838
* unpredictable manner on 16-bit systems; not a problem
3939
* with any known compiler so far, though */
4040
41
+ (void)pcrc_32_tab;
4142
temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;
4243
return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
4344
}
4445
4546
/***********************************************************************
@@ -75,28 +76,28 @@
7576
7677
#define zdecode(pkeys,pcrc_32_tab,c) \
7778
(update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))
7879
7980
#define zencode(pkeys,pcrc_32_tab,c,t) \
80
- (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))
81
+ (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), (Byte)t^(c))
8182
8283
#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
8384
8485
#define RAND_HEAD_LEN 12
8586
/* "last resort" source for second part of crypt seed pattern */
8687
# ifndef ZCR_SEED2
87
-# define ZCR_SEED2 3141592654UL /* use PI as default pattern */
88
+# define ZCR_SEED2 3141592654L /* use PI as default pattern */
8889
# endif
8990
90
-static int crypthead(const char* passwd, /* password string */
91
- unsigned char* buf, /* where to write header */
92
- int bufSize,
93
- unsigned long* pkeys,
94
- const z_crc_t* pcrc_32_tab,
95
- unsigned long crcForCrypting)
96
-{
97
- int n; /* index in random header */
91
+static unsigned crypthead(const char* passwd, /* password string */
92
+ unsigned char* buf, /* where to write header */
93
+ int bufSize,
94
+ unsigned long* pkeys,
95
+ const z_crc_t* pcrc_32_tab,
96
+ unsigned long crcForCrypting)
97
+{
98
+ unsigned n; /* index in random header */
9899
int t; /* temporary */
99100
int c; /* random byte */
100101
unsigned char header[RAND_HEAD_LEN-2]; /* random header */
101102
static unsigned calls = 0; /* ensure different random header each time */
102103
103104
--- compat/zlib/contrib/minizip/crypt.h
+++ compat/zlib/contrib/minizip/crypt.h
@@ -36,10 +36,11 @@
36 {
37 unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an
38 * unpredictable manner on 16-bit systems; not a problem
39 * with any known compiler so far, though */
40
 
41 temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;
42 return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
43 }
44
45 /***********************************************************************
@@ -75,28 +76,28 @@
75
76 #define zdecode(pkeys,pcrc_32_tab,c) \
77 (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))
78
79 #define zencode(pkeys,pcrc_32_tab,c,t) \
80 (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))
81
82 #ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
83
84 #define RAND_HEAD_LEN 12
85 /* "last resort" source for second part of crypt seed pattern */
86 # ifndef ZCR_SEED2
87 # define ZCR_SEED2 3141592654UL /* use PI as default pattern */
88 # endif
89
90 static int crypthead(const char* passwd, /* password string */
91 unsigned char* buf, /* where to write header */
92 int bufSize,
93 unsigned long* pkeys,
94 const z_crc_t* pcrc_32_tab,
95 unsigned long crcForCrypting)
96 {
97 int n; /* index in random header */
98 int t; /* temporary */
99 int c; /* random byte */
100 unsigned char header[RAND_HEAD_LEN-2]; /* random header */
101 static unsigned calls = 0; /* ensure different random header each time */
102
103
--- compat/zlib/contrib/minizip/crypt.h
+++ compat/zlib/contrib/minizip/crypt.h
@@ -36,10 +36,11 @@
36 {
37 unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an
38 * unpredictable manner on 16-bit systems; not a problem
39 * with any known compiler so far, though */
40
41 (void)pcrc_32_tab;
42 temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;
43 return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
44 }
45
46 /***********************************************************************
@@ -75,28 +76,28 @@
76
77 #define zdecode(pkeys,pcrc_32_tab,c) \
78 (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))
79
80 #define zencode(pkeys,pcrc_32_tab,c,t) \
81 (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), (Byte)t^(c))
82
83 #ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
84
85 #define RAND_HEAD_LEN 12
86 /* "last resort" source for second part of crypt seed pattern */
87 # ifndef ZCR_SEED2
88 # define ZCR_SEED2 3141592654L /* use PI as default pattern */
89 # endif
90
91 static unsigned crypthead(const char* passwd, /* password string */
92 unsigned char* buf, /* where to write header */
93 int bufSize,
94 unsigned long* pkeys,
95 const z_crc_t* pcrc_32_tab,
96 unsigned long crcForCrypting)
97 {
98 unsigned n; /* index in random header */
99 int t; /* temporary */
100 int c; /* random byte */
101 unsigned char header[RAND_HEAD_LEN-2]; /* random header */
102 static unsigned calls = 0; /* ensure different random header each time */
103
104
--- compat/zlib/contrib/minizip/ioapi.c
+++ compat/zlib/contrib/minizip/ioapi.c
@@ -56,11 +56,11 @@
5656
{
5757
if (pfilefunc->zfile_func64.zseek64_file != NULL)
5858
return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);
5959
else
6060
{
61
- uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
61
+ uLong tell_uLong = (uLong)(*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
6262
if ((tell_uLong) == MAXU32)
6363
return (ZPOS64_T)-1;
6464
else
6565
return tell_uLong;
6666
}
@@ -92,10 +92,11 @@
9292
static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream));
9393
static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));
9494
9595
static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode)
9696
{
97
+ (void)opaque;
9798
FILE* file = NULL;
9899
const char* mode_fopen = NULL;
99100
if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
100101
mode_fopen = "rb";
101102
else
@@ -110,10 +111,11 @@
110111
return file;
111112
}
112113
113114
static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode)
114115
{
116
+ (void)opaque;
115117
FILE* file = NULL;
116118
const char* mode_fopen = NULL;
117119
if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
118120
mode_fopen = "rb";
119121
else
@@ -129,39 +131,44 @@
129131
}
130132
131133
132134
static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size)
133135
{
136
+ (void)opaque;
134137
uLong ret;
135138
ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);
136139
return ret;
137140
}
138141
139142
static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size)
140143
{
144
+ (void)opaque;
141145
uLong ret;
142146
ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);
143147
return ret;
144148
}
145149
146150
static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
147151
{
152
+ (void)opaque;
148153
long ret;
149154
ret = ftell((FILE *)stream);
150155
return ret;
151156
}
152157
153158
154159
static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
155160
{
161
+ (void)opaque;
156162
ZPOS64_T ret;
157
- ret = FTELLO_FUNC((FILE *)stream);
163
+ ret = (ZPOS64_T)FTELLO_FUNC((FILE *)stream);
158164
return ret;
159165
}
160166
161167
static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin)
162168
{
169
+ (void)opaque;
163170
int fseek_origin=0;
164171
long ret;
165172
switch (origin)
166173
{
167174
case ZLIB_FILEFUNC_SEEK_CUR :
@@ -174,17 +181,18 @@
174181
fseek_origin = SEEK_SET;
175182
break;
176183
default: return -1;
177184
}
178185
ret = 0;
179
- if (fseek((FILE *)stream, offset, fseek_origin) != 0)
186
+ if (fseek((FILE *)stream, (long)offset, fseek_origin) != 0)
180187
ret = -1;
181188
return ret;
182189
}
183190
184191
static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)
185192
{
193
+ (void)opaque;
186194
int fseek_origin=0;
187195
long ret;
188196
switch (origin)
189197
{
190198
case ZLIB_FILEFUNC_SEEK_CUR :
@@ -198,26 +206,28 @@
198206
break;
199207
default: return -1;
200208
}
201209
ret = 0;
202210
203
- if(FSEEKO_FUNC((FILE *)stream, offset, fseek_origin) != 0)
211
+ if(FSEEKO_FUNC((FILE *)stream, (long)offset, fseek_origin) != 0)
204212
ret = -1;
205213
206214
return ret;
207215
}
208216
209217
210218
static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)
211219
{
220
+ (void)opaque;
212221
int ret;
213222
ret = fclose((FILE *)stream);
214223
return ret;
215224
}
216225
217226
static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)
218227
{
228
+ (void)opaque;
219229
int ret;
220230
ret = ferror((FILE *)stream);
221231
return ret;
222232
}
223233
224234
--- compat/zlib/contrib/minizip/ioapi.c
+++ compat/zlib/contrib/minizip/ioapi.c
@@ -56,11 +56,11 @@
56 {
57 if (pfilefunc->zfile_func64.zseek64_file != NULL)
58 return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);
59 else
60 {
61 uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
62 if ((tell_uLong) == MAXU32)
63 return (ZPOS64_T)-1;
64 else
65 return tell_uLong;
66 }
@@ -92,10 +92,11 @@
92 static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream));
93 static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));
94
95 static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode)
96 {
 
97 FILE* file = NULL;
98 const char* mode_fopen = NULL;
99 if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
100 mode_fopen = "rb";
101 else
@@ -110,10 +111,11 @@
110 return file;
111 }
112
113 static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode)
114 {
 
115 FILE* file = NULL;
116 const char* mode_fopen = NULL;
117 if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
118 mode_fopen = "rb";
119 else
@@ -129,39 +131,44 @@
129 }
130
131
132 static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size)
133 {
 
134 uLong ret;
135 ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);
136 return ret;
137 }
138
139 static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size)
140 {
 
141 uLong ret;
142 ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);
143 return ret;
144 }
145
146 static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
147 {
 
148 long ret;
149 ret = ftell((FILE *)stream);
150 return ret;
151 }
152
153
154 static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
155 {
 
156 ZPOS64_T ret;
157 ret = FTELLO_FUNC((FILE *)stream);
158 return ret;
159 }
160
161 static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin)
162 {
 
163 int fseek_origin=0;
164 long ret;
165 switch (origin)
166 {
167 case ZLIB_FILEFUNC_SEEK_CUR :
@@ -174,17 +181,18 @@
174 fseek_origin = SEEK_SET;
175 break;
176 default: return -1;
177 }
178 ret = 0;
179 if (fseek((FILE *)stream, offset, fseek_origin) != 0)
180 ret = -1;
181 return ret;
182 }
183
184 static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)
185 {
 
186 int fseek_origin=0;
187 long ret;
188 switch (origin)
189 {
190 case ZLIB_FILEFUNC_SEEK_CUR :
@@ -198,26 +206,28 @@
198 break;
199 default: return -1;
200 }
201 ret = 0;
202
203 if(FSEEKO_FUNC((FILE *)stream, offset, fseek_origin) != 0)
204 ret = -1;
205
206 return ret;
207 }
208
209
210 static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)
211 {
 
212 int ret;
213 ret = fclose((FILE *)stream);
214 return ret;
215 }
216
217 static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)
218 {
 
219 int ret;
220 ret = ferror((FILE *)stream);
221 return ret;
222 }
223
224
--- compat/zlib/contrib/minizip/ioapi.c
+++ compat/zlib/contrib/minizip/ioapi.c
@@ -56,11 +56,11 @@
56 {
57 if (pfilefunc->zfile_func64.zseek64_file != NULL)
58 return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);
59 else
60 {
61 uLong tell_uLong = (uLong)(*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
62 if ((tell_uLong) == MAXU32)
63 return (ZPOS64_T)-1;
64 else
65 return tell_uLong;
66 }
@@ -92,10 +92,11 @@
92 static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream));
93 static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));
94
95 static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode)
96 {
97 (void)opaque;
98 FILE* file = NULL;
99 const char* mode_fopen = NULL;
100 if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
101 mode_fopen = "rb";
102 else
@@ -110,10 +111,11 @@
111 return file;
112 }
113
114 static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode)
115 {
116 (void)opaque;
117 FILE* file = NULL;
118 const char* mode_fopen = NULL;
119 if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
120 mode_fopen = "rb";
121 else
@@ -129,39 +131,44 @@
131 }
132
133
134 static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size)
135 {
136 (void)opaque;
137 uLong ret;
138 ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);
139 return ret;
140 }
141
142 static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size)
143 {
144 (void)opaque;
145 uLong ret;
146 ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);
147 return ret;
148 }
149
150 static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
151 {
152 (void)opaque;
153 long ret;
154 ret = ftell((FILE *)stream);
155 return ret;
156 }
157
158
159 static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
160 {
161 (void)opaque;
162 ZPOS64_T ret;
163 ret = (ZPOS64_T)FTELLO_FUNC((FILE *)stream);
164 return ret;
165 }
166
167 static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin)
168 {
169 (void)opaque;
170 int fseek_origin=0;
171 long ret;
172 switch (origin)
173 {
174 case ZLIB_FILEFUNC_SEEK_CUR :
@@ -174,17 +181,18 @@
181 fseek_origin = SEEK_SET;
182 break;
183 default: return -1;
184 }
185 ret = 0;
186 if (fseek((FILE *)stream, (long)offset, fseek_origin) != 0)
187 ret = -1;
188 return ret;
189 }
190
191 static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)
192 {
193 (void)opaque;
194 int fseek_origin=0;
195 long ret;
196 switch (origin)
197 {
198 case ZLIB_FILEFUNC_SEEK_CUR :
@@ -198,26 +206,28 @@
206 break;
207 default: return -1;
208 }
209 ret = 0;
210
211 if(FSEEKO_FUNC((FILE *)stream, (long)offset, fseek_origin) != 0)
212 ret = -1;
213
214 return ret;
215 }
216
217
218 static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)
219 {
220 (void)opaque;
221 int ret;
222 ret = fclose((FILE *)stream);
223 return ret;
224 }
225
226 static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)
227 {
228 (void)opaque;
229 int ret;
230 ret = ferror((FILE *)stream);
231 return ret;
232 }
233
234
--- compat/zlib/contrib/minizip/ioapi.h
+++ compat/zlib/contrib/minizip/ioapi.h
@@ -89,22 +89,24 @@
8989
#ifdef HAS_STDINT_H
9090
#include "stdint.h"
9191
typedef uint64_t ZPOS64_T;
9292
#else
9393
94
-/* Maximum unsigned 32-bit value used as placeholder for zip64 */
95
-#define MAXU32 0xffffffff
94
+
9695
9796
#if defined(_MSC_VER) || defined(__BORLANDC__)
9897
typedef unsigned __int64 ZPOS64_T;
9998
#else
10099
typedef unsigned long long int ZPOS64_T;
101100
#endif
102101
#endif
103102
#endif
104103
105
-
104
+/* Maximum unsigned 32-bit value used as placeholder for zip64 */
105
+#ifndef MAXU32
106
+#define MAXU32 (0xffffffff)
107
+#endif
106108
107109
#ifdef __cplusplus
108110
extern "C" {
109111
#endif
110112
111113
--- compat/zlib/contrib/minizip/ioapi.h
+++ compat/zlib/contrib/minizip/ioapi.h
@@ -89,22 +89,24 @@
89 #ifdef HAS_STDINT_H
90 #include "stdint.h"
91 typedef uint64_t ZPOS64_T;
92 #else
93
94 /* Maximum unsigned 32-bit value used as placeholder for zip64 */
95 #define MAXU32 0xffffffff
96
97 #if defined(_MSC_VER) || defined(__BORLANDC__)
98 typedef unsigned __int64 ZPOS64_T;
99 #else
100 typedef unsigned long long int ZPOS64_T;
101 #endif
102 #endif
103 #endif
104
105
 
 
 
106
107 #ifdef __cplusplus
108 extern "C" {
109 #endif
110
111
--- compat/zlib/contrib/minizip/ioapi.h
+++ compat/zlib/contrib/minizip/ioapi.h
@@ -89,22 +89,24 @@
89 #ifdef HAS_STDINT_H
90 #include "stdint.h"
91 typedef uint64_t ZPOS64_T;
92 #else
93
94
 
95
96 #if defined(_MSC_VER) || defined(__BORLANDC__)
97 typedef unsigned __int64 ZPOS64_T;
98 #else
99 typedef unsigned long long int ZPOS64_T;
100 #endif
101 #endif
102 #endif
103
104 /* Maximum unsigned 32-bit value used as placeholder for zip64 */
105 #ifndef MAXU32
106 #define MAXU32 (0xffffffff)
107 #endif
108
109 #ifdef __cplusplus
110 extern "C" {
111 #endif
112
113
--- compat/zlib/contrib/minizip/miniunz.c
+++ compat/zlib/contrib/minizip/miniunz.c
@@ -43,10 +43,11 @@
4343
#include <stdlib.h>
4444
#include <string.h>
4545
#include <time.h>
4646
#include <errno.h>
4747
#include <fcntl.h>
48
+#include <sys/stat.h>
4849
4950
#ifdef _WIN32
5051
# include <direct.h>
5152
# include <io.h>
5253
#else
@@ -78,11 +79,11 @@
7879
7980
/* change_file_date : change the date/time of a file
8081
filename : the filename of the file where date/time must be modified
8182
dosdate : the new date at the MSDos format (4 bytes)
8283
tmu_date : the SAME new date at the tm_unz format */
83
-void change_file_date(filename,dosdate,tmu_date)
84
+static void change_file_date(filename,dosdate,tmu_date)
8485
const char *filename;
8586
uLong dosdate;
8687
tm_unz tmu_date;
8788
{
8889
#ifdef _WIN32
@@ -95,11 +96,12 @@
9596
DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal);
9697
LocalFileTimeToFileTime(&ftLocal,&ftm);
9798
SetFileTime(hFile,&ftm,&ftLastAcc,&ftm);
9899
CloseHandle(hFile);
99100
#else
100
-#ifdef unix || __APPLE__
101
+#if defined(unix) || defined(__APPLE__)
102
+ (void)dosdate;
101103
struct utimbuf ut;
102104
struct tm newdate;
103105
newdate.tm_sec = tmu_date.tm_sec;
104106
newdate.tm_min=tmu_date.tm_min;
105107
newdate.tm_hour=tmu_date.tm_hour;
@@ -119,11 +121,11 @@
119121
120122
121123
/* mymkdir and change_file_date are not 100 % portable
122124
As I don't know well Unix, I wait feedback for the unix portion */
123125
124
-int mymkdir(dirname)
126
+static int mymkdir(dirname)
125127
const char* dirname;
126128
{
127129
int ret=0;
128130
#ifdef _WIN32
129131
ret = _mkdir(dirname);
@@ -133,18 +135,18 @@
133135
ret = mkdir (dirname,0775);
134136
#endif
135137
return ret;
136138
}
137139
138
-int makedir (newdir)
139
- char *newdir;
140
+static int makedir (newdir)
141
+ const char *newdir;
140142
{
141143
char *buffer ;
142144
char *p;
143
- int len = (int)strlen(newdir);
145
+ size_t len = strlen(newdir);
144146
145
- if (len <= 0)
147
+ if (len == 0)
146148
return 0;
147149
148150
buffer = (char*)malloc(len+1);
149151
if (buffer==NULL)
150152
{
@@ -183,17 +185,17 @@
183185
}
184186
free(buffer);
185187
return 1;
186188
}
187189
188
-void do_banner()
190
+static void do_banner()
189191
{
190192
printf("MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\n");
191193
printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n");
192194
}
193195
194
-void do_help()
196
+static void do_help()
195197
{
196198
printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\n\n" \
197199
" -e Extract without pathname (junk paths)\n" \
198200
" -x Extract with pathname\n" \
199201
" -v list files\n" \
@@ -201,11 +203,11 @@
201203
" -d directory to extract into\n" \
202204
" -o overwrite files without prompting\n" \
203205
" -p extract crypted file using password\n\n");
204206
}
205207
206
-void Display64BitsSize(ZPOS64_T n, int size_char)
208
+static void Display64BitsSize(ZPOS64_T n, int size_char)
207209
{
208210
/* to avoid compatibility problem , we do here the conversion */
209211
char number[21];
210212
int offset=19;
211213
int pos_string = 19;
@@ -229,11 +231,11 @@
229231
}
230232
231233
printf("%s",&number[pos_string]);
232234
}
233235
234
-int do_list(uf)
236
+static int do_list(uf)
235237
unzFile uf;
236238
{
237239
uLong i;
238240
unz_global_info64 gi;
239241
int err;
@@ -307,11 +309,11 @@
307309
308310
return 0;
309311
}
310312
311313
312
-int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
314
+static int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
313315
unzFile uf;
314316
const int* popt_extract_without_path;
315317
int* popt_overwrite;
316318
const char* password;
317319
{
@@ -322,11 +324,10 @@
322324
FILE *fout=NULL;
323325
void* buf;
324326
uInt size_buf;
325327
326328
unz_file_info64 file_info;
327
- uLong ratio=0;
328329
err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
329330
330331
if (err!=UNZ_OK)
331332
{
332333
printf("error %d with zipfile in unzGetCurrentFileInfo\n",err);
@@ -437,11 +438,11 @@
437438
{
438439
printf("error %d with zipfile in unzReadCurrentFile\n",err);
439440
break;
440441
}
441442
if (err>0)
442
- if (fwrite(buf,err,1,fout)!=1)
443
+ if (fwrite(buf,(unsigned)err,1,fout)!=1)
443444
{
444445
printf("error in writing extracted file\n");
445446
err=UNZ_ERRNO;
446447
break;
447448
}
@@ -470,20 +471,19 @@
470471
free(buf);
471472
return err;
472473
}
473474
474475
475
-int do_extract(uf,opt_extract_without_path,opt_overwrite,password)
476
+static int do_extract(uf,opt_extract_without_path,opt_overwrite,password)
476477
unzFile uf;
477478
int opt_extract_without_path;
478479
int opt_overwrite;
479480
const char* password;
480481
{
481482
uLong i;
482483
unz_global_info64 gi;
483484
int err;
484
- FILE* fout=NULL;
485485
486486
err = unzGetGlobalInfo64(uf,&gi);
487487
if (err!=UNZ_OK)
488488
printf("error %d with zipfile in unzGetGlobalInfo \n",err);
489489
@@ -506,18 +506,17 @@
506506
}
507507
508508
return 0;
509509
}
510510
511
-int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password)
511
+static int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password)
512512
unzFile uf;
513513
const char* filename;
514514
int opt_extract_without_path;
515515
int opt_overwrite;
516516
const char* password;
517517
{
518
- int err = UNZ_OK;
519518
if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)
520519
{
521520
printf("file %s not found in the zipfile\n",filename);
522521
return 2;
523522
}
524523
--- compat/zlib/contrib/minizip/miniunz.c
+++ compat/zlib/contrib/minizip/miniunz.c
@@ -43,10 +43,11 @@
43 #include <stdlib.h>
44 #include <string.h>
45 #include <time.h>
46 #include <errno.h>
47 #include <fcntl.h>
 
48
49 #ifdef _WIN32
50 # include <direct.h>
51 # include <io.h>
52 #else
@@ -78,11 +79,11 @@
78
79 /* change_file_date : change the date/time of a file
80 filename : the filename of the file where date/time must be modified
81 dosdate : the new date at the MSDos format (4 bytes)
82 tmu_date : the SAME new date at the tm_unz format */
83 void change_file_date(filename,dosdate,tmu_date)
84 const char *filename;
85 uLong dosdate;
86 tm_unz tmu_date;
87 {
88 #ifdef _WIN32
@@ -95,11 +96,12 @@
95 DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal);
96 LocalFileTimeToFileTime(&ftLocal,&ftm);
97 SetFileTime(hFile,&ftm,&ftLastAcc,&ftm);
98 CloseHandle(hFile);
99 #else
100 #ifdef unix || __APPLE__
 
101 struct utimbuf ut;
102 struct tm newdate;
103 newdate.tm_sec = tmu_date.tm_sec;
104 newdate.tm_min=tmu_date.tm_min;
105 newdate.tm_hour=tmu_date.tm_hour;
@@ -119,11 +121,11 @@
119
120
121 /* mymkdir and change_file_date are not 100 % portable
122 As I don't know well Unix, I wait feedback for the unix portion */
123
124 int mymkdir(dirname)
125 const char* dirname;
126 {
127 int ret=0;
128 #ifdef _WIN32
129 ret = _mkdir(dirname);
@@ -133,18 +135,18 @@
133 ret = mkdir (dirname,0775);
134 #endif
135 return ret;
136 }
137
138 int makedir (newdir)
139 char *newdir;
140 {
141 char *buffer ;
142 char *p;
143 int len = (int)strlen(newdir);
144
145 if (len <= 0)
146 return 0;
147
148 buffer = (char*)malloc(len+1);
149 if (buffer==NULL)
150 {
@@ -183,17 +185,17 @@
183 }
184 free(buffer);
185 return 1;
186 }
187
188 void do_banner()
189 {
190 printf("MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\n");
191 printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n");
192 }
193
194 void do_help()
195 {
196 printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\n\n" \
197 " -e Extract without pathname (junk paths)\n" \
198 " -x Extract with pathname\n" \
199 " -v list files\n" \
@@ -201,11 +203,11 @@
201 " -d directory to extract into\n" \
202 " -o overwrite files without prompting\n" \
203 " -p extract crypted file using password\n\n");
204 }
205
206 void Display64BitsSize(ZPOS64_T n, int size_char)
207 {
208 /* to avoid compatibility problem , we do here the conversion */
209 char number[21];
210 int offset=19;
211 int pos_string = 19;
@@ -229,11 +231,11 @@
229 }
230
231 printf("%s",&number[pos_string]);
232 }
233
234 int do_list(uf)
235 unzFile uf;
236 {
237 uLong i;
238 unz_global_info64 gi;
239 int err;
@@ -307,11 +309,11 @@
307
308 return 0;
309 }
310
311
312 int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
313 unzFile uf;
314 const int* popt_extract_without_path;
315 int* popt_overwrite;
316 const char* password;
317 {
@@ -322,11 +324,10 @@
322 FILE *fout=NULL;
323 void* buf;
324 uInt size_buf;
325
326 unz_file_info64 file_info;
327 uLong ratio=0;
328 err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
329
330 if (err!=UNZ_OK)
331 {
332 printf("error %d with zipfile in unzGetCurrentFileInfo\n",err);
@@ -437,11 +438,11 @@
437 {
438 printf("error %d with zipfile in unzReadCurrentFile\n",err);
439 break;
440 }
441 if (err>0)
442 if (fwrite(buf,err,1,fout)!=1)
443 {
444 printf("error in writing extracted file\n");
445 err=UNZ_ERRNO;
446 break;
447 }
@@ -470,20 +471,19 @@
470 free(buf);
471 return err;
472 }
473
474
475 int do_extract(uf,opt_extract_without_path,opt_overwrite,password)
476 unzFile uf;
477 int opt_extract_without_path;
478 int opt_overwrite;
479 const char* password;
480 {
481 uLong i;
482 unz_global_info64 gi;
483 int err;
484 FILE* fout=NULL;
485
486 err = unzGetGlobalInfo64(uf,&gi);
487 if (err!=UNZ_OK)
488 printf("error %d with zipfile in unzGetGlobalInfo \n",err);
489
@@ -506,18 +506,17 @@
506 }
507
508 return 0;
509 }
510
511 int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password)
512 unzFile uf;
513 const char* filename;
514 int opt_extract_without_path;
515 int opt_overwrite;
516 const char* password;
517 {
518 int err = UNZ_OK;
519 if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)
520 {
521 printf("file %s not found in the zipfile\n",filename);
522 return 2;
523 }
524
--- compat/zlib/contrib/minizip/miniunz.c
+++ compat/zlib/contrib/minizip/miniunz.c
@@ -43,10 +43,11 @@
43 #include <stdlib.h>
44 #include <string.h>
45 #include <time.h>
46 #include <errno.h>
47 #include <fcntl.h>
48 #include <sys/stat.h>
49
50 #ifdef _WIN32
51 # include <direct.h>
52 # include <io.h>
53 #else
@@ -78,11 +79,11 @@
79
80 /* change_file_date : change the date/time of a file
81 filename : the filename of the file where date/time must be modified
82 dosdate : the new date at the MSDos format (4 bytes)
83 tmu_date : the SAME new date at the tm_unz format */
84 static void change_file_date(filename,dosdate,tmu_date)
85 const char *filename;
86 uLong dosdate;
87 tm_unz tmu_date;
88 {
89 #ifdef _WIN32
@@ -95,11 +96,12 @@
96 DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal);
97 LocalFileTimeToFileTime(&ftLocal,&ftm);
98 SetFileTime(hFile,&ftm,&ftLastAcc,&ftm);
99 CloseHandle(hFile);
100 #else
101 #if defined(unix) || defined(__APPLE__)
102 (void)dosdate;
103 struct utimbuf ut;
104 struct tm newdate;
105 newdate.tm_sec = tmu_date.tm_sec;
106 newdate.tm_min=tmu_date.tm_min;
107 newdate.tm_hour=tmu_date.tm_hour;
@@ -119,11 +121,11 @@
121
122
123 /* mymkdir and change_file_date are not 100 % portable
124 As I don't know well Unix, I wait feedback for the unix portion */
125
126 static int mymkdir(dirname)
127 const char* dirname;
128 {
129 int ret=0;
130 #ifdef _WIN32
131 ret = _mkdir(dirname);
@@ -133,18 +135,18 @@
135 ret = mkdir (dirname,0775);
136 #endif
137 return ret;
138 }
139
140 static int makedir (newdir)
141 const char *newdir;
142 {
143 char *buffer ;
144 char *p;
145 size_t len = strlen(newdir);
146
147 if (len == 0)
148 return 0;
149
150 buffer = (char*)malloc(len+1);
151 if (buffer==NULL)
152 {
@@ -183,17 +185,17 @@
185 }
186 free(buffer);
187 return 1;
188 }
189
190 static void do_banner()
191 {
192 printf("MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\n");
193 printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n");
194 }
195
196 static void do_help()
197 {
198 printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\n\n" \
199 " -e Extract without pathname (junk paths)\n" \
200 " -x Extract with pathname\n" \
201 " -v list files\n" \
@@ -201,11 +203,11 @@
203 " -d directory to extract into\n" \
204 " -o overwrite files without prompting\n" \
205 " -p extract crypted file using password\n\n");
206 }
207
208 static void Display64BitsSize(ZPOS64_T n, int size_char)
209 {
210 /* to avoid compatibility problem , we do here the conversion */
211 char number[21];
212 int offset=19;
213 int pos_string = 19;
@@ -229,11 +231,11 @@
231 }
232
233 printf("%s",&number[pos_string]);
234 }
235
236 static int do_list(uf)
237 unzFile uf;
238 {
239 uLong i;
240 unz_global_info64 gi;
241 int err;
@@ -307,11 +309,11 @@
309
310 return 0;
311 }
312
313
314 static int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
315 unzFile uf;
316 const int* popt_extract_without_path;
317 int* popt_overwrite;
318 const char* password;
319 {
@@ -322,11 +324,10 @@
324 FILE *fout=NULL;
325 void* buf;
326 uInt size_buf;
327
328 unz_file_info64 file_info;
 
329 err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
330
331 if (err!=UNZ_OK)
332 {
333 printf("error %d with zipfile in unzGetCurrentFileInfo\n",err);
@@ -437,11 +438,11 @@
438 {
439 printf("error %d with zipfile in unzReadCurrentFile\n",err);
440 break;
441 }
442 if (err>0)
443 if (fwrite(buf,(unsigned)err,1,fout)!=1)
444 {
445 printf("error in writing extracted file\n");
446 err=UNZ_ERRNO;
447 break;
448 }
@@ -470,20 +471,19 @@
471 free(buf);
472 return err;
473 }
474
475
476 static int do_extract(uf,opt_extract_without_path,opt_overwrite,password)
477 unzFile uf;
478 int opt_extract_without_path;
479 int opt_overwrite;
480 const char* password;
481 {
482 uLong i;
483 unz_global_info64 gi;
484 int err;
 
485
486 err = unzGetGlobalInfo64(uf,&gi);
487 if (err!=UNZ_OK)
488 printf("error %d with zipfile in unzGetGlobalInfo \n",err);
489
@@ -506,18 +506,17 @@
506 }
507
508 return 0;
509 }
510
511 static int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password)
512 unzFile uf;
513 const char* filename;
514 int opt_extract_without_path;
515 int opt_overwrite;
516 const char* password;
517 {
 
518 if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)
519 {
520 printf("file %s not found in the zipfile\n",filename);
521 return 2;
522 }
523
--- compat/zlib/contrib/minizip/minizip.c
+++ compat/zlib/contrib/minizip/minizip.c
@@ -69,12 +69,12 @@
6969
7070
#define WRITEBUFFERSIZE (16384)
7171
#define MAXFILENAME (256)
7272
7373
#ifdef _WIN32
74
-uLong filetime(f, tmzip, dt)
75
- char *f; /* name of file to get info on */
74
+static int filetime(f, tmzip, dt)
75
+ const char *f; /* name of file to get info on */
7676
tm_zip *tmzip; /* return value: access, modific. and creation times */
7777
uLong *dt; /* dostime */
7878
{
7979
int ret = 0;
8080
{
@@ -92,25 +92,26 @@
9292
}
9393
}
9494
return ret;
9595
}
9696
#else
97
-#ifdef unix || __APPLE__
98
-uLong filetime(f, tmzip, dt)
99
- char *f; /* name of file to get info on */
97
+#if defined(unix) || defined(__APPLE__)
98
+static int filetime(f, tmzip, dt)
99
+ const char *f; /* name of file to get info on */
100100
tm_zip *tmzip; /* return value: access, modific. and creation times */
101101
uLong *dt; /* dostime */
102102
{
103
+ (void)dt;
103104
int ret=0;
104105
struct stat s; /* results of stat() */
105106
struct tm* filedate;
106107
time_t tm_t=0;
107108
108109
if (strcmp(f,"-")!=0)
109110
{
110111
char name[MAXFILENAME+1];
111
- int len = strlen(f);
112
+ size_t len = strlen(f);
112113
if (len > MAXFILENAME)
113114
len = MAXFILENAME;
114115
115116
strncpy(name, f,MAXFILENAME-1);
116117
/* strncpy doesnt append the trailing NULL, of the string is too long. */
@@ -136,11 +137,11 @@
136137
137138
return ret;
138139
}
139140
#else
140141
uLong filetime(f, tmzip, dt)
141
- char *f; /* name of file to get info on */
142
+ const char *f; /* name of file to get info on */
142143
tm_zip *tmzip; /* return value: access, modific. and creation times */
143144
uLong *dt; /* dostime */
144145
{
145146
return 0;
146147
}
@@ -148,11 +149,11 @@
148149
#endif
149150
150151
151152
152153
153
-int check_exist_file(filename)
154
+static int check_exist_file(filename)
154155
const char* filename;
155156
{
156157
FILE* ftestexist;
157158
int ret = 1;
158159
ftestexist = FOPEN_FUNC(filename,"rb");
@@ -161,17 +162,17 @@
161162
else
162163
fclose(ftestexist);
163164
return ret;
164165
}
165166
166
-void do_banner()
167
+static void do_banner()
167168
{
168169
printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n");
169170
printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n");
170171
}
171172
172
-void do_help()
173
+static void do_help()
173174
{
174175
printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \
175176
" -o Overwrite existing file.zip\n" \
176177
" -a Append to existing file.zip\n" \
177178
" -0 Store only\n" \
@@ -180,11 +181,11 @@
180181
" -j exclude path. store only the file name.\n\n");
181182
}
182183
183184
/* calculate the CRC32 of a file,
184185
because to encrypt a file, we need known the CRC32 of the file before */
185
-int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc)
186
+static int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc)
186187
{
187188
unsigned long calculate_crc=0;
188189
int err=ZIP_OK;
189190
FILE * fin = FOPEN_FUNC(filenameinzip,"rb");
190191
@@ -197,20 +198,20 @@
197198
198199
if (err == ZIP_OK)
199200
do
200201
{
201202
err = ZIP_OK;
202
- size_read = (int)fread(buf,1,size_buf,fin);
203
+ size_read = fread(buf,1,size_buf,fin);
203204
if (size_read < size_buf)
204205
if (feof(fin)==0)
205206
{
206207
printf("error in reading %s\n",filenameinzip);
207208
err = ZIP_ERRNO;
208209
}
209210
210211
if (size_read>0)
211
- calculate_crc = crc32(calculate_crc,buf,size_read);
212
+ calculate_crc = crc32_z(calculate_crc,buf,size_read);
212213
total_read += size_read;
213214
214215
} while ((err == ZIP_OK) && (size_read>0));
215216
216217
if (fin)
@@ -219,20 +220,20 @@
219220
*result_crc=calculate_crc;
220221
printf("file %s crc %lx\n", filenameinzip, calculate_crc);
221222
return err;
222223
}
223224
224
-int isLargeFile(const char* filename)
225
+static int isLargeFile(const char* filename)
225226
{
226227
int largeFile = 0;
227228
ZPOS64_T pos = 0;
228229
FILE* pFile = FOPEN_FUNC(filename, "rb");
229230
230231
if(pFile != NULL)
231232
{
232
- int n = FSEEKO_FUNC(pFile, 0, SEEK_END);
233
- pos = FTELLO_FUNC(pFile);
233
+ FSEEKO_FUNC(pFile, 0, SEEK_END);
234
+ pos = (ZPOS64_T)FTELLO_FUNC(pFile);
234235
235236
printf("File : %s is %lld bytes\n", filename, pos);
236237
237238
if(pos >= 0xffffffff)
238239
largeFile = 1;
@@ -253,11 +254,11 @@
253254
int opt_exclude_path=0;
254255
int zipfilenamearg = 0;
255256
char filename_try[MAXFILENAME+16];
256257
int zipok;
257258
int err=0;
258
- int size_buf=0;
259
+ size_t size_buf=0;
259260
void* buf=NULL;
260261
const char* password=NULL;
261262
262263
263264
do_banner();
@@ -394,11 +395,11 @@
394395
(argv[i][1]=='p') || (argv[i][1]=='P') ||
395396
((argv[i][1]>='0') || (argv[i][1]<='9'))) &&
396397
(strlen(argv[i]) == 2)))
397398
{
398399
FILE * fin;
399
- int size_read;
400
+ size_t size_read;
400401
const char* filenameinzip = argv[i];
401402
const char *savefilenameinzip;
402403
zip_fileinfo zi;
403404
unsigned long crcFile=0;
404405
int zip64 = 0;
@@ -470,21 +471,21 @@
470471
471472
if (err == ZIP_OK)
472473
do
473474
{
474475
err = ZIP_OK;
475
- size_read = (int)fread(buf,1,size_buf,fin);
476
+ size_read = fread(buf,1,size_buf,fin);
476477
if (size_read < size_buf)
477478
if (feof(fin)==0)
478479
{
479480
printf("error in reading %s\n",filenameinzip);
480481
err = ZIP_ERRNO;
481482
}
482483
483484
if (size_read>0)
484485
{
485
- err = zipWriteInFileInZip (zf,buf,size_read);
486
+ err = zipWriteInFileInZip (zf,buf,(unsigned)size_read);
486487
if (err<0)
487488
{
488489
printf("error in writing %s in the zipfile\n",
489490
filenameinzip);
490491
}
491492
--- compat/zlib/contrib/minizip/minizip.c
+++ compat/zlib/contrib/minizip/minizip.c
@@ -69,12 +69,12 @@
69
70 #define WRITEBUFFERSIZE (16384)
71 #define MAXFILENAME (256)
72
73 #ifdef _WIN32
74 uLong filetime(f, tmzip, dt)
75 char *f; /* name of file to get info on */
76 tm_zip *tmzip; /* return value: access, modific. and creation times */
77 uLong *dt; /* dostime */
78 {
79 int ret = 0;
80 {
@@ -92,25 +92,26 @@
92 }
93 }
94 return ret;
95 }
96 #else
97 #ifdef unix || __APPLE__
98 uLong filetime(f, tmzip, dt)
99 char *f; /* name of file to get info on */
100 tm_zip *tmzip; /* return value: access, modific. and creation times */
101 uLong *dt; /* dostime */
102 {
 
103 int ret=0;
104 struct stat s; /* results of stat() */
105 struct tm* filedate;
106 time_t tm_t=0;
107
108 if (strcmp(f,"-")!=0)
109 {
110 char name[MAXFILENAME+1];
111 int len = strlen(f);
112 if (len > MAXFILENAME)
113 len = MAXFILENAME;
114
115 strncpy(name, f,MAXFILENAME-1);
116 /* strncpy doesnt append the trailing NULL, of the string is too long. */
@@ -136,11 +137,11 @@
136
137 return ret;
138 }
139 #else
140 uLong filetime(f, tmzip, dt)
141 char *f; /* name of file to get info on */
142 tm_zip *tmzip; /* return value: access, modific. and creation times */
143 uLong *dt; /* dostime */
144 {
145 return 0;
146 }
@@ -148,11 +149,11 @@
148 #endif
149
150
151
152
153 int check_exist_file(filename)
154 const char* filename;
155 {
156 FILE* ftestexist;
157 int ret = 1;
158 ftestexist = FOPEN_FUNC(filename,"rb");
@@ -161,17 +162,17 @@
161 else
162 fclose(ftestexist);
163 return ret;
164 }
165
166 void do_banner()
167 {
168 printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n");
169 printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n");
170 }
171
172 void do_help()
173 {
174 printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \
175 " -o Overwrite existing file.zip\n" \
176 " -a Append to existing file.zip\n" \
177 " -0 Store only\n" \
@@ -180,11 +181,11 @@
180 " -j exclude path. store only the file name.\n\n");
181 }
182
183 /* calculate the CRC32 of a file,
184 because to encrypt a file, we need known the CRC32 of the file before */
185 int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc)
186 {
187 unsigned long calculate_crc=0;
188 int err=ZIP_OK;
189 FILE * fin = FOPEN_FUNC(filenameinzip,"rb");
190
@@ -197,20 +198,20 @@
197
198 if (err == ZIP_OK)
199 do
200 {
201 err = ZIP_OK;
202 size_read = (int)fread(buf,1,size_buf,fin);
203 if (size_read < size_buf)
204 if (feof(fin)==0)
205 {
206 printf("error in reading %s\n",filenameinzip);
207 err = ZIP_ERRNO;
208 }
209
210 if (size_read>0)
211 calculate_crc = crc32(calculate_crc,buf,size_read);
212 total_read += size_read;
213
214 } while ((err == ZIP_OK) && (size_read>0));
215
216 if (fin)
@@ -219,20 +220,20 @@
219 *result_crc=calculate_crc;
220 printf("file %s crc %lx\n", filenameinzip, calculate_crc);
221 return err;
222 }
223
224 int isLargeFile(const char* filename)
225 {
226 int largeFile = 0;
227 ZPOS64_T pos = 0;
228 FILE* pFile = FOPEN_FUNC(filename, "rb");
229
230 if(pFile != NULL)
231 {
232 int n = FSEEKO_FUNC(pFile, 0, SEEK_END);
233 pos = FTELLO_FUNC(pFile);
234
235 printf("File : %s is %lld bytes\n", filename, pos);
236
237 if(pos >= 0xffffffff)
238 largeFile = 1;
@@ -253,11 +254,11 @@
253 int opt_exclude_path=0;
254 int zipfilenamearg = 0;
255 char filename_try[MAXFILENAME+16];
256 int zipok;
257 int err=0;
258 int size_buf=0;
259 void* buf=NULL;
260 const char* password=NULL;
261
262
263 do_banner();
@@ -394,11 +395,11 @@
394 (argv[i][1]=='p') || (argv[i][1]=='P') ||
395 ((argv[i][1]>='0') || (argv[i][1]<='9'))) &&
396 (strlen(argv[i]) == 2)))
397 {
398 FILE * fin;
399 int size_read;
400 const char* filenameinzip = argv[i];
401 const char *savefilenameinzip;
402 zip_fileinfo zi;
403 unsigned long crcFile=0;
404 int zip64 = 0;
@@ -470,21 +471,21 @@
470
471 if (err == ZIP_OK)
472 do
473 {
474 err = ZIP_OK;
475 size_read = (int)fread(buf,1,size_buf,fin);
476 if (size_read < size_buf)
477 if (feof(fin)==0)
478 {
479 printf("error in reading %s\n",filenameinzip);
480 err = ZIP_ERRNO;
481 }
482
483 if (size_read>0)
484 {
485 err = zipWriteInFileInZip (zf,buf,size_read);
486 if (err<0)
487 {
488 printf("error in writing %s in the zipfile\n",
489 filenameinzip);
490 }
491
--- compat/zlib/contrib/minizip/minizip.c
+++ compat/zlib/contrib/minizip/minizip.c
@@ -69,12 +69,12 @@
69
70 #define WRITEBUFFERSIZE (16384)
71 #define MAXFILENAME (256)
72
73 #ifdef _WIN32
74 static int filetime(f, tmzip, dt)
75 const char *f; /* name of file to get info on */
76 tm_zip *tmzip; /* return value: access, modific. and creation times */
77 uLong *dt; /* dostime */
78 {
79 int ret = 0;
80 {
@@ -92,25 +92,26 @@
92 }
93 }
94 return ret;
95 }
96 #else
97 #if defined(unix) || defined(__APPLE__)
98 static int filetime(f, tmzip, dt)
99 const char *f; /* name of file to get info on */
100 tm_zip *tmzip; /* return value: access, modific. and creation times */
101 uLong *dt; /* dostime */
102 {
103 (void)dt;
104 int ret=0;
105 struct stat s; /* results of stat() */
106 struct tm* filedate;
107 time_t tm_t=0;
108
109 if (strcmp(f,"-")!=0)
110 {
111 char name[MAXFILENAME+1];
112 size_t len = strlen(f);
113 if (len > MAXFILENAME)
114 len = MAXFILENAME;
115
116 strncpy(name, f,MAXFILENAME-1);
117 /* strncpy doesnt append the trailing NULL, of the string is too long. */
@@ -136,11 +137,11 @@
137
138 return ret;
139 }
140 #else
141 uLong filetime(f, tmzip, dt)
142 const char *f; /* name of file to get info on */
143 tm_zip *tmzip; /* return value: access, modific. and creation times */
144 uLong *dt; /* dostime */
145 {
146 return 0;
147 }
@@ -148,11 +149,11 @@
149 #endif
150
151
152
153
154 static int check_exist_file(filename)
155 const char* filename;
156 {
157 FILE* ftestexist;
158 int ret = 1;
159 ftestexist = FOPEN_FUNC(filename,"rb");
@@ -161,17 +162,17 @@
162 else
163 fclose(ftestexist);
164 return ret;
165 }
166
167 static void do_banner()
168 {
169 printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n");
170 printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n");
171 }
172
173 static void do_help()
174 {
175 printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \
176 " -o Overwrite existing file.zip\n" \
177 " -a Append to existing file.zip\n" \
178 " -0 Store only\n" \
@@ -180,11 +181,11 @@
181 " -j exclude path. store only the file name.\n\n");
182 }
183
184 /* calculate the CRC32 of a file,
185 because to encrypt a file, we need known the CRC32 of the file before */
186 static int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc)
187 {
188 unsigned long calculate_crc=0;
189 int err=ZIP_OK;
190 FILE * fin = FOPEN_FUNC(filenameinzip,"rb");
191
@@ -197,20 +198,20 @@
198
199 if (err == ZIP_OK)
200 do
201 {
202 err = ZIP_OK;
203 size_read = fread(buf,1,size_buf,fin);
204 if (size_read < size_buf)
205 if (feof(fin)==0)
206 {
207 printf("error in reading %s\n",filenameinzip);
208 err = ZIP_ERRNO;
209 }
210
211 if (size_read>0)
212 calculate_crc = crc32_z(calculate_crc,buf,size_read);
213 total_read += size_read;
214
215 } while ((err == ZIP_OK) && (size_read>0));
216
217 if (fin)
@@ -219,20 +220,20 @@
220 *result_crc=calculate_crc;
221 printf("file %s crc %lx\n", filenameinzip, calculate_crc);
222 return err;
223 }
224
225 static int isLargeFile(const char* filename)
226 {
227 int largeFile = 0;
228 ZPOS64_T pos = 0;
229 FILE* pFile = FOPEN_FUNC(filename, "rb");
230
231 if(pFile != NULL)
232 {
233 FSEEKO_FUNC(pFile, 0, SEEK_END);
234 pos = (ZPOS64_T)FTELLO_FUNC(pFile);
235
236 printf("File : %s is %lld bytes\n", filename, pos);
237
238 if(pos >= 0xffffffff)
239 largeFile = 1;
@@ -253,11 +254,11 @@
254 int opt_exclude_path=0;
255 int zipfilenamearg = 0;
256 char filename_try[MAXFILENAME+16];
257 int zipok;
258 int err=0;
259 size_t size_buf=0;
260 void* buf=NULL;
261 const char* password=NULL;
262
263
264 do_banner();
@@ -394,11 +395,11 @@
395 (argv[i][1]=='p') || (argv[i][1]=='P') ||
396 ((argv[i][1]>='0') || (argv[i][1]<='9'))) &&
397 (strlen(argv[i]) == 2)))
398 {
399 FILE * fin;
400 size_t size_read;
401 const char* filenameinzip = argv[i];
402 const char *savefilenameinzip;
403 zip_fileinfo zi;
404 unsigned long crcFile=0;
405 int zip64 = 0;
@@ -470,21 +471,21 @@
471
472 if (err == ZIP_OK)
473 do
474 {
475 err = ZIP_OK;
476 size_read = fread(buf,1,size_buf,fin);
477 if (size_read < size_buf)
478 if (feof(fin)==0)
479 {
480 printf("error in reading %s\n",filenameinzip);
481 err = ZIP_ERRNO;
482 }
483
484 if (size_read>0)
485 {
486 err = zipWriteInFileInZip (zf,buf,(unsigned)size_read);
487 if (err<0)
488 {
489 printf("error in writing %s in the zipfile\n",
490 filenameinzip);
491 }
492
--- compat/zlib/contrib/minizip/unzip.c
+++ compat/zlib/contrib/minizip/unzip.c
@@ -453,11 +453,11 @@
453453
454454
for (i=(int)uReadSize-3; (i--)>0;)
455455
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
456456
((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
457457
{
458
- uPosFound = uReadPos+i;
458
+ uPosFound = uReadPos+(unsigned)i;
459459
break;
460460
}
461461
462462
if (uPosFound!=0)
463463
break;
@@ -521,11 +521,11 @@
521521
522522
for (i=(int)uReadSize-3; (i--)>0;)
523523
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
524524
((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
525525
{
526
- uPosFound = uReadPos+i;
526
+ uPosFound = uReadPos+(unsigned)i;
527527
break;
528528
}
529529
530530
if (uPosFound!=0)
531531
break;
@@ -851,17 +851,17 @@
851851
*/
852852
local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm)
853853
{
854854
ZPOS64_T uDate;
855855
uDate = (ZPOS64_T)(ulDosDate>>16);
856
- ptm->tm_mday = (uInt)(uDate&0x1f) ;
857
- ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ;
858
- ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
856
+ ptm->tm_mday = (int)(uDate&0x1f) ;
857
+ ptm->tm_mon = (int)((((uDate)&0x1E0)/0x20)-1) ;
858
+ ptm->tm_year = (int)(((uDate&0x0FE00)/0x0200)+1980) ;
859859
860
- ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
861
- ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ;
862
- ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ;
860
+ ptm->tm_hour = (int) ((ulDosDate &0xF800)/0x800);
861
+ ptm->tm_min = (int) ((ulDosDate&0x7E0)/0x20) ;
862
+ ptm->tm_sec = (int) (2*(ulDosDate&0x1f)) ;
863863
}
864864
865865
/*
866866
Get Info about the current file in the zipfile, with internal only info
867867
*/
@@ -991,11 +991,11 @@
991991
else
992992
uSizeRead = extraFieldBufferSize;
993993
994994
if (lSeek!=0)
995995
{
996
- if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
996
+ if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
997997
lSeek=0;
998998
else
999999
err=UNZ_ERRNO;
10001000
}
10011001
@@ -1016,11 +1016,11 @@
10161016
// since lSeek now points to after the extra field we need to move back
10171017
lSeek -= file_info.size_file_extra;
10181018
10191019
if (lSeek!=0)
10201020
{
1021
- if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
1021
+ if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
10221022
lSeek=0;
10231023
else
10241024
err=UNZ_ERRNO;
10251025
}
10261026
@@ -1088,11 +1088,11 @@
10881088
else
10891089
uSizeRead = commentBufferSize;
10901090
10911091
if (lSeek!=0)
10921092
{
1093
- if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
1093
+ if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
10941094
lSeek=0;
10951095
else
10961096
err=UNZ_ERRNO;
10971097
}
10981098
@@ -1765,11 +1765,11 @@
17651765
{
17661766
uInt uDoCopy,i ;
17671767
17681768
if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
17691769
(pfile_in_zip_read_info->rest_read_compressed == 0))
1770
- return (iRead==0) ? UNZ_EOF : iRead;
1770
+ return (iRead==0) ? UNZ_EOF : (int)iRead;
17711771
17721772
if (pfile_in_zip_read_info->stream.avail_out <
17731773
pfile_in_zip_read_info->stream.avail_in)
17741774
uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
17751775
else
@@ -1855,10 +1855,13 @@
18551855
18561856
if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL))
18571857
err = Z_DATA_ERROR;
18581858
18591859
uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
1860
+ /* Detect overflow, because z_stream.total_out is uLong (32 bits) */
1861
+ if (uTotalOutAfter<uTotalOutBefore)
1862
+ uTotalOutAfter += 1LL << 32; /* Add maximum value of uLong + 1 */
18601863
uOutThis = uTotalOutAfter-uTotalOutBefore;
18611864
18621865
pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
18631866
18641867
pfile_in_zip_read_info->crc32 =
@@ -1869,18 +1872,18 @@
18691872
uOutThis;
18701873
18711874
iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
18721875
18731876
if (err==Z_STREAM_END)
1874
- return (iRead==0) ? UNZ_EOF : iRead;
1877
+ return (iRead==0) ? UNZ_EOF : (int)iRead;
18751878
if (err!=Z_OK)
18761879
break;
18771880
}
18781881
}
18791882
18801883
if (err==Z_OK)
1881
- return iRead;
1884
+ return (int)iRead;
18821885
return err;
18831886
}
18841887
18851888
18861889
/*
18871890
--- compat/zlib/contrib/minizip/unzip.c
+++ compat/zlib/contrib/minizip/unzip.c
@@ -453,11 +453,11 @@
453
454 for (i=(int)uReadSize-3; (i--)>0;)
455 if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
456 ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
457 {
458 uPosFound = uReadPos+i;
459 break;
460 }
461
462 if (uPosFound!=0)
463 break;
@@ -521,11 +521,11 @@
521
522 for (i=(int)uReadSize-3; (i--)>0;)
523 if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
524 ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
525 {
526 uPosFound = uReadPos+i;
527 break;
528 }
529
530 if (uPosFound!=0)
531 break;
@@ -851,17 +851,17 @@
851 */
852 local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm)
853 {
854 ZPOS64_T uDate;
855 uDate = (ZPOS64_T)(ulDosDate>>16);
856 ptm->tm_mday = (uInt)(uDate&0x1f) ;
857 ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ;
858 ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
859
860 ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
861 ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ;
862 ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ;
863 }
864
865 /*
866 Get Info about the current file in the zipfile, with internal only info
867 */
@@ -991,11 +991,11 @@
991 else
992 uSizeRead = extraFieldBufferSize;
993
994 if (lSeek!=0)
995 {
996 if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
997 lSeek=0;
998 else
999 err=UNZ_ERRNO;
1000 }
1001
@@ -1016,11 +1016,11 @@
1016 // since lSeek now points to after the extra field we need to move back
1017 lSeek -= file_info.size_file_extra;
1018
1019 if (lSeek!=0)
1020 {
1021 if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
1022 lSeek=0;
1023 else
1024 err=UNZ_ERRNO;
1025 }
1026
@@ -1088,11 +1088,11 @@
1088 else
1089 uSizeRead = commentBufferSize;
1090
1091 if (lSeek!=0)
1092 {
1093 if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
1094 lSeek=0;
1095 else
1096 err=UNZ_ERRNO;
1097 }
1098
@@ -1765,11 +1765,11 @@
1765 {
1766 uInt uDoCopy,i ;
1767
1768 if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
1769 (pfile_in_zip_read_info->rest_read_compressed == 0))
1770 return (iRead==0) ? UNZ_EOF : iRead;
1771
1772 if (pfile_in_zip_read_info->stream.avail_out <
1773 pfile_in_zip_read_info->stream.avail_in)
1774 uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
1775 else
@@ -1855,10 +1855,13 @@
1855
1856 if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL))
1857 err = Z_DATA_ERROR;
1858
1859 uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
 
 
 
1860 uOutThis = uTotalOutAfter-uTotalOutBefore;
1861
1862 pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
1863
1864 pfile_in_zip_read_info->crc32 =
@@ -1869,18 +1872,18 @@
1869 uOutThis;
1870
1871 iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
1872
1873 if (err==Z_STREAM_END)
1874 return (iRead==0) ? UNZ_EOF : iRead;
1875 if (err!=Z_OK)
1876 break;
1877 }
1878 }
1879
1880 if (err==Z_OK)
1881 return iRead;
1882 return err;
1883 }
1884
1885
1886 /*
1887
--- compat/zlib/contrib/minizip/unzip.c
+++ compat/zlib/contrib/minizip/unzip.c
@@ -453,11 +453,11 @@
453
454 for (i=(int)uReadSize-3; (i--)>0;)
455 if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
456 ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
457 {
458 uPosFound = uReadPos+(unsigned)i;
459 break;
460 }
461
462 if (uPosFound!=0)
463 break;
@@ -521,11 +521,11 @@
521
522 for (i=(int)uReadSize-3; (i--)>0;)
523 if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
524 ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
525 {
526 uPosFound = uReadPos+(unsigned)i;
527 break;
528 }
529
530 if (uPosFound!=0)
531 break;
@@ -851,17 +851,17 @@
851 */
852 local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm)
853 {
854 ZPOS64_T uDate;
855 uDate = (ZPOS64_T)(ulDosDate>>16);
856 ptm->tm_mday = (int)(uDate&0x1f) ;
857 ptm->tm_mon = (int)((((uDate)&0x1E0)/0x20)-1) ;
858 ptm->tm_year = (int)(((uDate&0x0FE00)/0x0200)+1980) ;
859
860 ptm->tm_hour = (int) ((ulDosDate &0xF800)/0x800);
861 ptm->tm_min = (int) ((ulDosDate&0x7E0)/0x20) ;
862 ptm->tm_sec = (int) (2*(ulDosDate&0x1f)) ;
863 }
864
865 /*
866 Get Info about the current file in the zipfile, with internal only info
867 */
@@ -991,11 +991,11 @@
991 else
992 uSizeRead = extraFieldBufferSize;
993
994 if (lSeek!=0)
995 {
996 if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
997 lSeek=0;
998 else
999 err=UNZ_ERRNO;
1000 }
1001
@@ -1016,11 +1016,11 @@
1016 // since lSeek now points to after the extra field we need to move back
1017 lSeek -= file_info.size_file_extra;
1018
1019 if (lSeek!=0)
1020 {
1021 if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
1022 lSeek=0;
1023 else
1024 err=UNZ_ERRNO;
1025 }
1026
@@ -1088,11 +1088,11 @@
1088 else
1089 uSizeRead = commentBufferSize;
1090
1091 if (lSeek!=0)
1092 {
1093 if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
1094 lSeek=0;
1095 else
1096 err=UNZ_ERRNO;
1097 }
1098
@@ -1765,11 +1765,11 @@
1765 {
1766 uInt uDoCopy,i ;
1767
1768 if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
1769 (pfile_in_zip_read_info->rest_read_compressed == 0))
1770 return (iRead==0) ? UNZ_EOF : (int)iRead;
1771
1772 if (pfile_in_zip_read_info->stream.avail_out <
1773 pfile_in_zip_read_info->stream.avail_in)
1774 uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
1775 else
@@ -1855,10 +1855,13 @@
1855
1856 if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL))
1857 err = Z_DATA_ERROR;
1858
1859 uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
1860 /* Detect overflow, because z_stream.total_out is uLong (32 bits) */
1861 if (uTotalOutAfter<uTotalOutBefore)
1862 uTotalOutAfter += 1LL << 32; /* Add maximum value of uLong + 1 */
1863 uOutThis = uTotalOutAfter-uTotalOutBefore;
1864
1865 pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
1866
1867 pfile_in_zip_read_info->crc32 =
@@ -1869,18 +1872,18 @@
1872 uOutThis;
1873
1874 iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
1875
1876 if (err==Z_STREAM_END)
1877 return (iRead==0) ? UNZ_EOF : (int)iRead;
1878 if (err!=Z_OK)
1879 break;
1880 }
1881 }
1882
1883 if (err==Z_OK)
1884 return (int)iRead;
1885 return err;
1886 }
1887
1888
1889 /*
1890
--- compat/zlib/contrib/minizip/unzip.h
+++ compat/zlib/contrib/minizip/unzip.h
@@ -81,16 +81,16 @@
8181
#define UNZ_CRCERROR (-105)
8282
8383
/* tm_unz contain date/time info */
8484
typedef struct tm_unz_s
8585
{
86
- uInt tm_sec; /* seconds after the minute - [0,59] */
87
- uInt tm_min; /* minutes after the hour - [0,59] */
88
- uInt tm_hour; /* hours since midnight - [0,23] */
89
- uInt tm_mday; /* day of the month - [1,31] */
90
- uInt tm_mon; /* months since January - [0,11] */
91
- uInt tm_year; /* years - [1980..2044] */
86
+ int tm_sec; /* seconds after the minute - [0,59] */
87
+ int tm_min; /* minutes after the hour - [0,59] */
88
+ int tm_hour; /* hours since midnight - [0,23] */
89
+ int tm_mday; /* day of the month - [1,31] */
90
+ int tm_mon; /* months since January - [0,11] */
91
+ int tm_year; /* years - [1980..2044] */
9292
} tm_unz;
9393
9494
/* unz_global_info structure contain global data about the ZIPfile
9595
These data comes from the end of central dir */
9696
typedef struct unz_global_info64_s
9797
--- compat/zlib/contrib/minizip/unzip.h
+++ compat/zlib/contrib/minizip/unzip.h
@@ -81,16 +81,16 @@
81 #define UNZ_CRCERROR (-105)
82
83 /* tm_unz contain date/time info */
84 typedef struct tm_unz_s
85 {
86 uInt tm_sec; /* seconds after the minute - [0,59] */
87 uInt tm_min; /* minutes after the hour - [0,59] */
88 uInt tm_hour; /* hours since midnight - [0,23] */
89 uInt tm_mday; /* day of the month - [1,31] */
90 uInt tm_mon; /* months since January - [0,11] */
91 uInt tm_year; /* years - [1980..2044] */
92 } tm_unz;
93
94 /* unz_global_info structure contain global data about the ZIPfile
95 These data comes from the end of central dir */
96 typedef struct unz_global_info64_s
97
--- compat/zlib/contrib/minizip/unzip.h
+++ compat/zlib/contrib/minizip/unzip.h
@@ -81,16 +81,16 @@
81 #define UNZ_CRCERROR (-105)
82
83 /* tm_unz contain date/time info */
84 typedef struct tm_unz_s
85 {
86 int tm_sec; /* seconds after the minute - [0,59] */
87 int tm_min; /* minutes after the hour - [0,59] */
88 int tm_hour; /* hours since midnight - [0,23] */
89 int tm_mday; /* day of the month - [1,31] */
90 int tm_mon; /* months since January - [0,11] */
91 int tm_year; /* years - [1980..2044] */
92 } tm_unz;
93
94 /* unz_global_info structure contain global data about the ZIPfile
95 These data comes from the end of central dir */
96 typedef struct unz_global_info64_s
97
--- compat/zlib/contrib/minizip/zip.c
+++ compat/zlib/contrib/minizip/zip.c
@@ -156,11 +156,11 @@
156156
ZPOS64_T totalCompressedData;
157157
ZPOS64_T totalUncompressedData;
158158
#ifndef NOCRYPT
159159
unsigned long keys[3]; /* keys defining the pseudo-random sequence */
160160
const z_crc_t* pcrc_32_tab;
161
- int crypt_header_size;
161
+ unsigned crypt_header_size;
162162
#endif
163163
} curfile64_info;
164164
165165
typedef struct
166166
{
@@ -299,11 +299,11 @@
299299
{
300300
buf[n] = 0xff;
301301
}
302302
}
303303
304
- if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte)
304
+ if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,(uLong)nbByte)!=(uLong)nbByte)
305305
return ZIP_ERRNO;
306306
else
307307
return ZIP_OK;
308308
}
309309
@@ -335,12 +335,12 @@
335335
if (year>=1980)
336336
year-=1980;
337337
else if (year>=80)
338338
year-=80;
339339
return
340
- (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) |
341
- ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));
340
+ (uLong) (((uLong)(ptm->tm_mday) + (32 * (uLong)(ptm->tm_mon+1)) + (512 * year)) << 16) |
341
+ (((uLong)ptm->tm_sec/2) + (32 * (uLong)ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));
342342
}
343343
344344
345345
/****************************************************************************/
346346
@@ -520,16 +520,16 @@
520520
521521
for (i=(int)uReadSize-3; (i--)>0;)
522522
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
523523
((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
524524
{
525
- uPosFound = uReadPos+i;
525
+ uPosFound = uReadPos+(unsigned)i;
526526
break;
527527
}
528528
529
- if (uPosFound!=0)
530
- break;
529
+ if (uPosFound!=0)
530
+ break;
531531
}
532532
TRYFREE(buf);
533533
return uPosFound;
534534
}
535535
@@ -584,11 +584,11 @@
584584
for (i=(int)uReadSize-3; (i--)>0;)
585585
{
586586
// Signature "0x07064b50" Zip64 end of central directory locater
587587
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
588588
{
589
- uPosFound = uReadPos+i;
589
+ uPosFound = uReadPos+(unsigned)i;
590590
break;
591591
}
592592
}
593593
594594
if (uPosFound!=0)
@@ -635,11 +635,11 @@
635635
return 0;
636636
637637
return relativeOffset;
638638
}
639639
640
-int LoadCentralDirectoryRecord(zip64_internal* pziinit)
640
+local int LoadCentralDirectoryRecord(zip64_internal* pziinit)
641641
{
642642
int err=ZIP_OK;
643643
ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
644644
645645
ZPOS64_T size_central_dir; /* size of the central directory */
@@ -953,11 +953,11 @@
953953
extern zipFile ZEXPORT zipOpen64 (const void* pathname, int append)
954954
{
955955
return zipOpen3(pathname,append,NULL,NULL);
956956
}
957957
958
-int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local)
958
+local int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local)
959959
{
960960
/* write the local header */
961961
int err;
962962
uInt size_filename = (uInt)strlen(filename);
963963
uInt size_extrafield = size_extrafield_local;
@@ -1032,12 +1032,12 @@
10321032
ZPOS64_T UncompressedSize = 0;
10331033
10341034
// Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file)
10351035
zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream);
10361036
1037
- err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2);
1038
- err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2);
1037
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)HeaderID,2);
1038
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)DataSize,2);
10391039
10401040
err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8);
10411041
err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8);
10421042
}
10431043
@@ -1514,11 +1514,11 @@
15141514
extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_size, uLong crc32)
15151515
{
15161516
zip64_internal* zi;
15171517
ZPOS64_T compressed_size;
15181518
uLong invalidValue = 0xffffffff;
1519
- short datasize = 0;
1519
+ unsigned datasize = 0;
15201520
int err=ZIP_OK;
15211521
15221522
if (file == NULL)
15231523
return ZIP_PARAMERROR;
15241524
zi = (zip64_internal*)file;
@@ -1750,11 +1750,11 @@
17501750
extern int ZEXPORT zipCloseFileInZip (zipFile file)
17511751
{
17521752
return zipCloseFileInZipRaw (file,0,0);
17531753
}
17541754
1755
-int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip)
1755
+local int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip)
17561756
{
17571757
int err = ZIP_OK;
17581758
ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writing_offset;
17591759
17601760
err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4);
@@ -1772,11 +1772,11 @@
17721772
err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4);
17731773
17741774
return err;
17751775
}
17761776
1777
-int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
1777
+local int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
17781778
{
17791779
int err = ZIP_OK;
17801780
17811781
uLong Zip64DataSize = 44;
17821782
@@ -1811,11 +1811,11 @@
18111811
ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writing_offset;
18121812
err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8);
18131813
}
18141814
return err;
18151815
}
1816
-int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
1816
+local int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
18171817
{
18181818
int err = ZIP_OK;
18191819
18201820
/*signature*/
18211821
err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4);
@@ -1859,11 +1859,11 @@
18591859
}
18601860
18611861
return err;
18621862
}
18631863
1864
-int Write_GlobalComment(zip64_internal* zi, const char* global_comment)
1864
+local int Write_GlobalComment(zip64_internal* zi, const char* global_comment)
18651865
{
18661866
int err = ZIP_OK;
18671867
uInt size_global_comment = 0;
18681868
18691869
if(global_comment != NULL)
@@ -1960,11 +1960,11 @@
19601960
int retVal = ZIP_OK;
19611961
19621962
if(pData == NULL || *dataLen < 4)
19631963
return ZIP_PARAMERROR;
19641964
1965
- pNewHeader = (char*)ALLOC(*dataLen);
1965
+ pNewHeader = (char*)ALLOC((unsigned)*dataLen);
19661966
pTmp = pNewHeader;
19671967
19681968
while(p < (pData + *dataLen))
19691969
{
19701970
header = *(short*)p;
19711971
--- compat/zlib/contrib/minizip/zip.c
+++ compat/zlib/contrib/minizip/zip.c
@@ -156,11 +156,11 @@
156 ZPOS64_T totalCompressedData;
157 ZPOS64_T totalUncompressedData;
158 #ifndef NOCRYPT
159 unsigned long keys[3]; /* keys defining the pseudo-random sequence */
160 const z_crc_t* pcrc_32_tab;
161 int crypt_header_size;
162 #endif
163 } curfile64_info;
164
165 typedef struct
166 {
@@ -299,11 +299,11 @@
299 {
300 buf[n] = 0xff;
301 }
302 }
303
304 if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte)
305 return ZIP_ERRNO;
306 else
307 return ZIP_OK;
308 }
309
@@ -335,12 +335,12 @@
335 if (year>=1980)
336 year-=1980;
337 else if (year>=80)
338 year-=80;
339 return
340 (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) |
341 ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));
342 }
343
344
345 /****************************************************************************/
346
@@ -520,16 +520,16 @@
520
521 for (i=(int)uReadSize-3; (i--)>0;)
522 if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
523 ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
524 {
525 uPosFound = uReadPos+i;
526 break;
527 }
528
529 if (uPosFound!=0)
530 break;
531 }
532 TRYFREE(buf);
533 return uPosFound;
534 }
535
@@ -584,11 +584,11 @@
584 for (i=(int)uReadSize-3; (i--)>0;)
585 {
586 // Signature "0x07064b50" Zip64 end of central directory locater
587 if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
588 {
589 uPosFound = uReadPos+i;
590 break;
591 }
592 }
593
594 if (uPosFound!=0)
@@ -635,11 +635,11 @@
635 return 0;
636
637 return relativeOffset;
638 }
639
640 int LoadCentralDirectoryRecord(zip64_internal* pziinit)
641 {
642 int err=ZIP_OK;
643 ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
644
645 ZPOS64_T size_central_dir; /* size of the central directory */
@@ -953,11 +953,11 @@
953 extern zipFile ZEXPORT zipOpen64 (const void* pathname, int append)
954 {
955 return zipOpen3(pathname,append,NULL,NULL);
956 }
957
958 int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local)
959 {
960 /* write the local header */
961 int err;
962 uInt size_filename = (uInt)strlen(filename);
963 uInt size_extrafield = size_extrafield_local;
@@ -1032,12 +1032,12 @@
1032 ZPOS64_T UncompressedSize = 0;
1033
1034 // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file)
1035 zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream);
1036
1037 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2);
1038 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2);
1039
1040 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8);
1041 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8);
1042 }
1043
@@ -1514,11 +1514,11 @@
1514 extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_size, uLong crc32)
1515 {
1516 zip64_internal* zi;
1517 ZPOS64_T compressed_size;
1518 uLong invalidValue = 0xffffffff;
1519 short datasize = 0;
1520 int err=ZIP_OK;
1521
1522 if (file == NULL)
1523 return ZIP_PARAMERROR;
1524 zi = (zip64_internal*)file;
@@ -1750,11 +1750,11 @@
1750 extern int ZEXPORT zipCloseFileInZip (zipFile file)
1751 {
1752 return zipCloseFileInZipRaw (file,0,0);
1753 }
1754
1755 int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip)
1756 {
1757 int err = ZIP_OK;
1758 ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writing_offset;
1759
1760 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4);
@@ -1772,11 +1772,11 @@
1772 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4);
1773
1774 return err;
1775 }
1776
1777 int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
1778 {
1779 int err = ZIP_OK;
1780
1781 uLong Zip64DataSize = 44;
1782
@@ -1811,11 +1811,11 @@
1811 ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writing_offset;
1812 err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8);
1813 }
1814 return err;
1815 }
1816 int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
1817 {
1818 int err = ZIP_OK;
1819
1820 /*signature*/
1821 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4);
@@ -1859,11 +1859,11 @@
1859 }
1860
1861 return err;
1862 }
1863
1864 int Write_GlobalComment(zip64_internal* zi, const char* global_comment)
1865 {
1866 int err = ZIP_OK;
1867 uInt size_global_comment = 0;
1868
1869 if(global_comment != NULL)
@@ -1960,11 +1960,11 @@
1960 int retVal = ZIP_OK;
1961
1962 if(pData == NULL || *dataLen < 4)
1963 return ZIP_PARAMERROR;
1964
1965 pNewHeader = (char*)ALLOC(*dataLen);
1966 pTmp = pNewHeader;
1967
1968 while(p < (pData + *dataLen))
1969 {
1970 header = *(short*)p;
1971
--- compat/zlib/contrib/minizip/zip.c
+++ compat/zlib/contrib/minizip/zip.c
@@ -156,11 +156,11 @@
156 ZPOS64_T totalCompressedData;
157 ZPOS64_T totalUncompressedData;
158 #ifndef NOCRYPT
159 unsigned long keys[3]; /* keys defining the pseudo-random sequence */
160 const z_crc_t* pcrc_32_tab;
161 unsigned crypt_header_size;
162 #endif
163 } curfile64_info;
164
165 typedef struct
166 {
@@ -299,11 +299,11 @@
299 {
300 buf[n] = 0xff;
301 }
302 }
303
304 if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,(uLong)nbByte)!=(uLong)nbByte)
305 return ZIP_ERRNO;
306 else
307 return ZIP_OK;
308 }
309
@@ -335,12 +335,12 @@
335 if (year>=1980)
336 year-=1980;
337 else if (year>=80)
338 year-=80;
339 return
340 (uLong) (((uLong)(ptm->tm_mday) + (32 * (uLong)(ptm->tm_mon+1)) + (512 * year)) << 16) |
341 (((uLong)ptm->tm_sec/2) + (32 * (uLong)ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));
342 }
343
344
345 /****************************************************************************/
346
@@ -520,16 +520,16 @@
520
521 for (i=(int)uReadSize-3; (i--)>0;)
522 if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
523 ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
524 {
525 uPosFound = uReadPos+(unsigned)i;
526 break;
527 }
528
529 if (uPosFound!=0)
530 break;
531 }
532 TRYFREE(buf);
533 return uPosFound;
534 }
535
@@ -584,11 +584,11 @@
584 for (i=(int)uReadSize-3; (i--)>0;)
585 {
586 // Signature "0x07064b50" Zip64 end of central directory locater
587 if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
588 {
589 uPosFound = uReadPos+(unsigned)i;
590 break;
591 }
592 }
593
594 if (uPosFound!=0)
@@ -635,11 +635,11 @@
635 return 0;
636
637 return relativeOffset;
638 }
639
640 local int LoadCentralDirectoryRecord(zip64_internal* pziinit)
641 {
642 int err=ZIP_OK;
643 ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
644
645 ZPOS64_T size_central_dir; /* size of the central directory */
@@ -953,11 +953,11 @@
953 extern zipFile ZEXPORT zipOpen64 (const void* pathname, int append)
954 {
955 return zipOpen3(pathname,append,NULL,NULL);
956 }
957
958 local int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local)
959 {
960 /* write the local header */
961 int err;
962 uInt size_filename = (uInt)strlen(filename);
963 uInt size_extrafield = size_extrafield_local;
@@ -1032,12 +1032,12 @@
1032 ZPOS64_T UncompressedSize = 0;
1033
1034 // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file)
1035 zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream);
1036
1037 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)HeaderID,2);
1038 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)DataSize,2);
1039
1040 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8);
1041 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8);
1042 }
1043
@@ -1514,11 +1514,11 @@
1514 extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_size, uLong crc32)
1515 {
1516 zip64_internal* zi;
1517 ZPOS64_T compressed_size;
1518 uLong invalidValue = 0xffffffff;
1519 unsigned datasize = 0;
1520 int err=ZIP_OK;
1521
1522 if (file == NULL)
1523 return ZIP_PARAMERROR;
1524 zi = (zip64_internal*)file;
@@ -1750,11 +1750,11 @@
1750 extern int ZEXPORT zipCloseFileInZip (zipFile file)
1751 {
1752 return zipCloseFileInZipRaw (file,0,0);
1753 }
1754
1755 local int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip)
1756 {
1757 int err = ZIP_OK;
1758 ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writing_offset;
1759
1760 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4);
@@ -1772,11 +1772,11 @@
1772 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4);
1773
1774 return err;
1775 }
1776
1777 local int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
1778 {
1779 int err = ZIP_OK;
1780
1781 uLong Zip64DataSize = 44;
1782
@@ -1811,11 +1811,11 @@
1811 ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writing_offset;
1812 err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8);
1813 }
1814 return err;
1815 }
1816 local int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
1817 {
1818 int err = ZIP_OK;
1819
1820 /*signature*/
1821 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4);
@@ -1859,11 +1859,11 @@
1859 }
1860
1861 return err;
1862 }
1863
1864 local int Write_GlobalComment(zip64_internal* zi, const char* global_comment)
1865 {
1866 int err = ZIP_OK;
1867 uInt size_global_comment = 0;
1868
1869 if(global_comment != NULL)
@@ -1960,11 +1960,11 @@
1960 int retVal = ZIP_OK;
1961
1962 if(pData == NULL || *dataLen < 4)
1963 return ZIP_PARAMERROR;
1964
1965 pNewHeader = (char*)ALLOC((unsigned)*dataLen);
1966 pTmp = pNewHeader;
1967
1968 while(p < (pData + *dataLen))
1969 {
1970 header = *(short*)p;
1971
--- compat/zlib/contrib/minizip/zip.h
+++ compat/zlib/contrib/minizip/zip.h
@@ -86,16 +86,16 @@
8686
/* default memLevel */
8787
8888
/* tm_zip contain date/time info */
8989
typedef struct tm_zip_s
9090
{
91
- uInt tm_sec; /* seconds after the minute - [0,59] */
92
- uInt tm_min; /* minutes after the hour - [0,59] */
93
- uInt tm_hour; /* hours since midnight - [0,23] */
94
- uInt tm_mday; /* day of the month - [1,31] */
95
- uInt tm_mon; /* months since January - [0,11] */
96
- uInt tm_year; /* years - [1980..2044] */
91
+ int tm_sec; /* seconds after the minute - [0,59] */
92
+ int tm_min; /* minutes after the hour - [0,59] */
93
+ int tm_hour; /* hours since midnight - [0,23] */
94
+ int tm_mday; /* day of the month - [1,31] */
95
+ int tm_mon; /* months since January - [0,11] */
96
+ int tm_year; /* years - [1980..2044] */
9797
} tm_zip;
9898
9999
typedef struct
100100
{
101101
tm_zip tmz_date; /* date in understandable format */
@@ -142,10 +142,15 @@
142142
extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname,
143143
int append,
144144
zipcharpc* globalcomment,
145145
zlib_filefunc64_def* pzlib_filefunc_def));
146146
147
+extern zipFile ZEXPORT zipOpen3 OF((const void *pathname,
148
+ int append,
149
+ zipcharpc* globalcomment,
150
+ zlib_filefunc64_32_def* pzlib_filefunc64_32_def));
151
+
147152
extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
148153
const char* filename,
149154
const zip_fileinfo* zipfi,
150155
const void* extrafield_local,
151156
uInt size_extrafield_local,
152157
--- compat/zlib/contrib/minizip/zip.h
+++ compat/zlib/contrib/minizip/zip.h
@@ -86,16 +86,16 @@
86 /* default memLevel */
87
88 /* tm_zip contain date/time info */
89 typedef struct tm_zip_s
90 {
91 uInt tm_sec; /* seconds after the minute - [0,59] */
92 uInt tm_min; /* minutes after the hour - [0,59] */
93 uInt tm_hour; /* hours since midnight - [0,23] */
94 uInt tm_mday; /* day of the month - [1,31] */
95 uInt tm_mon; /* months since January - [0,11] */
96 uInt tm_year; /* years - [1980..2044] */
97 } tm_zip;
98
99 typedef struct
100 {
101 tm_zip tmz_date; /* date in understandable format */
@@ -142,10 +142,15 @@
142 extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname,
143 int append,
144 zipcharpc* globalcomment,
145 zlib_filefunc64_def* pzlib_filefunc_def));
146
 
 
 
 
 
147 extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
148 const char* filename,
149 const zip_fileinfo* zipfi,
150 const void* extrafield_local,
151 uInt size_extrafield_local,
152
--- compat/zlib/contrib/minizip/zip.h
+++ compat/zlib/contrib/minizip/zip.h
@@ -86,16 +86,16 @@
86 /* default memLevel */
87
88 /* tm_zip contain date/time info */
89 typedef struct tm_zip_s
90 {
91 int tm_sec; /* seconds after the minute - [0,59] */
92 int tm_min; /* minutes after the hour - [0,59] */
93 int tm_hour; /* hours since midnight - [0,23] */
94 int tm_mday; /* day of the month - [1,31] */
95 int tm_mon; /* months since January - [0,11] */
96 int tm_year; /* years - [1980..2044] */
97 } tm_zip;
98
99 typedef struct
100 {
101 tm_zip tmz_date; /* date in understandable format */
@@ -142,10 +142,15 @@
142 extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname,
143 int append,
144 zipcharpc* globalcomment,
145 zlib_filefunc64_def* pzlib_filefunc_def));
146
147 extern zipFile ZEXPORT zipOpen3 OF((const void *pathname,
148 int append,
149 zipcharpc* globalcomment,
150 zlib_filefunc64_32_def* pzlib_filefunc64_32_def));
151
152 extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
153 const char* filename,
154 const zip_fileinfo* zipfi,
155 const void* extrafield_local,
156 uInt size_extrafield_local,
157
--- compat/zlib/contrib/pascal/zlibpas.pas
+++ compat/zlib/contrib/pascal/zlibpas.pas
@@ -8,11 +8,11 @@
88
unit zlibpas;
99
1010
interface
1111
1212
const
13
- ZLIB_VERSION = '1.2.11';
13
+ ZLIB_VERSION = '1.2.12';
1414
ZLIB_VERNUM = $12a0;
1515
1616
type
1717
alloc_func = function(opaque: Pointer; items, size: Integer): Pointer;
1818
cdecl;
1919
--- compat/zlib/contrib/pascal/zlibpas.pas
+++ compat/zlib/contrib/pascal/zlibpas.pas
@@ -8,11 +8,11 @@
8 unit zlibpas;
9
10 interface
11
12 const
13 ZLIB_VERSION = '1.2.11';
14 ZLIB_VERNUM = $12a0;
15
16 type
17 alloc_func = function(opaque: Pointer; items, size: Integer): Pointer;
18 cdecl;
19
--- compat/zlib/contrib/pascal/zlibpas.pas
+++ compat/zlib/contrib/pascal/zlibpas.pas
@@ -8,11 +8,11 @@
8 unit zlibpas;
9
10 interface
11
12 const
13 ZLIB_VERSION = '1.2.12';
14 ZLIB_VERNUM = $12a0;
15
16 type
17 alloc_func = function(opaque: Pointer; items, size: Integer): Pointer;
18 cdecl;
19
--- compat/zlib/contrib/vstudio/readme.txt
+++ compat/zlib/contrib/vstudio/readme.txt
@@ -1,6 +1,6 @@
1
-Building instructions for the DLL versions of Zlib 1.2.11
1
+Building instructions for the DLL versions of Zlib 1.2.12
22
========================================================
33
44
This directory contains projects that build zlib and minizip using
55
Microsoft Visual C++ 9.0/10.0.
66
77
--- compat/zlib/contrib/vstudio/readme.txt
+++ compat/zlib/contrib/vstudio/readme.txt
@@ -1,6 +1,6 @@
1 Building instructions for the DLL versions of Zlib 1.2.11
2 ========================================================
3
4 This directory contains projects that build zlib and minizip using
5 Microsoft Visual C++ 9.0/10.0.
6
7
--- compat/zlib/contrib/vstudio/readme.txt
+++ compat/zlib/contrib/vstudio/readme.txt
@@ -1,6 +1,6 @@
1 Building instructions for the DLL versions of Zlib 1.2.12
2 ========================================================
3
4 This directory contains projects that build zlib and minizip using
5 Microsoft Visual C++ 9.0/10.0.
6
7
--- compat/zlib/contrib/vstudio/vc10/zlib.rc
+++ compat/zlib/contrib/vstudio/vc10/zlib.rc
@@ -1,11 +1,11 @@
11
#include <windows.h>
22
33
#define IDR_VERSION1 1
44
IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5
- FILEVERSION 1, 2, 11, 0
6
- PRODUCTVERSION 1, 2, 11, 0
5
+ FILEVERSION 1, 2, 12, 0
6
+ PRODUCTVERSION 1, 2, 12, 0
77
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
88
FILEFLAGS 0
99
FILEOS VOS_DOS_WINDOWS32
1010
FILETYPE VFT_DLL
1111
FILESUBTYPE 0 // not used
@@ -15,18 +15,18 @@
1515
BLOCK "040904E4"
1616
//language ID = U.S. English, char set = Windows, Multilingual
1717
1818
BEGIN
1919
VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
20
- VALUE "FileVersion", "1.2.11\0"
20
+ VALUE "FileVersion", "1.2.12\0"
2121
VALUE "InternalName", "zlib\0"
2222
VALUE "OriginalFilename", "zlibwapi.dll\0"
2323
VALUE "ProductName", "ZLib.DLL\0"
2424
VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
25
- VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0"
25
+ VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0"
2626
END
2727
END
2828
BLOCK "VarFileInfo"
2929
BEGIN
3030
VALUE "Translation", 0x0409, 1252
3131
END
3232
END
3333
--- compat/zlib/contrib/vstudio/vc10/zlib.rc
+++ compat/zlib/contrib/vstudio/vc10/zlib.rc
@@ -1,11 +1,11 @@
1 #include <windows.h>
2
3 #define IDR_VERSION1 1
4 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5 FILEVERSION 1, 2, 11, 0
6 PRODUCTVERSION 1, 2, 11, 0
7 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
8 FILEFLAGS 0
9 FILEOS VOS_DOS_WINDOWS32
10 FILETYPE VFT_DLL
11 FILESUBTYPE 0 // not used
@@ -15,18 +15,18 @@
15 BLOCK "040904E4"
16 //language ID = U.S. English, char set = Windows, Multilingual
17
18 BEGIN
19 VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
20 VALUE "FileVersion", "1.2.11\0"
21 VALUE "InternalName", "zlib\0"
22 VALUE "OriginalFilename", "zlibwapi.dll\0"
23 VALUE "ProductName", "ZLib.DLL\0"
24 VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
25 VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0"
26 END
27 END
28 BLOCK "VarFileInfo"
29 BEGIN
30 VALUE "Translation", 0x0409, 1252
31 END
32 END
33
--- compat/zlib/contrib/vstudio/vc10/zlib.rc
+++ compat/zlib/contrib/vstudio/vc10/zlib.rc
@@ -1,11 +1,11 @@
1 #include <windows.h>
2
3 #define IDR_VERSION1 1
4 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5 FILEVERSION 1, 2, 12, 0
6 PRODUCTVERSION 1, 2, 12, 0
7 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
8 FILEFLAGS 0
9 FILEOS VOS_DOS_WINDOWS32
10 FILETYPE VFT_DLL
11 FILESUBTYPE 0 // not used
@@ -15,18 +15,18 @@
15 BLOCK "040904E4"
16 //language ID = U.S. English, char set = Windows, Multilingual
17
18 BEGIN
19 VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
20 VALUE "FileVersion", "1.2.12\0"
21 VALUE "InternalName", "zlib\0"
22 VALUE "OriginalFilename", "zlibwapi.dll\0"
23 VALUE "ProductName", "ZLib.DLL\0"
24 VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
25 VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0"
26 END
27 END
28 BLOCK "VarFileInfo"
29 BEGIN
30 VALUE "Translation", 0x0409, 1252
31 END
32 END
33
--- compat/zlib/contrib/vstudio/vc10/zlibvc.def
+++ compat/zlib/contrib/vstudio/vc10/zlibvc.def
@@ -149,5 +149,10 @@
149149
gzfread @171
150150
gzfwrite @172
151151
deflateGetDictionary @173
152152
adler32_z @174
153153
crc32_z @175
154
+
155
+; zlib1 v1.2.12 added:
156
+ crc32_combine_gen @176
157
+ crc32_combine_gen64 @177
158
+ crc32_combine_op @178
154159
--- compat/zlib/contrib/vstudio/vc10/zlibvc.def
+++ compat/zlib/contrib/vstudio/vc10/zlibvc.def
@@ -149,5 +149,10 @@
149 gzfread @171
150 gzfwrite @172
151 deflateGetDictionary @173
152 adler32_z @174
153 crc32_z @175
 
 
 
 
 
154
--- compat/zlib/contrib/vstudio/vc10/zlibvc.def
+++ compat/zlib/contrib/vstudio/vc10/zlibvc.def
@@ -149,5 +149,10 @@
149 gzfread @171
150 gzfwrite @172
151 deflateGetDictionary @173
152 adler32_z @174
153 crc32_z @175
154
155 ; zlib1 v1.2.12 added:
156 crc32_combine_gen @176
157 crc32_combine_gen64 @177
158 crc32_combine_op @178
159
--- compat/zlib/contrib/vstudio/vc11/zlib.rc
+++ compat/zlib/contrib/vstudio/vc11/zlib.rc
@@ -1,11 +1,11 @@
11
#include <windows.h>
22
33
#define IDR_VERSION1 1
44
IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5
- FILEVERSION 1, 2, 11, 0
6
- PRODUCTVERSION 1, 2, 11, 0
5
+ FILEVERSION 1, 2, 12, 0
6
+ PRODUCTVERSION 1, 2, 12, 0
77
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
88
FILEFLAGS 0
99
FILEOS VOS_DOS_WINDOWS32
1010
FILETYPE VFT_DLL
1111
FILESUBTYPE 0 // not used
@@ -15,18 +15,18 @@
1515
BLOCK "040904E4"
1616
//language ID = U.S. English, char set = Windows, Multilingual
1717
1818
BEGIN
1919
VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
20
- VALUE "FileVersion", "1.2.11\0"
20
+ VALUE "FileVersion", "1.2.12\0"
2121
VALUE "InternalName", "zlib\0"
2222
VALUE "OriginalFilename", "zlibwapi.dll\0"
2323
VALUE "ProductName", "ZLib.DLL\0"
2424
VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
25
- VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0"
25
+ VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0"
2626
END
2727
END
2828
BLOCK "VarFileInfo"
2929
BEGIN
3030
VALUE "Translation", 0x0409, 1252
3131
END
3232
END
3333
--- compat/zlib/contrib/vstudio/vc11/zlib.rc
+++ compat/zlib/contrib/vstudio/vc11/zlib.rc
@@ -1,11 +1,11 @@
1 #include <windows.h>
2
3 #define IDR_VERSION1 1
4 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5 FILEVERSION 1, 2, 11, 0
6 PRODUCTVERSION 1, 2, 11, 0
7 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
8 FILEFLAGS 0
9 FILEOS VOS_DOS_WINDOWS32
10 FILETYPE VFT_DLL
11 FILESUBTYPE 0 // not used
@@ -15,18 +15,18 @@
15 BLOCK "040904E4"
16 //language ID = U.S. English, char set = Windows, Multilingual
17
18 BEGIN
19 VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
20 VALUE "FileVersion", "1.2.11\0"
21 VALUE "InternalName", "zlib\0"
22 VALUE "OriginalFilename", "zlibwapi.dll\0"
23 VALUE "ProductName", "ZLib.DLL\0"
24 VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
25 VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0"
26 END
27 END
28 BLOCK "VarFileInfo"
29 BEGIN
30 VALUE "Translation", 0x0409, 1252
31 END
32 END
33
--- compat/zlib/contrib/vstudio/vc11/zlib.rc
+++ compat/zlib/contrib/vstudio/vc11/zlib.rc
@@ -1,11 +1,11 @@
1 #include <windows.h>
2
3 #define IDR_VERSION1 1
4 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5 FILEVERSION 1, 2, 12, 0
6 PRODUCTVERSION 1, 2, 12, 0
7 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
8 FILEFLAGS 0
9 FILEOS VOS_DOS_WINDOWS32
10 FILETYPE VFT_DLL
11 FILESUBTYPE 0 // not used
@@ -15,18 +15,18 @@
15 BLOCK "040904E4"
16 //language ID = U.S. English, char set = Windows, Multilingual
17
18 BEGIN
19 VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
20 VALUE "FileVersion", "1.2.12\0"
21 VALUE "InternalName", "zlib\0"
22 VALUE "OriginalFilename", "zlibwapi.dll\0"
23 VALUE "ProductName", "ZLib.DLL\0"
24 VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
25 VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0"
26 END
27 END
28 BLOCK "VarFileInfo"
29 BEGIN
30 VALUE "Translation", 0x0409, 1252
31 END
32 END
33
--- compat/zlib/contrib/vstudio/vc11/zlibvc.def
+++ compat/zlib/contrib/vstudio/vc11/zlibvc.def
@@ -149,5 +149,10 @@
149149
gzfread @171
150150
gzfwrite @172
151151
deflateGetDictionary @173
152152
adler32_z @174
153153
crc32_z @175
154
+
155
+; zlib1 v1.2.12 added:
156
+ crc32_combine_gen @176
157
+ crc32_combine_gen64 @177
158
+ crc32_combine_op @178
154159
--- compat/zlib/contrib/vstudio/vc11/zlibvc.def
+++ compat/zlib/contrib/vstudio/vc11/zlibvc.def
@@ -149,5 +149,10 @@
149 gzfread @171
150 gzfwrite @172
151 deflateGetDictionary @173
152 adler32_z @174
153 crc32_z @175
 
 
 
 
 
154
--- compat/zlib/contrib/vstudio/vc11/zlibvc.def
+++ compat/zlib/contrib/vstudio/vc11/zlibvc.def
@@ -149,5 +149,10 @@
149 gzfread @171
150 gzfwrite @172
151 deflateGetDictionary @173
152 adler32_z @174
153 crc32_z @175
154
155 ; zlib1 v1.2.12 added:
156 crc32_combine_gen @176
157 crc32_combine_gen64 @177
158 crc32_combine_op @178
159
--- compat/zlib/contrib/vstudio/vc12/zlib.rc
+++ compat/zlib/contrib/vstudio/vc12/zlib.rc
@@ -1,11 +1,11 @@
11
#include <windows.h>
22
33
#define IDR_VERSION1 1
44
IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5
- FILEVERSION 1, 2, 11, 0
6
- PRODUCTVERSION 1, 2, 11, 0
5
+ FILEVERSION 1, 2, 12, 0
6
+ PRODUCTVERSION 1, 2, 12, 0
77
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
88
FILEFLAGS 0
99
FILEOS VOS_DOS_WINDOWS32
1010
FILETYPE VFT_DLL
1111
FILESUBTYPE 0 // not used
@@ -15,18 +15,18 @@
1515
BLOCK "040904E4"
1616
//language ID = U.S. English, char set = Windows, Multilingual
1717
1818
BEGIN
1919
VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
20
- VALUE "FileVersion", "1.2.11\0"
20
+ VALUE "FileVersion", "1.2.12\0"
2121
VALUE "InternalName", "zlib\0"
2222
VALUE "OriginalFilename", "zlibwapi.dll\0"
2323
VALUE "ProductName", "ZLib.DLL\0"
2424
VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
25
- VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0"
25
+ VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0"
2626
END
2727
END
2828
BLOCK "VarFileInfo"
2929
BEGIN
3030
VALUE "Translation", 0x0409, 1252
3131
END
3232
END
3333
--- compat/zlib/contrib/vstudio/vc12/zlib.rc
+++ compat/zlib/contrib/vstudio/vc12/zlib.rc
@@ -1,11 +1,11 @@
1 #include <windows.h>
2
3 #define IDR_VERSION1 1
4 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5 FILEVERSION 1, 2, 11, 0
6 PRODUCTVERSION 1, 2, 11, 0
7 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
8 FILEFLAGS 0
9 FILEOS VOS_DOS_WINDOWS32
10 FILETYPE VFT_DLL
11 FILESUBTYPE 0 // not used
@@ -15,18 +15,18 @@
15 BLOCK "040904E4"
16 //language ID = U.S. English, char set = Windows, Multilingual
17
18 BEGIN
19 VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
20 VALUE "FileVersion", "1.2.11\0"
21 VALUE "InternalName", "zlib\0"
22 VALUE "OriginalFilename", "zlibwapi.dll\0"
23 VALUE "ProductName", "ZLib.DLL\0"
24 VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
25 VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0"
26 END
27 END
28 BLOCK "VarFileInfo"
29 BEGIN
30 VALUE "Translation", 0x0409, 1252
31 END
32 END
33
--- compat/zlib/contrib/vstudio/vc12/zlib.rc
+++ compat/zlib/contrib/vstudio/vc12/zlib.rc
@@ -1,11 +1,11 @@
1 #include <windows.h>
2
3 #define IDR_VERSION1 1
4 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5 FILEVERSION 1, 2, 12, 0
6 PRODUCTVERSION 1, 2, 12, 0
7 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
8 FILEFLAGS 0
9 FILEOS VOS_DOS_WINDOWS32
10 FILETYPE VFT_DLL
11 FILESUBTYPE 0 // not used
@@ -15,18 +15,18 @@
15 BLOCK "040904E4"
16 //language ID = U.S. English, char set = Windows, Multilingual
17
18 BEGIN
19 VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
20 VALUE "FileVersion", "1.2.12\0"
21 VALUE "InternalName", "zlib\0"
22 VALUE "OriginalFilename", "zlibwapi.dll\0"
23 VALUE "ProductName", "ZLib.DLL\0"
24 VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
25 VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0"
26 END
27 END
28 BLOCK "VarFileInfo"
29 BEGIN
30 VALUE "Translation", 0x0409, 1252
31 END
32 END
33
--- compat/zlib/contrib/vstudio/vc12/zlibvc.def
+++ compat/zlib/contrib/vstudio/vc12/zlibvc.def
@@ -149,5 +149,10 @@
149149
gzfread @171
150150
gzfwrite @172
151151
deflateGetDictionary @173
152152
adler32_z @174
153153
crc32_z @175
154
+
155
+; zlib1 v1.2.12 added:
156
+ crc32_combine_gen @176
157
+ crc32_combine_gen64 @177
158
+ crc32_combine_op @178
154159
--- compat/zlib/contrib/vstudio/vc12/zlibvc.def
+++ compat/zlib/contrib/vstudio/vc12/zlibvc.def
@@ -149,5 +149,10 @@
149 gzfread @171
150 gzfwrite @172
151 deflateGetDictionary @173
152 adler32_z @174
153 crc32_z @175
 
 
 
 
 
154
--- compat/zlib/contrib/vstudio/vc12/zlibvc.def
+++ compat/zlib/contrib/vstudio/vc12/zlibvc.def
@@ -149,5 +149,10 @@
149 gzfread @171
150 gzfwrite @172
151 deflateGetDictionary @173
152 adler32_z @174
153 crc32_z @175
154
155 ; zlib1 v1.2.12 added:
156 crc32_combine_gen @176
157 crc32_combine_gen64 @177
158 crc32_combine_op @178
159
--- compat/zlib/contrib/vstudio/vc14/zlib.rc
+++ compat/zlib/contrib/vstudio/vc14/zlib.rc
@@ -1,11 +1,11 @@
11
#include <windows.h>
22
33
#define IDR_VERSION1 1
44
IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5
- FILEVERSION 1, 2, 11, 0
6
- PRODUCTVERSION 1, 2, 11, 0
5
+ FILEVERSION 1, 2, 12, 0
6
+ PRODUCTVERSION 1, 2, 12, 0
77
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
88
FILEFLAGS 0
99
FILEOS VOS_DOS_WINDOWS32
1010
FILETYPE VFT_DLL
1111
FILESUBTYPE 0 // not used
@@ -15,18 +15,18 @@
1515
BLOCK "040904E4"
1616
//language ID = U.S. English, char set = Windows, Multilingual
1717
1818
BEGIN
1919
VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
20
- VALUE "FileVersion", "1.2.11\0"
20
+ VALUE "FileVersion", "1.2.12\0"
2121
VALUE "InternalName", "zlib\0"
2222
VALUE "OriginalFilename", "zlibwapi.dll\0"
2323
VALUE "ProductName", "ZLib.DLL\0"
2424
VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
25
- VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0"
25
+ VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0"
2626
END
2727
END
2828
BLOCK "VarFileInfo"
2929
BEGIN
3030
VALUE "Translation", 0x0409, 1252
3131
END
3232
END
3333
--- compat/zlib/contrib/vstudio/vc14/zlib.rc
+++ compat/zlib/contrib/vstudio/vc14/zlib.rc
@@ -1,11 +1,11 @@
1 #include <windows.h>
2
3 #define IDR_VERSION1 1
4 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5 FILEVERSION 1, 2, 11, 0
6 PRODUCTVERSION 1, 2, 11, 0
7 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
8 FILEFLAGS 0
9 FILEOS VOS_DOS_WINDOWS32
10 FILETYPE VFT_DLL
11 FILESUBTYPE 0 // not used
@@ -15,18 +15,18 @@
15 BLOCK "040904E4"
16 //language ID = U.S. English, char set = Windows, Multilingual
17
18 BEGIN
19 VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
20 VALUE "FileVersion", "1.2.11\0"
21 VALUE "InternalName", "zlib\0"
22 VALUE "OriginalFilename", "zlibwapi.dll\0"
23 VALUE "ProductName", "ZLib.DLL\0"
24 VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
25 VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0"
26 END
27 END
28 BLOCK "VarFileInfo"
29 BEGIN
30 VALUE "Translation", 0x0409, 1252
31 END
32 END
33
--- compat/zlib/contrib/vstudio/vc14/zlib.rc
+++ compat/zlib/contrib/vstudio/vc14/zlib.rc
@@ -1,11 +1,11 @@
1 #include <windows.h>
2
3 #define IDR_VERSION1 1
4 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5 FILEVERSION 1, 2, 12, 0
6 PRODUCTVERSION 1, 2, 12, 0
7 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
8 FILEFLAGS 0
9 FILEOS VOS_DOS_WINDOWS32
10 FILETYPE VFT_DLL
11 FILESUBTYPE 0 // not used
@@ -15,18 +15,18 @@
15 BLOCK "040904E4"
16 //language ID = U.S. English, char set = Windows, Multilingual
17
18 BEGIN
19 VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
20 VALUE "FileVersion", "1.2.12\0"
21 VALUE "InternalName", "zlib\0"
22 VALUE "OriginalFilename", "zlibwapi.dll\0"
23 VALUE "ProductName", "ZLib.DLL\0"
24 VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
25 VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0"
26 END
27 END
28 BLOCK "VarFileInfo"
29 BEGIN
30 VALUE "Translation", 0x0409, 1252
31 END
32 END
33
--- compat/zlib/contrib/vstudio/vc14/zlibvc.def
+++ compat/zlib/contrib/vstudio/vc14/zlibvc.def
@@ -149,5 +149,10 @@
149149
gzfread @171
150150
gzfwrite @172
151151
deflateGetDictionary @173
152152
adler32_z @174
153153
crc32_z @175
154
+
155
+; zlib1 v1.2.12 added:
156
+ crc32_combine_gen @176
157
+ crc32_combine_gen64 @177
158
+ crc32_combine_op @178
154159
--- compat/zlib/contrib/vstudio/vc14/zlibvc.def
+++ compat/zlib/contrib/vstudio/vc14/zlibvc.def
@@ -149,5 +149,10 @@
149 gzfread @171
150 gzfwrite @172
151 deflateGetDictionary @173
152 adler32_z @174
153 crc32_z @175
 
 
 
 
 
154
--- compat/zlib/contrib/vstudio/vc14/zlibvc.def
+++ compat/zlib/contrib/vstudio/vc14/zlibvc.def
@@ -149,5 +149,10 @@
149 gzfread @171
150 gzfwrite @172
151 deflateGetDictionary @173
152 adler32_z @174
153 crc32_z @175
154
155 ; zlib1 v1.2.12 added:
156 crc32_combine_gen @176
157 crc32_combine_gen64 @177
158 crc32_combine_op @178
159
--- compat/zlib/contrib/vstudio/vc9/zlib.rc
+++ compat/zlib/contrib/vstudio/vc9/zlib.rc
@@ -1,11 +1,11 @@
11
#include <windows.h>
22
33
#define IDR_VERSION1 1
44
IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5
- FILEVERSION 1, 2, 11, 0
6
- PRODUCTVERSION 1, 2, 11, 0
5
+ FILEVERSION 1, 2, 12, 0
6
+ PRODUCTVERSION 1, 2, 12, 0
77
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
88
FILEFLAGS 0
99
FILEOS VOS_DOS_WINDOWS32
1010
FILETYPE VFT_DLL
1111
FILESUBTYPE 0 // not used
@@ -15,18 +15,18 @@
1515
BLOCK "040904E4"
1616
//language ID = U.S. English, char set = Windows, Multilingual
1717
1818
BEGIN
1919
VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
20
- VALUE "FileVersion", "1.2.11\0"
20
+ VALUE "FileVersion", "1.2.12\0"
2121
VALUE "InternalName", "zlib\0"
2222
VALUE "OriginalFilename", "zlibwapi.dll\0"
2323
VALUE "ProductName", "ZLib.DLL\0"
2424
VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
25
- VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0"
25
+ VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0"
2626
END
2727
END
2828
BLOCK "VarFileInfo"
2929
BEGIN
3030
VALUE "Translation", 0x0409, 1252
3131
END
3232
END
3333
--- compat/zlib/contrib/vstudio/vc9/zlib.rc
+++ compat/zlib/contrib/vstudio/vc9/zlib.rc
@@ -1,11 +1,11 @@
1 #include <windows.h>
2
3 #define IDR_VERSION1 1
4 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5 FILEVERSION 1, 2, 11, 0
6 PRODUCTVERSION 1, 2, 11, 0
7 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
8 FILEFLAGS 0
9 FILEOS VOS_DOS_WINDOWS32
10 FILETYPE VFT_DLL
11 FILESUBTYPE 0 // not used
@@ -15,18 +15,18 @@
15 BLOCK "040904E4"
16 //language ID = U.S. English, char set = Windows, Multilingual
17
18 BEGIN
19 VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
20 VALUE "FileVersion", "1.2.11\0"
21 VALUE "InternalName", "zlib\0"
22 VALUE "OriginalFilename", "zlibwapi.dll\0"
23 VALUE "ProductName", "ZLib.DLL\0"
24 VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
25 VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0"
26 END
27 END
28 BLOCK "VarFileInfo"
29 BEGIN
30 VALUE "Translation", 0x0409, 1252
31 END
32 END
33
--- compat/zlib/contrib/vstudio/vc9/zlib.rc
+++ compat/zlib/contrib/vstudio/vc9/zlib.rc
@@ -1,11 +1,11 @@
1 #include <windows.h>
2
3 #define IDR_VERSION1 1
4 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
5 FILEVERSION 1, 2, 12, 0
6 PRODUCTVERSION 1, 2, 12, 0
7 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
8 FILEFLAGS 0
9 FILEOS VOS_DOS_WINDOWS32
10 FILETYPE VFT_DLL
11 FILESUBTYPE 0 // not used
@@ -15,18 +15,18 @@
15 BLOCK "040904E4"
16 //language ID = U.S. English, char set = Windows, Multilingual
17
18 BEGIN
19 VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
20 VALUE "FileVersion", "1.2.12\0"
21 VALUE "InternalName", "zlib\0"
22 VALUE "OriginalFilename", "zlibwapi.dll\0"
23 VALUE "ProductName", "ZLib.DLL\0"
24 VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
25 VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0"
26 END
27 END
28 BLOCK "VarFileInfo"
29 BEGIN
30 VALUE "Translation", 0x0409, 1252
31 END
32 END
33
--- compat/zlib/contrib/vstudio/vc9/zlibvc.def
+++ compat/zlib/contrib/vstudio/vc9/zlibvc.def
@@ -149,5 +149,10 @@
149149
gzfread @171
150150
gzfwrite @172
151151
deflateGetDictionary @173
152152
adler32_z @174
153153
crc32_z @175
154
+
155
+; zlib1 v1.2.12 added:
156
+ crc32_combine_gen @176
157
+ crc32_combine_gen64 @177
158
+ crc32_combine_op @178
154159
--- compat/zlib/contrib/vstudio/vc9/zlibvc.def
+++ compat/zlib/contrib/vstudio/vc9/zlibvc.def
@@ -149,5 +149,10 @@
149 gzfread @171
150 gzfwrite @172
151 deflateGetDictionary @173
152 adler32_z @174
153 crc32_z @175
 
 
 
 
 
154
--- compat/zlib/contrib/vstudio/vc9/zlibvc.def
+++ compat/zlib/contrib/vstudio/vc9/zlibvc.def
@@ -149,5 +149,10 @@
149 gzfread @171
150 gzfwrite @172
151 deflateGetDictionary @173
152 adler32_z @174
153 crc32_z @175
154
155 ; zlib1 v1.2.12 added:
156 crc32_combine_gen @176
157 crc32_combine_gen64 @177
158 crc32_combine_op @178
159
+994 -320
--- compat/zlib/crc32.c
+++ compat/zlib/crc32.c
@@ -1,239 +1,1065 @@
11
/* crc32.c -- compute the CRC-32 of a data stream
2
- * Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler
2
+ * Copyright (C) 1995-2022 Mark Adler
33
* For conditions of distribution and use, see copyright notice in zlib.h
44
*
5
- * Thanks to Rodney Brown <[email protected]> for his contribution of faster
6
- * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing
7
- * tables for updating the shift register in one step with three exclusive-ors
8
- * instead of four steps with four exclusive-ors. This results in about a
9
- * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3.
5
+ * This interleaved implementation of a CRC makes use of pipelined multiple
6
+ * arithmetic-logic units, commonly found in modern CPU cores. It is due to
7
+ * Kadatch and Jenkins (2010). See doc/crc-doc.1.0.pdf in this distribution.
108
*/
119
1210
/* @(#) $Id$ */
1311
1412
/*
1513
Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore
1614
protection on the static variables used to control the first-use generation
17
- of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should
15
+ of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should
1816
first call get_crc_table() to initialize the tables before allowing more than
1917
one thread to use crc32().
2018
21
- DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h.
19
+ MAKECRCH can be #defined to write out crc32.h. A main() routine is also
20
+ produced, so that this one source file can be compiled to an executable.
2221
*/
2322
2423
#ifdef MAKECRCH
2524
# include <stdio.h>
2625
# ifndef DYNAMIC_CRC_TABLE
2726
# define DYNAMIC_CRC_TABLE
2827
# endif /* !DYNAMIC_CRC_TABLE */
2928
#endif /* MAKECRCH */
3029
31
-#include "zutil.h" /* for STDC and FAR definitions */
32
-
33
-/* Definitions for doing the crc four data bytes at a time. */
34
-#if !defined(NOBYFOUR) && defined(Z_U4)
35
-# define BYFOUR
36
-#endif
37
-#ifdef BYFOUR
38
- local unsigned long crc32_little OF((unsigned long,
39
- const unsigned char FAR *, z_size_t));
40
- local unsigned long crc32_big OF((unsigned long,
41
- const unsigned char FAR *, z_size_t));
42
-# define TBLS 8
30
+#include "zutil.h" /* for Z_U4, Z_U8, z_crc_t, and FAR definitions */
31
+
32
+ /*
33
+ A CRC of a message is computed on N braids of words in the message, where
34
+ each word consists of W bytes (4 or 8). If N is 3, for example, then three
35
+ running sparse CRCs are calculated respectively on each braid, at these
36
+ indices in the array of words: 0, 3, 6, ..., 1, 4, 7, ..., and 2, 5, 8, ...
37
+ This is done starting at a word boundary, and continues until as many blocks
38
+ of N * W bytes as are available have been processed. The results are combined
39
+ into a single CRC at the end. For this code, N must be in the range 1..6 and
40
+ W must be 4 or 8. The upper limit on N can be increased if desired by adding
41
+ more #if blocks, extending the patterns apparent in the code. In addition,
42
+ crc32.h would need to be regenerated, if the maximum N value is increased.
43
+
44
+ N and W are chosen empirically by benchmarking the execution time on a given
45
+ processor. The choices for N and W below were based on testing on Intel Kaby
46
+ Lake i7, AMD Ryzen 7, ARM Cortex-A57, Sparc64-VII, PowerPC POWER9, and MIPS64
47
+ Octeon II processors. The Intel, AMD, and ARM processors were all fastest
48
+ with N=5, W=8. The Sparc, PowerPC, and MIPS64 were all fastest at N=5, W=4.
49
+ They were all tested with either gcc or clang, all using the -O3 optimization
50
+ level. Your mileage may vary.
51
+ */
52
+
53
+/* Define N */
54
+#ifdef Z_TESTN
55
+# define N Z_TESTN
56
+#else
57
+# define N 5
58
+#endif
59
+#if N < 1 || N > 6
60
+# error N must be in 1..6
61
+#endif
62
+
63
+/*
64
+ z_crc_t must be at least 32 bits. z_word_t must be at least as long as
65
+ z_crc_t. It is assumed here that z_word_t is either 32 bits or 64 bits, and
66
+ that bytes are eight bits.
67
+ */
68
+
69
+/*
70
+ Define W and the associated z_word_t type. If W is not defined, then a
71
+ braided calculation is not used, and the associated tables and code are not
72
+ compiled.
73
+ */
74
+#ifdef Z_TESTW
75
+# if Z_TESTW-1 != -1
76
+# define W Z_TESTW
77
+# endif
4378
#else
44
-# define TBLS 1
45
-#endif /* BYFOUR */
46
-
47
-/* Local functions for crc concatenation */
48
-local unsigned long gf2_matrix_times OF((unsigned long *mat,
49
- unsigned long vec));
50
-local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
51
-local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2));
52
-
79
+# ifdef MAKECRCH
80
+# define W 8 /* required for MAKECRCH */
81
+# else
82
+# if defined(__x86_64__) || defined(__aarch64__)
83
+# define W 8
84
+# else
85
+# define W 4
86
+# endif
87
+# endif
88
+#endif
89
+#ifdef W
90
+# if W == 8 && defined(Z_U8)
91
+ typedef Z_U8 z_word_t;
92
+# elif defined(Z_U4)
93
+# undef W
94
+# define W 4
95
+ typedef Z_U4 z_word_t;
96
+# else
97
+# undef W
98
+# endif
99
+#endif
100
+
101
+/* Local functions. */
102
+local z_crc_t multmodp OF((z_crc_t a, z_crc_t b));
103
+local z_crc_t x2nmodp OF((z_off64_t n, unsigned k));
104
+
105
+/* If available, use the ARM processor CRC32 instruction. */
106
+#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8
107
+# define ARMCRC32
108
+#endif
109
+
110
+#if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE))
111
+/*
112
+ Swap the bytes in a z_word_t to convert between little and big endian. Any
113
+ self-respecting compiler will optimize this to a single machine byte-swap
114
+ instruction, if one is available. This assumes that word_t is either 32 bits
115
+ or 64 bits.
116
+ */
117
+local z_word_t byte_swap(word)
118
+ z_word_t word;
119
+{
120
+# if W == 8
121
+ return
122
+ (word & 0xff00000000000000) >> 56 |
123
+ (word & 0xff000000000000) >> 40 |
124
+ (word & 0xff0000000000) >> 24 |
125
+ (word & 0xff00000000) >> 8 |
126
+ (word & 0xff000000) << 8 |
127
+ (word & 0xff0000) << 24 |
128
+ (word & 0xff00) << 40 |
129
+ (word & 0xff) << 56;
130
+# else /* W == 4 */
131
+ return
132
+ (word & 0xff000000) >> 24 |
133
+ (word & 0xff0000) >> 8 |
134
+ (word & 0xff00) << 8 |
135
+ (word & 0xff) << 24;
136
+# endif
137
+}
138
+#endif
139
+
140
+/* CRC polynomial. */
141
+#define POLY 0xedb88320 /* p(x) reflected, with x^32 implied */
53142
54143
#ifdef DYNAMIC_CRC_TABLE
55144
56
-local volatile int crc_table_empty = 1;
57
-local z_crc_t FAR crc_table[TBLS][256];
145
+local z_crc_t FAR crc_table[256];
146
+local z_crc_t FAR x2n_table[32];
58147
local void make_crc_table OF((void));
148
+#ifdef W
149
+ local z_word_t FAR crc_big_table[256];
150
+ local z_crc_t FAR crc_braid_table[W][256];
151
+ local z_word_t FAR crc_braid_big_table[W][256];
152
+ local void braid OF((z_crc_t [][256], z_word_t [][256], int, int));
153
+#endif
59154
#ifdef MAKECRCH
60
- local void write_table OF((FILE *, const z_crc_t FAR *));
155
+ local void write_table OF((FILE *, const z_crc_t FAR *, int));
156
+ local void write_table32hi OF((FILE *, const z_word_t FAR *, int));
157
+ local void write_table64 OF((FILE *, const z_word_t FAR *, int));
61158
#endif /* MAKECRCH */
159
+
160
+/*
161
+ Define a once() function depending on the availability of atomics. If this is
162
+ compiled with DYNAMIC_CRC_TABLE defined, and if CRCs will be computed in
163
+ multiple threads, and if atomics are not available, then get_crc_table() must
164
+ be called to initialize the tables and must return before any threads are
165
+ allowed to compute or combine CRCs.
166
+ */
167
+
168
+/* Definition of once functionality. */
169
+typedef struct once_s once_t;
170
+local void once OF((once_t *, void (*)(void)));
171
+
172
+/* Check for the availability of atomics. */
173
+#if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \
174
+ !defined(__STDC_NO_ATOMICS__)
175
+
176
+#include <stdatomic.h>
177
+
178
+/* Structure for once(), which must be initialized with ONCE_INIT. */
179
+struct once_s {
180
+ atomic_flag begun;
181
+ atomic_int done;
182
+};
183
+#define ONCE_INIT {ATOMIC_FLAG_INIT, 0}
184
+
185
+/*
186
+ Run the provided init() function exactly once, even if multiple threads
187
+ invoke once() at the same time. The state must be a once_t initialized with
188
+ ONCE_INIT.
189
+ */
190
+local void once(state, init)
191
+ once_t *state;
192
+ void (*init)(void);
193
+{
194
+ if (!atomic_load(&state->done)) {
195
+ if (atomic_flag_test_and_set(&state->begun))
196
+ while (!atomic_load(&state->done))
197
+ ;
198
+ else {
199
+ init();
200
+ atomic_store(&state->done, 1);
201
+ }
202
+ }
203
+}
204
+
205
+#else /* no atomics */
206
+
207
+/* Structure for once(), which must be initialized with ONCE_INIT. */
208
+struct once_s {
209
+ volatile int begun;
210
+ volatile int done;
211
+};
212
+#define ONCE_INIT {0, 0}
213
+
214
+/* Test and set. Alas, not atomic, but tries to minimize the period of
215
+ vulnerability. */
216
+local int test_and_set OF((int volatile *));
217
+local int test_and_set(flag)
218
+ int volatile *flag;
219
+{
220
+ int was;
221
+
222
+ was = *flag;
223
+ *flag = 1;
224
+ return was;
225
+}
226
+
227
+/* Run the provided init() function once. This is not thread-safe. */
228
+local void once(state, init)
229
+ once_t *state;
230
+ void (*init)(void);
231
+{
232
+ if (!state->done) {
233
+ if (test_and_set(&state->begun))
234
+ while (!state->done)
235
+ ;
236
+ else {
237
+ init();
238
+ state->done = 1;
239
+ }
240
+ }
241
+}
242
+
243
+#endif
244
+
245
+/* State for once(). */
246
+local once_t made = ONCE_INIT;
247
+
62248
/*
63249
Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
64250
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.
65251
66252
Polynomials over GF(2) are represented in binary, one bit per coefficient,
67
- with the lowest powers in the most significant bit. Then adding polynomials
253
+ with the lowest powers in the most significant bit. Then adding polynomials
68254
is just exclusive-or, and multiplying a polynomial by x is a right shift by
69
- one. If we call the above polynomial p, and represent a byte as the
255
+ one. If we call the above polynomial p, and represent a byte as the
70256
polynomial q, also with the lowest power in the most significant bit (so the
71
- byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
257
+ byte 0xb1 is the polynomial x^7+x^3+x^2+1), then the CRC is (q*x^32) mod p,
72258
where a mod b means the remainder after dividing a by b.
73259
74260
This calculation is done using the shift-register method of multiplying and
75
- taking the remainder. The register is initialized to zero, and for each
261
+ taking the remainder. The register is initialized to zero, and for each
76262
incoming bit, x^32 is added mod p to the register if the bit is a one (where
77
- x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
78
- x (which is shifting right by one and adding x^32 mod p if the bit shifted
79
- out is a one). We start with the highest power (least significant bit) of
80
- q and repeat for all eight bits of q.
81
-
82
- The first table is simply the CRC of all possible eight bit values. This is
83
- all the information needed to generate CRCs on data a byte at a time for all
84
- combinations of CRC register values and incoming bytes. The remaining tables
85
- allow for word-at-a-time CRC calculation for both big-endian and little-
86
- endian machines, where a word is four bytes.
87
-*/
263
+ x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by x
264
+ (which is shifting right by one and adding x^32 mod p if the bit shifted out
265
+ is a one). We start with the highest power (least significant bit) of q and
266
+ repeat for all eight bits of q.
267
+
268
+ The table is simply the CRC of all possible eight bit values. This is all the
269
+ information needed to generate CRCs on data a byte at a time for all
270
+ combinations of CRC register values and incoming bytes.
271
+ */
272
+
88273
local void make_crc_table()
89274
{
90
- z_crc_t c;
91
- int n, k;
92
- z_crc_t poly; /* polynomial exclusive-or pattern */
93
- /* terms of polynomial defining this crc (except x^32): */
94
- static volatile int first = 1; /* flag to limit concurrent making */
95
- static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
96
-
97
- /* See if another task is already doing this (not thread-safe, but better
98
- than nothing -- significantly reduces duration of vulnerability in
99
- case the advice about DYNAMIC_CRC_TABLE is ignored) */
100
- if (first) {
101
- first = 0;
102
-
103
- /* make exclusive-or pattern from polynomial (0xedb88320UL) */
104
- poly = 0;
105
- for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++)
106
- poly |= (z_crc_t)1 << (31 - p[n]);
107
-
108
- /* generate a crc for every 8-bit value */
109
- for (n = 0; n < 256; n++) {
110
- c = (z_crc_t)n;
111
- for (k = 0; k < 8; k++)
112
- c = c & 1 ? poly ^ (c >> 1) : c >> 1;
113
- crc_table[0][n] = c;
114
- }
115
-
116
-#ifdef BYFOUR
117
- /* generate crc for each value followed by one, two, and three zeros,
118
- and then the byte reversal of those as well as the first table */
119
- for (n = 0; n < 256; n++) {
120
- c = crc_table[0][n];
121
- crc_table[4][n] = ZSWAP32(c);
122
- for (k = 1; k < 4; k++) {
123
- c = crc_table[0][c & 0xff] ^ (c >> 8);
124
- crc_table[k][n] = c;
125
- crc_table[k + 4][n] = ZSWAP32(c);
126
- }
127
- }
128
-#endif /* BYFOUR */
129
-
130
- crc_table_empty = 0;
131
- }
132
- else { /* not first */
133
- /* wait for the other guy to finish (not efficient, but rare) */
134
- while (crc_table_empty)
135
- ;
136
- }
275
+ unsigned i, j, n;
276
+ z_crc_t p;
277
+
278
+ /* initialize the CRC of bytes tables */
279
+ for (i = 0; i < 256; i++) {
280
+ p = i;
281
+ for (j = 0; j < 8; j++)
282
+ p = p & 1 ? (p >> 1) ^ POLY : p >> 1;
283
+ crc_table[i] = p;
284
+#ifdef W
285
+ crc_big_table[i] = byte_swap(p);
286
+#endif
287
+ }
288
+
289
+ /* initialize the x^2^n mod p(x) table */
290
+ p = (z_crc_t)1 << 30; /* x^1 */
291
+ x2n_table[0] = p;
292
+ for (n = 1; n < 32; n++)
293
+ x2n_table[n] = p = multmodp(p, p);
294
+
295
+#ifdef W
296
+ /* initialize the braiding tables -- needs x2n_table[] */
297
+ braid(crc_braid_table, crc_braid_big_table, N, W);
298
+#endif
137299
138300
#ifdef MAKECRCH
139
- /* write out CRC tables to crc32.h */
140301
{
302
+ /*
303
+ The crc32.h header file contains tables for both 32-bit and 64-bit
304
+ z_word_t's, and so requires a 64-bit type be available. In that case,
305
+ z_word_t must be defined to be 64-bits. This code then also generates
306
+ and writes out the tables for the case that z_word_t is 32 bits.
307
+ */
308
+#if !defined(W) || W != 8
309
+# error Need a 64-bit integer type in order to generate crc32.h.
310
+#endif
141311
FILE *out;
312
+ int k, n;
313
+ z_crc_t ltl[8][256];
314
+ z_word_t big[8][256];
142315
143316
out = fopen("crc32.h", "w");
144317
if (out == NULL) return;
145
- fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
146
- fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
147
- fprintf(out, "local const z_crc_t FAR ");
148
- fprintf(out, "crc_table[TBLS][256] =\n{\n {\n");
149
- write_table(out, crc_table[0]);
150
-# ifdef BYFOUR
151
- fprintf(out, "#ifdef BYFOUR\n");
152
- for (k = 1; k < 8; k++) {
153
- fprintf(out, " },\n {\n");
154
- write_table(out, crc_table[k]);
155
- }
156
- fprintf(out, "#endif\n");
157
-# endif /* BYFOUR */
158
- fprintf(out, " }\n};\n");
318
+
319
+ /* write out little-endian CRC table to crc32.h */
320
+ fprintf(out,
321
+ "/* crc32.h -- tables for rapid CRC calculation\n"
322
+ " * Generated automatically by crc32.c\n */\n"
323
+ "\n"
324
+ "local const z_crc_t FAR crc_table[] = {\n"
325
+ " ");
326
+ write_table(out, crc_table, 256);
327
+ fprintf(out,
328
+ "};\n");
329
+
330
+ /* write out big-endian CRC table for 64-bit z_word_t to crc32.h */
331
+ fprintf(out,
332
+ "\n"
333
+ "#ifdef W\n"
334
+ "\n"
335
+ "#if W == 8\n"
336
+ "\n"
337
+ "local const z_word_t FAR crc_big_table[] = {\n"
338
+ " ");
339
+ write_table64(out, crc_big_table, 256);
340
+ fprintf(out,
341
+ "};\n");
342
+
343
+ /* write out big-endian CRC table for 32-bit z_word_t to crc32.h */
344
+ fprintf(out,
345
+ "\n"
346
+ "#else /* W == 4 */\n"
347
+ "\n"
348
+ "local const z_word_t FAR crc_big_table[] = {\n"
349
+ " ");
350
+ write_table32hi(out, crc_big_table, 256);
351
+ fprintf(out,
352
+ "};\n"
353
+ "\n"
354
+ "#endif\n");
355
+
356
+ /* write out braid tables for each value of N */
357
+ for (n = 1; n <= 6; n++) {
358
+ fprintf(out,
359
+ "\n"
360
+ "#if N == %d\n", n);
361
+
362
+ /* compute braid tables for this N and 64-bit word_t */
363
+ braid(ltl, big, n, 8);
364
+
365
+ /* write out braid tables for 64-bit z_word_t to crc32.h */
366
+ fprintf(out,
367
+ "\n"
368
+ "#if W == 8\n"
369
+ "\n"
370
+ "local const z_crc_t FAR crc_braid_table[][256] = {\n");
371
+ for (k = 0; k < 8; k++) {
372
+ fprintf(out, " {");
373
+ write_table(out, ltl[k], 256);
374
+ fprintf(out, "}%s", k < 7 ? ",\n" : "");
375
+ }
376
+ fprintf(out,
377
+ "};\n"
378
+ "\n"
379
+ "local const z_word_t FAR crc_braid_big_table[][256] = {\n");
380
+ for (k = 0; k < 8; k++) {
381
+ fprintf(out, " {");
382
+ write_table64(out, big[k], 256);
383
+ fprintf(out, "}%s", k < 7 ? ",\n" : "");
384
+ }
385
+ fprintf(out,
386
+ "};\n");
387
+
388
+ /* compute braid tables for this N and 32-bit word_t */
389
+ braid(ltl, big, n, 4);
390
+
391
+ /* write out braid tables for 32-bit z_word_t to crc32.h */
392
+ fprintf(out,
393
+ "\n"
394
+ "#else /* W == 4 */\n"
395
+ "\n"
396
+ "local const z_crc_t FAR crc_braid_table[][256] = {\n");
397
+ for (k = 0; k < 4; k++) {
398
+ fprintf(out, " {");
399
+ write_table(out, ltl[k], 256);
400
+ fprintf(out, "}%s", k < 3 ? ",\n" : "");
401
+ }
402
+ fprintf(out,
403
+ "};\n"
404
+ "\n"
405
+ "local const z_word_t FAR crc_braid_big_table[][256] = {\n");
406
+ for (k = 0; k < 4; k++) {
407
+ fprintf(out, " {");
408
+ write_table32hi(out, big[k], 256);
409
+ fprintf(out, "}%s", k < 3 ? ",\n" : "");
410
+ }
411
+ fprintf(out,
412
+ "};\n"
413
+ "\n"
414
+ "#endif\n"
415
+ "\n"
416
+ "#endif\n");
417
+ }
418
+ fprintf(out,
419
+ "\n"
420
+ "#endif\n");
421
+
422
+ /* write out zeros operator table to crc32.h */
423
+ fprintf(out,
424
+ "\n"
425
+ "local const z_crc_t FAR x2n_table[] = {\n"
426
+ " ");
427
+ write_table(out, x2n_table, 32);
428
+ fprintf(out,
429
+ "};\n");
159430
fclose(out);
160431
}
161432
#endif /* MAKECRCH */
162433
}
163434
164435
#ifdef MAKECRCH
165
-local void write_table(out, table)
436
+
437
+/*
438
+ Write the 32-bit values in table[0..k-1] to out, five per line in
439
+ hexadecimal separated by commas.
440
+ */
441
+local void write_table(out, table, k)
166442
FILE *out;
167443
const z_crc_t FAR *table;
444
+ int k;
168445
{
169446
int n;
170447
171
- for (n = 0; n < 256; n++)
172
- fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ",
448
+ for (n = 0; n < k; n++)
449
+ fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ",
173450
(unsigned long)(table[n]),
174
- n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
451
+ n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", "));
452
+}
453
+
454
+/*
455
+ Write the high 32-bits of each value in table[0..k-1] to out, five per line
456
+ in hexadecimal separated by commas.
457
+ */
458
+local void write_table32hi(out, table, k)
459
+FILE *out;
460
+const z_word_t FAR *table;
461
+int k;
462
+{
463
+ int n;
464
+
465
+ for (n = 0; n < k; n++)
466
+ fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ",
467
+ (unsigned long)(table[n] >> 32),
468
+ n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", "));
469
+}
470
+
471
+/*
472
+ Write the 64-bit values in table[0..k-1] to out, three per line in
473
+ hexadecimal separated by commas. This assumes that if there is a 64-bit
474
+ type, then there is also a long long integer type, and it is at least 64
475
+ bits. If not, then the type cast and format string can be adjusted
476
+ accordingly.
477
+ */
478
+local void write_table64(out, table, k)
479
+ FILE *out;
480
+ const z_word_t FAR *table;
481
+ int k;
482
+{
483
+ int n;
484
+
485
+ for (n = 0; n < k; n++)
486
+ fprintf(out, "%s0x%016llx%s", n == 0 || n % 3 ? "" : " ",
487
+ (unsigned long long)(table[n]),
488
+ n == k - 1 ? "" : (n % 3 == 2 ? ",\n" : ", "));
489
+}
490
+
491
+/* Actually do the deed. */
492
+int main()
493
+{
494
+ make_crc_table();
495
+ return 0;
175496
}
497
+
176498
#endif /* MAKECRCH */
499
+
500
+#ifdef W
501
+/*
502
+ Generate the little and big-endian braid tables for the given n and z_word_t
503
+ size w. Each array must have room for w blocks of 256 elements.
504
+ */
505
+local void braid(ltl, big, n, w)
506
+ z_crc_t ltl[][256];
507
+ z_word_t big[][256];
508
+ int n;
509
+ int w;
510
+{
511
+ int k;
512
+ z_crc_t i, p, q;
513
+ for (k = 0; k < w; k++) {
514
+ p = x2nmodp((n * w + 3 - k) << 3, 0);
515
+ ltl[k][0] = 0;
516
+ big[w - 1 - k][0] = 0;
517
+ for (i = 1; i < 256; i++) {
518
+ ltl[k][i] = q = multmodp(i << 24, p);
519
+ big[w - 1 - k][i] = byte_swap(q);
520
+ }
521
+ }
522
+}
523
+#endif
177524
178525
#else /* !DYNAMIC_CRC_TABLE */
179526
/* ========================================================================
180
- * Tables of CRC-32s of all single-byte values, made by make_crc_table().
527
+ * Tables for byte-wise and braided CRC-32 calculations, and a table of powers
528
+ * of x for combining CRC-32s, all made by make_crc_table().
181529
*/
182530
#include "crc32.h"
183531
#endif /* DYNAMIC_CRC_TABLE */
532
+
533
+/* ========================================================================
534
+ * Routines used for CRC calculation. Some are also required for the table
535
+ * generation above.
536
+ */
537
+
538
+/*
539
+ Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial,
540
+ reflected. For speed, this requires that a not be zero.
541
+ */
542
+local z_crc_t multmodp(a, b)
543
+ z_crc_t a;
544
+ z_crc_t b;
545
+{
546
+ z_crc_t m, p;
547
+
548
+ m = (z_crc_t)1 << 31;
549
+ p = 0;
550
+ for (;;) {
551
+ if (a & m) {
552
+ p ^= b;
553
+ if ((a & (m - 1)) == 0)
554
+ break;
555
+ }
556
+ m >>= 1;
557
+ b = b & 1 ? (b >> 1) ^ POLY : b >> 1;
558
+ }
559
+ return p;
560
+}
561
+
562
+/*
563
+ Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been
564
+ initialized.
565
+ */
566
+local z_crc_t x2nmodp(n, k)
567
+ z_off64_t n;
568
+ unsigned k;
569
+{
570
+ z_crc_t p;
571
+
572
+ p = (z_crc_t)1 << 31; /* x^0 == 1 */
573
+ while (n) {
574
+ if (n & 1)
575
+ p = multmodp(x2n_table[k & 31], p);
576
+ n >>= 1;
577
+ k++;
578
+ }
579
+ return p;
580
+}
184581
185582
/* =========================================================================
186
- * This function can be used by asm versions of crc32()
583
+ * This function can be used by asm versions of crc32(), and to force the
584
+ * generation of the CRC tables in a threaded application.
187585
*/
188586
const z_crc_t FAR * ZEXPORT get_crc_table()
189587
{
190588
#ifdef DYNAMIC_CRC_TABLE
191
- if (crc_table_empty)
192
- make_crc_table();
589
+ once(&made, make_crc_table);
193590
#endif /* DYNAMIC_CRC_TABLE */
194591
return (const z_crc_t FAR *)crc_table;
195592
}
196593
197
-/* ========================================================================= */
198
-#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8)
199
-#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
594
+/* =========================================================================
595
+ * Use ARM machine instructions if available. This will compute the CRC about
596
+ * ten times faster than the braided calculation. This code does not check for
597
+ * the presence of the CRC instruction at run time. __ARM_FEATURE_CRC32 will
598
+ * only be defined if the compilation specifies an ARM processor architecture
599
+ * that has the instructions. For example, compiling with -march=armv8.1-a or
600
+ * -march=armv8-a+crc, or -march=native if the compile machine has the crc32
601
+ * instructions.
602
+ */
603
+#ifdef ARMCRC32
604
+
605
+/*
606
+ Constants empirically determined to maximize speed. These values are from
607
+ measurements on a Cortex-A57. Your mileage may vary.
608
+ */
609
+#define Z_BATCH 3990 /* number of words in a batch */
610
+#define Z_BATCH_ZEROS 0xa10d3d0c /* computed from Z_BATCH = 3990 */
611
+#define Z_BATCH_MIN 800 /* fewest words in a final batch */
612
+
613
+unsigned long ZEXPORT crc32_z(crc, buf, len)
614
+ unsigned long crc;
615
+ const unsigned char FAR *buf;
616
+ z_size_t len;
617
+{
618
+ z_crc_t val;
619
+ z_word_t crc1, crc2;
620
+ const z_word_t *word;
621
+ z_word_t val0, val1, val2;
622
+ z_size_t last, last2, i;
623
+ z_size_t num;
624
+
625
+ /* Return initial CRC, if requested. */
626
+ if (buf == Z_NULL) return 0;
627
+
628
+#ifdef DYNAMIC_CRC_TABLE
629
+ once(&made, make_crc_table);
630
+#endif /* DYNAMIC_CRC_TABLE */
631
+
632
+ /* Pre-condition the CRC */
633
+ crc ^= 0xffffffff;
634
+
635
+ /* Compute the CRC up to a word boundary. */
636
+ while (len && ((z_size_t)buf & 7) != 0) {
637
+ len--;
638
+ val = *buf++;
639
+ __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val));
640
+ }
641
+
642
+ /* Prepare to compute the CRC on full 64-bit words word[0..num-1]. */
643
+ word = (z_word_t const *)buf;
644
+ num = len >> 3;
645
+ len &= 7;
646
+
647
+ /* Do three interleaved CRCs to realize the throughput of one crc32x
648
+ instruction per cycle. Each CRC is calcuated on Z_BATCH words. The three
649
+ CRCs are combined into a single CRC after each set of batches. */
650
+ while (num >= 3 * Z_BATCH) {
651
+ crc1 = 0;
652
+ crc2 = 0;
653
+ for (i = 0; i < Z_BATCH; i++) {
654
+ val0 = word[i];
655
+ val1 = word[i + Z_BATCH];
656
+ val2 = word[i + 2 * Z_BATCH];
657
+ __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0));
658
+ __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1));
659
+ __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2));
660
+ }
661
+ word += 3 * Z_BATCH;
662
+ num -= 3 * Z_BATCH;
663
+ crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc1;
664
+ crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc2;
665
+ }
666
+
667
+ /* Do one last smaller batch with the remaining words, if there are enough
668
+ to pay for the combination of CRCs. */
669
+ last = num / 3;
670
+ if (last >= Z_BATCH_MIN) {
671
+ last2 = last << 1;
672
+ crc1 = 0;
673
+ crc2 = 0;
674
+ for (i = 0; i < last; i++) {
675
+ val0 = word[i];
676
+ val1 = word[i + last];
677
+ val2 = word[i + last2];
678
+ __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0));
679
+ __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1));
680
+ __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2));
681
+ }
682
+ word += 3 * last;
683
+ num -= 3 * last;
684
+ val = x2nmodp(last, 6);
685
+ crc = multmodp(val, crc) ^ crc1;
686
+ crc = multmodp(val, crc) ^ crc2;
687
+ }
688
+
689
+ /* Compute the CRC on any remaining words. */
690
+ for (i = 0; i < num; i++) {
691
+ val0 = word[i];
692
+ __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0));
693
+ }
694
+ word += num;
695
+
696
+ /* Complete the CRC on any remaining bytes. */
697
+ buf = (const unsigned char FAR *)word;
698
+ while (len) {
699
+ len--;
700
+ val = *buf++;
701
+ __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val));
702
+ }
703
+
704
+ /* Return the CRC, post-conditioned. */
705
+ return crc ^ 0xffffffff;
706
+}
707
+
708
+#else
709
+
710
+#ifdef W
711
+
712
+/*
713
+ Return the CRC of the W bytes in the word_t data, taking the
714
+ least-significant byte of the word as the first byte of data, without any pre
715
+ or post conditioning. This is used to combine the CRCs of each braid.
716
+ */
717
+local z_crc_t crc_word(data)
718
+ z_word_t data;
719
+{
720
+ int k;
721
+ for (k = 0; k < W; k++)
722
+ data = (data >> 8) ^ crc_table[data & 0xff];
723
+ return (z_crc_t)data;
724
+}
725
+
726
+local z_word_t crc_word_big(data)
727
+ z_word_t data;
728
+{
729
+ int k;
730
+ for (k = 0; k < W; k++)
731
+ data = (data << 8) ^
732
+ crc_big_table[(data >> ((W - 1) << 3)) & 0xff];
733
+ return data;
734
+}
735
+
736
+#endif
200737
201738
/* ========================================================================= */
202739
unsigned long ZEXPORT crc32_z(crc, buf, len)
203740
unsigned long crc;
204741
const unsigned char FAR *buf;
205742
z_size_t len;
206743
{
207
- if (buf == Z_NULL) return 0UL;
744
+ /* Return initial CRC, if requested. */
745
+ if (buf == Z_NULL) return 0;
208746
209747
#ifdef DYNAMIC_CRC_TABLE
210
- if (crc_table_empty)
211
- make_crc_table();
748
+ once(&made, make_crc_table);
212749
#endif /* DYNAMIC_CRC_TABLE */
213750
214
-#ifdef BYFOUR
215
- if (sizeof(void *) == sizeof(ptrdiff_t)) {
216
- z_crc_t endian;
751
+ /* Pre-condition the CRC */
752
+ crc ^= 0xffffffff;
753
+
754
+#ifdef W
755
+
756
+ /* If provided enough bytes, do a braided CRC calculation. */
757
+ if (len >= N * W + W - 1) {
758
+ z_size_t blks;
759
+ z_word_t const *words;
760
+ unsigned endian;
761
+ int k;
762
+
763
+ /* Compute the CRC up to a z_word_t boundary. */
764
+ while (len && ((z_size_t)buf & (W - 1)) != 0) {
765
+ len--;
766
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
767
+ }
768
+
769
+ /* Compute the CRC on as many N z_word_t blocks as are available. */
770
+ blks = len / (N * W);
771
+ len -= blks * N * W;
772
+ words = (z_word_t const *)buf;
217773
774
+ /* Do endian check at execution time instead of compile time, since ARM
775
+ processors can change the endianess at execution time. If the
776
+ compiler knows what the endianess will be, it can optimize out the
777
+ check and the unused branch. */
218778
endian = 1;
219
- if (*((unsigned char *)(&endian)))
220
- return crc32_little(crc, buf, len);
221
- else
222
- return crc32_big(crc, buf, len);
223
- }
224
-#endif /* BYFOUR */
225
- crc = crc ^ 0xffffffffUL;
226
- while (len >= 8) {
227
- DO8;
779
+ if (*(unsigned char *)&endian) {
780
+ /* Little endian. */
781
+
782
+ z_crc_t crc0;
783
+ z_word_t word0;
784
+#if N > 1
785
+ z_crc_t crc1;
786
+ z_word_t word1;
787
+#if N > 2
788
+ z_crc_t crc2;
789
+ z_word_t word2;
790
+#if N > 3
791
+ z_crc_t crc3;
792
+ z_word_t word3;
793
+#if N > 4
794
+ z_crc_t crc4;
795
+ z_word_t word4;
796
+#if N > 5
797
+ z_crc_t crc5;
798
+ z_word_t word5;
799
+#endif
800
+#endif
801
+#endif
802
+#endif
803
+#endif
804
+
805
+ /* Initialize the CRC for each braid. */
806
+ crc0 = crc;
807
+#if N > 1
808
+ crc1 = 0;
809
+#if N > 2
810
+ crc2 = 0;
811
+#if N > 3
812
+ crc3 = 0;
813
+#if N > 4
814
+ crc4 = 0;
815
+#if N > 5
816
+ crc5 = 0;
817
+#endif
818
+#endif
819
+#endif
820
+#endif
821
+#endif
822
+
823
+ /*
824
+ Process the first blks-1 blocks, computing the CRCs on each braid
825
+ independently.
826
+ */
827
+ while (--blks) {
828
+ /* Load the word for each braid into registers. */
829
+ word0 = crc0 ^ words[0];
830
+#if N > 1
831
+ word1 = crc1 ^ words[1];
832
+#if N > 2
833
+ word2 = crc2 ^ words[2];
834
+#if N > 3
835
+ word3 = crc3 ^ words[3];
836
+#if N > 4
837
+ word4 = crc4 ^ words[4];
838
+#if N > 5
839
+ word5 = crc5 ^ words[5];
840
+#endif
841
+#endif
842
+#endif
843
+#endif
844
+#endif
845
+ words += N;
846
+
847
+ /* Compute and update the CRC for each word. The loop should
848
+ get unrolled. */
849
+ crc0 = crc_braid_table[0][word0 & 0xff];
850
+#if N > 1
851
+ crc1 = crc_braid_table[0][word1 & 0xff];
852
+#if N > 2
853
+ crc2 = crc_braid_table[0][word2 & 0xff];
854
+#if N > 3
855
+ crc3 = crc_braid_table[0][word3 & 0xff];
856
+#if N > 4
857
+ crc4 = crc_braid_table[0][word4 & 0xff];
858
+#if N > 5
859
+ crc5 = crc_braid_table[0][word5 & 0xff];
860
+#endif
861
+#endif
862
+#endif
863
+#endif
864
+#endif
865
+ for (k = 1; k < W; k++) {
866
+ crc0 ^= crc_braid_table[k][(word0 >> (k << 3)) & 0xff];
867
+#if N > 1
868
+ crc1 ^= crc_braid_table[k][(word1 >> (k << 3)) & 0xff];
869
+#if N > 2
870
+ crc2 ^= crc_braid_table[k][(word2 >> (k << 3)) & 0xff];
871
+#if N > 3
872
+ crc3 ^= crc_braid_table[k][(word3 >> (k << 3)) & 0xff];
873
+#if N > 4
874
+ crc4 ^= crc_braid_table[k][(word4 >> (k << 3)) & 0xff];
875
+#if N > 5
876
+ crc5 ^= crc_braid_table[k][(word5 >> (k << 3)) & 0xff];
877
+#endif
878
+#endif
879
+#endif
880
+#endif
881
+#endif
882
+ }
883
+ }
884
+
885
+ /*
886
+ Process the last block, combining the CRCs of the N braids at the
887
+ same time.
888
+ */
889
+ crc = crc_word(crc0 ^ words[0]);
890
+#if N > 1
891
+ crc = crc_word(crc1 ^ words[1] ^ crc);
892
+#if N > 2
893
+ crc = crc_word(crc2 ^ words[2] ^ crc);
894
+#if N > 3
895
+ crc = crc_word(crc3 ^ words[3] ^ crc);
896
+#if N > 4
897
+ crc = crc_word(crc4 ^ words[4] ^ crc);
898
+#if N > 5
899
+ crc = crc_word(crc5 ^ words[5] ^ crc);
900
+#endif
901
+#endif
902
+#endif
903
+#endif
904
+#endif
905
+ words += N;
906
+ }
907
+ else {
908
+ /* Big endian. */
909
+
910
+ z_word_t crc0, word0, comb;
911
+#if N > 1
912
+ z_word_t crc1, word1;
913
+#if N > 2
914
+ z_word_t crc2, word2;
915
+#if N > 3
916
+ z_word_t crc3, word3;
917
+#if N > 4
918
+ z_word_t crc4, word4;
919
+#if N > 5
920
+ z_word_t crc5, word5;
921
+#endif
922
+#endif
923
+#endif
924
+#endif
925
+#endif
926
+
927
+ /* Initialize the CRC for each braid. */
928
+ crc0 = byte_swap(crc);
929
+#if N > 1
930
+ crc1 = 0;
931
+#if N > 2
932
+ crc2 = 0;
933
+#if N > 3
934
+ crc3 = 0;
935
+#if N > 4
936
+ crc4 = 0;
937
+#if N > 5
938
+ crc5 = 0;
939
+#endif
940
+#endif
941
+#endif
942
+#endif
943
+#endif
944
+
945
+ /*
946
+ Process the first blks-1 blocks, computing the CRCs on each braid
947
+ independently.
948
+ */
949
+ while (--blks) {
950
+ /* Load the word for each braid into registers. */
951
+ word0 = crc0 ^ words[0];
952
+#if N > 1
953
+ word1 = crc1 ^ words[1];
954
+#if N > 2
955
+ word2 = crc2 ^ words[2];
956
+#if N > 3
957
+ word3 = crc3 ^ words[3];
958
+#if N > 4
959
+ word4 = crc4 ^ words[4];
960
+#if N > 5
961
+ word5 = crc5 ^ words[5];
962
+#endif
963
+#endif
964
+#endif
965
+#endif
966
+#endif
967
+ words += N;
968
+
969
+ /* Compute and update the CRC for each word. The loop should
970
+ get unrolled. */
971
+ crc0 = crc_braid_big_table[0][word0 & 0xff];
972
+#if N > 1
973
+ crc1 = crc_braid_big_table[0][word1 & 0xff];
974
+#if N > 2
975
+ crc2 = crc_braid_big_table[0][word2 & 0xff];
976
+#if N > 3
977
+ crc3 = crc_braid_big_table[0][word3 & 0xff];
978
+#if N > 4
979
+ crc4 = crc_braid_big_table[0][word4 & 0xff];
980
+#if N > 5
981
+ crc5 = crc_braid_big_table[0][word5 & 0xff];
982
+#endif
983
+#endif
984
+#endif
985
+#endif
986
+#endif
987
+ for (k = 1; k < W; k++) {
988
+ crc0 ^= crc_braid_big_table[k][(word0 >> (k << 3)) & 0xff];
989
+#if N > 1
990
+ crc1 ^= crc_braid_big_table[k][(word1 >> (k << 3)) & 0xff];
991
+#if N > 2
992
+ crc2 ^= crc_braid_big_table[k][(word2 >> (k << 3)) & 0xff];
993
+#if N > 3
994
+ crc3 ^= crc_braid_big_table[k][(word3 >> (k << 3)) & 0xff];
995
+#if N > 4
996
+ crc4 ^= crc_braid_big_table[k][(word4 >> (k << 3)) & 0xff];
997
+#if N > 5
998
+ crc5 ^= crc_braid_big_table[k][(word5 >> (k << 3)) & 0xff];
999
+#endif
1000
+#endif
1001
+#endif
1002
+#endif
1003
+#endif
1004
+ }
1005
+ }
1006
+
1007
+ /*
1008
+ Process the last block, combining the CRCs of the N braids at the
1009
+ same time.
1010
+ */
1011
+ comb = crc_word_big(crc0 ^ words[0]);
1012
+#if N > 1
1013
+ comb = crc_word_big(crc1 ^ words[1] ^ comb);
1014
+#if N > 2
1015
+ comb = crc_word_big(crc2 ^ words[2] ^ comb);
1016
+#if N > 3
1017
+ comb = crc_word_big(crc3 ^ words[3] ^ comb);
1018
+#if N > 4
1019
+ comb = crc_word_big(crc4 ^ words[4] ^ comb);
1020
+#if N > 5
1021
+ comb = crc_word_big(crc5 ^ words[5] ^ comb);
1022
+#endif
1023
+#endif
1024
+#endif
1025
+#endif
1026
+#endif
1027
+ words += N;
1028
+ crc = byte_swap(comb);
1029
+ }
1030
+
1031
+ /*
1032
+ Update the pointer to the remaining bytes to process.
1033
+ */
1034
+ buf = (unsigned char const *)words;
1035
+ }
1036
+
1037
+#endif /* W */
1038
+
1039
+ /* Complete the computation of the CRC on any remaining bytes. */
1040
+ while (len >= 8) {
2281041
len -= 8;
1042
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1043
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1044
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1045
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1046
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1047
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1048
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1049
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1050
+ }
1051
+ while (len) {
1052
+ len--;
1053
+ crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
2291054
}
230
- if (len) do {
231
- DO1;
232
- } while (--len);
233
- return crc ^ 0xffffffffUL;
1055
+
1056
+ /* Return the CRC, post-conditioned. */
1057
+ return crc ^ 0xffffffff;
2341058
}
1059
+
1060
+#endif
2351061
2361062
/* ========================================================================= */
2371063
unsigned long ZEXPORT crc32(crc, buf, len)
2381064
unsigned long crc;
2391065
const unsigned char FAR *buf;
@@ -240,203 +1066,51 @@
2401066
uInt len;
2411067
{
2421068
return crc32_z(crc, buf, len);
2431069
}
2441070
245
-#ifdef BYFOUR
246
-
247
-/*
248
- This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit
249
- integer pointer type. This violates the strict aliasing rule, where a
250
- compiler can assume, for optimization purposes, that two pointers to
251
- fundamentally different types won't ever point to the same memory. This can
252
- manifest as a problem only if one of the pointers is written to. This code
253
- only reads from those pointers. So long as this code remains isolated in
254
- this compilation unit, there won't be a problem. For this reason, this code
255
- should not be copied and pasted into a compilation unit in which other code
256
- writes to the buffer that is passed to these routines.
257
- */
258
-
259
-/* ========================================================================= */
260
-#define DOLIT4 c ^= *buf4++; \
261
- c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
262
- crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]
263
-#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
264
-
265
-/* ========================================================================= */
266
-local unsigned long crc32_little(crc, buf, len)
267
- unsigned long crc;
268
- const unsigned char FAR *buf;
269
- z_size_t len;
270
-{
271
- register z_crc_t c;
272
- register const z_crc_t FAR *buf4;
273
-
274
- c = (z_crc_t)crc;
275
- c = ~c;
276
- while (len && ((ptrdiff_t)buf & 3)) {
277
- c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
278
- len--;
279
- }
280
-
281
- buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
282
- while (len >= 32) {
283
- DOLIT32;
284
- len -= 32;
285
- }
286
- while (len >= 4) {
287
- DOLIT4;
288
- len -= 4;
289
- }
290
- buf = (const unsigned char FAR *)buf4;
291
-
292
- if (len) do {
293
- c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
294
- } while (--len);
295
- c = ~c;
296
- return (unsigned long)c;
297
-}
298
-
299
-/* ========================================================================= */
300
-#define DOBIG4 c ^= *buf4++; \
301
- c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
302
- crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
303
-#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
304
-
305
-/* ========================================================================= */
306
-local unsigned long crc32_big(crc, buf, len)
307
- unsigned long crc;
308
- const unsigned char FAR *buf;
309
- z_size_t len;
310
-{
311
- register z_crc_t c;
312
- register const z_crc_t FAR *buf4;
313
-
314
- c = ZSWAP32((z_crc_t)crc);
315
- c = ~c;
316
- while (len && ((ptrdiff_t)buf & 3)) {
317
- c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
318
- len--;
319
- }
320
-
321
- buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
322
- while (len >= 32) {
323
- DOBIG32;
324
- len -= 32;
325
- }
326
- while (len >= 4) {
327
- DOBIG4;
328
- len -= 4;
329
- }
330
- buf = (const unsigned char FAR *)buf4;
331
-
332
- if (len) do {
333
- c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
334
- } while (--len);
335
- c = ~c;
336
- return (unsigned long)(ZSWAP32(c));
337
-}
338
-
339
-#endif /* BYFOUR */
340
-
341
-#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */
342
-
343
-/* ========================================================================= */
344
-local unsigned long gf2_matrix_times(mat, vec)
345
- unsigned long *mat;
346
- unsigned long vec;
347
-{
348
- unsigned long sum;
349
-
350
- sum = 0;
351
- while (vec) {
352
- if (vec & 1)
353
- sum ^= *mat;
354
- vec >>= 1;
355
- mat++;
356
- }
357
- return sum;
358
-}
359
-
360
-/* ========================================================================= */
361
-local void gf2_matrix_square(square, mat)
362
- unsigned long *square;
363
- unsigned long *mat;
364
-{
365
- int n;
366
-
367
- for (n = 0; n < GF2_DIM; n++)
368
- square[n] = gf2_matrix_times(mat, mat[n]);
369
-}
370
-
371
-/* ========================================================================= */
372
-local uLong crc32_combine_(crc1, crc2, len2)
1071
+/* ========================================================================= */
1072
+uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
3731073
uLong crc1;
3741074
uLong crc2;
3751075
z_off64_t len2;
3761076
{
377
- int n;
378
- unsigned long row;
379
- unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */
380
- unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */
381
-
382
- /* degenerate case (also disallow negative lengths) */
383
- if (len2 <= 0)
384
- return crc1;
385
-
386
- /* put operator for one zero bit in odd */
387
- odd[0] = 0xedb88320UL; /* CRC-32 polynomial */
388
- row = 1;
389
- for (n = 1; n < GF2_DIM; n++) {
390
- odd[n] = row;
391
- row <<= 1;
392
- }
393
-
394
- /* put operator for two zero bits in even */
395
- gf2_matrix_square(even, odd);
396
-
397
- /* put operator for four zero bits in odd */
398
- gf2_matrix_square(odd, even);
399
-
400
- /* apply len2 zeros to crc1 (first square will put the operator for one
401
- zero byte, eight zero bits, in even) */
402
- do {
403
- /* apply zeros operator for this bit of len2 */
404
- gf2_matrix_square(even, odd);
405
- if (len2 & 1)
406
- crc1 = gf2_matrix_times(even, crc1);
407
- len2 >>= 1;
408
-
409
- /* if no more bits set, then done */
410
- if (len2 == 0)
411
- break;
412
-
413
- /* another iteration of the loop with odd and even swapped */
414
- gf2_matrix_square(odd, even);
415
- if (len2 & 1)
416
- crc1 = gf2_matrix_times(odd, crc1);
417
- len2 >>= 1;
418
-
419
- /* if no more bits set, then done */
420
- } while (len2 != 0);
421
-
422
- /* return combined crc */
423
- crc1 ^= crc2;
424
- return crc1;
1077
+#ifdef DYNAMIC_CRC_TABLE
1078
+ once(&made, make_crc_table);
1079
+#endif /* DYNAMIC_CRC_TABLE */
1080
+ return multmodp(x2nmodp(len2, 3), crc1) ^ crc2;
4251081
}
4261082
4271083
/* ========================================================================= */
4281084
uLong ZEXPORT crc32_combine(crc1, crc2, len2)
4291085
uLong crc1;
4301086
uLong crc2;
4311087
z_off_t len2;
4321088
{
433
- return crc32_combine_(crc1, crc2, len2);
1089
+ return crc32_combine64(crc1, crc2, len2);
4341090
}
4351091
436
-uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
437
- uLong crc1;
438
- uLong crc2;
1092
+/* ========================================================================= */
1093
+uLong ZEXPORT crc32_combine_gen64(len2)
4391094
z_off64_t len2;
4401095
{
441
- return crc32_combine_(crc1, crc2, len2);
1096
+#ifdef DYNAMIC_CRC_TABLE
1097
+ once(&made, make_crc_table);
1098
+#endif /* DYNAMIC_CRC_TABLE */
1099
+ return x2nmodp(len2, 3);
1100
+}
1101
+
1102
+/* ========================================================================= */
1103
+uLong ZEXPORT crc32_combine_gen(len2)
1104
+ z_off_t len2;
1105
+{
1106
+ return crc32_combine_gen64(len2);
1107
+}
1108
+
1109
+/* ========================================================================= */
1110
+uLong crc32_combine_op(crc1, crc2, op)
1111
+ uLong crc1;
1112
+ uLong crc2;
1113
+ uLong op;
1114
+{
1115
+ return multmodp(op, crc1) ^ crc2;
4421116
}
4431117
--- compat/zlib/crc32.c
+++ compat/zlib/crc32.c
@@ -1,239 +1,1065 @@
1 /* crc32.c -- compute the CRC-32 of a data stream
2 * Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 *
5 * Thanks to Rodney Brown <[email protected]> for his contribution of faster
6 * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing
7 * tables for updating the shift register in one step with three exclusive-ors
8 * instead of four steps with four exclusive-ors. This results in about a
9 * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3.
10 */
11
12 /* @(#) $Id$ */
13
14 /*
15 Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore
16 protection on the static variables used to control the first-use generation
17 of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should
18 first call get_crc_table() to initialize the tables before allowing more than
19 one thread to use crc32().
20
21 DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h.
 
22 */
23
24 #ifdef MAKECRCH
25 # include <stdio.h>
26 # ifndef DYNAMIC_CRC_TABLE
27 # define DYNAMIC_CRC_TABLE
28 # endif /* !DYNAMIC_CRC_TABLE */
29 #endif /* MAKECRCH */
30
31 #include "zutil.h" /* for STDC and FAR definitions */
32
33 /* Definitions for doing the crc four data bytes at a time. */
34 #if !defined(NOBYFOUR) && defined(Z_U4)
35 # define BYFOUR
36 #endif
37 #ifdef BYFOUR
38 local unsigned long crc32_little OF((unsigned long,
39 const unsigned char FAR *, z_size_t));
40 local unsigned long crc32_big OF((unsigned long,
41 const unsigned char FAR *, z_size_t));
42 # define TBLS 8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43 #else
44 # define TBLS 1
45 #endif /* BYFOUR */
46
47 /* Local functions for crc concatenation */
48 local unsigned long gf2_matrix_times OF((unsigned long *mat,
49 unsigned long vec));
50 local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
51 local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2));
52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
54 #ifdef DYNAMIC_CRC_TABLE
55
56 local volatile int crc_table_empty = 1;
57 local z_crc_t FAR crc_table[TBLS][256];
58 local void make_crc_table OF((void));
 
 
 
 
 
 
59 #ifdef MAKECRCH
60 local void write_table OF((FILE *, const z_crc_t FAR *));
 
 
61 #endif /* MAKECRCH */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62 /*
63 Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
64 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.
65
66 Polynomials over GF(2) are represented in binary, one bit per coefficient,
67 with the lowest powers in the most significant bit. Then adding polynomials
68 is just exclusive-or, and multiplying a polynomial by x is a right shift by
69 one. If we call the above polynomial p, and represent a byte as the
70 polynomial q, also with the lowest power in the most significant bit (so the
71 byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
72 where a mod b means the remainder after dividing a by b.
73
74 This calculation is done using the shift-register method of multiplying and
75 taking the remainder. The register is initialized to zero, and for each
76 incoming bit, x^32 is added mod p to the register if the bit is a one (where
77 x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
78 x (which is shifting right by one and adding x^32 mod p if the bit shifted
79 out is a one). We start with the highest power (least significant bit) of
80 q and repeat for all eight bits of q.
81
82 The first table is simply the CRC of all possible eight bit values. This is
83 all the information needed to generate CRCs on data a byte at a time for all
84 combinations of CRC register values and incoming bytes. The remaining tables
85 allow for word-at-a-time CRC calculation for both big-endian and little-
86 endian machines, where a word is four bytes.
87 */
88 local void make_crc_table()
89 {
90 z_crc_t c;
91 int n, k;
92 z_crc_t poly; /* polynomial exclusive-or pattern */
93 /* terms of polynomial defining this crc (except x^32): */
94 static volatile int first = 1; /* flag to limit concurrent making */
95 static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
96
97 /* See if another task is already doing this (not thread-safe, but better
98 than nothing -- significantly reduces duration of vulnerability in
99 case the advice about DYNAMIC_CRC_TABLE is ignored) */
100 if (first) {
101 first = 0;
102
103 /* make exclusive-or pattern from polynomial (0xedb88320UL) */
104 poly = 0;
105 for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++)
106 poly |= (z_crc_t)1 << (31 - p[n]);
107
108 /* generate a crc for every 8-bit value */
109 for (n = 0; n < 256; n++) {
110 c = (z_crc_t)n;
111 for (k = 0; k < 8; k++)
112 c = c & 1 ? poly ^ (c >> 1) : c >> 1;
113 crc_table[0][n] = c;
114 }
115
116 #ifdef BYFOUR
117 /* generate crc for each value followed by one, two, and three zeros,
118 and then the byte reversal of those as well as the first table */
119 for (n = 0; n < 256; n++) {
120 c = crc_table[0][n];
121 crc_table[4][n] = ZSWAP32(c);
122 for (k = 1; k < 4; k++) {
123 c = crc_table[0][c & 0xff] ^ (c >> 8);
124 crc_table[k][n] = c;
125 crc_table[k + 4][n] = ZSWAP32(c);
126 }
127 }
128 #endif /* BYFOUR */
129
130 crc_table_empty = 0;
131 }
132 else { /* not first */
133 /* wait for the other guy to finish (not efficient, but rare) */
134 while (crc_table_empty)
135 ;
136 }
137
138 #ifdef MAKECRCH
139 /* write out CRC tables to crc32.h */
140 {
 
 
 
 
 
 
 
 
 
141 FILE *out;
 
 
 
142
143 out = fopen("crc32.h", "w");
144 if (out == NULL) return;
145 fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
146 fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
147 fprintf(out, "local const z_crc_t FAR ");
148 fprintf(out, "crc_table[TBLS][256] =\n{\n {\n");
149 write_table(out, crc_table[0]);
150 # ifdef BYFOUR
151 fprintf(out, "#ifdef BYFOUR\n");
152 for (k = 1; k < 8; k++) {
153 fprintf(out, " },\n {\n");
154 write_table(out, crc_table[k]);
155 }
156 fprintf(out, "#endif\n");
157 # endif /* BYFOUR */
158 fprintf(out, " }\n};\n");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
159 fclose(out);
160 }
161 #endif /* MAKECRCH */
162 }
163
164 #ifdef MAKECRCH
165 local void write_table(out, table)
 
 
 
 
 
166 FILE *out;
167 const z_crc_t FAR *table;
 
168 {
169 int n;
170
171 for (n = 0; n < 256; n++)
172 fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ",
173 (unsigned long)(table[n]),
174 n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175 }
 
176 #endif /* MAKECRCH */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
178 #else /* !DYNAMIC_CRC_TABLE */
179 /* ========================================================================
180 * Tables of CRC-32s of all single-byte values, made by make_crc_table().
 
181 */
182 #include "crc32.h"
183 #endif /* DYNAMIC_CRC_TABLE */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
184
185 /* =========================================================================
186 * This function can be used by asm versions of crc32()
 
187 */
188 const z_crc_t FAR * ZEXPORT get_crc_table()
189 {
190 #ifdef DYNAMIC_CRC_TABLE
191 if (crc_table_empty)
192 make_crc_table();
193 #endif /* DYNAMIC_CRC_TABLE */
194 return (const z_crc_t FAR *)crc_table;
195 }
196
197 /* ========================================================================= */
198 #define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8)
199 #define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
201 /* ========================================================================= */
202 unsigned long ZEXPORT crc32_z(crc, buf, len)
203 unsigned long crc;
204 const unsigned char FAR *buf;
205 z_size_t len;
206 {
207 if (buf == Z_NULL) return 0UL;
 
208
209 #ifdef DYNAMIC_CRC_TABLE
210 if (crc_table_empty)
211 make_crc_table();
212 #endif /* DYNAMIC_CRC_TABLE */
213
214 #ifdef BYFOUR
215 if (sizeof(void *) == sizeof(ptrdiff_t)) {
216 z_crc_t endian;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
 
 
 
 
218 endian = 1;
219 if (*((unsigned char *)(&endian)))
220 return crc32_little(crc, buf, len);
221 else
222 return crc32_big(crc, buf, len);
223 }
224 #endif /* BYFOUR */
225 crc = crc ^ 0xffffffffUL;
226 while (len >= 8) {
227 DO8;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
228 len -= 8;
 
 
 
 
 
 
 
 
 
 
 
 
229 }
230 if (len) do {
231 DO1;
232 } while (--len);
233 return crc ^ 0xffffffffUL;
234 }
 
 
235
236 /* ========================================================================= */
237 unsigned long ZEXPORT crc32(crc, buf, len)
238 unsigned long crc;
239 const unsigned char FAR *buf;
@@ -240,203 +1066,51 @@
240 uInt len;
241 {
242 return crc32_z(crc, buf, len);
243 }
244
245 #ifdef BYFOUR
246
247 /*
248 This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit
249 integer pointer type. This violates the strict aliasing rule, where a
250 compiler can assume, for optimization purposes, that two pointers to
251 fundamentally different types won't ever point to the same memory. This can
252 manifest as a problem only if one of the pointers is written to. This code
253 only reads from those pointers. So long as this code remains isolated in
254 this compilation unit, there won't be a problem. For this reason, this code
255 should not be copied and pasted into a compilation unit in which other code
256 writes to the buffer that is passed to these routines.
257 */
258
259 /* ========================================================================= */
260 #define DOLIT4 c ^= *buf4++; \
261 c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
262 crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]
263 #define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
264
265 /* ========================================================================= */
266 local unsigned long crc32_little(crc, buf, len)
267 unsigned long crc;
268 const unsigned char FAR *buf;
269 z_size_t len;
270 {
271 register z_crc_t c;
272 register const z_crc_t FAR *buf4;
273
274 c = (z_crc_t)crc;
275 c = ~c;
276 while (len && ((ptrdiff_t)buf & 3)) {
277 c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
278 len--;
279 }
280
281 buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
282 while (len >= 32) {
283 DOLIT32;
284 len -= 32;
285 }
286 while (len >= 4) {
287 DOLIT4;
288 len -= 4;
289 }
290 buf = (const unsigned char FAR *)buf4;
291
292 if (len) do {
293 c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
294 } while (--len);
295 c = ~c;
296 return (unsigned long)c;
297 }
298
299 /* ========================================================================= */
300 #define DOBIG4 c ^= *buf4++; \
301 c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
302 crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
303 #define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
304
305 /* ========================================================================= */
306 local unsigned long crc32_big(crc, buf, len)
307 unsigned long crc;
308 const unsigned char FAR *buf;
309 z_size_t len;
310 {
311 register z_crc_t c;
312 register const z_crc_t FAR *buf4;
313
314 c = ZSWAP32((z_crc_t)crc);
315 c = ~c;
316 while (len && ((ptrdiff_t)buf & 3)) {
317 c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
318 len--;
319 }
320
321 buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
322 while (len >= 32) {
323 DOBIG32;
324 len -= 32;
325 }
326 while (len >= 4) {
327 DOBIG4;
328 len -= 4;
329 }
330 buf = (const unsigned char FAR *)buf4;
331
332 if (len) do {
333 c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
334 } while (--len);
335 c = ~c;
336 return (unsigned long)(ZSWAP32(c));
337 }
338
339 #endif /* BYFOUR */
340
341 #define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */
342
343 /* ========================================================================= */
344 local unsigned long gf2_matrix_times(mat, vec)
345 unsigned long *mat;
346 unsigned long vec;
347 {
348 unsigned long sum;
349
350 sum = 0;
351 while (vec) {
352 if (vec & 1)
353 sum ^= *mat;
354 vec >>= 1;
355 mat++;
356 }
357 return sum;
358 }
359
360 /* ========================================================================= */
361 local void gf2_matrix_square(square, mat)
362 unsigned long *square;
363 unsigned long *mat;
364 {
365 int n;
366
367 for (n = 0; n < GF2_DIM; n++)
368 square[n] = gf2_matrix_times(mat, mat[n]);
369 }
370
371 /* ========================================================================= */
372 local uLong crc32_combine_(crc1, crc2, len2)
373 uLong crc1;
374 uLong crc2;
375 z_off64_t len2;
376 {
377 int n;
378 unsigned long row;
379 unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */
380 unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */
381
382 /* degenerate case (also disallow negative lengths) */
383 if (len2 <= 0)
384 return crc1;
385
386 /* put operator for one zero bit in odd */
387 odd[0] = 0xedb88320UL; /* CRC-32 polynomial */
388 row = 1;
389 for (n = 1; n < GF2_DIM; n++) {
390 odd[n] = row;
391 row <<= 1;
392 }
393
394 /* put operator for two zero bits in even */
395 gf2_matrix_square(even, odd);
396
397 /* put operator for four zero bits in odd */
398 gf2_matrix_square(odd, even);
399
400 /* apply len2 zeros to crc1 (first square will put the operator for one
401 zero byte, eight zero bits, in even) */
402 do {
403 /* apply zeros operator for this bit of len2 */
404 gf2_matrix_square(even, odd);
405 if (len2 & 1)
406 crc1 = gf2_matrix_times(even, crc1);
407 len2 >>= 1;
408
409 /* if no more bits set, then done */
410 if (len2 == 0)
411 break;
412
413 /* another iteration of the loop with odd and even swapped */
414 gf2_matrix_square(odd, even);
415 if (len2 & 1)
416 crc1 = gf2_matrix_times(odd, crc1);
417 len2 >>= 1;
418
419 /* if no more bits set, then done */
420 } while (len2 != 0);
421
422 /* return combined crc */
423 crc1 ^= crc2;
424 return crc1;
425 }
426
427 /* ========================================================================= */
428 uLong ZEXPORT crc32_combine(crc1, crc2, len2)
429 uLong crc1;
430 uLong crc2;
431 z_off_t len2;
432 {
433 return crc32_combine_(crc1, crc2, len2);
434 }
435
436 uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
437 uLong crc1;
438 uLong crc2;
439 z_off64_t len2;
440 {
441 return crc32_combine_(crc1, crc2, len2);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
442 }
443
--- compat/zlib/crc32.c
+++ compat/zlib/crc32.c
@@ -1,239 +1,1065 @@
1 /* crc32.c -- compute the CRC-32 of a data stream
2 * Copyright (C) 1995-2022 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 *
5 * This interleaved implementation of a CRC makes use of pipelined multiple
6 * arithmetic-logic units, commonly found in modern CPU cores. It is due to
7 * Kadatch and Jenkins (2010). See doc/crc-doc.1.0.pdf in this distribution.
 
 
8 */
9
10 /* @(#) $Id$ */
11
12 /*
13 Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore
14 protection on the static variables used to control the first-use generation
15 of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should
16 first call get_crc_table() to initialize the tables before allowing more than
17 one thread to use crc32().
18
19 MAKECRCH can be #defined to write out crc32.h. A main() routine is also
20 produced, so that this one source file can be compiled to an executable.
21 */
22
23 #ifdef MAKECRCH
24 # include <stdio.h>
25 # ifndef DYNAMIC_CRC_TABLE
26 # define DYNAMIC_CRC_TABLE
27 # endif /* !DYNAMIC_CRC_TABLE */
28 #endif /* MAKECRCH */
29
30 #include "zutil.h" /* for Z_U4, Z_U8, z_crc_t, and FAR definitions */
31
32 /*
33 A CRC of a message is computed on N braids of words in the message, where
34 each word consists of W bytes (4 or 8). If N is 3, for example, then three
35 running sparse CRCs are calculated respectively on each braid, at these
36 indices in the array of words: 0, 3, 6, ..., 1, 4, 7, ..., and 2, 5, 8, ...
37 This is done starting at a word boundary, and continues until as many blocks
38 of N * W bytes as are available have been processed. The results are combined
39 into a single CRC at the end. For this code, N must be in the range 1..6 and
40 W must be 4 or 8. The upper limit on N can be increased if desired by adding
41 more #if blocks, extending the patterns apparent in the code. In addition,
42 crc32.h would need to be regenerated, if the maximum N value is increased.
43
44 N and W are chosen empirically by benchmarking the execution time on a given
45 processor. The choices for N and W below were based on testing on Intel Kaby
46 Lake i7, AMD Ryzen 7, ARM Cortex-A57, Sparc64-VII, PowerPC POWER9, and MIPS64
47 Octeon II processors. The Intel, AMD, and ARM processors were all fastest
48 with N=5, W=8. The Sparc, PowerPC, and MIPS64 were all fastest at N=5, W=4.
49 They were all tested with either gcc or clang, all using the -O3 optimization
50 level. Your mileage may vary.
51 */
52
53 /* Define N */
54 #ifdef Z_TESTN
55 # define N Z_TESTN
56 #else
57 # define N 5
58 #endif
59 #if N < 1 || N > 6
60 # error N must be in 1..6
61 #endif
62
63 /*
64 z_crc_t must be at least 32 bits. z_word_t must be at least as long as
65 z_crc_t. It is assumed here that z_word_t is either 32 bits or 64 bits, and
66 that bytes are eight bits.
67 */
68
69 /*
70 Define W and the associated z_word_t type. If W is not defined, then a
71 braided calculation is not used, and the associated tables and code are not
72 compiled.
73 */
74 #ifdef Z_TESTW
75 # if Z_TESTW-1 != -1
76 # define W Z_TESTW
77 # endif
78 #else
79 # ifdef MAKECRCH
80 # define W 8 /* required for MAKECRCH */
81 # else
82 # if defined(__x86_64__) || defined(__aarch64__)
83 # define W 8
84 # else
85 # define W 4
86 # endif
87 # endif
88 #endif
89 #ifdef W
90 # if W == 8 && defined(Z_U8)
91 typedef Z_U8 z_word_t;
92 # elif defined(Z_U4)
93 # undef W
94 # define W 4
95 typedef Z_U4 z_word_t;
96 # else
97 # undef W
98 # endif
99 #endif
100
101 /* Local functions. */
102 local z_crc_t multmodp OF((z_crc_t a, z_crc_t b));
103 local z_crc_t x2nmodp OF((z_off64_t n, unsigned k));
104
105 /* If available, use the ARM processor CRC32 instruction. */
106 #if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8
107 # define ARMCRC32
108 #endif
109
110 #if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE))
111 /*
112 Swap the bytes in a z_word_t to convert between little and big endian. Any
113 self-respecting compiler will optimize this to a single machine byte-swap
114 instruction, if one is available. This assumes that word_t is either 32 bits
115 or 64 bits.
116 */
117 local z_word_t byte_swap(word)
118 z_word_t word;
119 {
120 # if W == 8
121 return
122 (word & 0xff00000000000000) >> 56 |
123 (word & 0xff000000000000) >> 40 |
124 (word & 0xff0000000000) >> 24 |
125 (word & 0xff00000000) >> 8 |
126 (word & 0xff000000) << 8 |
127 (word & 0xff0000) << 24 |
128 (word & 0xff00) << 40 |
129 (word & 0xff) << 56;
130 # else /* W == 4 */
131 return
132 (word & 0xff000000) >> 24 |
133 (word & 0xff0000) >> 8 |
134 (word & 0xff00) << 8 |
135 (word & 0xff) << 24;
136 # endif
137 }
138 #endif
139
140 /* CRC polynomial. */
141 #define POLY 0xedb88320 /* p(x) reflected, with x^32 implied */
142
143 #ifdef DYNAMIC_CRC_TABLE
144
145 local z_crc_t FAR crc_table[256];
146 local z_crc_t FAR x2n_table[32];
147 local void make_crc_table OF((void));
148 #ifdef W
149 local z_word_t FAR crc_big_table[256];
150 local z_crc_t FAR crc_braid_table[W][256];
151 local z_word_t FAR crc_braid_big_table[W][256];
152 local void braid OF((z_crc_t [][256], z_word_t [][256], int, int));
153 #endif
154 #ifdef MAKECRCH
155 local void write_table OF((FILE *, const z_crc_t FAR *, int));
156 local void write_table32hi OF((FILE *, const z_word_t FAR *, int));
157 local void write_table64 OF((FILE *, const z_word_t FAR *, int));
158 #endif /* MAKECRCH */
159
160 /*
161 Define a once() function depending on the availability of atomics. If this is
162 compiled with DYNAMIC_CRC_TABLE defined, and if CRCs will be computed in
163 multiple threads, and if atomics are not available, then get_crc_table() must
164 be called to initialize the tables and must return before any threads are
165 allowed to compute or combine CRCs.
166 */
167
168 /* Definition of once functionality. */
169 typedef struct once_s once_t;
170 local void once OF((once_t *, void (*)(void)));
171
172 /* Check for the availability of atomics. */
173 #if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \
174 !defined(__STDC_NO_ATOMICS__)
175
176 #include <stdatomic.h>
177
178 /* Structure for once(), which must be initialized with ONCE_INIT. */
179 struct once_s {
180 atomic_flag begun;
181 atomic_int done;
182 };
183 #define ONCE_INIT {ATOMIC_FLAG_INIT, 0}
184
185 /*
186 Run the provided init() function exactly once, even if multiple threads
187 invoke once() at the same time. The state must be a once_t initialized with
188 ONCE_INIT.
189 */
190 local void once(state, init)
191 once_t *state;
192 void (*init)(void);
193 {
194 if (!atomic_load(&state->done)) {
195 if (atomic_flag_test_and_set(&state->begun))
196 while (!atomic_load(&state->done))
197 ;
198 else {
199 init();
200 atomic_store(&state->done, 1);
201 }
202 }
203 }
204
205 #else /* no atomics */
206
207 /* Structure for once(), which must be initialized with ONCE_INIT. */
208 struct once_s {
209 volatile int begun;
210 volatile int done;
211 };
212 #define ONCE_INIT {0, 0}
213
214 /* Test and set. Alas, not atomic, but tries to minimize the period of
215 vulnerability. */
216 local int test_and_set OF((int volatile *));
217 local int test_and_set(flag)
218 int volatile *flag;
219 {
220 int was;
221
222 was = *flag;
223 *flag = 1;
224 return was;
225 }
226
227 /* Run the provided init() function once. This is not thread-safe. */
228 local void once(state, init)
229 once_t *state;
230 void (*init)(void);
231 {
232 if (!state->done) {
233 if (test_and_set(&state->begun))
234 while (!state->done)
235 ;
236 else {
237 init();
238 state->done = 1;
239 }
240 }
241 }
242
243 #endif
244
245 /* State for once(). */
246 local once_t made = ONCE_INIT;
247
248 /*
249 Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
250 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.
251
252 Polynomials over GF(2) are represented in binary, one bit per coefficient,
253 with the lowest powers in the most significant bit. Then adding polynomials
254 is just exclusive-or, and multiplying a polynomial by x is a right shift by
255 one. If we call the above polynomial p, and represent a byte as the
256 polynomial q, also with the lowest power in the most significant bit (so the
257 byte 0xb1 is the polynomial x^7+x^3+x^2+1), then the CRC is (q*x^32) mod p,
258 where a mod b means the remainder after dividing a by b.
259
260 This calculation is done using the shift-register method of multiplying and
261 taking the remainder. The register is initialized to zero, and for each
262 incoming bit, x^32 is added mod p to the register if the bit is a one (where
263 x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by x
264 (which is shifting right by one and adding x^32 mod p if the bit shifted out
265 is a one). We start with the highest power (least significant bit) of q and
266 repeat for all eight bits of q.
267
268 The table is simply the CRC of all possible eight bit values. This is all the
269 information needed to generate CRCs on data a byte at a time for all
270 combinations of CRC register values and incoming bytes.
271 */
272
 
273 local void make_crc_table()
274 {
275 unsigned i, j, n;
276 z_crc_t p;
277
278 /* initialize the CRC of bytes tables */
279 for (i = 0; i < 256; i++) {
280 p = i;
281 for (j = 0; j < 8; j++)
282 p = p & 1 ? (p >> 1) ^ POLY : p >> 1;
283 crc_table[i] = p;
284 #ifdef W
285 crc_big_table[i] = byte_swap(p);
286 #endif
287 }
288
289 /* initialize the x^2^n mod p(x) table */
290 p = (z_crc_t)1 << 30; /* x^1 */
291 x2n_table[0] = p;
292 for (n = 1; n < 32; n++)
293 x2n_table[n] = p = multmodp(p, p);
294
295 #ifdef W
296 /* initialize the braiding tables -- needs x2n_table[] */
297 braid(crc_braid_table, crc_braid_big_table, N, W);
298 #endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299
300 #ifdef MAKECRCH
 
301 {
302 /*
303 The crc32.h header file contains tables for both 32-bit and 64-bit
304 z_word_t's, and so requires a 64-bit type be available. In that case,
305 z_word_t must be defined to be 64-bits. This code then also generates
306 and writes out the tables for the case that z_word_t is 32 bits.
307 */
308 #if !defined(W) || W != 8
309 # error Need a 64-bit integer type in order to generate crc32.h.
310 #endif
311 FILE *out;
312 int k, n;
313 z_crc_t ltl[8][256];
314 z_word_t big[8][256];
315
316 out = fopen("crc32.h", "w");
317 if (out == NULL) return;
318
319 /* write out little-endian CRC table to crc32.h */
320 fprintf(out,
321 "/* crc32.h -- tables for rapid CRC calculation\n"
322 " * Generated automatically by crc32.c\n */\n"
323 "\n"
324 "local const z_crc_t FAR crc_table[] = {\n"
325 " ");
326 write_table(out, crc_table, 256);
327 fprintf(out,
328 "};\n");
329
330 /* write out big-endian CRC table for 64-bit z_word_t to crc32.h */
331 fprintf(out,
332 "\n"
333 "#ifdef W\n"
334 "\n"
335 "#if W == 8\n"
336 "\n"
337 "local const z_word_t FAR crc_big_table[] = {\n"
338 " ");
339 write_table64(out, crc_big_table, 256);
340 fprintf(out,
341 "};\n");
342
343 /* write out big-endian CRC table for 32-bit z_word_t to crc32.h */
344 fprintf(out,
345 "\n"
346 "#else /* W == 4 */\n"
347 "\n"
348 "local const z_word_t FAR crc_big_table[] = {\n"
349 " ");
350 write_table32hi(out, crc_big_table, 256);
351 fprintf(out,
352 "};\n"
353 "\n"
354 "#endif\n");
355
356 /* write out braid tables for each value of N */
357 for (n = 1; n <= 6; n++) {
358 fprintf(out,
359 "\n"
360 "#if N == %d\n", n);
361
362 /* compute braid tables for this N and 64-bit word_t */
363 braid(ltl, big, n, 8);
364
365 /* write out braid tables for 64-bit z_word_t to crc32.h */
366 fprintf(out,
367 "\n"
368 "#if W == 8\n"
369 "\n"
370 "local const z_crc_t FAR crc_braid_table[][256] = {\n");
371 for (k = 0; k < 8; k++) {
372 fprintf(out, " {");
373 write_table(out, ltl[k], 256);
374 fprintf(out, "}%s", k < 7 ? ",\n" : "");
375 }
376 fprintf(out,
377 "};\n"
378 "\n"
379 "local const z_word_t FAR crc_braid_big_table[][256] = {\n");
380 for (k = 0; k < 8; k++) {
381 fprintf(out, " {");
382 write_table64(out, big[k], 256);
383 fprintf(out, "}%s", k < 7 ? ",\n" : "");
384 }
385 fprintf(out,
386 "};\n");
387
388 /* compute braid tables for this N and 32-bit word_t */
389 braid(ltl, big, n, 4);
390
391 /* write out braid tables for 32-bit z_word_t to crc32.h */
392 fprintf(out,
393 "\n"
394 "#else /* W == 4 */\n"
395 "\n"
396 "local const z_crc_t FAR crc_braid_table[][256] = {\n");
397 for (k = 0; k < 4; k++) {
398 fprintf(out, " {");
399 write_table(out, ltl[k], 256);
400 fprintf(out, "}%s", k < 3 ? ",\n" : "");
401 }
402 fprintf(out,
403 "};\n"
404 "\n"
405 "local const z_word_t FAR crc_braid_big_table[][256] = {\n");
406 for (k = 0; k < 4; k++) {
407 fprintf(out, " {");
408 write_table32hi(out, big[k], 256);
409 fprintf(out, "}%s", k < 3 ? ",\n" : "");
410 }
411 fprintf(out,
412 "};\n"
413 "\n"
414 "#endif\n"
415 "\n"
416 "#endif\n");
417 }
418 fprintf(out,
419 "\n"
420 "#endif\n");
421
422 /* write out zeros operator table to crc32.h */
423 fprintf(out,
424 "\n"
425 "local const z_crc_t FAR x2n_table[] = {\n"
426 " ");
427 write_table(out, x2n_table, 32);
428 fprintf(out,
429 "};\n");
430 fclose(out);
431 }
432 #endif /* MAKECRCH */
433 }
434
435 #ifdef MAKECRCH
436
437 /*
438 Write the 32-bit values in table[0..k-1] to out, five per line in
439 hexadecimal separated by commas.
440 */
441 local void write_table(out, table, k)
442 FILE *out;
443 const z_crc_t FAR *table;
444 int k;
445 {
446 int n;
447
448 for (n = 0; n < k; n++)
449 fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ",
450 (unsigned long)(table[n]),
451 n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", "));
452 }
453
454 /*
455 Write the high 32-bits of each value in table[0..k-1] to out, five per line
456 in hexadecimal separated by commas.
457 */
458 local void write_table32hi(out, table, k)
459 FILE *out;
460 const z_word_t FAR *table;
461 int k;
462 {
463 int n;
464
465 for (n = 0; n < k; n++)
466 fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ",
467 (unsigned long)(table[n] >> 32),
468 n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", "));
469 }
470
471 /*
472 Write the 64-bit values in table[0..k-1] to out, three per line in
473 hexadecimal separated by commas. This assumes that if there is a 64-bit
474 type, then there is also a long long integer type, and it is at least 64
475 bits. If not, then the type cast and format string can be adjusted
476 accordingly.
477 */
478 local void write_table64(out, table, k)
479 FILE *out;
480 const z_word_t FAR *table;
481 int k;
482 {
483 int n;
484
485 for (n = 0; n < k; n++)
486 fprintf(out, "%s0x%016llx%s", n == 0 || n % 3 ? "" : " ",
487 (unsigned long long)(table[n]),
488 n == k - 1 ? "" : (n % 3 == 2 ? ",\n" : ", "));
489 }
490
491 /* Actually do the deed. */
492 int main()
493 {
494 make_crc_table();
495 return 0;
496 }
497
498 #endif /* MAKECRCH */
499
500 #ifdef W
501 /*
502 Generate the little and big-endian braid tables for the given n and z_word_t
503 size w. Each array must have room for w blocks of 256 elements.
504 */
505 local void braid(ltl, big, n, w)
506 z_crc_t ltl[][256];
507 z_word_t big[][256];
508 int n;
509 int w;
510 {
511 int k;
512 z_crc_t i, p, q;
513 for (k = 0; k < w; k++) {
514 p = x2nmodp((n * w + 3 - k) << 3, 0);
515 ltl[k][0] = 0;
516 big[w - 1 - k][0] = 0;
517 for (i = 1; i < 256; i++) {
518 ltl[k][i] = q = multmodp(i << 24, p);
519 big[w - 1 - k][i] = byte_swap(q);
520 }
521 }
522 }
523 #endif
524
525 #else /* !DYNAMIC_CRC_TABLE */
526 /* ========================================================================
527 * Tables for byte-wise and braided CRC-32 calculations, and a table of powers
528 * of x for combining CRC-32s, all made by make_crc_table().
529 */
530 #include "crc32.h"
531 #endif /* DYNAMIC_CRC_TABLE */
532
533 /* ========================================================================
534 * Routines used for CRC calculation. Some are also required for the table
535 * generation above.
536 */
537
538 /*
539 Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial,
540 reflected. For speed, this requires that a not be zero.
541 */
542 local z_crc_t multmodp(a, b)
543 z_crc_t a;
544 z_crc_t b;
545 {
546 z_crc_t m, p;
547
548 m = (z_crc_t)1 << 31;
549 p = 0;
550 for (;;) {
551 if (a & m) {
552 p ^= b;
553 if ((a & (m - 1)) == 0)
554 break;
555 }
556 m >>= 1;
557 b = b & 1 ? (b >> 1) ^ POLY : b >> 1;
558 }
559 return p;
560 }
561
562 /*
563 Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been
564 initialized.
565 */
566 local z_crc_t x2nmodp(n, k)
567 z_off64_t n;
568 unsigned k;
569 {
570 z_crc_t p;
571
572 p = (z_crc_t)1 << 31; /* x^0 == 1 */
573 while (n) {
574 if (n & 1)
575 p = multmodp(x2n_table[k & 31], p);
576 n >>= 1;
577 k++;
578 }
579 return p;
580 }
581
582 /* =========================================================================
583 * This function can be used by asm versions of crc32(), and to force the
584 * generation of the CRC tables in a threaded application.
585 */
586 const z_crc_t FAR * ZEXPORT get_crc_table()
587 {
588 #ifdef DYNAMIC_CRC_TABLE
589 once(&made, make_crc_table);
 
590 #endif /* DYNAMIC_CRC_TABLE */
591 return (const z_crc_t FAR *)crc_table;
592 }
593
594 /* =========================================================================
595 * Use ARM machine instructions if available. This will compute the CRC about
596 * ten times faster than the braided calculation. This code does not check for
597 * the presence of the CRC instruction at run time. __ARM_FEATURE_CRC32 will
598 * only be defined if the compilation specifies an ARM processor architecture
599 * that has the instructions. For example, compiling with -march=armv8.1-a or
600 * -march=armv8-a+crc, or -march=native if the compile machine has the crc32
601 * instructions.
602 */
603 #ifdef ARMCRC32
604
605 /*
606 Constants empirically determined to maximize speed. These values are from
607 measurements on a Cortex-A57. Your mileage may vary.
608 */
609 #define Z_BATCH 3990 /* number of words in a batch */
610 #define Z_BATCH_ZEROS 0xa10d3d0c /* computed from Z_BATCH = 3990 */
611 #define Z_BATCH_MIN 800 /* fewest words in a final batch */
612
613 unsigned long ZEXPORT crc32_z(crc, buf, len)
614 unsigned long crc;
615 const unsigned char FAR *buf;
616 z_size_t len;
617 {
618 z_crc_t val;
619 z_word_t crc1, crc2;
620 const z_word_t *word;
621 z_word_t val0, val1, val2;
622 z_size_t last, last2, i;
623 z_size_t num;
624
625 /* Return initial CRC, if requested. */
626 if (buf == Z_NULL) return 0;
627
628 #ifdef DYNAMIC_CRC_TABLE
629 once(&made, make_crc_table);
630 #endif /* DYNAMIC_CRC_TABLE */
631
632 /* Pre-condition the CRC */
633 crc ^= 0xffffffff;
634
635 /* Compute the CRC up to a word boundary. */
636 while (len && ((z_size_t)buf & 7) != 0) {
637 len--;
638 val = *buf++;
639 __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val));
640 }
641
642 /* Prepare to compute the CRC on full 64-bit words word[0..num-1]. */
643 word = (z_word_t const *)buf;
644 num = len >> 3;
645 len &= 7;
646
647 /* Do three interleaved CRCs to realize the throughput of one crc32x
648 instruction per cycle. Each CRC is calcuated on Z_BATCH words. The three
649 CRCs are combined into a single CRC after each set of batches. */
650 while (num >= 3 * Z_BATCH) {
651 crc1 = 0;
652 crc2 = 0;
653 for (i = 0; i < Z_BATCH; i++) {
654 val0 = word[i];
655 val1 = word[i + Z_BATCH];
656 val2 = word[i + 2 * Z_BATCH];
657 __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0));
658 __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1));
659 __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2));
660 }
661 word += 3 * Z_BATCH;
662 num -= 3 * Z_BATCH;
663 crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc1;
664 crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc2;
665 }
666
667 /* Do one last smaller batch with the remaining words, if there are enough
668 to pay for the combination of CRCs. */
669 last = num / 3;
670 if (last >= Z_BATCH_MIN) {
671 last2 = last << 1;
672 crc1 = 0;
673 crc2 = 0;
674 for (i = 0; i < last; i++) {
675 val0 = word[i];
676 val1 = word[i + last];
677 val2 = word[i + last2];
678 __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0));
679 __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1));
680 __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2));
681 }
682 word += 3 * last;
683 num -= 3 * last;
684 val = x2nmodp(last, 6);
685 crc = multmodp(val, crc) ^ crc1;
686 crc = multmodp(val, crc) ^ crc2;
687 }
688
689 /* Compute the CRC on any remaining words. */
690 for (i = 0; i < num; i++) {
691 val0 = word[i];
692 __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0));
693 }
694 word += num;
695
696 /* Complete the CRC on any remaining bytes. */
697 buf = (const unsigned char FAR *)word;
698 while (len) {
699 len--;
700 val = *buf++;
701 __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val));
702 }
703
704 /* Return the CRC, post-conditioned. */
705 return crc ^ 0xffffffff;
706 }
707
708 #else
709
710 #ifdef W
711
712 /*
713 Return the CRC of the W bytes in the word_t data, taking the
714 least-significant byte of the word as the first byte of data, without any pre
715 or post conditioning. This is used to combine the CRCs of each braid.
716 */
717 local z_crc_t crc_word(data)
718 z_word_t data;
719 {
720 int k;
721 for (k = 0; k < W; k++)
722 data = (data >> 8) ^ crc_table[data & 0xff];
723 return (z_crc_t)data;
724 }
725
726 local z_word_t crc_word_big(data)
727 z_word_t data;
728 {
729 int k;
730 for (k = 0; k < W; k++)
731 data = (data << 8) ^
732 crc_big_table[(data >> ((W - 1) << 3)) & 0xff];
733 return data;
734 }
735
736 #endif
737
738 /* ========================================================================= */
739 unsigned long ZEXPORT crc32_z(crc, buf, len)
740 unsigned long crc;
741 const unsigned char FAR *buf;
742 z_size_t len;
743 {
744 /* Return initial CRC, if requested. */
745 if (buf == Z_NULL) return 0;
746
747 #ifdef DYNAMIC_CRC_TABLE
748 once(&made, make_crc_table);
 
749 #endif /* DYNAMIC_CRC_TABLE */
750
751 /* Pre-condition the CRC */
752 crc ^= 0xffffffff;
753
754 #ifdef W
755
756 /* If provided enough bytes, do a braided CRC calculation. */
757 if (len >= N * W + W - 1) {
758 z_size_t blks;
759 z_word_t const *words;
760 unsigned endian;
761 int k;
762
763 /* Compute the CRC up to a z_word_t boundary. */
764 while (len && ((z_size_t)buf & (W - 1)) != 0) {
765 len--;
766 crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
767 }
768
769 /* Compute the CRC on as many N z_word_t blocks as are available. */
770 blks = len / (N * W);
771 len -= blks * N * W;
772 words = (z_word_t const *)buf;
773
774 /* Do endian check at execution time instead of compile time, since ARM
775 processors can change the endianess at execution time. If the
776 compiler knows what the endianess will be, it can optimize out the
777 check and the unused branch. */
778 endian = 1;
779 if (*(unsigned char *)&endian) {
780 /* Little endian. */
781
782 z_crc_t crc0;
783 z_word_t word0;
784 #if N > 1
785 z_crc_t crc1;
786 z_word_t word1;
787 #if N > 2
788 z_crc_t crc2;
789 z_word_t word2;
790 #if N > 3
791 z_crc_t crc3;
792 z_word_t word3;
793 #if N > 4
794 z_crc_t crc4;
795 z_word_t word4;
796 #if N > 5
797 z_crc_t crc5;
798 z_word_t word5;
799 #endif
800 #endif
801 #endif
802 #endif
803 #endif
804
805 /* Initialize the CRC for each braid. */
806 crc0 = crc;
807 #if N > 1
808 crc1 = 0;
809 #if N > 2
810 crc2 = 0;
811 #if N > 3
812 crc3 = 0;
813 #if N > 4
814 crc4 = 0;
815 #if N > 5
816 crc5 = 0;
817 #endif
818 #endif
819 #endif
820 #endif
821 #endif
822
823 /*
824 Process the first blks-1 blocks, computing the CRCs on each braid
825 independently.
826 */
827 while (--blks) {
828 /* Load the word for each braid into registers. */
829 word0 = crc0 ^ words[0];
830 #if N > 1
831 word1 = crc1 ^ words[1];
832 #if N > 2
833 word2 = crc2 ^ words[2];
834 #if N > 3
835 word3 = crc3 ^ words[3];
836 #if N > 4
837 word4 = crc4 ^ words[4];
838 #if N > 5
839 word5 = crc5 ^ words[5];
840 #endif
841 #endif
842 #endif
843 #endif
844 #endif
845 words += N;
846
847 /* Compute and update the CRC for each word. The loop should
848 get unrolled. */
849 crc0 = crc_braid_table[0][word0 & 0xff];
850 #if N > 1
851 crc1 = crc_braid_table[0][word1 & 0xff];
852 #if N > 2
853 crc2 = crc_braid_table[0][word2 & 0xff];
854 #if N > 3
855 crc3 = crc_braid_table[0][word3 & 0xff];
856 #if N > 4
857 crc4 = crc_braid_table[0][word4 & 0xff];
858 #if N > 5
859 crc5 = crc_braid_table[0][word5 & 0xff];
860 #endif
861 #endif
862 #endif
863 #endif
864 #endif
865 for (k = 1; k < W; k++) {
866 crc0 ^= crc_braid_table[k][(word0 >> (k << 3)) & 0xff];
867 #if N > 1
868 crc1 ^= crc_braid_table[k][(word1 >> (k << 3)) & 0xff];
869 #if N > 2
870 crc2 ^= crc_braid_table[k][(word2 >> (k << 3)) & 0xff];
871 #if N > 3
872 crc3 ^= crc_braid_table[k][(word3 >> (k << 3)) & 0xff];
873 #if N > 4
874 crc4 ^= crc_braid_table[k][(word4 >> (k << 3)) & 0xff];
875 #if N > 5
876 crc5 ^= crc_braid_table[k][(word5 >> (k << 3)) & 0xff];
877 #endif
878 #endif
879 #endif
880 #endif
881 #endif
882 }
883 }
884
885 /*
886 Process the last block, combining the CRCs of the N braids at the
887 same time.
888 */
889 crc = crc_word(crc0 ^ words[0]);
890 #if N > 1
891 crc = crc_word(crc1 ^ words[1] ^ crc);
892 #if N > 2
893 crc = crc_word(crc2 ^ words[2] ^ crc);
894 #if N > 3
895 crc = crc_word(crc3 ^ words[3] ^ crc);
896 #if N > 4
897 crc = crc_word(crc4 ^ words[4] ^ crc);
898 #if N > 5
899 crc = crc_word(crc5 ^ words[5] ^ crc);
900 #endif
901 #endif
902 #endif
903 #endif
904 #endif
905 words += N;
906 }
907 else {
908 /* Big endian. */
909
910 z_word_t crc0, word0, comb;
911 #if N > 1
912 z_word_t crc1, word1;
913 #if N > 2
914 z_word_t crc2, word2;
915 #if N > 3
916 z_word_t crc3, word3;
917 #if N > 4
918 z_word_t crc4, word4;
919 #if N > 5
920 z_word_t crc5, word5;
921 #endif
922 #endif
923 #endif
924 #endif
925 #endif
926
927 /* Initialize the CRC for each braid. */
928 crc0 = byte_swap(crc);
929 #if N > 1
930 crc1 = 0;
931 #if N > 2
932 crc2 = 0;
933 #if N > 3
934 crc3 = 0;
935 #if N > 4
936 crc4 = 0;
937 #if N > 5
938 crc5 = 0;
939 #endif
940 #endif
941 #endif
942 #endif
943 #endif
944
945 /*
946 Process the first blks-1 blocks, computing the CRCs on each braid
947 independently.
948 */
949 while (--blks) {
950 /* Load the word for each braid into registers. */
951 word0 = crc0 ^ words[0];
952 #if N > 1
953 word1 = crc1 ^ words[1];
954 #if N > 2
955 word2 = crc2 ^ words[2];
956 #if N > 3
957 word3 = crc3 ^ words[3];
958 #if N > 4
959 word4 = crc4 ^ words[4];
960 #if N > 5
961 word5 = crc5 ^ words[5];
962 #endif
963 #endif
964 #endif
965 #endif
966 #endif
967 words += N;
968
969 /* Compute and update the CRC for each word. The loop should
970 get unrolled. */
971 crc0 = crc_braid_big_table[0][word0 & 0xff];
972 #if N > 1
973 crc1 = crc_braid_big_table[0][word1 & 0xff];
974 #if N > 2
975 crc2 = crc_braid_big_table[0][word2 & 0xff];
976 #if N > 3
977 crc3 = crc_braid_big_table[0][word3 & 0xff];
978 #if N > 4
979 crc4 = crc_braid_big_table[0][word4 & 0xff];
980 #if N > 5
981 crc5 = crc_braid_big_table[0][word5 & 0xff];
982 #endif
983 #endif
984 #endif
985 #endif
986 #endif
987 for (k = 1; k < W; k++) {
988 crc0 ^= crc_braid_big_table[k][(word0 >> (k << 3)) & 0xff];
989 #if N > 1
990 crc1 ^= crc_braid_big_table[k][(word1 >> (k << 3)) & 0xff];
991 #if N > 2
992 crc2 ^= crc_braid_big_table[k][(word2 >> (k << 3)) & 0xff];
993 #if N > 3
994 crc3 ^= crc_braid_big_table[k][(word3 >> (k << 3)) & 0xff];
995 #if N > 4
996 crc4 ^= crc_braid_big_table[k][(word4 >> (k << 3)) & 0xff];
997 #if N > 5
998 crc5 ^= crc_braid_big_table[k][(word5 >> (k << 3)) & 0xff];
999 #endif
1000 #endif
1001 #endif
1002 #endif
1003 #endif
1004 }
1005 }
1006
1007 /*
1008 Process the last block, combining the CRCs of the N braids at the
1009 same time.
1010 */
1011 comb = crc_word_big(crc0 ^ words[0]);
1012 #if N > 1
1013 comb = crc_word_big(crc1 ^ words[1] ^ comb);
1014 #if N > 2
1015 comb = crc_word_big(crc2 ^ words[2] ^ comb);
1016 #if N > 3
1017 comb = crc_word_big(crc3 ^ words[3] ^ comb);
1018 #if N > 4
1019 comb = crc_word_big(crc4 ^ words[4] ^ comb);
1020 #if N > 5
1021 comb = crc_word_big(crc5 ^ words[5] ^ comb);
1022 #endif
1023 #endif
1024 #endif
1025 #endif
1026 #endif
1027 words += N;
1028 crc = byte_swap(comb);
1029 }
1030
1031 /*
1032 Update the pointer to the remaining bytes to process.
1033 */
1034 buf = (unsigned char const *)words;
1035 }
1036
1037 #endif /* W */
1038
1039 /* Complete the computation of the CRC on any remaining bytes. */
1040 while (len >= 8) {
1041 len -= 8;
1042 crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1043 crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1044 crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1045 crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1046 crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1047 crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1048 crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1049 crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1050 }
1051 while (len) {
1052 len--;
1053 crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
1054 }
1055
1056 /* Return the CRC, post-conditioned. */
1057 return crc ^ 0xffffffff;
 
1058 }
1059
1060 #endif
1061
1062 /* ========================================================================= */
1063 unsigned long ZEXPORT crc32(crc, buf, len)
1064 unsigned long crc;
1065 const unsigned char FAR *buf;
@@ -240,203 +1066,51 @@
1066 uInt len;
1067 {
1068 return crc32_z(crc, buf, len);
1069 }
1070
1071 /* ========================================================================= */
1072 uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1073 uLong crc1;
1074 uLong crc2;
1075 z_off64_t len2;
1076 {
1077 #ifdef DYNAMIC_CRC_TABLE
1078 once(&made, make_crc_table);
1079 #endif /* DYNAMIC_CRC_TABLE */
1080 return multmodp(x2nmodp(len2, 3), crc1) ^ crc2;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1081 }
1082
1083 /* ========================================================================= */
1084 uLong ZEXPORT crc32_combine(crc1, crc2, len2)
1085 uLong crc1;
1086 uLong crc2;
1087 z_off_t len2;
1088 {
1089 return crc32_combine64(crc1, crc2, len2);
1090 }
1091
1092 /* ========================================================================= */
1093 uLong ZEXPORT crc32_combine_gen64(len2)
 
1094 z_off64_t len2;
1095 {
1096 #ifdef DYNAMIC_CRC_TABLE
1097 once(&made, make_crc_table);
1098 #endif /* DYNAMIC_CRC_TABLE */
1099 return x2nmodp(len2, 3);
1100 }
1101
1102 /* ========================================================================= */
1103 uLong ZEXPORT crc32_combine_gen(len2)
1104 z_off_t len2;
1105 {
1106 return crc32_combine_gen64(len2);
1107 }
1108
1109 /* ========================================================================= */
1110 uLong crc32_combine_op(crc1, crc2, op)
1111 uLong crc1;
1112 uLong crc2;
1113 uLong op;
1114 {
1115 return multmodp(op, crc1) ^ crc2;
1116 }
1117
+9441 -436
--- compat/zlib/crc32.h
+++ compat/zlib/crc32.h
@@ -1,441 +1,9446 @@
11
/* crc32.h -- tables for rapid CRC calculation
22
* Generated automatically by crc32.c
33
*/
44
5
-local const z_crc_t FAR crc_table[TBLS][256] =
6
-{
7
- {
8
- 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
9
- 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,
10
- 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
11
- 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,
12
- 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,
13
- 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,
14
- 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,
15
- 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,
16
- 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,
17
- 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,
18
- 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,
19
- 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,
20
- 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,
21
- 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,
22
- 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,
23
- 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,
24
- 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,
25
- 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,
26
- 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,
27
- 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,
28
- 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,
29
- 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,
30
- 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,
31
- 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,
32
- 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,
33
- 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,
34
- 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,
35
- 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,
36
- 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,
37
- 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,
38
- 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,
39
- 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,
40
- 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,
41
- 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,
42
- 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,
43
- 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,
44
- 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,
45
- 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,
46
- 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,
47
- 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,
48
- 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,
49
- 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,
50
- 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,
51
- 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,
52
- 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,
53
- 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,
54
- 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,
55
- 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,
56
- 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,
57
- 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,
58
- 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,
59
- 0x2d02ef8dUL
60
-#ifdef BYFOUR
61
- },
62
- {
63
- 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,
64
- 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,
65
- 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,
66
- 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,
67
- 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,
68
- 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,
69
- 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,
70
- 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,
71
- 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,
72
- 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,
73
- 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,
74
- 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,
75
- 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,
76
- 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,
77
- 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,
78
- 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,
79
- 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,
80
- 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,
81
- 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,
82
- 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,
83
- 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,
84
- 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,
85
- 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,
86
- 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,
87
- 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,
88
- 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,
89
- 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,
90
- 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,
91
- 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,
92
- 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,
93
- 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,
94
- 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,
95
- 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,
96
- 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,
97
- 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,
98
- 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,
99
- 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,
100
- 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,
101
- 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,
102
- 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,
103
- 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,
104
- 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,
105
- 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,
106
- 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,
107
- 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,
108
- 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,
109
- 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,
110
- 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,
111
- 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,
112
- 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,
113
- 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,
114
- 0x9324fd72UL
115
- },
116
- {
117
- 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,
118
- 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,
119
- 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,
120
- 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,
121
- 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,
122
- 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,
123
- 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,
124
- 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,
125
- 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,
126
- 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,
127
- 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,
128
- 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,
129
- 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,
130
- 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,
131
- 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,
132
- 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,
133
- 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,
134
- 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,
135
- 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,
136
- 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,
137
- 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,
138
- 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,
139
- 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,
140
- 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,
141
- 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,
142
- 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,
143
- 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,
144
- 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,
145
- 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,
146
- 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,
147
- 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,
148
- 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,
149
- 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,
150
- 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,
151
- 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,
152
- 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,
153
- 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,
154
- 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,
155
- 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,
156
- 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,
157
- 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,
158
- 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,
159
- 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,
160
- 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,
161
- 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,
162
- 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,
163
- 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,
164
- 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,
165
- 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,
166
- 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,
167
- 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,
168
- 0xbe9834edUL
169
- },
170
- {
171
- 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,
172
- 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,
173
- 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,
174
- 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,
175
- 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,
176
- 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,
177
- 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,
178
- 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,
179
- 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,
180
- 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,
181
- 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,
182
- 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,
183
- 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,
184
- 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,
185
- 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,
186
- 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,
187
- 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,
188
- 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,
189
- 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,
190
- 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,
191
- 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,
192
- 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,
193
- 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,
194
- 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,
195
- 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,
196
- 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,
197
- 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,
198
- 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,
199
- 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,
200
- 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,
201
- 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,
202
- 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,
203
- 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,
204
- 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,
205
- 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,
206
- 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,
207
- 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,
208
- 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,
209
- 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,
210
- 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,
211
- 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,
212
- 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,
213
- 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,
214
- 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,
215
- 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,
216
- 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,
217
- 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,
218
- 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,
219
- 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,
220
- 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
221
- 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
222
- 0xde0506f1UL
223
- },
224
- {
225
- 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,
226
- 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,
227
- 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,
228
- 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,
229
- 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,
230
- 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,
231
- 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,
232
- 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,
233
- 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,
234
- 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,
235
- 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,
236
- 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,
237
- 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,
238
- 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,
239
- 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,
240
- 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,
241
- 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,
242
- 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,
243
- 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,
244
- 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,
245
- 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,
246
- 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,
247
- 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,
248
- 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,
249
- 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,
250
- 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,
251
- 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,
252
- 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,
253
- 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,
254
- 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,
255
- 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,
256
- 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,
257
- 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,
258
- 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,
259
- 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,
260
- 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,
261
- 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,
262
- 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,
263
- 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,
264
- 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,
265
- 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,
266
- 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,
267
- 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,
268
- 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,
269
- 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,
270
- 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,
271
- 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,
272
- 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,
273
- 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,
274
- 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,
275
- 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,
276
- 0x8def022dUL
277
- },
278
- {
279
- 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,
280
- 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,
281
- 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,
282
- 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,
283
- 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,
284
- 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,
285
- 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,
286
- 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,
287
- 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,
288
- 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,
289
- 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,
290
- 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,
291
- 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,
292
- 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,
293
- 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,
294
- 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,
295
- 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,
296
- 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,
297
- 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,
298
- 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,
299
- 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,
300
- 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,
301
- 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,
302
- 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,
303
- 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,
304
- 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,
305
- 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,
306
- 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,
307
- 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,
308
- 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,
309
- 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,
310
- 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,
311
- 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,
312
- 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,
313
- 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,
314
- 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,
315
- 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,
316
- 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,
317
- 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,
318
- 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,
319
- 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,
320
- 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,
321
- 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,
322
- 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,
323
- 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,
324
- 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,
325
- 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,
326
- 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,
327
- 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,
328
- 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,
329
- 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,
330
- 0x72fd2493UL
331
- },
332
- {
333
- 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,
334
- 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,
335
- 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,
336
- 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,
337
- 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,
338
- 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,
339
- 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,
340
- 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,
341
- 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,
342
- 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,
343
- 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,
344
- 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,
345
- 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,
346
- 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,
347
- 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,
348
- 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,
349
- 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,
350
- 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,
351
- 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,
352
- 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,
353
- 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,
354
- 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,
355
- 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,
356
- 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,
357
- 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,
358
- 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,
359
- 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,
360
- 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,
361
- 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,
362
- 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,
363
- 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,
364
- 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,
365
- 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,
366
- 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,
367
- 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,
368
- 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,
369
- 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,
370
- 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,
371
- 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,
372
- 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,
373
- 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,
374
- 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,
375
- 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,
376
- 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,
377
- 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,
378
- 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,
379
- 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,
380
- 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,
381
- 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,
382
- 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,
383
- 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,
384
- 0xed3498beUL
385
- },
386
- {
387
- 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,
388
- 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,
389
- 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,
390
- 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,
391
- 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,
392
- 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,
393
- 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,
394
- 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,
395
- 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,
396
- 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,
397
- 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,
398
- 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,
399
- 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,
400
- 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,
401
- 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,
402
- 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,
403
- 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,
404
- 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,
405
- 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,
406
- 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,
407
- 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,
408
- 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,
409
- 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,
410
- 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,
411
- 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,
412
- 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,
413
- 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,
414
- 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,
415
- 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,
416
- 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,
417
- 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,
418
- 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,
419
- 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,
420
- 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,
421
- 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,
422
- 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,
423
- 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,
424
- 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,
425
- 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,
426
- 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,
427
- 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,
428
- 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,
429
- 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,
430
- 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,
431
- 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,
432
- 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,
433
- 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,
434
- 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,
435
- 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,
436
- 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,
437
- 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,
438
- 0xf10605deUL
5
+local const z_crc_t FAR crc_table[] = {
6
+ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
7
+ 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
8
+ 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
9
+ 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
10
+ 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
11
+ 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
12
+ 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
13
+ 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
14
+ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
15
+ 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
16
+ 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
17
+ 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
18
+ 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
19
+ 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
20
+ 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
21
+ 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
22
+ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
23
+ 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
24
+ 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
25
+ 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
26
+ 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
27
+ 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
28
+ 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
29
+ 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
30
+ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
31
+ 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
32
+ 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
33
+ 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
34
+ 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
35
+ 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
36
+ 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
37
+ 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
38
+ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
39
+ 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
40
+ 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
41
+ 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
42
+ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
43
+ 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
44
+ 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
45
+ 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
46
+ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
47
+ 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
48
+ 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
49
+ 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
50
+ 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
51
+ 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
52
+ 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
53
+ 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
54
+ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
55
+ 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
56
+ 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
57
+ 0x2d02ef8d};
58
+
59
+#ifdef W
60
+
61
+#if W == 8
62
+
63
+local const z_word_t FAR crc_big_table[] = {
64
+ 0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000,
65
+ 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000,
66
+ 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000,
67
+ 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000,
68
+ 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000,
69
+ 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000,
70
+ 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000,
71
+ 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000,
72
+ 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000,
73
+ 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000,
74
+ 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000,
75
+ 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000,
76
+ 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000,
77
+ 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000,
78
+ 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000,
79
+ 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000,
80
+ 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000,
81
+ 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000,
82
+ 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000,
83
+ 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000,
84
+ 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000,
85
+ 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000,
86
+ 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000,
87
+ 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000,
88
+ 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000,
89
+ 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000,
90
+ 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000,
91
+ 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000,
92
+ 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000,
93
+ 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000,
94
+ 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000,
95
+ 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000,
96
+ 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000,
97
+ 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000,
98
+ 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000,
99
+ 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000,
100
+ 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000,
101
+ 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000,
102
+ 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000,
103
+ 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000,
104
+ 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000,
105
+ 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000,
106
+ 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000,
107
+ 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000,
108
+ 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000,
109
+ 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000,
110
+ 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000,
111
+ 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000,
112
+ 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000,
113
+ 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000,
114
+ 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000,
115
+ 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000,
116
+ 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000,
117
+ 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000,
118
+ 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000,
119
+ 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000,
120
+ 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000,
121
+ 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000,
122
+ 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000,
123
+ 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000,
124
+ 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000,
125
+ 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000,
126
+ 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000,
127
+ 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000,
128
+ 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000,
129
+ 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000,
130
+ 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000,
131
+ 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000,
132
+ 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000,
133
+ 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000,
134
+ 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000,
135
+ 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000,
136
+ 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000,
137
+ 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000,
138
+ 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000,
139
+ 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000,
140
+ 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000,
141
+ 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000,
142
+ 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000,
143
+ 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000,
144
+ 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000,
145
+ 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000,
146
+ 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000,
147
+ 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000,
148
+ 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000,
149
+ 0x8def022d00000000};
150
+
151
+#else /* W == 4 */
152
+
153
+local const z_word_t FAR crc_big_table[] = {
154
+ 0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07,
155
+ 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79,
156
+ 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7,
157
+ 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84,
158
+ 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13,
159
+ 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663,
160
+ 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5,
161
+ 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5,
162
+ 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832,
163
+ 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51,
164
+ 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf,
165
+ 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1,
166
+ 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76,
167
+ 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606,
168
+ 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996,
169
+ 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6,
170
+ 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c,
171
+ 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712,
172
+ 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c,
173
+ 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4,
174
+ 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943,
175
+ 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333,
176
+ 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe,
177
+ 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce,
178
+ 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359,
179
+ 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a,
180
+ 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04,
181
+ 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a,
182
+ 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0,
183
+ 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580,
184
+ 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10,
185
+ 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060,
186
+ 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1,
187
+ 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf,
188
+ 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31,
189
+ 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852,
190
+ 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5,
191
+ 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5,
192
+ 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75,
193
+ 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005,
194
+ 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292,
195
+ 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1,
196
+ 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f,
197
+ 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111,
198
+ 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0,
199
+ 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0,
200
+ 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40,
201
+ 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530,
202
+ 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba,
203
+ 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4,
204
+ 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a,
205
+ 0x8def022d};
206
+
207
+#endif
208
+
209
+#if N == 1
210
+
211
+#if W == 8
212
+
213
+local const z_crc_t FAR crc_braid_table[][256] = {
214
+ {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa,
215
+ 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b,
216
+ 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232,
217
+ 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8,
218
+ 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e,
219
+ 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa,
220
+ 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b,
221
+ 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f,
222
+ 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719,
223
+ 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3,
224
+ 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa,
225
+ 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b,
226
+ 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed,
227
+ 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89,
228
+ 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25,
229
+ 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041,
230
+ 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c,
231
+ 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed,
232
+ 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4,
233
+ 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758,
234
+ 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e,
235
+ 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a,
236
+ 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed,
237
+ 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889,
238
+ 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df,
239
+ 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544,
240
+ 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d,
241
+ 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c,
242
+ 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1,
243
+ 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95,
244
+ 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839,
245
+ 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d,
246
+ 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976,
247
+ 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7,
248
+ 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be,
249
+ 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144,
250
+ 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12,
251
+ 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376,
252
+ 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a,
253
+ 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e,
254
+ 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278,
255
+ 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682,
256
+ 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b,
257
+ 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a,
258
+ 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561,
259
+ 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05,
260
+ 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9,
261
+ 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd,
262
+ 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0,
263
+ 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61,
264
+ 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678,
265
+ 0x264b06e6},
266
+ {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413,
267
+ 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3,
268
+ 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d,
269
+ 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653,
270
+ 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9,
271
+ 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e,
272
+ 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5,
273
+ 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712,
274
+ 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8,
275
+ 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6,
276
+ 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068,
277
+ 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8,
278
+ 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579,
279
+ 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade,
280
+ 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37,
281
+ 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590,
282
+ 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4,
283
+ 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64,
284
+ 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea,
285
+ 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678,
286
+ 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282,
287
+ 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25,
288
+ 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102,
289
+ 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5,
290
+ 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f,
291
+ 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146,
292
+ 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8,
293
+ 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08,
294
+ 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c,
295
+ 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b,
296
+ 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972,
297
+ 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5,
298
+ 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d,
299
+ 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd,
300
+ 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833,
301
+ 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d,
302
+ 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7,
303
+ 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60,
304
+ 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2,
305
+ 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105,
306
+ 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff,
307
+ 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1,
308
+ 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f,
309
+ 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf,
310
+ 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617,
311
+ 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0,
312
+ 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959,
313
+ 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe,
314
+ 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca,
315
+ 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a,
316
+ 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184,
317
+ 0x92364a30},
318
+ {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216,
319
+ 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8,
320
+ 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170,
321
+ 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035,
322
+ 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6,
323
+ 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145,
324
+ 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d,
325
+ 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e,
326
+ 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d,
327
+ 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408,
328
+ 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0,
329
+ 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e,
330
+ 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c,
331
+ 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf,
332
+ 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a,
333
+ 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9,
334
+ 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1,
335
+ 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f,
336
+ 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987,
337
+ 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4,
338
+ 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37,
339
+ 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84,
340
+ 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca,
341
+ 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79,
342
+ 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba,
343
+ 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d,
344
+ 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5,
345
+ 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b,
346
+ 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643,
347
+ 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0,
348
+ 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525,
349
+ 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496,
350
+ 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8,
351
+ 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026,
352
+ 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e,
353
+ 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db,
354
+ 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118,
355
+ 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab,
356
+ 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf,
357
+ 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c,
358
+ 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf,
359
+ 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a,
360
+ 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32,
361
+ 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec,
362
+ 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82,
363
+ 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31,
364
+ 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4,
365
+ 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957,
366
+ 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f,
367
+ 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1,
368
+ 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869,
369
+ 0xe4c4abcc},
370
+ {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0,
371
+ 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271,
372
+ 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61,
373
+ 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52,
374
+ 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43,
375
+ 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333,
376
+ 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64,
377
+ 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314,
378
+ 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205,
379
+ 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136,
380
+ 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26,
381
+ 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997,
382
+ 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849,
383
+ 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739,
384
+ 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8,
385
+ 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98,
386
+ 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b,
387
+ 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba,
388
+ 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa,
389
+ 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d,
390
+ 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c,
391
+ 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc,
392
+ 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af,
393
+ 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf,
394
+ 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce,
395
+ 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922,
396
+ 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532,
397
+ 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183,
398
+ 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710,
399
+ 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860,
400
+ 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1,
401
+ 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1,
402
+ 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956,
403
+ 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7,
404
+ 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7,
405
+ 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4,
406
+ 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5,
407
+ 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5,
408
+ 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb,
409
+ 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb,
410
+ 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da,
411
+ 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9,
412
+ 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9,
413
+ 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48,
414
+ 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df,
415
+ 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af,
416
+ 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e,
417
+ 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e,
418
+ 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d,
419
+ 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c,
420
+ 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c,
421
+ 0xca64c78c},
422
+ {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757,
423
+ 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a,
424
+ 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733,
425
+ 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871,
426
+ 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70,
427
+ 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42,
428
+ 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5,
429
+ 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787,
430
+ 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086,
431
+ 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4,
432
+ 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d,
433
+ 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0,
434
+ 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d,
435
+ 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f,
436
+ 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859,
437
+ 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b,
438
+ 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5,
439
+ 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028,
440
+ 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891,
441
+ 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed,
442
+ 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec,
443
+ 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde,
444
+ 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817,
445
+ 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825,
446
+ 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24,
447
+ 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e,
448
+ 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7,
449
+ 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a,
450
+ 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4,
451
+ 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196,
452
+ 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0,
453
+ 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2,
454
+ 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52,
455
+ 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f,
456
+ 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36,
457
+ 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174,
458
+ 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675,
459
+ 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647,
460
+ 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d,
461
+ 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf,
462
+ 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be,
463
+ 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc,
464
+ 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645,
465
+ 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98,
466
+ 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138,
467
+ 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a,
468
+ 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c,
469
+ 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e,
470
+ 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0,
471
+ 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d,
472
+ 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194,
473
+ 0xde0506f1},
474
+ {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc,
475
+ 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f,
476
+ 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a,
477
+ 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29,
478
+ 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8,
479
+ 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023,
480
+ 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e,
481
+ 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065,
482
+ 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84,
483
+ 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7,
484
+ 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922,
485
+ 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71,
486
+ 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0,
487
+ 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b,
488
+ 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816,
489
+ 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd,
490
+ 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c,
491
+ 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f,
492
+ 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba,
493
+ 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579,
494
+ 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98,
495
+ 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873,
496
+ 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e,
497
+ 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5,
498
+ 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134,
499
+ 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7,
500
+ 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732,
501
+ 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461,
502
+ 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0,
503
+ 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b,
504
+ 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26,
505
+ 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd,
506
+ 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc,
507
+ 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef,
508
+ 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a,
509
+ 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049,
510
+ 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8,
511
+ 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43,
512
+ 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e,
513
+ 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5,
514
+ 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24,
515
+ 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07,
516
+ 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982,
517
+ 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1,
518
+ 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0,
519
+ 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b,
520
+ 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576,
521
+ 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d,
522
+ 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c,
523
+ 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f,
524
+ 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda,
525
+ 0xbe9834ed},
526
+ {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504,
527
+ 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49,
528
+ 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e,
529
+ 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192,
530
+ 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859,
531
+ 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c,
532
+ 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620,
533
+ 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265,
534
+ 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae,
535
+ 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2,
536
+ 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175,
537
+ 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38,
538
+ 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05,
539
+ 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40,
540
+ 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f,
541
+ 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca,
542
+ 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850,
543
+ 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d,
544
+ 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da,
545
+ 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864,
546
+ 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af,
547
+ 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea,
548
+ 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74,
549
+ 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31,
550
+ 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa,
551
+ 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a,
552
+ 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd,
553
+ 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180,
554
+ 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a,
555
+ 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f,
556
+ 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290,
557
+ 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5,
558
+ 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed,
559
+ 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0,
560
+ 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167,
561
+ 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b,
562
+ 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0,
563
+ 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5,
564
+ 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc,
565
+ 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189,
566
+ 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842,
567
+ 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e,
568
+ 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299,
569
+ 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4,
570
+ 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec,
571
+ 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9,
572
+ 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66,
573
+ 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23,
574
+ 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9,
575
+ 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4,
576
+ 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33,
577
+ 0x9324fd72},
578
+ {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
579
+ 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
580
+ 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
581
+ 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
582
+ 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
583
+ 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
584
+ 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
585
+ 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
586
+ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
587
+ 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
588
+ 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
589
+ 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
590
+ 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
591
+ 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
592
+ 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
593
+ 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
594
+ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
595
+ 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
596
+ 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
597
+ 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
598
+ 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
599
+ 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
600
+ 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
601
+ 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
602
+ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
603
+ 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
604
+ 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
605
+ 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
606
+ 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
607
+ 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
608
+ 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
609
+ 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
610
+ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
611
+ 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
612
+ 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
613
+ 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
614
+ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
615
+ 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
616
+ 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
617
+ 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
618
+ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
619
+ 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
620
+ 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
621
+ 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
622
+ 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
623
+ 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
624
+ 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
625
+ 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
626
+ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
627
+ 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
628
+ 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
629
+ 0x2d02ef8d}};
630
+
631
+local const z_word_t FAR crc_braid_big_table[][256] = {
632
+ {0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000,
633
+ 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000,
634
+ 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000,
635
+ 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000,
636
+ 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000,
637
+ 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000,
638
+ 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000,
639
+ 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000,
640
+ 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000,
641
+ 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000,
642
+ 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000,
643
+ 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000,
644
+ 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000,
645
+ 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000,
646
+ 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000,
647
+ 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000,
648
+ 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000,
649
+ 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000,
650
+ 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000,
651
+ 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000,
652
+ 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000,
653
+ 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000,
654
+ 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000,
655
+ 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000,
656
+ 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000,
657
+ 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000,
658
+ 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000,
659
+ 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000,
660
+ 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000,
661
+ 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000,
662
+ 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000,
663
+ 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000,
664
+ 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000,
665
+ 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000,
666
+ 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000,
667
+ 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000,
668
+ 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000,
669
+ 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000,
670
+ 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000,
671
+ 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000,
672
+ 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000,
673
+ 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000,
674
+ 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000,
675
+ 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000,
676
+ 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000,
677
+ 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000,
678
+ 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000,
679
+ 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000,
680
+ 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000,
681
+ 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000,
682
+ 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000,
683
+ 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000,
684
+ 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000,
685
+ 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000,
686
+ 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000,
687
+ 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000,
688
+ 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000,
689
+ 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000,
690
+ 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000,
691
+ 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000,
692
+ 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000,
693
+ 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000,
694
+ 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000,
695
+ 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000,
696
+ 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000,
697
+ 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000,
698
+ 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000,
699
+ 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000,
700
+ 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000,
701
+ 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000,
702
+ 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000,
703
+ 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000,
704
+ 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000,
705
+ 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000,
706
+ 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000,
707
+ 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000,
708
+ 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000,
709
+ 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000,
710
+ 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000,
711
+ 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000,
712
+ 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000,
713
+ 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000,
714
+ 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000,
715
+ 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000,
716
+ 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000,
717
+ 0x8def022d00000000},
718
+ {0x0000000000000000, 0x41311b1900000000, 0x8262363200000000,
719
+ 0xc3532d2b00000000, 0x04c56c6400000000, 0x45f4777d00000000,
720
+ 0x86a75a5600000000, 0xc796414f00000000, 0x088ad9c800000000,
721
+ 0x49bbc2d100000000, 0x8ae8effa00000000, 0xcbd9f4e300000000,
722
+ 0x0c4fb5ac00000000, 0x4d7eaeb500000000, 0x8e2d839e00000000,
723
+ 0xcf1c988700000000, 0x5112c24a00000000, 0x1023d95300000000,
724
+ 0xd370f47800000000, 0x9241ef6100000000, 0x55d7ae2e00000000,
725
+ 0x14e6b53700000000, 0xd7b5981c00000000, 0x9684830500000000,
726
+ 0x59981b8200000000, 0x18a9009b00000000, 0xdbfa2db000000000,
727
+ 0x9acb36a900000000, 0x5d5d77e600000000, 0x1c6c6cff00000000,
728
+ 0xdf3f41d400000000, 0x9e0e5acd00000000, 0xa224849500000000,
729
+ 0xe3159f8c00000000, 0x2046b2a700000000, 0x6177a9be00000000,
730
+ 0xa6e1e8f100000000, 0xe7d0f3e800000000, 0x2483dec300000000,
731
+ 0x65b2c5da00000000, 0xaaae5d5d00000000, 0xeb9f464400000000,
732
+ 0x28cc6b6f00000000, 0x69fd707600000000, 0xae6b313900000000,
733
+ 0xef5a2a2000000000, 0x2c09070b00000000, 0x6d381c1200000000,
734
+ 0xf33646df00000000, 0xb2075dc600000000, 0x715470ed00000000,
735
+ 0x30656bf400000000, 0xf7f32abb00000000, 0xb6c231a200000000,
736
+ 0x75911c8900000000, 0x34a0079000000000, 0xfbbc9f1700000000,
737
+ 0xba8d840e00000000, 0x79dea92500000000, 0x38efb23c00000000,
738
+ 0xff79f37300000000, 0xbe48e86a00000000, 0x7d1bc54100000000,
739
+ 0x3c2ade5800000000, 0x054f79f000000000, 0x447e62e900000000,
740
+ 0x872d4fc200000000, 0xc61c54db00000000, 0x018a159400000000,
741
+ 0x40bb0e8d00000000, 0x83e823a600000000, 0xc2d938bf00000000,
742
+ 0x0dc5a03800000000, 0x4cf4bb2100000000, 0x8fa7960a00000000,
743
+ 0xce968d1300000000, 0x0900cc5c00000000, 0x4831d74500000000,
744
+ 0x8b62fa6e00000000, 0xca53e17700000000, 0x545dbbba00000000,
745
+ 0x156ca0a300000000, 0xd63f8d8800000000, 0x970e969100000000,
746
+ 0x5098d7de00000000, 0x11a9ccc700000000, 0xd2fae1ec00000000,
747
+ 0x93cbfaf500000000, 0x5cd7627200000000, 0x1de6796b00000000,
748
+ 0xdeb5544000000000, 0x9f844f5900000000, 0x58120e1600000000,
749
+ 0x1923150f00000000, 0xda70382400000000, 0x9b41233d00000000,
750
+ 0xa76bfd6500000000, 0xe65ae67c00000000, 0x2509cb5700000000,
751
+ 0x6438d04e00000000, 0xa3ae910100000000, 0xe29f8a1800000000,
752
+ 0x21cca73300000000, 0x60fdbc2a00000000, 0xafe124ad00000000,
753
+ 0xeed03fb400000000, 0x2d83129f00000000, 0x6cb2098600000000,
754
+ 0xab2448c900000000, 0xea1553d000000000, 0x29467efb00000000,
755
+ 0x687765e200000000, 0xf6793f2f00000000, 0xb748243600000000,
756
+ 0x741b091d00000000, 0x352a120400000000, 0xf2bc534b00000000,
757
+ 0xb38d485200000000, 0x70de657900000000, 0x31ef7e6000000000,
758
+ 0xfef3e6e700000000, 0xbfc2fdfe00000000, 0x7c91d0d500000000,
759
+ 0x3da0cbcc00000000, 0xfa368a8300000000, 0xbb07919a00000000,
760
+ 0x7854bcb100000000, 0x3965a7a800000000, 0x4b98833b00000000,
761
+ 0x0aa9982200000000, 0xc9fab50900000000, 0x88cbae1000000000,
762
+ 0x4f5def5f00000000, 0x0e6cf44600000000, 0xcd3fd96d00000000,
763
+ 0x8c0ec27400000000, 0x43125af300000000, 0x022341ea00000000,
764
+ 0xc1706cc100000000, 0x804177d800000000, 0x47d7369700000000,
765
+ 0x06e62d8e00000000, 0xc5b500a500000000, 0x84841bbc00000000,
766
+ 0x1a8a417100000000, 0x5bbb5a6800000000, 0x98e8774300000000,
767
+ 0xd9d96c5a00000000, 0x1e4f2d1500000000, 0x5f7e360c00000000,
768
+ 0x9c2d1b2700000000, 0xdd1c003e00000000, 0x120098b900000000,
769
+ 0x533183a000000000, 0x9062ae8b00000000, 0xd153b59200000000,
770
+ 0x16c5f4dd00000000, 0x57f4efc400000000, 0x94a7c2ef00000000,
771
+ 0xd596d9f600000000, 0xe9bc07ae00000000, 0xa88d1cb700000000,
772
+ 0x6bde319c00000000, 0x2aef2a8500000000, 0xed796bca00000000,
773
+ 0xac4870d300000000, 0x6f1b5df800000000, 0x2e2a46e100000000,
774
+ 0xe136de6600000000, 0xa007c57f00000000, 0x6354e85400000000,
775
+ 0x2265f34d00000000, 0xe5f3b20200000000, 0xa4c2a91b00000000,
776
+ 0x6791843000000000, 0x26a09f2900000000, 0xb8aec5e400000000,
777
+ 0xf99fdefd00000000, 0x3accf3d600000000, 0x7bfde8cf00000000,
778
+ 0xbc6ba98000000000, 0xfd5ab29900000000, 0x3e099fb200000000,
779
+ 0x7f3884ab00000000, 0xb0241c2c00000000, 0xf115073500000000,
780
+ 0x32462a1e00000000, 0x7377310700000000, 0xb4e1704800000000,
781
+ 0xf5d06b5100000000, 0x3683467a00000000, 0x77b25d6300000000,
782
+ 0x4ed7facb00000000, 0x0fe6e1d200000000, 0xccb5ccf900000000,
783
+ 0x8d84d7e000000000, 0x4a1296af00000000, 0x0b238db600000000,
784
+ 0xc870a09d00000000, 0x8941bb8400000000, 0x465d230300000000,
785
+ 0x076c381a00000000, 0xc43f153100000000, 0x850e0e2800000000,
786
+ 0x42984f6700000000, 0x03a9547e00000000, 0xc0fa795500000000,
787
+ 0x81cb624c00000000, 0x1fc5388100000000, 0x5ef4239800000000,
788
+ 0x9da70eb300000000, 0xdc9615aa00000000, 0x1b0054e500000000,
789
+ 0x5a314ffc00000000, 0x996262d700000000, 0xd85379ce00000000,
790
+ 0x174fe14900000000, 0x567efa5000000000, 0x952dd77b00000000,
791
+ 0xd41ccc6200000000, 0x138a8d2d00000000, 0x52bb963400000000,
792
+ 0x91e8bb1f00000000, 0xd0d9a00600000000, 0xecf37e5e00000000,
793
+ 0xadc2654700000000, 0x6e91486c00000000, 0x2fa0537500000000,
794
+ 0xe836123a00000000, 0xa907092300000000, 0x6a54240800000000,
795
+ 0x2b653f1100000000, 0xe479a79600000000, 0xa548bc8f00000000,
796
+ 0x661b91a400000000, 0x272a8abd00000000, 0xe0bccbf200000000,
797
+ 0xa18dd0eb00000000, 0x62defdc000000000, 0x23efe6d900000000,
798
+ 0xbde1bc1400000000, 0xfcd0a70d00000000, 0x3f838a2600000000,
799
+ 0x7eb2913f00000000, 0xb924d07000000000, 0xf815cb6900000000,
800
+ 0x3b46e64200000000, 0x7a77fd5b00000000, 0xb56b65dc00000000,
801
+ 0xf45a7ec500000000, 0x370953ee00000000, 0x763848f700000000,
802
+ 0xb1ae09b800000000, 0xf09f12a100000000, 0x33cc3f8a00000000,
803
+ 0x72fd249300000000},
804
+ {0x0000000000000000, 0x376ac20100000000, 0x6ed4840300000000,
805
+ 0x59be460200000000, 0xdca8090700000000, 0xebc2cb0600000000,
806
+ 0xb27c8d0400000000, 0x85164f0500000000, 0xb851130e00000000,
807
+ 0x8f3bd10f00000000, 0xd685970d00000000, 0xe1ef550c00000000,
808
+ 0x64f91a0900000000, 0x5393d80800000000, 0x0a2d9e0a00000000,
809
+ 0x3d475c0b00000000, 0x70a3261c00000000, 0x47c9e41d00000000,
810
+ 0x1e77a21f00000000, 0x291d601e00000000, 0xac0b2f1b00000000,
811
+ 0x9b61ed1a00000000, 0xc2dfab1800000000, 0xf5b5691900000000,
812
+ 0xc8f2351200000000, 0xff98f71300000000, 0xa626b11100000000,
813
+ 0x914c731000000000, 0x145a3c1500000000, 0x2330fe1400000000,
814
+ 0x7a8eb81600000000, 0x4de47a1700000000, 0xe0464d3800000000,
815
+ 0xd72c8f3900000000, 0x8e92c93b00000000, 0xb9f80b3a00000000,
816
+ 0x3cee443f00000000, 0x0b84863e00000000, 0x523ac03c00000000,
817
+ 0x6550023d00000000, 0x58175e3600000000, 0x6f7d9c3700000000,
818
+ 0x36c3da3500000000, 0x01a9183400000000, 0x84bf573100000000,
819
+ 0xb3d5953000000000, 0xea6bd33200000000, 0xdd01113300000000,
820
+ 0x90e56b2400000000, 0xa78fa92500000000, 0xfe31ef2700000000,
821
+ 0xc95b2d2600000000, 0x4c4d622300000000, 0x7b27a02200000000,
822
+ 0x2299e62000000000, 0x15f3242100000000, 0x28b4782a00000000,
823
+ 0x1fdeba2b00000000, 0x4660fc2900000000, 0x710a3e2800000000,
824
+ 0xf41c712d00000000, 0xc376b32c00000000, 0x9ac8f52e00000000,
825
+ 0xada2372f00000000, 0xc08d9a7000000000, 0xf7e7587100000000,
826
+ 0xae591e7300000000, 0x9933dc7200000000, 0x1c25937700000000,
827
+ 0x2b4f517600000000, 0x72f1177400000000, 0x459bd57500000000,
828
+ 0x78dc897e00000000, 0x4fb64b7f00000000, 0x16080d7d00000000,
829
+ 0x2162cf7c00000000, 0xa474807900000000, 0x931e427800000000,
830
+ 0xcaa0047a00000000, 0xfdcac67b00000000, 0xb02ebc6c00000000,
831
+ 0x87447e6d00000000, 0xdefa386f00000000, 0xe990fa6e00000000,
832
+ 0x6c86b56b00000000, 0x5bec776a00000000, 0x0252316800000000,
833
+ 0x3538f36900000000, 0x087faf6200000000, 0x3f156d6300000000,
834
+ 0x66ab2b6100000000, 0x51c1e96000000000, 0xd4d7a66500000000,
835
+ 0xe3bd646400000000, 0xba03226600000000, 0x8d69e06700000000,
836
+ 0x20cbd74800000000, 0x17a1154900000000, 0x4e1f534b00000000,
837
+ 0x7975914a00000000, 0xfc63de4f00000000, 0xcb091c4e00000000,
838
+ 0x92b75a4c00000000, 0xa5dd984d00000000, 0x989ac44600000000,
839
+ 0xaff0064700000000, 0xf64e404500000000, 0xc124824400000000,
840
+ 0x4432cd4100000000, 0x73580f4000000000, 0x2ae6494200000000,
841
+ 0x1d8c8b4300000000, 0x5068f15400000000, 0x6702335500000000,
842
+ 0x3ebc755700000000, 0x09d6b75600000000, 0x8cc0f85300000000,
843
+ 0xbbaa3a5200000000, 0xe2147c5000000000, 0xd57ebe5100000000,
844
+ 0xe839e25a00000000, 0xdf53205b00000000, 0x86ed665900000000,
845
+ 0xb187a45800000000, 0x3491eb5d00000000, 0x03fb295c00000000,
846
+ 0x5a456f5e00000000, 0x6d2fad5f00000000, 0x801b35e100000000,
847
+ 0xb771f7e000000000, 0xeecfb1e200000000, 0xd9a573e300000000,
848
+ 0x5cb33ce600000000, 0x6bd9fee700000000, 0x3267b8e500000000,
849
+ 0x050d7ae400000000, 0x384a26ef00000000, 0x0f20e4ee00000000,
850
+ 0x569ea2ec00000000, 0x61f460ed00000000, 0xe4e22fe800000000,
851
+ 0xd388ede900000000, 0x8a36abeb00000000, 0xbd5c69ea00000000,
852
+ 0xf0b813fd00000000, 0xc7d2d1fc00000000, 0x9e6c97fe00000000,
853
+ 0xa90655ff00000000, 0x2c101afa00000000, 0x1b7ad8fb00000000,
854
+ 0x42c49ef900000000, 0x75ae5cf800000000, 0x48e900f300000000,
855
+ 0x7f83c2f200000000, 0x263d84f000000000, 0x115746f100000000,
856
+ 0x944109f400000000, 0xa32bcbf500000000, 0xfa958df700000000,
857
+ 0xcdff4ff600000000, 0x605d78d900000000, 0x5737bad800000000,
858
+ 0x0e89fcda00000000, 0x39e33edb00000000, 0xbcf571de00000000,
859
+ 0x8b9fb3df00000000, 0xd221f5dd00000000, 0xe54b37dc00000000,
860
+ 0xd80c6bd700000000, 0xef66a9d600000000, 0xb6d8efd400000000,
861
+ 0x81b22dd500000000, 0x04a462d000000000, 0x33cea0d100000000,
862
+ 0x6a70e6d300000000, 0x5d1a24d200000000, 0x10fe5ec500000000,
863
+ 0x27949cc400000000, 0x7e2adac600000000, 0x494018c700000000,
864
+ 0xcc5657c200000000, 0xfb3c95c300000000, 0xa282d3c100000000,
865
+ 0x95e811c000000000, 0xa8af4dcb00000000, 0x9fc58fca00000000,
866
+ 0xc67bc9c800000000, 0xf1110bc900000000, 0x740744cc00000000,
867
+ 0x436d86cd00000000, 0x1ad3c0cf00000000, 0x2db902ce00000000,
868
+ 0x4096af9100000000, 0x77fc6d9000000000, 0x2e422b9200000000,
869
+ 0x1928e99300000000, 0x9c3ea69600000000, 0xab54649700000000,
870
+ 0xf2ea229500000000, 0xc580e09400000000, 0xf8c7bc9f00000000,
871
+ 0xcfad7e9e00000000, 0x9613389c00000000, 0xa179fa9d00000000,
872
+ 0x246fb59800000000, 0x1305779900000000, 0x4abb319b00000000,
873
+ 0x7dd1f39a00000000, 0x3035898d00000000, 0x075f4b8c00000000,
874
+ 0x5ee10d8e00000000, 0x698bcf8f00000000, 0xec9d808a00000000,
875
+ 0xdbf7428b00000000, 0x8249048900000000, 0xb523c68800000000,
876
+ 0x88649a8300000000, 0xbf0e588200000000, 0xe6b01e8000000000,
877
+ 0xd1dadc8100000000, 0x54cc938400000000, 0x63a6518500000000,
878
+ 0x3a18178700000000, 0x0d72d58600000000, 0xa0d0e2a900000000,
879
+ 0x97ba20a800000000, 0xce0466aa00000000, 0xf96ea4ab00000000,
880
+ 0x7c78ebae00000000, 0x4b1229af00000000, 0x12ac6fad00000000,
881
+ 0x25c6adac00000000, 0x1881f1a700000000, 0x2feb33a600000000,
882
+ 0x765575a400000000, 0x413fb7a500000000, 0xc429f8a000000000,
883
+ 0xf3433aa100000000, 0xaafd7ca300000000, 0x9d97bea200000000,
884
+ 0xd073c4b500000000, 0xe71906b400000000, 0xbea740b600000000,
885
+ 0x89cd82b700000000, 0x0cdbcdb200000000, 0x3bb10fb300000000,
886
+ 0x620f49b100000000, 0x55658bb000000000, 0x6822d7bb00000000,
887
+ 0x5f4815ba00000000, 0x06f653b800000000, 0x319c91b900000000,
888
+ 0xb48adebc00000000, 0x83e01cbd00000000, 0xda5e5abf00000000,
889
+ 0xed3498be00000000},
890
+ {0x0000000000000000, 0x6567bcb800000000, 0x8bc809aa00000000,
891
+ 0xeeafb51200000000, 0x5797628f00000000, 0x32f0de3700000000,
892
+ 0xdc5f6b2500000000, 0xb938d79d00000000, 0xef28b4c500000000,
893
+ 0x8a4f087d00000000, 0x64e0bd6f00000000, 0x018701d700000000,
894
+ 0xb8bfd64a00000000, 0xddd86af200000000, 0x3377dfe000000000,
895
+ 0x5610635800000000, 0x9f57195000000000, 0xfa30a5e800000000,
896
+ 0x149f10fa00000000, 0x71f8ac4200000000, 0xc8c07bdf00000000,
897
+ 0xada7c76700000000, 0x4308727500000000, 0x266fcecd00000000,
898
+ 0x707fad9500000000, 0x1518112d00000000, 0xfbb7a43f00000000,
899
+ 0x9ed0188700000000, 0x27e8cf1a00000000, 0x428f73a200000000,
900
+ 0xac20c6b000000000, 0xc9477a0800000000, 0x3eaf32a000000000,
901
+ 0x5bc88e1800000000, 0xb5673b0a00000000, 0xd00087b200000000,
902
+ 0x6938502f00000000, 0x0c5fec9700000000, 0xe2f0598500000000,
903
+ 0x8797e53d00000000, 0xd187866500000000, 0xb4e03add00000000,
904
+ 0x5a4f8fcf00000000, 0x3f28337700000000, 0x8610e4ea00000000,
905
+ 0xe377585200000000, 0x0dd8ed4000000000, 0x68bf51f800000000,
906
+ 0xa1f82bf000000000, 0xc49f974800000000, 0x2a30225a00000000,
907
+ 0x4f579ee200000000, 0xf66f497f00000000, 0x9308f5c700000000,
908
+ 0x7da740d500000000, 0x18c0fc6d00000000, 0x4ed09f3500000000,
909
+ 0x2bb7238d00000000, 0xc518969f00000000, 0xa07f2a2700000000,
910
+ 0x1947fdba00000000, 0x7c20410200000000, 0x928ff41000000000,
911
+ 0xf7e848a800000000, 0x3d58149b00000000, 0x583fa82300000000,
912
+ 0xb6901d3100000000, 0xd3f7a18900000000, 0x6acf761400000000,
913
+ 0x0fa8caac00000000, 0xe1077fbe00000000, 0x8460c30600000000,
914
+ 0xd270a05e00000000, 0xb7171ce600000000, 0x59b8a9f400000000,
915
+ 0x3cdf154c00000000, 0x85e7c2d100000000, 0xe0807e6900000000,
916
+ 0x0e2fcb7b00000000, 0x6b4877c300000000, 0xa20f0dcb00000000,
917
+ 0xc768b17300000000, 0x29c7046100000000, 0x4ca0b8d900000000,
918
+ 0xf5986f4400000000, 0x90ffd3fc00000000, 0x7e5066ee00000000,
919
+ 0x1b37da5600000000, 0x4d27b90e00000000, 0x284005b600000000,
920
+ 0xc6efb0a400000000, 0xa3880c1c00000000, 0x1ab0db8100000000,
921
+ 0x7fd7673900000000, 0x9178d22b00000000, 0xf41f6e9300000000,
922
+ 0x03f7263b00000000, 0x66909a8300000000, 0x883f2f9100000000,
923
+ 0xed58932900000000, 0x546044b400000000, 0x3107f80c00000000,
924
+ 0xdfa84d1e00000000, 0xbacff1a600000000, 0xecdf92fe00000000,
925
+ 0x89b82e4600000000, 0x67179b5400000000, 0x027027ec00000000,
926
+ 0xbb48f07100000000, 0xde2f4cc900000000, 0x3080f9db00000000,
927
+ 0x55e7456300000000, 0x9ca03f6b00000000, 0xf9c783d300000000,
928
+ 0x176836c100000000, 0x720f8a7900000000, 0xcb375de400000000,
929
+ 0xae50e15c00000000, 0x40ff544e00000000, 0x2598e8f600000000,
930
+ 0x73888bae00000000, 0x16ef371600000000, 0xf840820400000000,
931
+ 0x9d273ebc00000000, 0x241fe92100000000, 0x4178559900000000,
932
+ 0xafd7e08b00000000, 0xcab05c3300000000, 0x3bb659ed00000000,
933
+ 0x5ed1e55500000000, 0xb07e504700000000, 0xd519ecff00000000,
934
+ 0x6c213b6200000000, 0x094687da00000000, 0xe7e932c800000000,
935
+ 0x828e8e7000000000, 0xd49eed2800000000, 0xb1f9519000000000,
936
+ 0x5f56e48200000000, 0x3a31583a00000000, 0x83098fa700000000,
937
+ 0xe66e331f00000000, 0x08c1860d00000000, 0x6da63ab500000000,
938
+ 0xa4e140bd00000000, 0xc186fc0500000000, 0x2f29491700000000,
939
+ 0x4a4ef5af00000000, 0xf376223200000000, 0x96119e8a00000000,
940
+ 0x78be2b9800000000, 0x1dd9972000000000, 0x4bc9f47800000000,
941
+ 0x2eae48c000000000, 0xc001fdd200000000, 0xa566416a00000000,
942
+ 0x1c5e96f700000000, 0x79392a4f00000000, 0x97969f5d00000000,
943
+ 0xf2f123e500000000, 0x05196b4d00000000, 0x607ed7f500000000,
944
+ 0x8ed162e700000000, 0xebb6de5f00000000, 0x528e09c200000000,
945
+ 0x37e9b57a00000000, 0xd946006800000000, 0xbc21bcd000000000,
946
+ 0xea31df8800000000, 0x8f56633000000000, 0x61f9d62200000000,
947
+ 0x049e6a9a00000000, 0xbda6bd0700000000, 0xd8c101bf00000000,
948
+ 0x366eb4ad00000000, 0x5309081500000000, 0x9a4e721d00000000,
949
+ 0xff29cea500000000, 0x11867bb700000000, 0x74e1c70f00000000,
950
+ 0xcdd9109200000000, 0xa8beac2a00000000, 0x4611193800000000,
951
+ 0x2376a58000000000, 0x7566c6d800000000, 0x10017a6000000000,
952
+ 0xfeaecf7200000000, 0x9bc973ca00000000, 0x22f1a45700000000,
953
+ 0x479618ef00000000, 0xa939adfd00000000, 0xcc5e114500000000,
954
+ 0x06ee4d7600000000, 0x6389f1ce00000000, 0x8d2644dc00000000,
955
+ 0xe841f86400000000, 0x51792ff900000000, 0x341e934100000000,
956
+ 0xdab1265300000000, 0xbfd69aeb00000000, 0xe9c6f9b300000000,
957
+ 0x8ca1450b00000000, 0x620ef01900000000, 0x07694ca100000000,
958
+ 0xbe519b3c00000000, 0xdb36278400000000, 0x3599929600000000,
959
+ 0x50fe2e2e00000000, 0x99b9542600000000, 0xfcdee89e00000000,
960
+ 0x12715d8c00000000, 0x7716e13400000000, 0xce2e36a900000000,
961
+ 0xab498a1100000000, 0x45e63f0300000000, 0x208183bb00000000,
962
+ 0x7691e0e300000000, 0x13f65c5b00000000, 0xfd59e94900000000,
963
+ 0x983e55f100000000, 0x2106826c00000000, 0x44613ed400000000,
964
+ 0xaace8bc600000000, 0xcfa9377e00000000, 0x38417fd600000000,
965
+ 0x5d26c36e00000000, 0xb389767c00000000, 0xd6eecac400000000,
966
+ 0x6fd61d5900000000, 0x0ab1a1e100000000, 0xe41e14f300000000,
967
+ 0x8179a84b00000000, 0xd769cb1300000000, 0xb20e77ab00000000,
968
+ 0x5ca1c2b900000000, 0x39c67e0100000000, 0x80fea99c00000000,
969
+ 0xe599152400000000, 0x0b36a03600000000, 0x6e511c8e00000000,
970
+ 0xa716668600000000, 0xc271da3e00000000, 0x2cde6f2c00000000,
971
+ 0x49b9d39400000000, 0xf081040900000000, 0x95e6b8b100000000,
972
+ 0x7b490da300000000, 0x1e2eb11b00000000, 0x483ed24300000000,
973
+ 0x2d596efb00000000, 0xc3f6dbe900000000, 0xa691675100000000,
974
+ 0x1fa9b0cc00000000, 0x7ace0c7400000000, 0x9461b96600000000,
975
+ 0xf10605de00000000},
976
+ {0x0000000000000000, 0xb029603d00000000, 0x6053c07a00000000,
977
+ 0xd07aa04700000000, 0xc0a680f500000000, 0x708fe0c800000000,
978
+ 0xa0f5408f00000000, 0x10dc20b200000000, 0xc14b703000000000,
979
+ 0x7162100d00000000, 0xa118b04a00000000, 0x1131d07700000000,
980
+ 0x01edf0c500000000, 0xb1c490f800000000, 0x61be30bf00000000,
981
+ 0xd197508200000000, 0x8297e06000000000, 0x32be805d00000000,
982
+ 0xe2c4201a00000000, 0x52ed402700000000, 0x4231609500000000,
983
+ 0xf21800a800000000, 0x2262a0ef00000000, 0x924bc0d200000000,
984
+ 0x43dc905000000000, 0xf3f5f06d00000000, 0x238f502a00000000,
985
+ 0x93a6301700000000, 0x837a10a500000000, 0x3353709800000000,
986
+ 0xe329d0df00000000, 0x5300b0e200000000, 0x042fc1c100000000,
987
+ 0xb406a1fc00000000, 0x647c01bb00000000, 0xd455618600000000,
988
+ 0xc489413400000000, 0x74a0210900000000, 0xa4da814e00000000,
989
+ 0x14f3e17300000000, 0xc564b1f100000000, 0x754dd1cc00000000,
990
+ 0xa537718b00000000, 0x151e11b600000000, 0x05c2310400000000,
991
+ 0xb5eb513900000000, 0x6591f17e00000000, 0xd5b8914300000000,
992
+ 0x86b821a100000000, 0x3691419c00000000, 0xe6ebe1db00000000,
993
+ 0x56c281e600000000, 0x461ea15400000000, 0xf637c16900000000,
994
+ 0x264d612e00000000, 0x9664011300000000, 0x47f3519100000000,
995
+ 0xf7da31ac00000000, 0x27a091eb00000000, 0x9789f1d600000000,
996
+ 0x8755d16400000000, 0x377cb15900000000, 0xe706111e00000000,
997
+ 0x572f712300000000, 0x4958f35800000000, 0xf971936500000000,
998
+ 0x290b332200000000, 0x9922531f00000000, 0x89fe73ad00000000,
999
+ 0x39d7139000000000, 0xe9adb3d700000000, 0x5984d3ea00000000,
1000
+ 0x8813836800000000, 0x383ae35500000000, 0xe840431200000000,
1001
+ 0x5869232f00000000, 0x48b5039d00000000, 0xf89c63a000000000,
1002
+ 0x28e6c3e700000000, 0x98cfa3da00000000, 0xcbcf133800000000,
1003
+ 0x7be6730500000000, 0xab9cd34200000000, 0x1bb5b37f00000000,
1004
+ 0x0b6993cd00000000, 0xbb40f3f000000000, 0x6b3a53b700000000,
1005
+ 0xdb13338a00000000, 0x0a84630800000000, 0xbaad033500000000,
1006
+ 0x6ad7a37200000000, 0xdafec34f00000000, 0xca22e3fd00000000,
1007
+ 0x7a0b83c000000000, 0xaa71238700000000, 0x1a5843ba00000000,
1008
+ 0x4d77329900000000, 0xfd5e52a400000000, 0x2d24f2e300000000,
1009
+ 0x9d0d92de00000000, 0x8dd1b26c00000000, 0x3df8d25100000000,
1010
+ 0xed82721600000000, 0x5dab122b00000000, 0x8c3c42a900000000,
1011
+ 0x3c15229400000000, 0xec6f82d300000000, 0x5c46e2ee00000000,
1012
+ 0x4c9ac25c00000000, 0xfcb3a26100000000, 0x2cc9022600000000,
1013
+ 0x9ce0621b00000000, 0xcfe0d2f900000000, 0x7fc9b2c400000000,
1014
+ 0xafb3128300000000, 0x1f9a72be00000000, 0x0f46520c00000000,
1015
+ 0xbf6f323100000000, 0x6f15927600000000, 0xdf3cf24b00000000,
1016
+ 0x0eaba2c900000000, 0xbe82c2f400000000, 0x6ef862b300000000,
1017
+ 0xded1028e00000000, 0xce0d223c00000000, 0x7e24420100000000,
1018
+ 0xae5ee24600000000, 0x1e77827b00000000, 0x92b0e6b100000000,
1019
+ 0x2299868c00000000, 0xf2e326cb00000000, 0x42ca46f600000000,
1020
+ 0x5216664400000000, 0xe23f067900000000, 0x3245a63e00000000,
1021
+ 0x826cc60300000000, 0x53fb968100000000, 0xe3d2f6bc00000000,
1022
+ 0x33a856fb00000000, 0x838136c600000000, 0x935d167400000000,
1023
+ 0x2374764900000000, 0xf30ed60e00000000, 0x4327b63300000000,
1024
+ 0x102706d100000000, 0xa00e66ec00000000, 0x7074c6ab00000000,
1025
+ 0xc05da69600000000, 0xd081862400000000, 0x60a8e61900000000,
1026
+ 0xb0d2465e00000000, 0x00fb266300000000, 0xd16c76e100000000,
1027
+ 0x614516dc00000000, 0xb13fb69b00000000, 0x0116d6a600000000,
1028
+ 0x11caf61400000000, 0xa1e3962900000000, 0x7199366e00000000,
1029
+ 0xc1b0565300000000, 0x969f277000000000, 0x26b6474d00000000,
1030
+ 0xf6cce70a00000000, 0x46e5873700000000, 0x5639a78500000000,
1031
+ 0xe610c7b800000000, 0x366a67ff00000000, 0x864307c200000000,
1032
+ 0x57d4574000000000, 0xe7fd377d00000000, 0x3787973a00000000,
1033
+ 0x87aef70700000000, 0x9772d7b500000000, 0x275bb78800000000,
1034
+ 0xf72117cf00000000, 0x470877f200000000, 0x1408c71000000000,
1035
+ 0xa421a72d00000000, 0x745b076a00000000, 0xc472675700000000,
1036
+ 0xd4ae47e500000000, 0x648727d800000000, 0xb4fd879f00000000,
1037
+ 0x04d4e7a200000000, 0xd543b72000000000, 0x656ad71d00000000,
1038
+ 0xb510775a00000000, 0x0539176700000000, 0x15e537d500000000,
1039
+ 0xa5cc57e800000000, 0x75b6f7af00000000, 0xc59f979200000000,
1040
+ 0xdbe815e900000000, 0x6bc175d400000000, 0xbbbbd59300000000,
1041
+ 0x0b92b5ae00000000, 0x1b4e951c00000000, 0xab67f52100000000,
1042
+ 0x7b1d556600000000, 0xcb34355b00000000, 0x1aa365d900000000,
1043
+ 0xaa8a05e400000000, 0x7af0a5a300000000, 0xcad9c59e00000000,
1044
+ 0xda05e52c00000000, 0x6a2c851100000000, 0xba56255600000000,
1045
+ 0x0a7f456b00000000, 0x597ff58900000000, 0xe95695b400000000,
1046
+ 0x392c35f300000000, 0x890555ce00000000, 0x99d9757c00000000,
1047
+ 0x29f0154100000000, 0xf98ab50600000000, 0x49a3d53b00000000,
1048
+ 0x983485b900000000, 0x281de58400000000, 0xf86745c300000000,
1049
+ 0x484e25fe00000000, 0x5892054c00000000, 0xe8bb657100000000,
1050
+ 0x38c1c53600000000, 0x88e8a50b00000000, 0xdfc7d42800000000,
1051
+ 0x6feeb41500000000, 0xbf94145200000000, 0x0fbd746f00000000,
1052
+ 0x1f6154dd00000000, 0xaf4834e000000000, 0x7f3294a700000000,
1053
+ 0xcf1bf49a00000000, 0x1e8ca41800000000, 0xaea5c42500000000,
1054
+ 0x7edf646200000000, 0xcef6045f00000000, 0xde2a24ed00000000,
1055
+ 0x6e0344d000000000, 0xbe79e49700000000, 0x0e5084aa00000000,
1056
+ 0x5d50344800000000, 0xed79547500000000, 0x3d03f43200000000,
1057
+ 0x8d2a940f00000000, 0x9df6b4bd00000000, 0x2ddfd48000000000,
1058
+ 0xfda574c700000000, 0x4d8c14fa00000000, 0x9c1b447800000000,
1059
+ 0x2c32244500000000, 0xfc48840200000000, 0x4c61e43f00000000,
1060
+ 0x5cbdc48d00000000, 0xec94a4b000000000, 0x3cee04f700000000,
1061
+ 0x8cc764ca00000000},
1062
+ {0x0000000000000000, 0xa5d35ccb00000000, 0x0ba1c84d00000000,
1063
+ 0xae72948600000000, 0x1642919b00000000, 0xb391cd5000000000,
1064
+ 0x1de359d600000000, 0xb830051d00000000, 0x6d8253ec00000000,
1065
+ 0xc8510f2700000000, 0x66239ba100000000, 0xc3f0c76a00000000,
1066
+ 0x7bc0c27700000000, 0xde139ebc00000000, 0x70610a3a00000000,
1067
+ 0xd5b256f100000000, 0x9b02d60300000000, 0x3ed18ac800000000,
1068
+ 0x90a31e4e00000000, 0x3570428500000000, 0x8d40479800000000,
1069
+ 0x28931b5300000000, 0x86e18fd500000000, 0x2332d31e00000000,
1070
+ 0xf68085ef00000000, 0x5353d92400000000, 0xfd214da200000000,
1071
+ 0x58f2116900000000, 0xe0c2147400000000, 0x451148bf00000000,
1072
+ 0xeb63dc3900000000, 0x4eb080f200000000, 0x3605ac0700000000,
1073
+ 0x93d6f0cc00000000, 0x3da4644a00000000, 0x9877388100000000,
1074
+ 0x20473d9c00000000, 0x8594615700000000, 0x2be6f5d100000000,
1075
+ 0x8e35a91a00000000, 0x5b87ffeb00000000, 0xfe54a32000000000,
1076
+ 0x502637a600000000, 0xf5f56b6d00000000, 0x4dc56e7000000000,
1077
+ 0xe81632bb00000000, 0x4664a63d00000000, 0xe3b7faf600000000,
1078
+ 0xad077a0400000000, 0x08d426cf00000000, 0xa6a6b24900000000,
1079
+ 0x0375ee8200000000, 0xbb45eb9f00000000, 0x1e96b75400000000,
1080
+ 0xb0e423d200000000, 0x15377f1900000000, 0xc08529e800000000,
1081
+ 0x6556752300000000, 0xcb24e1a500000000, 0x6ef7bd6e00000000,
1082
+ 0xd6c7b87300000000, 0x7314e4b800000000, 0xdd66703e00000000,
1083
+ 0x78b52cf500000000, 0x6c0a580f00000000, 0xc9d904c400000000,
1084
+ 0x67ab904200000000, 0xc278cc8900000000, 0x7a48c99400000000,
1085
+ 0xdf9b955f00000000, 0x71e901d900000000, 0xd43a5d1200000000,
1086
+ 0x01880be300000000, 0xa45b572800000000, 0x0a29c3ae00000000,
1087
+ 0xaffa9f6500000000, 0x17ca9a7800000000, 0xb219c6b300000000,
1088
+ 0x1c6b523500000000, 0xb9b80efe00000000, 0xf7088e0c00000000,
1089
+ 0x52dbd2c700000000, 0xfca9464100000000, 0x597a1a8a00000000,
1090
+ 0xe14a1f9700000000, 0x4499435c00000000, 0xeaebd7da00000000,
1091
+ 0x4f388b1100000000, 0x9a8adde000000000, 0x3f59812b00000000,
1092
+ 0x912b15ad00000000, 0x34f8496600000000, 0x8cc84c7b00000000,
1093
+ 0x291b10b000000000, 0x8769843600000000, 0x22bad8fd00000000,
1094
+ 0x5a0ff40800000000, 0xffdca8c300000000, 0x51ae3c4500000000,
1095
+ 0xf47d608e00000000, 0x4c4d659300000000, 0xe99e395800000000,
1096
+ 0x47ecadde00000000, 0xe23ff11500000000, 0x378da7e400000000,
1097
+ 0x925efb2f00000000, 0x3c2c6fa900000000, 0x99ff336200000000,
1098
+ 0x21cf367f00000000, 0x841c6ab400000000, 0x2a6efe3200000000,
1099
+ 0x8fbda2f900000000, 0xc10d220b00000000, 0x64de7ec000000000,
1100
+ 0xcaacea4600000000, 0x6f7fb68d00000000, 0xd74fb39000000000,
1101
+ 0x729cef5b00000000, 0xdcee7bdd00000000, 0x793d271600000000,
1102
+ 0xac8f71e700000000, 0x095c2d2c00000000, 0xa72eb9aa00000000,
1103
+ 0x02fde56100000000, 0xbacde07c00000000, 0x1f1ebcb700000000,
1104
+ 0xb16c283100000000, 0x14bf74fa00000000, 0xd814b01e00000000,
1105
+ 0x7dc7ecd500000000, 0xd3b5785300000000, 0x7666249800000000,
1106
+ 0xce56218500000000, 0x6b857d4e00000000, 0xc5f7e9c800000000,
1107
+ 0x6024b50300000000, 0xb596e3f200000000, 0x1045bf3900000000,
1108
+ 0xbe372bbf00000000, 0x1be4777400000000, 0xa3d4726900000000,
1109
+ 0x06072ea200000000, 0xa875ba2400000000, 0x0da6e6ef00000000,
1110
+ 0x4316661d00000000, 0xe6c53ad600000000, 0x48b7ae5000000000,
1111
+ 0xed64f29b00000000, 0x5554f78600000000, 0xf087ab4d00000000,
1112
+ 0x5ef53fcb00000000, 0xfb26630000000000, 0x2e9435f100000000,
1113
+ 0x8b47693a00000000, 0x2535fdbc00000000, 0x80e6a17700000000,
1114
+ 0x38d6a46a00000000, 0x9d05f8a100000000, 0x33776c2700000000,
1115
+ 0x96a430ec00000000, 0xee111c1900000000, 0x4bc240d200000000,
1116
+ 0xe5b0d45400000000, 0x4063889f00000000, 0xf8538d8200000000,
1117
+ 0x5d80d14900000000, 0xf3f245cf00000000, 0x5621190400000000,
1118
+ 0x83934ff500000000, 0x2640133e00000000, 0x883287b800000000,
1119
+ 0x2de1db7300000000, 0x95d1de6e00000000, 0x300282a500000000,
1120
+ 0x9e70162300000000, 0x3ba34ae800000000, 0x7513ca1a00000000,
1121
+ 0xd0c096d100000000, 0x7eb2025700000000, 0xdb615e9c00000000,
1122
+ 0x63515b8100000000, 0xc682074a00000000, 0x68f093cc00000000,
1123
+ 0xcd23cf0700000000, 0x189199f600000000, 0xbd42c53d00000000,
1124
+ 0x133051bb00000000, 0xb6e30d7000000000, 0x0ed3086d00000000,
1125
+ 0xab0054a600000000, 0x0572c02000000000, 0xa0a19ceb00000000,
1126
+ 0xb41ee81100000000, 0x11cdb4da00000000, 0xbfbf205c00000000,
1127
+ 0x1a6c7c9700000000, 0xa25c798a00000000, 0x078f254100000000,
1128
+ 0xa9fdb1c700000000, 0x0c2eed0c00000000, 0xd99cbbfd00000000,
1129
+ 0x7c4fe73600000000, 0xd23d73b000000000, 0x77ee2f7b00000000,
1130
+ 0xcfde2a6600000000, 0x6a0d76ad00000000, 0xc47fe22b00000000,
1131
+ 0x61acbee000000000, 0x2f1c3e1200000000, 0x8acf62d900000000,
1132
+ 0x24bdf65f00000000, 0x816eaa9400000000, 0x395eaf8900000000,
1133
+ 0x9c8df34200000000, 0x32ff67c400000000, 0x972c3b0f00000000,
1134
+ 0x429e6dfe00000000, 0xe74d313500000000, 0x493fa5b300000000,
1135
+ 0xececf97800000000, 0x54dcfc6500000000, 0xf10fa0ae00000000,
1136
+ 0x5f7d342800000000, 0xfaae68e300000000, 0x821b441600000000,
1137
+ 0x27c818dd00000000, 0x89ba8c5b00000000, 0x2c69d09000000000,
1138
+ 0x9459d58d00000000, 0x318a894600000000, 0x9ff81dc000000000,
1139
+ 0x3a2b410b00000000, 0xef9917fa00000000, 0x4a4a4b3100000000,
1140
+ 0xe438dfb700000000, 0x41eb837c00000000, 0xf9db866100000000,
1141
+ 0x5c08daaa00000000, 0xf27a4e2c00000000, 0x57a912e700000000,
1142
+ 0x1919921500000000, 0xbccacede00000000, 0x12b85a5800000000,
1143
+ 0xb76b069300000000, 0x0f5b038e00000000, 0xaa885f4500000000,
1144
+ 0x04facbc300000000, 0xa129970800000000, 0x749bc1f900000000,
1145
+ 0xd1489d3200000000, 0x7f3a09b400000000, 0xdae9557f00000000,
1146
+ 0x62d9506200000000, 0xc70a0ca900000000, 0x6978982f00000000,
1147
+ 0xccabc4e400000000},
1148
+ {0x0000000000000000, 0xb40b77a600000000, 0x29119f9700000000,
1149
+ 0x9d1ae83100000000, 0x13244ff400000000, 0xa72f385200000000,
1150
+ 0x3a35d06300000000, 0x8e3ea7c500000000, 0x674eef3300000000,
1151
+ 0xd345989500000000, 0x4e5f70a400000000, 0xfa54070200000000,
1152
+ 0x746aa0c700000000, 0xc061d76100000000, 0x5d7b3f5000000000,
1153
+ 0xe97048f600000000, 0xce9cde6700000000, 0x7a97a9c100000000,
1154
+ 0xe78d41f000000000, 0x5386365600000000, 0xddb8919300000000,
1155
+ 0x69b3e63500000000, 0xf4a90e0400000000, 0x40a279a200000000,
1156
+ 0xa9d2315400000000, 0x1dd946f200000000, 0x80c3aec300000000,
1157
+ 0x34c8d96500000000, 0xbaf67ea000000000, 0x0efd090600000000,
1158
+ 0x93e7e13700000000, 0x27ec969100000000, 0x9c39bdcf00000000,
1159
+ 0x2832ca6900000000, 0xb528225800000000, 0x012355fe00000000,
1160
+ 0x8f1df23b00000000, 0x3b16859d00000000, 0xa60c6dac00000000,
1161
+ 0x12071a0a00000000, 0xfb7752fc00000000, 0x4f7c255a00000000,
1162
+ 0xd266cd6b00000000, 0x666dbacd00000000, 0xe8531d0800000000,
1163
+ 0x5c586aae00000000, 0xc142829f00000000, 0x7549f53900000000,
1164
+ 0x52a563a800000000, 0xe6ae140e00000000, 0x7bb4fc3f00000000,
1165
+ 0xcfbf8b9900000000, 0x41812c5c00000000, 0xf58a5bfa00000000,
1166
+ 0x6890b3cb00000000, 0xdc9bc46d00000000, 0x35eb8c9b00000000,
1167
+ 0x81e0fb3d00000000, 0x1cfa130c00000000, 0xa8f164aa00000000,
1168
+ 0x26cfc36f00000000, 0x92c4b4c900000000, 0x0fde5cf800000000,
1169
+ 0xbbd52b5e00000000, 0x79750b4400000000, 0xcd7e7ce200000000,
1170
+ 0x506494d300000000, 0xe46fe37500000000, 0x6a5144b000000000,
1171
+ 0xde5a331600000000, 0x4340db2700000000, 0xf74bac8100000000,
1172
+ 0x1e3be47700000000, 0xaa3093d100000000, 0x372a7be000000000,
1173
+ 0x83210c4600000000, 0x0d1fab8300000000, 0xb914dc2500000000,
1174
+ 0x240e341400000000, 0x900543b200000000, 0xb7e9d52300000000,
1175
+ 0x03e2a28500000000, 0x9ef84ab400000000, 0x2af33d1200000000,
1176
+ 0xa4cd9ad700000000, 0x10c6ed7100000000, 0x8ddc054000000000,
1177
+ 0x39d772e600000000, 0xd0a73a1000000000, 0x64ac4db600000000,
1178
+ 0xf9b6a58700000000, 0x4dbdd22100000000, 0xc38375e400000000,
1179
+ 0x7788024200000000, 0xea92ea7300000000, 0x5e999dd500000000,
1180
+ 0xe54cb68b00000000, 0x5147c12d00000000, 0xcc5d291c00000000,
1181
+ 0x78565eba00000000, 0xf668f97f00000000, 0x42638ed900000000,
1182
+ 0xdf7966e800000000, 0x6b72114e00000000, 0x820259b800000000,
1183
+ 0x36092e1e00000000, 0xab13c62f00000000, 0x1f18b18900000000,
1184
+ 0x9126164c00000000, 0x252d61ea00000000, 0xb83789db00000000,
1185
+ 0x0c3cfe7d00000000, 0x2bd068ec00000000, 0x9fdb1f4a00000000,
1186
+ 0x02c1f77b00000000, 0xb6ca80dd00000000, 0x38f4271800000000,
1187
+ 0x8cff50be00000000, 0x11e5b88f00000000, 0xa5eecf2900000000,
1188
+ 0x4c9e87df00000000, 0xf895f07900000000, 0x658f184800000000,
1189
+ 0xd1846fee00000000, 0x5fbac82b00000000, 0xebb1bf8d00000000,
1190
+ 0x76ab57bc00000000, 0xc2a0201a00000000, 0xf2ea168800000000,
1191
+ 0x46e1612e00000000, 0xdbfb891f00000000, 0x6ff0feb900000000,
1192
+ 0xe1ce597c00000000, 0x55c52eda00000000, 0xc8dfc6eb00000000,
1193
+ 0x7cd4b14d00000000, 0x95a4f9bb00000000, 0x21af8e1d00000000,
1194
+ 0xbcb5662c00000000, 0x08be118a00000000, 0x8680b64f00000000,
1195
+ 0x328bc1e900000000, 0xaf9129d800000000, 0x1b9a5e7e00000000,
1196
+ 0x3c76c8ef00000000, 0x887dbf4900000000, 0x1567577800000000,
1197
+ 0xa16c20de00000000, 0x2f52871b00000000, 0x9b59f0bd00000000,
1198
+ 0x0643188c00000000, 0xb2486f2a00000000, 0x5b3827dc00000000,
1199
+ 0xef33507a00000000, 0x7229b84b00000000, 0xc622cfed00000000,
1200
+ 0x481c682800000000, 0xfc171f8e00000000, 0x610df7bf00000000,
1201
+ 0xd506801900000000, 0x6ed3ab4700000000, 0xdad8dce100000000,
1202
+ 0x47c234d000000000, 0xf3c9437600000000, 0x7df7e4b300000000,
1203
+ 0xc9fc931500000000, 0x54e67b2400000000, 0xe0ed0c8200000000,
1204
+ 0x099d447400000000, 0xbd9633d200000000, 0x208cdbe300000000,
1205
+ 0x9487ac4500000000, 0x1ab90b8000000000, 0xaeb27c2600000000,
1206
+ 0x33a8941700000000, 0x87a3e3b100000000, 0xa04f752000000000,
1207
+ 0x1444028600000000, 0x895eeab700000000, 0x3d559d1100000000,
1208
+ 0xb36b3ad400000000, 0x07604d7200000000, 0x9a7aa54300000000,
1209
+ 0x2e71d2e500000000, 0xc7019a1300000000, 0x730aedb500000000,
1210
+ 0xee10058400000000, 0x5a1b722200000000, 0xd425d5e700000000,
1211
+ 0x602ea24100000000, 0xfd344a7000000000, 0x493f3dd600000000,
1212
+ 0x8b9f1dcc00000000, 0x3f946a6a00000000, 0xa28e825b00000000,
1213
+ 0x1685f5fd00000000, 0x98bb523800000000, 0x2cb0259e00000000,
1214
+ 0xb1aacdaf00000000, 0x05a1ba0900000000, 0xecd1f2ff00000000,
1215
+ 0x58da855900000000, 0xc5c06d6800000000, 0x71cb1ace00000000,
1216
+ 0xfff5bd0b00000000, 0x4bfecaad00000000, 0xd6e4229c00000000,
1217
+ 0x62ef553a00000000, 0x4503c3ab00000000, 0xf108b40d00000000,
1218
+ 0x6c125c3c00000000, 0xd8192b9a00000000, 0x56278c5f00000000,
1219
+ 0xe22cfbf900000000, 0x7f3613c800000000, 0xcb3d646e00000000,
1220
+ 0x224d2c9800000000, 0x96465b3e00000000, 0x0b5cb30f00000000,
1221
+ 0xbf57c4a900000000, 0x3169636c00000000, 0x856214ca00000000,
1222
+ 0x1878fcfb00000000, 0xac738b5d00000000, 0x17a6a00300000000,
1223
+ 0xa3add7a500000000, 0x3eb73f9400000000, 0x8abc483200000000,
1224
+ 0x0482eff700000000, 0xb089985100000000, 0x2d93706000000000,
1225
+ 0x999807c600000000, 0x70e84f3000000000, 0xc4e3389600000000,
1226
+ 0x59f9d0a700000000, 0xedf2a70100000000, 0x63cc00c400000000,
1227
+ 0xd7c7776200000000, 0x4add9f5300000000, 0xfed6e8f500000000,
1228
+ 0xd93a7e6400000000, 0x6d3109c200000000, 0xf02be1f300000000,
1229
+ 0x4420965500000000, 0xca1e319000000000, 0x7e15463600000000,
1230
+ 0xe30fae0700000000, 0x5704d9a100000000, 0xbe74915700000000,
1231
+ 0x0a7fe6f100000000, 0x97650ec000000000, 0x236e796600000000,
1232
+ 0xad50dea300000000, 0x195ba90500000000, 0x8441413400000000,
1233
+ 0x304a369200000000},
1234
+ {0x0000000000000000, 0x9e00aacc00000000, 0x7d07254200000000,
1235
+ 0xe3078f8e00000000, 0xfa0e4a8400000000, 0x640ee04800000000,
1236
+ 0x87096fc600000000, 0x1909c50a00000000, 0xb51be5d300000000,
1237
+ 0x2b1b4f1f00000000, 0xc81cc09100000000, 0x561c6a5d00000000,
1238
+ 0x4f15af5700000000, 0xd115059b00000000, 0x32128a1500000000,
1239
+ 0xac1220d900000000, 0x2b31bb7c00000000, 0xb53111b000000000,
1240
+ 0x56369e3e00000000, 0xc83634f200000000, 0xd13ff1f800000000,
1241
+ 0x4f3f5b3400000000, 0xac38d4ba00000000, 0x32387e7600000000,
1242
+ 0x9e2a5eaf00000000, 0x002af46300000000, 0xe32d7bed00000000,
1243
+ 0x7d2dd12100000000, 0x6424142b00000000, 0xfa24bee700000000,
1244
+ 0x1923316900000000, 0x87239ba500000000, 0x566276f900000000,
1245
+ 0xc862dc3500000000, 0x2b6553bb00000000, 0xb565f97700000000,
1246
+ 0xac6c3c7d00000000, 0x326c96b100000000, 0xd16b193f00000000,
1247
+ 0x4f6bb3f300000000, 0xe379932a00000000, 0x7d7939e600000000,
1248
+ 0x9e7eb66800000000, 0x007e1ca400000000, 0x1977d9ae00000000,
1249
+ 0x8777736200000000, 0x6470fcec00000000, 0xfa70562000000000,
1250
+ 0x7d53cd8500000000, 0xe353674900000000, 0x0054e8c700000000,
1251
+ 0x9e54420b00000000, 0x875d870100000000, 0x195d2dcd00000000,
1252
+ 0xfa5aa24300000000, 0x645a088f00000000, 0xc848285600000000,
1253
+ 0x5648829a00000000, 0xb54f0d1400000000, 0x2b4fa7d800000000,
1254
+ 0x324662d200000000, 0xac46c81e00000000, 0x4f41479000000000,
1255
+ 0xd141ed5c00000000, 0xedc29d2900000000, 0x73c237e500000000,
1256
+ 0x90c5b86b00000000, 0x0ec512a700000000, 0x17ccd7ad00000000,
1257
+ 0x89cc7d6100000000, 0x6acbf2ef00000000, 0xf4cb582300000000,
1258
+ 0x58d978fa00000000, 0xc6d9d23600000000, 0x25de5db800000000,
1259
+ 0xbbdef77400000000, 0xa2d7327e00000000, 0x3cd798b200000000,
1260
+ 0xdfd0173c00000000, 0x41d0bdf000000000, 0xc6f3265500000000,
1261
+ 0x58f38c9900000000, 0xbbf4031700000000, 0x25f4a9db00000000,
1262
+ 0x3cfd6cd100000000, 0xa2fdc61d00000000, 0x41fa499300000000,
1263
+ 0xdffae35f00000000, 0x73e8c38600000000, 0xede8694a00000000,
1264
+ 0x0eefe6c400000000, 0x90ef4c0800000000, 0x89e6890200000000,
1265
+ 0x17e623ce00000000, 0xf4e1ac4000000000, 0x6ae1068c00000000,
1266
+ 0xbba0ebd000000000, 0x25a0411c00000000, 0xc6a7ce9200000000,
1267
+ 0x58a7645e00000000, 0x41aea15400000000, 0xdfae0b9800000000,
1268
+ 0x3ca9841600000000, 0xa2a92eda00000000, 0x0ebb0e0300000000,
1269
+ 0x90bba4cf00000000, 0x73bc2b4100000000, 0xedbc818d00000000,
1270
+ 0xf4b5448700000000, 0x6ab5ee4b00000000, 0x89b261c500000000,
1271
+ 0x17b2cb0900000000, 0x909150ac00000000, 0x0e91fa6000000000,
1272
+ 0xed9675ee00000000, 0x7396df2200000000, 0x6a9f1a2800000000,
1273
+ 0xf49fb0e400000000, 0x17983f6a00000000, 0x899895a600000000,
1274
+ 0x258ab57f00000000, 0xbb8a1fb300000000, 0x588d903d00000000,
1275
+ 0xc68d3af100000000, 0xdf84fffb00000000, 0x4184553700000000,
1276
+ 0xa283dab900000000, 0x3c83707500000000, 0xda853b5300000000,
1277
+ 0x4485919f00000000, 0xa7821e1100000000, 0x3982b4dd00000000,
1278
+ 0x208b71d700000000, 0xbe8bdb1b00000000, 0x5d8c549500000000,
1279
+ 0xc38cfe5900000000, 0x6f9ede8000000000, 0xf19e744c00000000,
1280
+ 0x1299fbc200000000, 0x8c99510e00000000, 0x9590940400000000,
1281
+ 0x0b903ec800000000, 0xe897b14600000000, 0x76971b8a00000000,
1282
+ 0xf1b4802f00000000, 0x6fb42ae300000000, 0x8cb3a56d00000000,
1283
+ 0x12b30fa100000000, 0x0bbacaab00000000, 0x95ba606700000000,
1284
+ 0x76bdefe900000000, 0xe8bd452500000000, 0x44af65fc00000000,
1285
+ 0xdaafcf3000000000, 0x39a840be00000000, 0xa7a8ea7200000000,
1286
+ 0xbea12f7800000000, 0x20a185b400000000, 0xc3a60a3a00000000,
1287
+ 0x5da6a0f600000000, 0x8ce74daa00000000, 0x12e7e76600000000,
1288
+ 0xf1e068e800000000, 0x6fe0c22400000000, 0x76e9072e00000000,
1289
+ 0xe8e9ade200000000, 0x0bee226c00000000, 0x95ee88a000000000,
1290
+ 0x39fca87900000000, 0xa7fc02b500000000, 0x44fb8d3b00000000,
1291
+ 0xdafb27f700000000, 0xc3f2e2fd00000000, 0x5df2483100000000,
1292
+ 0xbef5c7bf00000000, 0x20f56d7300000000, 0xa7d6f6d600000000,
1293
+ 0x39d65c1a00000000, 0xdad1d39400000000, 0x44d1795800000000,
1294
+ 0x5dd8bc5200000000, 0xc3d8169e00000000, 0x20df991000000000,
1295
+ 0xbedf33dc00000000, 0x12cd130500000000, 0x8ccdb9c900000000,
1296
+ 0x6fca364700000000, 0xf1ca9c8b00000000, 0xe8c3598100000000,
1297
+ 0x76c3f34d00000000, 0x95c47cc300000000, 0x0bc4d60f00000000,
1298
+ 0x3747a67a00000000, 0xa9470cb600000000, 0x4a40833800000000,
1299
+ 0xd44029f400000000, 0xcd49ecfe00000000, 0x5349463200000000,
1300
+ 0xb04ec9bc00000000, 0x2e4e637000000000, 0x825c43a900000000,
1301
+ 0x1c5ce96500000000, 0xff5b66eb00000000, 0x615bcc2700000000,
1302
+ 0x7852092d00000000, 0xe652a3e100000000, 0x05552c6f00000000,
1303
+ 0x9b5586a300000000, 0x1c761d0600000000, 0x8276b7ca00000000,
1304
+ 0x6171384400000000, 0xff71928800000000, 0xe678578200000000,
1305
+ 0x7878fd4e00000000, 0x9b7f72c000000000, 0x057fd80c00000000,
1306
+ 0xa96df8d500000000, 0x376d521900000000, 0xd46add9700000000,
1307
+ 0x4a6a775b00000000, 0x5363b25100000000, 0xcd63189d00000000,
1308
+ 0x2e64971300000000, 0xb0643ddf00000000, 0x6125d08300000000,
1309
+ 0xff257a4f00000000, 0x1c22f5c100000000, 0x82225f0d00000000,
1310
+ 0x9b2b9a0700000000, 0x052b30cb00000000, 0xe62cbf4500000000,
1311
+ 0x782c158900000000, 0xd43e355000000000, 0x4a3e9f9c00000000,
1312
+ 0xa939101200000000, 0x3739bade00000000, 0x2e307fd400000000,
1313
+ 0xb030d51800000000, 0x53375a9600000000, 0xcd37f05a00000000,
1314
+ 0x4a146bff00000000, 0xd414c13300000000, 0x37134ebd00000000,
1315
+ 0xa913e47100000000, 0xb01a217b00000000, 0x2e1a8bb700000000,
1316
+ 0xcd1d043900000000, 0x531daef500000000, 0xff0f8e2c00000000,
1317
+ 0x610f24e000000000, 0x8208ab6e00000000, 0x1c0801a200000000,
1318
+ 0x0501c4a800000000, 0x9b016e6400000000, 0x7806e1ea00000000,
1319
+ 0xe6064b2600000000}};
1320
+
1321
+#else /* W == 4 */
1322
+
1323
+local const z_crc_t FAR crc_braid_table[][256] = {
1324
+ {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757,
1325
+ 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a,
1326
+ 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733,
1327
+ 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871,
1328
+ 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70,
1329
+ 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42,
1330
+ 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5,
1331
+ 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787,
1332
+ 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086,
1333
+ 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4,
1334
+ 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d,
1335
+ 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0,
1336
+ 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d,
1337
+ 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f,
1338
+ 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859,
1339
+ 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b,
1340
+ 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5,
1341
+ 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028,
1342
+ 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891,
1343
+ 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed,
1344
+ 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec,
1345
+ 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde,
1346
+ 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817,
1347
+ 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825,
1348
+ 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24,
1349
+ 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e,
1350
+ 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7,
1351
+ 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a,
1352
+ 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4,
1353
+ 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196,
1354
+ 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0,
1355
+ 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2,
1356
+ 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52,
1357
+ 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f,
1358
+ 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36,
1359
+ 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174,
1360
+ 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675,
1361
+ 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647,
1362
+ 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d,
1363
+ 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf,
1364
+ 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be,
1365
+ 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc,
1366
+ 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645,
1367
+ 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98,
1368
+ 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138,
1369
+ 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a,
1370
+ 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c,
1371
+ 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e,
1372
+ 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0,
1373
+ 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d,
1374
+ 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194,
1375
+ 0xde0506f1},
1376
+ {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc,
1377
+ 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f,
1378
+ 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a,
1379
+ 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29,
1380
+ 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8,
1381
+ 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023,
1382
+ 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e,
1383
+ 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065,
1384
+ 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84,
1385
+ 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7,
1386
+ 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922,
1387
+ 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71,
1388
+ 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0,
1389
+ 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b,
1390
+ 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816,
1391
+ 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd,
1392
+ 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c,
1393
+ 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f,
1394
+ 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba,
1395
+ 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579,
1396
+ 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98,
1397
+ 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873,
1398
+ 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e,
1399
+ 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5,
1400
+ 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134,
1401
+ 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7,
1402
+ 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732,
1403
+ 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461,
1404
+ 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0,
1405
+ 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b,
1406
+ 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26,
1407
+ 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd,
1408
+ 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc,
1409
+ 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef,
1410
+ 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a,
1411
+ 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049,
1412
+ 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8,
1413
+ 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43,
1414
+ 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e,
1415
+ 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5,
1416
+ 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24,
1417
+ 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07,
1418
+ 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982,
1419
+ 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1,
1420
+ 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0,
1421
+ 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b,
1422
+ 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576,
1423
+ 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d,
1424
+ 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c,
1425
+ 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f,
1426
+ 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda,
1427
+ 0xbe9834ed},
1428
+ {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504,
1429
+ 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49,
1430
+ 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e,
1431
+ 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192,
1432
+ 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859,
1433
+ 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c,
1434
+ 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620,
1435
+ 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265,
1436
+ 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae,
1437
+ 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2,
1438
+ 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175,
1439
+ 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38,
1440
+ 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05,
1441
+ 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40,
1442
+ 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f,
1443
+ 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca,
1444
+ 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850,
1445
+ 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d,
1446
+ 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da,
1447
+ 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864,
1448
+ 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af,
1449
+ 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea,
1450
+ 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74,
1451
+ 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31,
1452
+ 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa,
1453
+ 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a,
1454
+ 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd,
1455
+ 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180,
1456
+ 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a,
1457
+ 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f,
1458
+ 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290,
1459
+ 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5,
1460
+ 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed,
1461
+ 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0,
1462
+ 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167,
1463
+ 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b,
1464
+ 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0,
1465
+ 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5,
1466
+ 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc,
1467
+ 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189,
1468
+ 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842,
1469
+ 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e,
1470
+ 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299,
1471
+ 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4,
1472
+ 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec,
1473
+ 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9,
1474
+ 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66,
1475
+ 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23,
1476
+ 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9,
1477
+ 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4,
1478
+ 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33,
1479
+ 0x9324fd72},
1480
+ {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
1481
+ 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
1482
+ 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
1483
+ 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
1484
+ 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
1485
+ 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
1486
+ 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
1487
+ 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
1488
+ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
1489
+ 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
1490
+ 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
1491
+ 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
1492
+ 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
1493
+ 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
1494
+ 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
1495
+ 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
1496
+ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
1497
+ 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
1498
+ 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
1499
+ 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
1500
+ 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
1501
+ 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
1502
+ 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
1503
+ 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
1504
+ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
1505
+ 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
1506
+ 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
1507
+ 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
1508
+ 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
1509
+ 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
1510
+ 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
1511
+ 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
1512
+ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
1513
+ 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
1514
+ 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
1515
+ 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
1516
+ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
1517
+ 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
1518
+ 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
1519
+ 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
1520
+ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
1521
+ 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
1522
+ 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
1523
+ 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
1524
+ 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
1525
+ 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
1526
+ 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
1527
+ 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
1528
+ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
1529
+ 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
1530
+ 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
1531
+ 0x2d02ef8d}};
1532
+
1533
+local const z_word_t FAR crc_braid_big_table[][256] = {
1534
+ {0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07,
1535
+ 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79,
1536
+ 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7,
1537
+ 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84,
1538
+ 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13,
1539
+ 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663,
1540
+ 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5,
1541
+ 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5,
1542
+ 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832,
1543
+ 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51,
1544
+ 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf,
1545
+ 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1,
1546
+ 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76,
1547
+ 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606,
1548
+ 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996,
1549
+ 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6,
1550
+ 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c,
1551
+ 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712,
1552
+ 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c,
1553
+ 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4,
1554
+ 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943,
1555
+ 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333,
1556
+ 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe,
1557
+ 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce,
1558
+ 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359,
1559
+ 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a,
1560
+ 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04,
1561
+ 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a,
1562
+ 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0,
1563
+ 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580,
1564
+ 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10,
1565
+ 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060,
1566
+ 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1,
1567
+ 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf,
1568
+ 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31,
1569
+ 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852,
1570
+ 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5,
1571
+ 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5,
1572
+ 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75,
1573
+ 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005,
1574
+ 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292,
1575
+ 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1,
1576
+ 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f,
1577
+ 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111,
1578
+ 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0,
1579
+ 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0,
1580
+ 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40,
1581
+ 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530,
1582
+ 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba,
1583
+ 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4,
1584
+ 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a,
1585
+ 0x8def022d},
1586
+ {0x00000000, 0x41311b19, 0x82623632, 0xc3532d2b, 0x04c56c64,
1587
+ 0x45f4777d, 0x86a75a56, 0xc796414f, 0x088ad9c8, 0x49bbc2d1,
1588
+ 0x8ae8effa, 0xcbd9f4e3, 0x0c4fb5ac, 0x4d7eaeb5, 0x8e2d839e,
1589
+ 0xcf1c9887, 0x5112c24a, 0x1023d953, 0xd370f478, 0x9241ef61,
1590
+ 0x55d7ae2e, 0x14e6b537, 0xd7b5981c, 0x96848305, 0x59981b82,
1591
+ 0x18a9009b, 0xdbfa2db0, 0x9acb36a9, 0x5d5d77e6, 0x1c6c6cff,
1592
+ 0xdf3f41d4, 0x9e0e5acd, 0xa2248495, 0xe3159f8c, 0x2046b2a7,
1593
+ 0x6177a9be, 0xa6e1e8f1, 0xe7d0f3e8, 0x2483dec3, 0x65b2c5da,
1594
+ 0xaaae5d5d, 0xeb9f4644, 0x28cc6b6f, 0x69fd7076, 0xae6b3139,
1595
+ 0xef5a2a20, 0x2c09070b, 0x6d381c12, 0xf33646df, 0xb2075dc6,
1596
+ 0x715470ed, 0x30656bf4, 0xf7f32abb, 0xb6c231a2, 0x75911c89,
1597
+ 0x34a00790, 0xfbbc9f17, 0xba8d840e, 0x79dea925, 0x38efb23c,
1598
+ 0xff79f373, 0xbe48e86a, 0x7d1bc541, 0x3c2ade58, 0x054f79f0,
1599
+ 0x447e62e9, 0x872d4fc2, 0xc61c54db, 0x018a1594, 0x40bb0e8d,
1600
+ 0x83e823a6, 0xc2d938bf, 0x0dc5a038, 0x4cf4bb21, 0x8fa7960a,
1601
+ 0xce968d13, 0x0900cc5c, 0x4831d745, 0x8b62fa6e, 0xca53e177,
1602
+ 0x545dbbba, 0x156ca0a3, 0xd63f8d88, 0x970e9691, 0x5098d7de,
1603
+ 0x11a9ccc7, 0xd2fae1ec, 0x93cbfaf5, 0x5cd76272, 0x1de6796b,
1604
+ 0xdeb55440, 0x9f844f59, 0x58120e16, 0x1923150f, 0xda703824,
1605
+ 0x9b41233d, 0xa76bfd65, 0xe65ae67c, 0x2509cb57, 0x6438d04e,
1606
+ 0xa3ae9101, 0xe29f8a18, 0x21cca733, 0x60fdbc2a, 0xafe124ad,
1607
+ 0xeed03fb4, 0x2d83129f, 0x6cb20986, 0xab2448c9, 0xea1553d0,
1608
+ 0x29467efb, 0x687765e2, 0xf6793f2f, 0xb7482436, 0x741b091d,
1609
+ 0x352a1204, 0xf2bc534b, 0xb38d4852, 0x70de6579, 0x31ef7e60,
1610
+ 0xfef3e6e7, 0xbfc2fdfe, 0x7c91d0d5, 0x3da0cbcc, 0xfa368a83,
1611
+ 0xbb07919a, 0x7854bcb1, 0x3965a7a8, 0x4b98833b, 0x0aa99822,
1612
+ 0xc9fab509, 0x88cbae10, 0x4f5def5f, 0x0e6cf446, 0xcd3fd96d,
1613
+ 0x8c0ec274, 0x43125af3, 0x022341ea, 0xc1706cc1, 0x804177d8,
1614
+ 0x47d73697, 0x06e62d8e, 0xc5b500a5, 0x84841bbc, 0x1a8a4171,
1615
+ 0x5bbb5a68, 0x98e87743, 0xd9d96c5a, 0x1e4f2d15, 0x5f7e360c,
1616
+ 0x9c2d1b27, 0xdd1c003e, 0x120098b9, 0x533183a0, 0x9062ae8b,
1617
+ 0xd153b592, 0x16c5f4dd, 0x57f4efc4, 0x94a7c2ef, 0xd596d9f6,
1618
+ 0xe9bc07ae, 0xa88d1cb7, 0x6bde319c, 0x2aef2a85, 0xed796bca,
1619
+ 0xac4870d3, 0x6f1b5df8, 0x2e2a46e1, 0xe136de66, 0xa007c57f,
1620
+ 0x6354e854, 0x2265f34d, 0xe5f3b202, 0xa4c2a91b, 0x67918430,
1621
+ 0x26a09f29, 0xb8aec5e4, 0xf99fdefd, 0x3accf3d6, 0x7bfde8cf,
1622
+ 0xbc6ba980, 0xfd5ab299, 0x3e099fb2, 0x7f3884ab, 0xb0241c2c,
1623
+ 0xf1150735, 0x32462a1e, 0x73773107, 0xb4e17048, 0xf5d06b51,
1624
+ 0x3683467a, 0x77b25d63, 0x4ed7facb, 0x0fe6e1d2, 0xccb5ccf9,
1625
+ 0x8d84d7e0, 0x4a1296af, 0x0b238db6, 0xc870a09d, 0x8941bb84,
1626
+ 0x465d2303, 0x076c381a, 0xc43f1531, 0x850e0e28, 0x42984f67,
1627
+ 0x03a9547e, 0xc0fa7955, 0x81cb624c, 0x1fc53881, 0x5ef42398,
1628
+ 0x9da70eb3, 0xdc9615aa, 0x1b0054e5, 0x5a314ffc, 0x996262d7,
1629
+ 0xd85379ce, 0x174fe149, 0x567efa50, 0x952dd77b, 0xd41ccc62,
1630
+ 0x138a8d2d, 0x52bb9634, 0x91e8bb1f, 0xd0d9a006, 0xecf37e5e,
1631
+ 0xadc26547, 0x6e91486c, 0x2fa05375, 0xe836123a, 0xa9070923,
1632
+ 0x6a542408, 0x2b653f11, 0xe479a796, 0xa548bc8f, 0x661b91a4,
1633
+ 0x272a8abd, 0xe0bccbf2, 0xa18dd0eb, 0x62defdc0, 0x23efe6d9,
1634
+ 0xbde1bc14, 0xfcd0a70d, 0x3f838a26, 0x7eb2913f, 0xb924d070,
1635
+ 0xf815cb69, 0x3b46e642, 0x7a77fd5b, 0xb56b65dc, 0xf45a7ec5,
1636
+ 0x370953ee, 0x763848f7, 0xb1ae09b8, 0xf09f12a1, 0x33cc3f8a,
1637
+ 0x72fd2493},
1638
+ {0x00000000, 0x376ac201, 0x6ed48403, 0x59be4602, 0xdca80907,
1639
+ 0xebc2cb06, 0xb27c8d04, 0x85164f05, 0xb851130e, 0x8f3bd10f,
1640
+ 0xd685970d, 0xe1ef550c, 0x64f91a09, 0x5393d808, 0x0a2d9e0a,
1641
+ 0x3d475c0b, 0x70a3261c, 0x47c9e41d, 0x1e77a21f, 0x291d601e,
1642
+ 0xac0b2f1b, 0x9b61ed1a, 0xc2dfab18, 0xf5b56919, 0xc8f23512,
1643
+ 0xff98f713, 0xa626b111, 0x914c7310, 0x145a3c15, 0x2330fe14,
1644
+ 0x7a8eb816, 0x4de47a17, 0xe0464d38, 0xd72c8f39, 0x8e92c93b,
1645
+ 0xb9f80b3a, 0x3cee443f, 0x0b84863e, 0x523ac03c, 0x6550023d,
1646
+ 0x58175e36, 0x6f7d9c37, 0x36c3da35, 0x01a91834, 0x84bf5731,
1647
+ 0xb3d59530, 0xea6bd332, 0xdd011133, 0x90e56b24, 0xa78fa925,
1648
+ 0xfe31ef27, 0xc95b2d26, 0x4c4d6223, 0x7b27a022, 0x2299e620,
1649
+ 0x15f32421, 0x28b4782a, 0x1fdeba2b, 0x4660fc29, 0x710a3e28,
1650
+ 0xf41c712d, 0xc376b32c, 0x9ac8f52e, 0xada2372f, 0xc08d9a70,
1651
+ 0xf7e75871, 0xae591e73, 0x9933dc72, 0x1c259377, 0x2b4f5176,
1652
+ 0x72f11774, 0x459bd575, 0x78dc897e, 0x4fb64b7f, 0x16080d7d,
1653
+ 0x2162cf7c, 0xa4748079, 0x931e4278, 0xcaa0047a, 0xfdcac67b,
1654
+ 0xb02ebc6c, 0x87447e6d, 0xdefa386f, 0xe990fa6e, 0x6c86b56b,
1655
+ 0x5bec776a, 0x02523168, 0x3538f369, 0x087faf62, 0x3f156d63,
1656
+ 0x66ab2b61, 0x51c1e960, 0xd4d7a665, 0xe3bd6464, 0xba032266,
1657
+ 0x8d69e067, 0x20cbd748, 0x17a11549, 0x4e1f534b, 0x7975914a,
1658
+ 0xfc63de4f, 0xcb091c4e, 0x92b75a4c, 0xa5dd984d, 0x989ac446,
1659
+ 0xaff00647, 0xf64e4045, 0xc1248244, 0x4432cd41, 0x73580f40,
1660
+ 0x2ae64942, 0x1d8c8b43, 0x5068f154, 0x67023355, 0x3ebc7557,
1661
+ 0x09d6b756, 0x8cc0f853, 0xbbaa3a52, 0xe2147c50, 0xd57ebe51,
1662
+ 0xe839e25a, 0xdf53205b, 0x86ed6659, 0xb187a458, 0x3491eb5d,
1663
+ 0x03fb295c, 0x5a456f5e, 0x6d2fad5f, 0x801b35e1, 0xb771f7e0,
1664
+ 0xeecfb1e2, 0xd9a573e3, 0x5cb33ce6, 0x6bd9fee7, 0x3267b8e5,
1665
+ 0x050d7ae4, 0x384a26ef, 0x0f20e4ee, 0x569ea2ec, 0x61f460ed,
1666
+ 0xe4e22fe8, 0xd388ede9, 0x8a36abeb, 0xbd5c69ea, 0xf0b813fd,
1667
+ 0xc7d2d1fc, 0x9e6c97fe, 0xa90655ff, 0x2c101afa, 0x1b7ad8fb,
1668
+ 0x42c49ef9, 0x75ae5cf8, 0x48e900f3, 0x7f83c2f2, 0x263d84f0,
1669
+ 0x115746f1, 0x944109f4, 0xa32bcbf5, 0xfa958df7, 0xcdff4ff6,
1670
+ 0x605d78d9, 0x5737bad8, 0x0e89fcda, 0x39e33edb, 0xbcf571de,
1671
+ 0x8b9fb3df, 0xd221f5dd, 0xe54b37dc, 0xd80c6bd7, 0xef66a9d6,
1672
+ 0xb6d8efd4, 0x81b22dd5, 0x04a462d0, 0x33cea0d1, 0x6a70e6d3,
1673
+ 0x5d1a24d2, 0x10fe5ec5, 0x27949cc4, 0x7e2adac6, 0x494018c7,
1674
+ 0xcc5657c2, 0xfb3c95c3, 0xa282d3c1, 0x95e811c0, 0xa8af4dcb,
1675
+ 0x9fc58fca, 0xc67bc9c8, 0xf1110bc9, 0x740744cc, 0x436d86cd,
1676
+ 0x1ad3c0cf, 0x2db902ce, 0x4096af91, 0x77fc6d90, 0x2e422b92,
1677
+ 0x1928e993, 0x9c3ea696, 0xab546497, 0xf2ea2295, 0xc580e094,
1678
+ 0xf8c7bc9f, 0xcfad7e9e, 0x9613389c, 0xa179fa9d, 0x246fb598,
1679
+ 0x13057799, 0x4abb319b, 0x7dd1f39a, 0x3035898d, 0x075f4b8c,
1680
+ 0x5ee10d8e, 0x698bcf8f, 0xec9d808a, 0xdbf7428b, 0x82490489,
1681
+ 0xb523c688, 0x88649a83, 0xbf0e5882, 0xe6b01e80, 0xd1dadc81,
1682
+ 0x54cc9384, 0x63a65185, 0x3a181787, 0x0d72d586, 0xa0d0e2a9,
1683
+ 0x97ba20a8, 0xce0466aa, 0xf96ea4ab, 0x7c78ebae, 0x4b1229af,
1684
+ 0x12ac6fad, 0x25c6adac, 0x1881f1a7, 0x2feb33a6, 0x765575a4,
1685
+ 0x413fb7a5, 0xc429f8a0, 0xf3433aa1, 0xaafd7ca3, 0x9d97bea2,
1686
+ 0xd073c4b5, 0xe71906b4, 0xbea740b6, 0x89cd82b7, 0x0cdbcdb2,
1687
+ 0x3bb10fb3, 0x620f49b1, 0x55658bb0, 0x6822d7bb, 0x5f4815ba,
1688
+ 0x06f653b8, 0x319c91b9, 0xb48adebc, 0x83e01cbd, 0xda5e5abf,
1689
+ 0xed3498be},
1690
+ {0x00000000, 0x6567bcb8, 0x8bc809aa, 0xeeafb512, 0x5797628f,
1691
+ 0x32f0de37, 0xdc5f6b25, 0xb938d79d, 0xef28b4c5, 0x8a4f087d,
1692
+ 0x64e0bd6f, 0x018701d7, 0xb8bfd64a, 0xddd86af2, 0x3377dfe0,
1693
+ 0x56106358, 0x9f571950, 0xfa30a5e8, 0x149f10fa, 0x71f8ac42,
1694
+ 0xc8c07bdf, 0xada7c767, 0x43087275, 0x266fcecd, 0x707fad95,
1695
+ 0x1518112d, 0xfbb7a43f, 0x9ed01887, 0x27e8cf1a, 0x428f73a2,
1696
+ 0xac20c6b0, 0xc9477a08, 0x3eaf32a0, 0x5bc88e18, 0xb5673b0a,
1697
+ 0xd00087b2, 0x6938502f, 0x0c5fec97, 0xe2f05985, 0x8797e53d,
1698
+ 0xd1878665, 0xb4e03add, 0x5a4f8fcf, 0x3f283377, 0x8610e4ea,
1699
+ 0xe3775852, 0x0dd8ed40, 0x68bf51f8, 0xa1f82bf0, 0xc49f9748,
1700
+ 0x2a30225a, 0x4f579ee2, 0xf66f497f, 0x9308f5c7, 0x7da740d5,
1701
+ 0x18c0fc6d, 0x4ed09f35, 0x2bb7238d, 0xc518969f, 0xa07f2a27,
1702
+ 0x1947fdba, 0x7c204102, 0x928ff410, 0xf7e848a8, 0x3d58149b,
1703
+ 0x583fa823, 0xb6901d31, 0xd3f7a189, 0x6acf7614, 0x0fa8caac,
1704
+ 0xe1077fbe, 0x8460c306, 0xd270a05e, 0xb7171ce6, 0x59b8a9f4,
1705
+ 0x3cdf154c, 0x85e7c2d1, 0xe0807e69, 0x0e2fcb7b, 0x6b4877c3,
1706
+ 0xa20f0dcb, 0xc768b173, 0x29c70461, 0x4ca0b8d9, 0xf5986f44,
1707
+ 0x90ffd3fc, 0x7e5066ee, 0x1b37da56, 0x4d27b90e, 0x284005b6,
1708
+ 0xc6efb0a4, 0xa3880c1c, 0x1ab0db81, 0x7fd76739, 0x9178d22b,
1709
+ 0xf41f6e93, 0x03f7263b, 0x66909a83, 0x883f2f91, 0xed589329,
1710
+ 0x546044b4, 0x3107f80c, 0xdfa84d1e, 0xbacff1a6, 0xecdf92fe,
1711
+ 0x89b82e46, 0x67179b54, 0x027027ec, 0xbb48f071, 0xde2f4cc9,
1712
+ 0x3080f9db, 0x55e74563, 0x9ca03f6b, 0xf9c783d3, 0x176836c1,
1713
+ 0x720f8a79, 0xcb375de4, 0xae50e15c, 0x40ff544e, 0x2598e8f6,
1714
+ 0x73888bae, 0x16ef3716, 0xf8408204, 0x9d273ebc, 0x241fe921,
1715
+ 0x41785599, 0xafd7e08b, 0xcab05c33, 0x3bb659ed, 0x5ed1e555,
1716
+ 0xb07e5047, 0xd519ecff, 0x6c213b62, 0x094687da, 0xe7e932c8,
1717
+ 0x828e8e70, 0xd49eed28, 0xb1f95190, 0x5f56e482, 0x3a31583a,
1718
+ 0x83098fa7, 0xe66e331f, 0x08c1860d, 0x6da63ab5, 0xa4e140bd,
1719
+ 0xc186fc05, 0x2f294917, 0x4a4ef5af, 0xf3762232, 0x96119e8a,
1720
+ 0x78be2b98, 0x1dd99720, 0x4bc9f478, 0x2eae48c0, 0xc001fdd2,
1721
+ 0xa566416a, 0x1c5e96f7, 0x79392a4f, 0x97969f5d, 0xf2f123e5,
1722
+ 0x05196b4d, 0x607ed7f5, 0x8ed162e7, 0xebb6de5f, 0x528e09c2,
1723
+ 0x37e9b57a, 0xd9460068, 0xbc21bcd0, 0xea31df88, 0x8f566330,
1724
+ 0x61f9d622, 0x049e6a9a, 0xbda6bd07, 0xd8c101bf, 0x366eb4ad,
1725
+ 0x53090815, 0x9a4e721d, 0xff29cea5, 0x11867bb7, 0x74e1c70f,
1726
+ 0xcdd91092, 0xa8beac2a, 0x46111938, 0x2376a580, 0x7566c6d8,
1727
+ 0x10017a60, 0xfeaecf72, 0x9bc973ca, 0x22f1a457, 0x479618ef,
1728
+ 0xa939adfd, 0xcc5e1145, 0x06ee4d76, 0x6389f1ce, 0x8d2644dc,
1729
+ 0xe841f864, 0x51792ff9, 0x341e9341, 0xdab12653, 0xbfd69aeb,
1730
+ 0xe9c6f9b3, 0x8ca1450b, 0x620ef019, 0x07694ca1, 0xbe519b3c,
1731
+ 0xdb362784, 0x35999296, 0x50fe2e2e, 0x99b95426, 0xfcdee89e,
1732
+ 0x12715d8c, 0x7716e134, 0xce2e36a9, 0xab498a11, 0x45e63f03,
1733
+ 0x208183bb, 0x7691e0e3, 0x13f65c5b, 0xfd59e949, 0x983e55f1,
1734
+ 0x2106826c, 0x44613ed4, 0xaace8bc6, 0xcfa9377e, 0x38417fd6,
1735
+ 0x5d26c36e, 0xb389767c, 0xd6eecac4, 0x6fd61d59, 0x0ab1a1e1,
1736
+ 0xe41e14f3, 0x8179a84b, 0xd769cb13, 0xb20e77ab, 0x5ca1c2b9,
1737
+ 0x39c67e01, 0x80fea99c, 0xe5991524, 0x0b36a036, 0x6e511c8e,
1738
+ 0xa7166686, 0xc271da3e, 0x2cde6f2c, 0x49b9d394, 0xf0810409,
1739
+ 0x95e6b8b1, 0x7b490da3, 0x1e2eb11b, 0x483ed243, 0x2d596efb,
1740
+ 0xc3f6dbe9, 0xa6916751, 0x1fa9b0cc, 0x7ace0c74, 0x9461b966,
1741
+ 0xf10605de}};
1742
+
1743
+#endif
1744
+
1745
+#endif
1746
+
1747
+#if N == 2
1748
+
1749
+#if W == 8
1750
+
1751
+local const z_crc_t FAR crc_braid_table[][256] = {
1752
+ {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87,
1753
+ 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede,
1754
+ 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab,
1755
+ 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c,
1756
+ 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1,
1757
+ 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7,
1758
+ 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e,
1759
+ 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308,
1760
+ 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5,
1761
+ 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472,
1762
+ 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07,
1763
+ 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e,
1764
+ 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa,
1765
+ 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec,
1766
+ 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6,
1767
+ 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0,
1768
+ 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3,
1769
+ 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba,
1770
+ 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf,
1771
+ 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975,
1772
+ 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8,
1773
+ 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde,
1774
+ 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a,
1775
+ 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c,
1776
+ 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1,
1777
+ 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65,
1778
+ 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410,
1779
+ 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649,
1780
+ 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a,
1781
+ 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c,
1782
+ 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946,
1783
+ 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450,
1784
+ 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e,
1785
+ 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857,
1786
+ 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022,
1787
+ 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5,
1788
+ 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758,
1789
+ 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e,
1790
+ 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d,
1791
+ 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b,
1792
+ 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6,
1793
+ 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401,
1794
+ 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74,
1795
+ 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d,
1796
+ 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073,
1797
+ 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65,
1798
+ 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f,
1799
+ 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749,
1800
+ 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a,
1801
+ 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033,
1802
+ 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846,
1803
+ 0x0d7139d7},
1804
+ {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563,
1805
+ 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f,
1806
+ 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875,
1807
+ 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536,
1808
+ 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8,
1809
+ 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43,
1810
+ 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f,
1811
+ 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184,
1812
+ 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a,
1813
+ 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39,
1814
+ 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523,
1815
+ 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f,
1816
+ 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d,
1817
+ 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6,
1818
+ 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b,
1819
+ 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0,
1820
+ 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151,
1821
+ 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d,
1822
+ 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47,
1823
+ 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a,
1824
+ 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964,
1825
+ 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef,
1826
+ 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d,
1827
+ 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6,
1828
+ 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348,
1829
+ 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53,
1830
+ 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449,
1831
+ 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645,
1832
+ 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4,
1833
+ 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f,
1834
+ 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2,
1835
+ 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69,
1836
+ 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46,
1837
+ 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a,
1838
+ 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650,
1839
+ 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13,
1840
+ 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded,
1841
+ 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366,
1842
+ 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57,
1843
+ 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc,
1844
+ 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222,
1845
+ 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61,
1846
+ 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b,
1847
+ 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277,
1848
+ 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558,
1849
+ 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3,
1850
+ 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e,
1851
+ 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5,
1852
+ 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74,
1853
+ 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78,
1854
+ 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262,
1855
+ 0x1c53e98a},
1856
+ {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b,
1857
+ 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40,
1858
+ 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580,
1859
+ 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7,
1860
+ 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a,
1861
+ 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37,
1862
+ 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75,
1863
+ 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218,
1864
+ 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5,
1865
+ 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2,
1866
+ 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02,
1867
+ 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59,
1868
+ 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1,
1869
+ 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c,
1870
+ 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a,
1871
+ 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307,
1872
+ 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486,
1873
+ 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd,
1874
+ 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d,
1875
+ 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2,
1876
+ 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f,
1877
+ 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72,
1878
+ 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8,
1879
+ 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985,
1880
+ 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268,
1881
+ 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94,
1882
+ 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454,
1883
+ 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f,
1884
+ 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e,
1885
+ 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3,
1886
+ 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915,
1887
+ 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778,
1888
+ 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821,
1889
+ 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a,
1890
+ 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba,
1891
+ 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d,
1892
+ 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560,
1893
+ 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d,
1894
+ 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe,
1895
+ 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3,
1896
+ 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e,
1897
+ 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509,
1898
+ 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9,
1899
+ 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92,
1900
+ 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb,
1901
+ 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6,
1902
+ 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50,
1903
+ 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d,
1904
+ 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc,
1905
+ 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7,
1906
+ 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927,
1907
+ 0x3f88e851},
1908
+ {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96,
1909
+ 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8,
1910
+ 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0,
1911
+ 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14,
1912
+ 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7,
1913
+ 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4,
1914
+ 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe,
1915
+ 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad,
1916
+ 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e,
1917
+ 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa,
1918
+ 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2,
1919
+ 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c,
1920
+ 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab,
1921
+ 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8,
1922
+ 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d,
1923
+ 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e,
1924
+ 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7,
1925
+ 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99,
1926
+ 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1,
1927
+ 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690,
1928
+ 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933,
1929
+ 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20,
1930
+ 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf,
1931
+ 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc,
1932
+ 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f,
1933
+ 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92,
1934
+ 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca,
1935
+ 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4,
1936
+ 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd,
1937
+ 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de,
1938
+ 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb,
1939
+ 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8,
1940
+ 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474,
1941
+ 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a,
1942
+ 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252,
1943
+ 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6,
1944
+ 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55,
1945
+ 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846,
1946
+ 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7,
1947
+ 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4,
1948
+ 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47,
1949
+ 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3,
1950
+ 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb,
1951
+ 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5,
1952
+ 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49,
1953
+ 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a,
1954
+ 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f,
1955
+ 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c,
1956
+ 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305,
1957
+ 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b,
1958
+ 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523,
1959
+ 0x3dee8ca6},
1960
+ {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f,
1961
+ 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91,
1962
+ 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e,
1963
+ 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c,
1964
+ 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02,
1965
+ 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12,
1966
+ 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567,
1967
+ 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277,
1968
+ 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679,
1969
+ 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b,
1970
+ 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4,
1971
+ 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a,
1972
+ 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0,
1973
+ 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0,
1974
+ 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91,
1975
+ 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881,
1976
+ 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173,
1977
+ 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d,
1978
+ 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912,
1979
+ 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8,
1980
+ 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6,
1981
+ 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6,
1982
+ 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b,
1983
+ 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b,
1984
+ 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75,
1985
+ 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f,
1986
+ 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00,
1987
+ 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee,
1988
+ 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c,
1989
+ 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c,
1990
+ 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d,
1991
+ 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d,
1992
+ 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67,
1993
+ 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89,
1994
+ 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706,
1995
+ 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14,
1996
+ 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a,
1997
+ 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a,
1998
+ 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f,
1999
+ 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f,
2000
+ 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591,
2001
+ 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983,
2002
+ 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c,
2003
+ 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2,
2004
+ 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8,
2005
+ 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8,
2006
+ 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89,
2007
+ 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99,
2008
+ 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b,
2009
+ 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485,
2010
+ 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a,
2011
+ 0x36197165},
2012
+ {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382,
2013
+ 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85,
2014
+ 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06,
2015
+ 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca,
2016
+ 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e,
2017
+ 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc,
2018
+ 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616,
2019
+ 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54,
2020
+ 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10,
2021
+ 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc,
2022
+ 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f,
2023
+ 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58,
2024
+ 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef,
2025
+ 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad,
2026
+ 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b,
2027
+ 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29,
2028
+ 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6,
2029
+ 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1,
2030
+ 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622,
2031
+ 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039,
2032
+ 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d,
2033
+ 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f,
2034
+ 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32,
2035
+ 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770,
2036
+ 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034,
2037
+ 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f,
2038
+ 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc,
2039
+ 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db,
2040
+ 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154,
2041
+ 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16,
2042
+ 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0,
2043
+ 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592,
2044
+ 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca,
2045
+ 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd,
2046
+ 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e,
2047
+ 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882,
2048
+ 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6,
2049
+ 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384,
2050
+ 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1,
2051
+ 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3,
2052
+ 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7,
2053
+ 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b,
2054
+ 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8,
2055
+ 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff,
2056
+ 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7,
2057
+ 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5,
2058
+ 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23,
2059
+ 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761,
2060
+ 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee,
2061
+ 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9,
2062
+ 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a,
2063
+ 0x1a3b93aa},
2064
+ {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a,
2065
+ 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca,
2066
+ 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3,
2067
+ 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb,
2068
+ 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c,
2069
+ 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58,
2070
+ 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed,
2071
+ 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9,
2072
+ 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e,
2073
+ 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906,
2074
+ 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f,
2075
+ 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf,
2076
+ 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0,
2077
+ 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4,
2078
+ 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769,
2079
+ 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d,
2080
+ 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632,
2081
+ 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82,
2082
+ 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb,
2083
+ 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73,
2084
+ 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484,
2085
+ 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0,
2086
+ 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5,
2087
+ 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1,
2088
+ 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516,
2089
+ 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f,
2090
+ 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946,
2091
+ 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6,
2092
+ 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9,
2093
+ 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad,
2094
+ 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820,
2095
+ 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364,
2096
+ 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab,
2097
+ 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b,
2098
+ 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62,
2099
+ 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a,
2100
+ 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd,
2101
+ 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089,
2102
+ 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c,
2103
+ 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8,
2104
+ 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f,
2105
+ 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477,
2106
+ 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e,
2107
+ 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be,
2108
+ 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71,
2109
+ 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635,
2110
+ 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8,
2111
+ 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc,
2112
+ 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3,
2113
+ 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753,
2114
+ 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a,
2115
+ 0xe147d714},
2116
+ {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c,
2117
+ 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b,
2118
+ 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92,
2119
+ 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4,
2120
+ 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069,
2121
+ 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526,
2122
+ 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25,
2123
+ 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a,
2124
+ 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7,
2125
+ 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491,
2126
+ 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958,
2127
+ 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f,
2128
+ 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307,
2129
+ 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648,
2130
+ 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999,
2131
+ 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6,
2132
+ 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a,
2133
+ 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d,
2134
+ 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4,
2135
+ 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61,
2136
+ 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc,
2137
+ 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3,
2138
+ 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53,
2139
+ 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c,
2140
+ 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1,
2141
+ 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c,
2142
+ 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5,
2143
+ 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92,
2144
+ 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e,
2145
+ 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771,
2146
+ 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0,
2147
+ 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def,
2148
+ 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0,
2149
+ 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7,
2150
+ 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e,
2151
+ 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58,
2152
+ 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285,
2153
+ 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca,
2154
+ 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce,
2155
+ 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81,
2156
+ 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c,
2157
+ 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a,
2158
+ 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3,
2159
+ 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4,
2160
+ 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb,
2161
+ 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4,
2162
+ 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75,
2163
+ 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a,
2164
+ 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296,
2165
+ 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1,
2166
+ 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808,
2167
+ 0x494f0c4b}};
2168
+
2169
+local const z_word_t FAR crc_braid_big_table[][256] = {
2170
+ {0x0000000000000000, 0x43147b1700000000, 0x8628f62e00000000,
2171
+ 0xc53c8d3900000000, 0x0c51ec5d00000000, 0x4f45974a00000000,
2172
+ 0x8a791a7300000000, 0xc96d616400000000, 0x18a2d8bb00000000,
2173
+ 0x5bb6a3ac00000000, 0x9e8a2e9500000000, 0xdd9e558200000000,
2174
+ 0x14f334e600000000, 0x57e74ff100000000, 0x92dbc2c800000000,
2175
+ 0xd1cfb9df00000000, 0x7142c0ac00000000, 0x3256bbbb00000000,
2176
+ 0xf76a368200000000, 0xb47e4d9500000000, 0x7d132cf100000000,
2177
+ 0x3e0757e600000000, 0xfb3bdadf00000000, 0xb82fa1c800000000,
2178
+ 0x69e0181700000000, 0x2af4630000000000, 0xefc8ee3900000000,
2179
+ 0xacdc952e00000000, 0x65b1f44a00000000, 0x26a58f5d00000000,
2180
+ 0xe399026400000000, 0xa08d797300000000, 0xa382f18200000000,
2181
+ 0xe0968a9500000000, 0x25aa07ac00000000, 0x66be7cbb00000000,
2182
+ 0xafd31ddf00000000, 0xecc766c800000000, 0x29fbebf100000000,
2183
+ 0x6aef90e600000000, 0xbb20293900000000, 0xf834522e00000000,
2184
+ 0x3d08df1700000000, 0x7e1ca40000000000, 0xb771c56400000000,
2185
+ 0xf465be7300000000, 0x3159334a00000000, 0x724d485d00000000,
2186
+ 0xd2c0312e00000000, 0x91d44a3900000000, 0x54e8c70000000000,
2187
+ 0x17fcbc1700000000, 0xde91dd7300000000, 0x9d85a66400000000,
2188
+ 0x58b92b5d00000000, 0x1bad504a00000000, 0xca62e99500000000,
2189
+ 0x8976928200000000, 0x4c4a1fbb00000000, 0x0f5e64ac00000000,
2190
+ 0xc63305c800000000, 0x85277edf00000000, 0x401bf3e600000000,
2191
+ 0x030f88f100000000, 0x070392de00000000, 0x4417e9c900000000,
2192
+ 0x812b64f000000000, 0xc23f1fe700000000, 0x0b527e8300000000,
2193
+ 0x4846059400000000, 0x8d7a88ad00000000, 0xce6ef3ba00000000,
2194
+ 0x1fa14a6500000000, 0x5cb5317200000000, 0x9989bc4b00000000,
2195
+ 0xda9dc75c00000000, 0x13f0a63800000000, 0x50e4dd2f00000000,
2196
+ 0x95d8501600000000, 0xd6cc2b0100000000, 0x7641527200000000,
2197
+ 0x3555296500000000, 0xf069a45c00000000, 0xb37ddf4b00000000,
2198
+ 0x7a10be2f00000000, 0x3904c53800000000, 0xfc38480100000000,
2199
+ 0xbf2c331600000000, 0x6ee38ac900000000, 0x2df7f1de00000000,
2200
+ 0xe8cb7ce700000000, 0xabdf07f000000000, 0x62b2669400000000,
2201
+ 0x21a61d8300000000, 0xe49a90ba00000000, 0xa78eebad00000000,
2202
+ 0xa481635c00000000, 0xe795184b00000000, 0x22a9957200000000,
2203
+ 0x61bdee6500000000, 0xa8d08f0100000000, 0xebc4f41600000000,
2204
+ 0x2ef8792f00000000, 0x6dec023800000000, 0xbc23bbe700000000,
2205
+ 0xff37c0f000000000, 0x3a0b4dc900000000, 0x791f36de00000000,
2206
+ 0xb07257ba00000000, 0xf3662cad00000000, 0x365aa19400000000,
2207
+ 0x754eda8300000000, 0xd5c3a3f000000000, 0x96d7d8e700000000,
2208
+ 0x53eb55de00000000, 0x10ff2ec900000000, 0xd9924fad00000000,
2209
+ 0x9a8634ba00000000, 0x5fbab98300000000, 0x1caec29400000000,
2210
+ 0xcd617b4b00000000, 0x8e75005c00000000, 0x4b498d6500000000,
2211
+ 0x085df67200000000, 0xc130971600000000, 0x8224ec0100000000,
2212
+ 0x4718613800000000, 0x040c1a2f00000000, 0x4f00556600000000,
2213
+ 0x0c142e7100000000, 0xc928a34800000000, 0x8a3cd85f00000000,
2214
+ 0x4351b93b00000000, 0x0045c22c00000000, 0xc5794f1500000000,
2215
+ 0x866d340200000000, 0x57a28ddd00000000, 0x14b6f6ca00000000,
2216
+ 0xd18a7bf300000000, 0x929e00e400000000, 0x5bf3618000000000,
2217
+ 0x18e71a9700000000, 0xdddb97ae00000000, 0x9ecfecb900000000,
2218
+ 0x3e4295ca00000000, 0x7d56eedd00000000, 0xb86a63e400000000,
2219
+ 0xfb7e18f300000000, 0x3213799700000000, 0x7107028000000000,
2220
+ 0xb43b8fb900000000, 0xf72ff4ae00000000, 0x26e04d7100000000,
2221
+ 0x65f4366600000000, 0xa0c8bb5f00000000, 0xe3dcc04800000000,
2222
+ 0x2ab1a12c00000000, 0x69a5da3b00000000, 0xac99570200000000,
2223
+ 0xef8d2c1500000000, 0xec82a4e400000000, 0xaf96dff300000000,
2224
+ 0x6aaa52ca00000000, 0x29be29dd00000000, 0xe0d348b900000000,
2225
+ 0xa3c733ae00000000, 0x66fbbe9700000000, 0x25efc58000000000,
2226
+ 0xf4207c5f00000000, 0xb734074800000000, 0x72088a7100000000,
2227
+ 0x311cf16600000000, 0xf871900200000000, 0xbb65eb1500000000,
2228
+ 0x7e59662c00000000, 0x3d4d1d3b00000000, 0x9dc0644800000000,
2229
+ 0xded41f5f00000000, 0x1be8926600000000, 0x58fce97100000000,
2230
+ 0x9191881500000000, 0xd285f30200000000, 0x17b97e3b00000000,
2231
+ 0x54ad052c00000000, 0x8562bcf300000000, 0xc676c7e400000000,
2232
+ 0x034a4add00000000, 0x405e31ca00000000, 0x893350ae00000000,
2233
+ 0xca272bb900000000, 0x0f1ba68000000000, 0x4c0fdd9700000000,
2234
+ 0x4803c7b800000000, 0x0b17bcaf00000000, 0xce2b319600000000,
2235
+ 0x8d3f4a8100000000, 0x44522be500000000, 0x074650f200000000,
2236
+ 0xc27addcb00000000, 0x816ea6dc00000000, 0x50a11f0300000000,
2237
+ 0x13b5641400000000, 0xd689e92d00000000, 0x959d923a00000000,
2238
+ 0x5cf0f35e00000000, 0x1fe4884900000000, 0xdad8057000000000,
2239
+ 0x99cc7e6700000000, 0x3941071400000000, 0x7a557c0300000000,
2240
+ 0xbf69f13a00000000, 0xfc7d8a2d00000000, 0x3510eb4900000000,
2241
+ 0x7604905e00000000, 0xb3381d6700000000, 0xf02c667000000000,
2242
+ 0x21e3dfaf00000000, 0x62f7a4b800000000, 0xa7cb298100000000,
2243
+ 0xe4df529600000000, 0x2db233f200000000, 0x6ea648e500000000,
2244
+ 0xab9ac5dc00000000, 0xe88ebecb00000000, 0xeb81363a00000000,
2245
+ 0xa8954d2d00000000, 0x6da9c01400000000, 0x2ebdbb0300000000,
2246
+ 0xe7d0da6700000000, 0xa4c4a17000000000, 0x61f82c4900000000,
2247
+ 0x22ec575e00000000, 0xf323ee8100000000, 0xb037959600000000,
2248
+ 0x750b18af00000000, 0x361f63b800000000, 0xff7202dc00000000,
2249
+ 0xbc6679cb00000000, 0x795af4f200000000, 0x3a4e8fe500000000,
2250
+ 0x9ac3f69600000000, 0xd9d78d8100000000, 0x1ceb00b800000000,
2251
+ 0x5fff7baf00000000, 0x96921acb00000000, 0xd58661dc00000000,
2252
+ 0x10baece500000000, 0x53ae97f200000000, 0x82612e2d00000000,
2253
+ 0xc175553a00000000, 0x0449d80300000000, 0x475da31400000000,
2254
+ 0x8e30c27000000000, 0xcd24b96700000000, 0x0818345e00000000,
2255
+ 0x4b0c4f4900000000},
2256
+ {0x0000000000000000, 0x3e6bc2ef00000000, 0x3dd0f50400000000,
2257
+ 0x03bb37eb00000000, 0x7aa0eb0900000000, 0x44cb29e600000000,
2258
+ 0x47701e0d00000000, 0x791bdce200000000, 0xf440d71300000000,
2259
+ 0xca2b15fc00000000, 0xc990221700000000, 0xf7fbe0f800000000,
2260
+ 0x8ee03c1a00000000, 0xb08bfef500000000, 0xb330c91e00000000,
2261
+ 0x8d5b0bf100000000, 0xe881ae2700000000, 0xd6ea6cc800000000,
2262
+ 0xd5515b2300000000, 0xeb3a99cc00000000, 0x9221452e00000000,
2263
+ 0xac4a87c100000000, 0xaff1b02a00000000, 0x919a72c500000000,
2264
+ 0x1cc1793400000000, 0x22aabbdb00000000, 0x21118c3000000000,
2265
+ 0x1f7a4edf00000000, 0x6661923d00000000, 0x580a50d200000000,
2266
+ 0x5bb1673900000000, 0x65daa5d600000000, 0xd0035d4f00000000,
2267
+ 0xee689fa000000000, 0xedd3a84b00000000, 0xd3b86aa400000000,
2268
+ 0xaaa3b64600000000, 0x94c874a900000000, 0x9773434200000000,
2269
+ 0xa91881ad00000000, 0x24438a5c00000000, 0x1a2848b300000000,
2270
+ 0x19937f5800000000, 0x27f8bdb700000000, 0x5ee3615500000000,
2271
+ 0x6088a3ba00000000, 0x6333945100000000, 0x5d5856be00000000,
2272
+ 0x3882f36800000000, 0x06e9318700000000, 0x0552066c00000000,
2273
+ 0x3b39c48300000000, 0x4222186100000000, 0x7c49da8e00000000,
2274
+ 0x7ff2ed6500000000, 0x41992f8a00000000, 0xccc2247b00000000,
2275
+ 0xf2a9e69400000000, 0xf112d17f00000000, 0xcf79139000000000,
2276
+ 0xb662cf7200000000, 0x88090d9d00000000, 0x8bb23a7600000000,
2277
+ 0xb5d9f89900000000, 0xa007ba9e00000000, 0x9e6c787100000000,
2278
+ 0x9dd74f9a00000000, 0xa3bc8d7500000000, 0xdaa7519700000000,
2279
+ 0xe4cc937800000000, 0xe777a49300000000, 0xd91c667c00000000,
2280
+ 0x54476d8d00000000, 0x6a2caf6200000000, 0x6997988900000000,
2281
+ 0x57fc5a6600000000, 0x2ee7868400000000, 0x108c446b00000000,
2282
+ 0x1337738000000000, 0x2d5cb16f00000000, 0x488614b900000000,
2283
+ 0x76edd65600000000, 0x7556e1bd00000000, 0x4b3d235200000000,
2284
+ 0x3226ffb000000000, 0x0c4d3d5f00000000, 0x0ff60ab400000000,
2285
+ 0x319dc85b00000000, 0xbcc6c3aa00000000, 0x82ad014500000000,
2286
+ 0x811636ae00000000, 0xbf7df44100000000, 0xc66628a300000000,
2287
+ 0xf80dea4c00000000, 0xfbb6dda700000000, 0xc5dd1f4800000000,
2288
+ 0x7004e7d100000000, 0x4e6f253e00000000, 0x4dd412d500000000,
2289
+ 0x73bfd03a00000000, 0x0aa40cd800000000, 0x34cfce3700000000,
2290
+ 0x3774f9dc00000000, 0x091f3b3300000000, 0x844430c200000000,
2291
+ 0xba2ff22d00000000, 0xb994c5c600000000, 0x87ff072900000000,
2292
+ 0xfee4dbcb00000000, 0xc08f192400000000, 0xc3342ecf00000000,
2293
+ 0xfd5fec2000000000, 0x988549f600000000, 0xa6ee8b1900000000,
2294
+ 0xa555bcf200000000, 0x9b3e7e1d00000000, 0xe225a2ff00000000,
2295
+ 0xdc4e601000000000, 0xdff557fb00000000, 0xe19e951400000000,
2296
+ 0x6cc59ee500000000, 0x52ae5c0a00000000, 0x51156be100000000,
2297
+ 0x6f7ea90e00000000, 0x166575ec00000000, 0x280eb70300000000,
2298
+ 0x2bb580e800000000, 0x15de420700000000, 0x010905e600000000,
2299
+ 0x3f62c70900000000, 0x3cd9f0e200000000, 0x02b2320d00000000,
2300
+ 0x7ba9eeef00000000, 0x45c22c0000000000, 0x46791beb00000000,
2301
+ 0x7812d90400000000, 0xf549d2f500000000, 0xcb22101a00000000,
2302
+ 0xc89927f100000000, 0xf6f2e51e00000000, 0x8fe939fc00000000,
2303
+ 0xb182fb1300000000, 0xb239ccf800000000, 0x8c520e1700000000,
2304
+ 0xe988abc100000000, 0xd7e3692e00000000, 0xd4585ec500000000,
2305
+ 0xea339c2a00000000, 0x932840c800000000, 0xad43822700000000,
2306
+ 0xaef8b5cc00000000, 0x9093772300000000, 0x1dc87cd200000000,
2307
+ 0x23a3be3d00000000, 0x201889d600000000, 0x1e734b3900000000,
2308
+ 0x676897db00000000, 0x5903553400000000, 0x5ab862df00000000,
2309
+ 0x64d3a03000000000, 0xd10a58a900000000, 0xef619a4600000000,
2310
+ 0xecdaadad00000000, 0xd2b16f4200000000, 0xabaab3a000000000,
2311
+ 0x95c1714f00000000, 0x967a46a400000000, 0xa811844b00000000,
2312
+ 0x254a8fba00000000, 0x1b214d5500000000, 0x189a7abe00000000,
2313
+ 0x26f1b85100000000, 0x5fea64b300000000, 0x6181a65c00000000,
2314
+ 0x623a91b700000000, 0x5c51535800000000, 0x398bf68e00000000,
2315
+ 0x07e0346100000000, 0x045b038a00000000, 0x3a30c16500000000,
2316
+ 0x432b1d8700000000, 0x7d40df6800000000, 0x7efbe88300000000,
2317
+ 0x40902a6c00000000, 0xcdcb219d00000000, 0xf3a0e37200000000,
2318
+ 0xf01bd49900000000, 0xce70167600000000, 0xb76bca9400000000,
2319
+ 0x8900087b00000000, 0x8abb3f9000000000, 0xb4d0fd7f00000000,
2320
+ 0xa10ebf7800000000, 0x9f657d9700000000, 0x9cde4a7c00000000,
2321
+ 0xa2b5889300000000, 0xdbae547100000000, 0xe5c5969e00000000,
2322
+ 0xe67ea17500000000, 0xd815639a00000000, 0x554e686b00000000,
2323
+ 0x6b25aa8400000000, 0x689e9d6f00000000, 0x56f55f8000000000,
2324
+ 0x2fee836200000000, 0x1185418d00000000, 0x123e766600000000,
2325
+ 0x2c55b48900000000, 0x498f115f00000000, 0x77e4d3b000000000,
2326
+ 0x745fe45b00000000, 0x4a3426b400000000, 0x332ffa5600000000,
2327
+ 0x0d4438b900000000, 0x0eff0f5200000000, 0x3094cdbd00000000,
2328
+ 0xbdcfc64c00000000, 0x83a404a300000000, 0x801f334800000000,
2329
+ 0xbe74f1a700000000, 0xc76f2d4500000000, 0xf904efaa00000000,
2330
+ 0xfabfd84100000000, 0xc4d41aae00000000, 0x710de23700000000,
2331
+ 0x4f6620d800000000, 0x4cdd173300000000, 0x72b6d5dc00000000,
2332
+ 0x0bad093e00000000, 0x35c6cbd100000000, 0x367dfc3a00000000,
2333
+ 0x08163ed500000000, 0x854d352400000000, 0xbb26f7cb00000000,
2334
+ 0xb89dc02000000000, 0x86f602cf00000000, 0xffedde2d00000000,
2335
+ 0xc1861cc200000000, 0xc23d2b2900000000, 0xfc56e9c600000000,
2336
+ 0x998c4c1000000000, 0xa7e78eff00000000, 0xa45cb91400000000,
2337
+ 0x9a377bfb00000000, 0xe32ca71900000000, 0xdd4765f600000000,
2338
+ 0xdefc521d00000000, 0xe09790f200000000, 0x6dcc9b0300000000,
2339
+ 0x53a759ec00000000, 0x501c6e0700000000, 0x6e77ace800000000,
2340
+ 0x176c700a00000000, 0x2907b2e500000000, 0x2abc850e00000000,
2341
+ 0x14d747e100000000},
2342
+ {0x0000000000000000, 0xc0df8ec100000000, 0xc1b96c5800000000,
2343
+ 0x0166e29900000000, 0x8273d9b000000000, 0x42ac577100000000,
2344
+ 0x43cab5e800000000, 0x83153b2900000000, 0x45e1c3ba00000000,
2345
+ 0x853e4d7b00000000, 0x8458afe200000000, 0x4487212300000000,
2346
+ 0xc7921a0a00000000, 0x074d94cb00000000, 0x062b765200000000,
2347
+ 0xc6f4f89300000000, 0xcbc4f6ae00000000, 0x0b1b786f00000000,
2348
+ 0x0a7d9af600000000, 0xcaa2143700000000, 0x49b72f1e00000000,
2349
+ 0x8968a1df00000000, 0x880e434600000000, 0x48d1cd8700000000,
2350
+ 0x8e25351400000000, 0x4efabbd500000000, 0x4f9c594c00000000,
2351
+ 0x8f43d78d00000000, 0x0c56eca400000000, 0xcc89626500000000,
2352
+ 0xcdef80fc00000000, 0x0d300e3d00000000, 0xd78f9c8600000000,
2353
+ 0x1750124700000000, 0x1636f0de00000000, 0xd6e97e1f00000000,
2354
+ 0x55fc453600000000, 0x9523cbf700000000, 0x9445296e00000000,
2355
+ 0x549aa7af00000000, 0x926e5f3c00000000, 0x52b1d1fd00000000,
2356
+ 0x53d7336400000000, 0x9308bda500000000, 0x101d868c00000000,
2357
+ 0xd0c2084d00000000, 0xd1a4ead400000000, 0x117b641500000000,
2358
+ 0x1c4b6a2800000000, 0xdc94e4e900000000, 0xddf2067000000000,
2359
+ 0x1d2d88b100000000, 0x9e38b39800000000, 0x5ee73d5900000000,
2360
+ 0x5f81dfc000000000, 0x9f5e510100000000, 0x59aaa99200000000,
2361
+ 0x9975275300000000, 0x9813c5ca00000000, 0x58cc4b0b00000000,
2362
+ 0xdbd9702200000000, 0x1b06fee300000000, 0x1a601c7a00000000,
2363
+ 0xdabf92bb00000000, 0xef1948d600000000, 0x2fc6c61700000000,
2364
+ 0x2ea0248e00000000, 0xee7faa4f00000000, 0x6d6a916600000000,
2365
+ 0xadb51fa700000000, 0xacd3fd3e00000000, 0x6c0c73ff00000000,
2366
+ 0xaaf88b6c00000000, 0x6a2705ad00000000, 0x6b41e73400000000,
2367
+ 0xab9e69f500000000, 0x288b52dc00000000, 0xe854dc1d00000000,
2368
+ 0xe9323e8400000000, 0x29edb04500000000, 0x24ddbe7800000000,
2369
+ 0xe40230b900000000, 0xe564d22000000000, 0x25bb5ce100000000,
2370
+ 0xa6ae67c800000000, 0x6671e90900000000, 0x67170b9000000000,
2371
+ 0xa7c8855100000000, 0x613c7dc200000000, 0xa1e3f30300000000,
2372
+ 0xa085119a00000000, 0x605a9f5b00000000, 0xe34fa47200000000,
2373
+ 0x23902ab300000000, 0x22f6c82a00000000, 0xe22946eb00000000,
2374
+ 0x3896d45000000000, 0xf8495a9100000000, 0xf92fb80800000000,
2375
+ 0x39f036c900000000, 0xbae50de000000000, 0x7a3a832100000000,
2376
+ 0x7b5c61b800000000, 0xbb83ef7900000000, 0x7d7717ea00000000,
2377
+ 0xbda8992b00000000, 0xbcce7bb200000000, 0x7c11f57300000000,
2378
+ 0xff04ce5a00000000, 0x3fdb409b00000000, 0x3ebda20200000000,
2379
+ 0xfe622cc300000000, 0xf35222fe00000000, 0x338dac3f00000000,
2380
+ 0x32eb4ea600000000, 0xf234c06700000000, 0x7121fb4e00000000,
2381
+ 0xb1fe758f00000000, 0xb098971600000000, 0x704719d700000000,
2382
+ 0xb6b3e14400000000, 0x766c6f8500000000, 0x770a8d1c00000000,
2383
+ 0xb7d503dd00000000, 0x34c038f400000000, 0xf41fb63500000000,
2384
+ 0xf57954ac00000000, 0x35a6da6d00000000, 0x9f35e17700000000,
2385
+ 0x5fea6fb600000000, 0x5e8c8d2f00000000, 0x9e5303ee00000000,
2386
+ 0x1d4638c700000000, 0xdd99b60600000000, 0xdcff549f00000000,
2387
+ 0x1c20da5e00000000, 0xdad422cd00000000, 0x1a0bac0c00000000,
2388
+ 0x1b6d4e9500000000, 0xdbb2c05400000000, 0x58a7fb7d00000000,
2389
+ 0x987875bc00000000, 0x991e972500000000, 0x59c119e400000000,
2390
+ 0x54f117d900000000, 0x942e991800000000, 0x95487b8100000000,
2391
+ 0x5597f54000000000, 0xd682ce6900000000, 0x165d40a800000000,
2392
+ 0x173ba23100000000, 0xd7e42cf000000000, 0x1110d46300000000,
2393
+ 0xd1cf5aa200000000, 0xd0a9b83b00000000, 0x107636fa00000000,
2394
+ 0x93630dd300000000, 0x53bc831200000000, 0x52da618b00000000,
2395
+ 0x9205ef4a00000000, 0x48ba7df100000000, 0x8865f33000000000,
2396
+ 0x890311a900000000, 0x49dc9f6800000000, 0xcac9a44100000000,
2397
+ 0x0a162a8000000000, 0x0b70c81900000000, 0xcbaf46d800000000,
2398
+ 0x0d5bbe4b00000000, 0xcd84308a00000000, 0xcce2d21300000000,
2399
+ 0x0c3d5cd200000000, 0x8f2867fb00000000, 0x4ff7e93a00000000,
2400
+ 0x4e910ba300000000, 0x8e4e856200000000, 0x837e8b5f00000000,
2401
+ 0x43a1059e00000000, 0x42c7e70700000000, 0x821869c600000000,
2402
+ 0x010d52ef00000000, 0xc1d2dc2e00000000, 0xc0b43eb700000000,
2403
+ 0x006bb07600000000, 0xc69f48e500000000, 0x0640c62400000000,
2404
+ 0x072624bd00000000, 0xc7f9aa7c00000000, 0x44ec915500000000,
2405
+ 0x84331f9400000000, 0x8555fd0d00000000, 0x458a73cc00000000,
2406
+ 0x702ca9a100000000, 0xb0f3276000000000, 0xb195c5f900000000,
2407
+ 0x714a4b3800000000, 0xf25f701100000000, 0x3280fed000000000,
2408
+ 0x33e61c4900000000, 0xf339928800000000, 0x35cd6a1b00000000,
2409
+ 0xf512e4da00000000, 0xf474064300000000, 0x34ab888200000000,
2410
+ 0xb7beb3ab00000000, 0x77613d6a00000000, 0x7607dff300000000,
2411
+ 0xb6d8513200000000, 0xbbe85f0f00000000, 0x7b37d1ce00000000,
2412
+ 0x7a51335700000000, 0xba8ebd9600000000, 0x399b86bf00000000,
2413
+ 0xf944087e00000000, 0xf822eae700000000, 0x38fd642600000000,
2414
+ 0xfe099cb500000000, 0x3ed6127400000000, 0x3fb0f0ed00000000,
2415
+ 0xff6f7e2c00000000, 0x7c7a450500000000, 0xbca5cbc400000000,
2416
+ 0xbdc3295d00000000, 0x7d1ca79c00000000, 0xa7a3352700000000,
2417
+ 0x677cbbe600000000, 0x661a597f00000000, 0xa6c5d7be00000000,
2418
+ 0x25d0ec9700000000, 0xe50f625600000000, 0xe46980cf00000000,
2419
+ 0x24b60e0e00000000, 0xe242f69d00000000, 0x229d785c00000000,
2420
+ 0x23fb9ac500000000, 0xe324140400000000, 0x60312f2d00000000,
2421
+ 0xa0eea1ec00000000, 0xa188437500000000, 0x6157cdb400000000,
2422
+ 0x6c67c38900000000, 0xacb84d4800000000, 0xaddeafd100000000,
2423
+ 0x6d01211000000000, 0xee141a3900000000, 0x2ecb94f800000000,
2424
+ 0x2fad766100000000, 0xef72f8a000000000, 0x2986003300000000,
2425
+ 0xe9598ef200000000, 0xe83f6c6b00000000, 0x28e0e2aa00000000,
2426
+ 0xabf5d98300000000, 0x6b2a574200000000, 0x6a4cb5db00000000,
2427
+ 0xaa933b1a00000000},
2428
+ {0x0000000000000000, 0x6f4ca59b00000000, 0x9f9e3bec00000000,
2429
+ 0xf0d29e7700000000, 0x7f3b060300000000, 0x1077a39800000000,
2430
+ 0xe0a53def00000000, 0x8fe9987400000000, 0xfe760c0600000000,
2431
+ 0x913aa99d00000000, 0x61e837ea00000000, 0x0ea4927100000000,
2432
+ 0x814d0a0500000000, 0xee01af9e00000000, 0x1ed331e900000000,
2433
+ 0x719f947200000000, 0xfced180c00000000, 0x93a1bd9700000000,
2434
+ 0x637323e000000000, 0x0c3f867b00000000, 0x83d61e0f00000000,
2435
+ 0xec9abb9400000000, 0x1c4825e300000000, 0x7304807800000000,
2436
+ 0x029b140a00000000, 0x6dd7b19100000000, 0x9d052fe600000000,
2437
+ 0xf2498a7d00000000, 0x7da0120900000000, 0x12ecb79200000000,
2438
+ 0xe23e29e500000000, 0x8d728c7e00000000, 0xf8db311800000000,
2439
+ 0x9797948300000000, 0x67450af400000000, 0x0809af6f00000000,
2440
+ 0x87e0371b00000000, 0xe8ac928000000000, 0x187e0cf700000000,
2441
+ 0x7732a96c00000000, 0x06ad3d1e00000000, 0x69e1988500000000,
2442
+ 0x993306f200000000, 0xf67fa36900000000, 0x79963b1d00000000,
2443
+ 0x16da9e8600000000, 0xe60800f100000000, 0x8944a56a00000000,
2444
+ 0x0436291400000000, 0x6b7a8c8f00000000, 0x9ba812f800000000,
2445
+ 0xf4e4b76300000000, 0x7b0d2f1700000000, 0x14418a8c00000000,
2446
+ 0xe49314fb00000000, 0x8bdfb16000000000, 0xfa40251200000000,
2447
+ 0x950c808900000000, 0x65de1efe00000000, 0x0a92bb6500000000,
2448
+ 0x857b231100000000, 0xea37868a00000000, 0x1ae518fd00000000,
2449
+ 0x75a9bd6600000000, 0xf0b7633000000000, 0x9ffbc6ab00000000,
2450
+ 0x6f2958dc00000000, 0x0065fd4700000000, 0x8f8c653300000000,
2451
+ 0xe0c0c0a800000000, 0x10125edf00000000, 0x7f5efb4400000000,
2452
+ 0x0ec16f3600000000, 0x618dcaad00000000, 0x915f54da00000000,
2453
+ 0xfe13f14100000000, 0x71fa693500000000, 0x1eb6ccae00000000,
2454
+ 0xee6452d900000000, 0x8128f74200000000, 0x0c5a7b3c00000000,
2455
+ 0x6316dea700000000, 0x93c440d000000000, 0xfc88e54b00000000,
2456
+ 0x73617d3f00000000, 0x1c2dd8a400000000, 0xecff46d300000000,
2457
+ 0x83b3e34800000000, 0xf22c773a00000000, 0x9d60d2a100000000,
2458
+ 0x6db24cd600000000, 0x02fee94d00000000, 0x8d17713900000000,
2459
+ 0xe25bd4a200000000, 0x12894ad500000000, 0x7dc5ef4e00000000,
2460
+ 0x086c522800000000, 0x6720f7b300000000, 0x97f269c400000000,
2461
+ 0xf8becc5f00000000, 0x7757542b00000000, 0x181bf1b000000000,
2462
+ 0xe8c96fc700000000, 0x8785ca5c00000000, 0xf61a5e2e00000000,
2463
+ 0x9956fbb500000000, 0x698465c200000000, 0x06c8c05900000000,
2464
+ 0x8921582d00000000, 0xe66dfdb600000000, 0x16bf63c100000000,
2465
+ 0x79f3c65a00000000, 0xf4814a2400000000, 0x9bcdefbf00000000,
2466
+ 0x6b1f71c800000000, 0x0453d45300000000, 0x8bba4c2700000000,
2467
+ 0xe4f6e9bc00000000, 0x142477cb00000000, 0x7b68d25000000000,
2468
+ 0x0af7462200000000, 0x65bbe3b900000000, 0x95697dce00000000,
2469
+ 0xfa25d85500000000, 0x75cc402100000000, 0x1a80e5ba00000000,
2470
+ 0xea527bcd00000000, 0x851ede5600000000, 0xe06fc76000000000,
2471
+ 0x8f2362fb00000000, 0x7ff1fc8c00000000, 0x10bd591700000000,
2472
+ 0x9f54c16300000000, 0xf01864f800000000, 0x00cafa8f00000000,
2473
+ 0x6f865f1400000000, 0x1e19cb6600000000, 0x71556efd00000000,
2474
+ 0x8187f08a00000000, 0xeecb551100000000, 0x6122cd6500000000,
2475
+ 0x0e6e68fe00000000, 0xfebcf68900000000, 0x91f0531200000000,
2476
+ 0x1c82df6c00000000, 0x73ce7af700000000, 0x831ce48000000000,
2477
+ 0xec50411b00000000, 0x63b9d96f00000000, 0x0cf57cf400000000,
2478
+ 0xfc27e28300000000, 0x936b471800000000, 0xe2f4d36a00000000,
2479
+ 0x8db876f100000000, 0x7d6ae88600000000, 0x12264d1d00000000,
2480
+ 0x9dcfd56900000000, 0xf28370f200000000, 0x0251ee8500000000,
2481
+ 0x6d1d4b1e00000000, 0x18b4f67800000000, 0x77f853e300000000,
2482
+ 0x872acd9400000000, 0xe866680f00000000, 0x678ff07b00000000,
2483
+ 0x08c355e000000000, 0xf811cb9700000000, 0x975d6e0c00000000,
2484
+ 0xe6c2fa7e00000000, 0x898e5fe500000000, 0x795cc19200000000,
2485
+ 0x1610640900000000, 0x99f9fc7d00000000, 0xf6b559e600000000,
2486
+ 0x0667c79100000000, 0x692b620a00000000, 0xe459ee7400000000,
2487
+ 0x8b154bef00000000, 0x7bc7d59800000000, 0x148b700300000000,
2488
+ 0x9b62e87700000000, 0xf42e4dec00000000, 0x04fcd39b00000000,
2489
+ 0x6bb0760000000000, 0x1a2fe27200000000, 0x756347e900000000,
2490
+ 0x85b1d99e00000000, 0xeafd7c0500000000, 0x6514e47100000000,
2491
+ 0x0a5841ea00000000, 0xfa8adf9d00000000, 0x95c67a0600000000,
2492
+ 0x10d8a45000000000, 0x7f9401cb00000000, 0x8f469fbc00000000,
2493
+ 0xe00a3a2700000000, 0x6fe3a25300000000, 0x00af07c800000000,
2494
+ 0xf07d99bf00000000, 0x9f313c2400000000, 0xeeaea85600000000,
2495
+ 0x81e20dcd00000000, 0x713093ba00000000, 0x1e7c362100000000,
2496
+ 0x9195ae5500000000, 0xfed90bce00000000, 0x0e0b95b900000000,
2497
+ 0x6147302200000000, 0xec35bc5c00000000, 0x837919c700000000,
2498
+ 0x73ab87b000000000, 0x1ce7222b00000000, 0x930eba5f00000000,
2499
+ 0xfc421fc400000000, 0x0c9081b300000000, 0x63dc242800000000,
2500
+ 0x1243b05a00000000, 0x7d0f15c100000000, 0x8ddd8bb600000000,
2501
+ 0xe2912e2d00000000, 0x6d78b65900000000, 0x023413c200000000,
2502
+ 0xf2e68db500000000, 0x9daa282e00000000, 0xe803954800000000,
2503
+ 0x874f30d300000000, 0x779daea400000000, 0x18d10b3f00000000,
2504
+ 0x9738934b00000000, 0xf87436d000000000, 0x08a6a8a700000000,
2505
+ 0x67ea0d3c00000000, 0x1675994e00000000, 0x79393cd500000000,
2506
+ 0x89eba2a200000000, 0xe6a7073900000000, 0x694e9f4d00000000,
2507
+ 0x06023ad600000000, 0xf6d0a4a100000000, 0x999c013a00000000,
2508
+ 0x14ee8d4400000000, 0x7ba228df00000000, 0x8b70b6a800000000,
2509
+ 0xe43c133300000000, 0x6bd58b4700000000, 0x04992edc00000000,
2510
+ 0xf44bb0ab00000000, 0x9b07153000000000, 0xea98814200000000,
2511
+ 0x85d424d900000000, 0x7506baae00000000, 0x1a4a1f3500000000,
2512
+ 0x95a3874100000000, 0xfaef22da00000000, 0x0a3dbcad00000000,
2513
+ 0x6571193600000000},
2514
+ {0x0000000000000000, 0x85d996dd00000000, 0x4bb55c6000000000,
2515
+ 0xce6ccabd00000000, 0x966ab9c000000000, 0x13b32f1d00000000,
2516
+ 0xdddfe5a000000000, 0x5806737d00000000, 0x6dd3035a00000000,
2517
+ 0xe80a958700000000, 0x26665f3a00000000, 0xa3bfc9e700000000,
2518
+ 0xfbb9ba9a00000000, 0x7e602c4700000000, 0xb00ce6fa00000000,
2519
+ 0x35d5702700000000, 0xdaa607b400000000, 0x5f7f916900000000,
2520
+ 0x91135bd400000000, 0x14cacd0900000000, 0x4cccbe7400000000,
2521
+ 0xc91528a900000000, 0x0779e21400000000, 0x82a074c900000000,
2522
+ 0xb77504ee00000000, 0x32ac923300000000, 0xfcc0588e00000000,
2523
+ 0x7919ce5300000000, 0x211fbd2e00000000, 0xa4c62bf300000000,
2524
+ 0x6aaae14e00000000, 0xef73779300000000, 0xf54b7eb300000000,
2525
+ 0x7092e86e00000000, 0xbefe22d300000000, 0x3b27b40e00000000,
2526
+ 0x6321c77300000000, 0xe6f851ae00000000, 0x28949b1300000000,
2527
+ 0xad4d0dce00000000, 0x98987de900000000, 0x1d41eb3400000000,
2528
+ 0xd32d218900000000, 0x56f4b75400000000, 0x0ef2c42900000000,
2529
+ 0x8b2b52f400000000, 0x4547984900000000, 0xc09e0e9400000000,
2530
+ 0x2fed790700000000, 0xaa34efda00000000, 0x6458256700000000,
2531
+ 0xe181b3ba00000000, 0xb987c0c700000000, 0x3c5e561a00000000,
2532
+ 0xf2329ca700000000, 0x77eb0a7a00000000, 0x423e7a5d00000000,
2533
+ 0xc7e7ec8000000000, 0x098b263d00000000, 0x8c52b0e000000000,
2534
+ 0xd454c39d00000000, 0x518d554000000000, 0x9fe19ffd00000000,
2535
+ 0x1a38092000000000, 0xab918dbd00000000, 0x2e481b6000000000,
2536
+ 0xe024d1dd00000000, 0x65fd470000000000, 0x3dfb347d00000000,
2537
+ 0xb822a2a000000000, 0x764e681d00000000, 0xf397fec000000000,
2538
+ 0xc6428ee700000000, 0x439b183a00000000, 0x8df7d28700000000,
2539
+ 0x082e445a00000000, 0x5028372700000000, 0xd5f1a1fa00000000,
2540
+ 0x1b9d6b4700000000, 0x9e44fd9a00000000, 0x71378a0900000000,
2541
+ 0xf4ee1cd400000000, 0x3a82d66900000000, 0xbf5b40b400000000,
2542
+ 0xe75d33c900000000, 0x6284a51400000000, 0xace86fa900000000,
2543
+ 0x2931f97400000000, 0x1ce4895300000000, 0x993d1f8e00000000,
2544
+ 0x5751d53300000000, 0xd28843ee00000000, 0x8a8e309300000000,
2545
+ 0x0f57a64e00000000, 0xc13b6cf300000000, 0x44e2fa2e00000000,
2546
+ 0x5edaf30e00000000, 0xdb0365d300000000, 0x156faf6e00000000,
2547
+ 0x90b639b300000000, 0xc8b04ace00000000, 0x4d69dc1300000000,
2548
+ 0x830516ae00000000, 0x06dc807300000000, 0x3309f05400000000,
2549
+ 0xb6d0668900000000, 0x78bcac3400000000, 0xfd653ae900000000,
2550
+ 0xa563499400000000, 0x20badf4900000000, 0xeed615f400000000,
2551
+ 0x6b0f832900000000, 0x847cf4ba00000000, 0x01a5626700000000,
2552
+ 0xcfc9a8da00000000, 0x4a103e0700000000, 0x12164d7a00000000,
2553
+ 0x97cfdba700000000, 0x59a3111a00000000, 0xdc7a87c700000000,
2554
+ 0xe9aff7e000000000, 0x6c76613d00000000, 0xa21aab8000000000,
2555
+ 0x27c33d5d00000000, 0x7fc54e2000000000, 0xfa1cd8fd00000000,
2556
+ 0x3470124000000000, 0xb1a9849d00000000, 0x17256aa000000000,
2557
+ 0x92fcfc7d00000000, 0x5c9036c000000000, 0xd949a01d00000000,
2558
+ 0x814fd36000000000, 0x049645bd00000000, 0xcafa8f0000000000,
2559
+ 0x4f2319dd00000000, 0x7af669fa00000000, 0xff2fff2700000000,
2560
+ 0x3143359a00000000, 0xb49aa34700000000, 0xec9cd03a00000000,
2561
+ 0x694546e700000000, 0xa7298c5a00000000, 0x22f01a8700000000,
2562
+ 0xcd836d1400000000, 0x485afbc900000000, 0x8636317400000000,
2563
+ 0x03efa7a900000000, 0x5be9d4d400000000, 0xde30420900000000,
2564
+ 0x105c88b400000000, 0x95851e6900000000, 0xa0506e4e00000000,
2565
+ 0x2589f89300000000, 0xebe5322e00000000, 0x6e3ca4f300000000,
2566
+ 0x363ad78e00000000, 0xb3e3415300000000, 0x7d8f8bee00000000,
2567
+ 0xf8561d3300000000, 0xe26e141300000000, 0x67b782ce00000000,
2568
+ 0xa9db487300000000, 0x2c02deae00000000, 0x7404add300000000,
2569
+ 0xf1dd3b0e00000000, 0x3fb1f1b300000000, 0xba68676e00000000,
2570
+ 0x8fbd174900000000, 0x0a64819400000000, 0xc4084b2900000000,
2571
+ 0x41d1ddf400000000, 0x19d7ae8900000000, 0x9c0e385400000000,
2572
+ 0x5262f2e900000000, 0xd7bb643400000000, 0x38c813a700000000,
2573
+ 0xbd11857a00000000, 0x737d4fc700000000, 0xf6a4d91a00000000,
2574
+ 0xaea2aa6700000000, 0x2b7b3cba00000000, 0xe517f60700000000,
2575
+ 0x60ce60da00000000, 0x551b10fd00000000, 0xd0c2862000000000,
2576
+ 0x1eae4c9d00000000, 0x9b77da4000000000, 0xc371a93d00000000,
2577
+ 0x46a83fe000000000, 0x88c4f55d00000000, 0x0d1d638000000000,
2578
+ 0xbcb4e71d00000000, 0x396d71c000000000, 0xf701bb7d00000000,
2579
+ 0x72d82da000000000, 0x2ade5edd00000000, 0xaf07c80000000000,
2580
+ 0x616b02bd00000000, 0xe4b2946000000000, 0xd167e44700000000,
2581
+ 0x54be729a00000000, 0x9ad2b82700000000, 0x1f0b2efa00000000,
2582
+ 0x470d5d8700000000, 0xc2d4cb5a00000000, 0x0cb801e700000000,
2583
+ 0x8961973a00000000, 0x6612e0a900000000, 0xe3cb767400000000,
2584
+ 0x2da7bcc900000000, 0xa87e2a1400000000, 0xf078596900000000,
2585
+ 0x75a1cfb400000000, 0xbbcd050900000000, 0x3e1493d400000000,
2586
+ 0x0bc1e3f300000000, 0x8e18752e00000000, 0x4074bf9300000000,
2587
+ 0xc5ad294e00000000, 0x9dab5a3300000000, 0x1872ccee00000000,
2588
+ 0xd61e065300000000, 0x53c7908e00000000, 0x49ff99ae00000000,
2589
+ 0xcc260f7300000000, 0x024ac5ce00000000, 0x8793531300000000,
2590
+ 0xdf95206e00000000, 0x5a4cb6b300000000, 0x94207c0e00000000,
2591
+ 0x11f9ead300000000, 0x242c9af400000000, 0xa1f50c2900000000,
2592
+ 0x6f99c69400000000, 0xea40504900000000, 0xb246233400000000,
2593
+ 0x379fb5e900000000, 0xf9f37f5400000000, 0x7c2ae98900000000,
2594
+ 0x93599e1a00000000, 0x168008c700000000, 0xd8ecc27a00000000,
2595
+ 0x5d3554a700000000, 0x053327da00000000, 0x80eab10700000000,
2596
+ 0x4e867bba00000000, 0xcb5fed6700000000, 0xfe8a9d4000000000,
2597
+ 0x7b530b9d00000000, 0xb53fc12000000000, 0x30e657fd00000000,
2598
+ 0x68e0248000000000, 0xed39b25d00000000, 0x235578e000000000,
2599
+ 0xa68cee3d00000000},
2600
+ {0x0000000000000000, 0x76e10f9d00000000, 0xadc46ee100000000,
2601
+ 0xdb25617c00000000, 0x1b8fac1900000000, 0x6d6ea38400000000,
2602
+ 0xb64bc2f800000000, 0xc0aacd6500000000, 0x361e593300000000,
2603
+ 0x40ff56ae00000000, 0x9bda37d200000000, 0xed3b384f00000000,
2604
+ 0x2d91f52a00000000, 0x5b70fab700000000, 0x80559bcb00000000,
2605
+ 0xf6b4945600000000, 0x6c3cb26600000000, 0x1addbdfb00000000,
2606
+ 0xc1f8dc8700000000, 0xb719d31a00000000, 0x77b31e7f00000000,
2607
+ 0x015211e200000000, 0xda77709e00000000, 0xac967f0300000000,
2608
+ 0x5a22eb5500000000, 0x2cc3e4c800000000, 0xf7e685b400000000,
2609
+ 0x81078a2900000000, 0x41ad474c00000000, 0x374c48d100000000,
2610
+ 0xec6929ad00000000, 0x9a88263000000000, 0xd87864cd00000000,
2611
+ 0xae996b5000000000, 0x75bc0a2c00000000, 0x035d05b100000000,
2612
+ 0xc3f7c8d400000000, 0xb516c74900000000, 0x6e33a63500000000,
2613
+ 0x18d2a9a800000000, 0xee663dfe00000000, 0x9887326300000000,
2614
+ 0x43a2531f00000000, 0x35435c8200000000, 0xf5e991e700000000,
2615
+ 0x83089e7a00000000, 0x582dff0600000000, 0x2eccf09b00000000,
2616
+ 0xb444d6ab00000000, 0xc2a5d93600000000, 0x1980b84a00000000,
2617
+ 0x6f61b7d700000000, 0xafcb7ab200000000, 0xd92a752f00000000,
2618
+ 0x020f145300000000, 0x74ee1bce00000000, 0x825a8f9800000000,
2619
+ 0xf4bb800500000000, 0x2f9ee17900000000, 0x597feee400000000,
2620
+ 0x99d5238100000000, 0xef342c1c00000000, 0x34114d6000000000,
2621
+ 0x42f042fd00000000, 0xf1f7b94100000000, 0x8716b6dc00000000,
2622
+ 0x5c33d7a000000000, 0x2ad2d83d00000000, 0xea78155800000000,
2623
+ 0x9c991ac500000000, 0x47bc7bb900000000, 0x315d742400000000,
2624
+ 0xc7e9e07200000000, 0xb108efef00000000, 0x6a2d8e9300000000,
2625
+ 0x1ccc810e00000000, 0xdc664c6b00000000, 0xaa8743f600000000,
2626
+ 0x71a2228a00000000, 0x07432d1700000000, 0x9dcb0b2700000000,
2627
+ 0xeb2a04ba00000000, 0x300f65c600000000, 0x46ee6a5b00000000,
2628
+ 0x8644a73e00000000, 0xf0a5a8a300000000, 0x2b80c9df00000000,
2629
+ 0x5d61c64200000000, 0xabd5521400000000, 0xdd345d8900000000,
2630
+ 0x06113cf500000000, 0x70f0336800000000, 0xb05afe0d00000000,
2631
+ 0xc6bbf19000000000, 0x1d9e90ec00000000, 0x6b7f9f7100000000,
2632
+ 0x298fdd8c00000000, 0x5f6ed21100000000, 0x844bb36d00000000,
2633
+ 0xf2aabcf000000000, 0x3200719500000000, 0x44e17e0800000000,
2634
+ 0x9fc41f7400000000, 0xe92510e900000000, 0x1f9184bf00000000,
2635
+ 0x69708b2200000000, 0xb255ea5e00000000, 0xc4b4e5c300000000,
2636
+ 0x041e28a600000000, 0x72ff273b00000000, 0xa9da464700000000,
2637
+ 0xdf3b49da00000000, 0x45b36fea00000000, 0x3352607700000000,
2638
+ 0xe877010b00000000, 0x9e960e9600000000, 0x5e3cc3f300000000,
2639
+ 0x28ddcc6e00000000, 0xf3f8ad1200000000, 0x8519a28f00000000,
2640
+ 0x73ad36d900000000, 0x054c394400000000, 0xde69583800000000,
2641
+ 0xa88857a500000000, 0x68229ac000000000, 0x1ec3955d00000000,
2642
+ 0xc5e6f42100000000, 0xb307fbbc00000000, 0xe2ef738300000000,
2643
+ 0x940e7c1e00000000, 0x4f2b1d6200000000, 0x39ca12ff00000000,
2644
+ 0xf960df9a00000000, 0x8f81d00700000000, 0x54a4b17b00000000,
2645
+ 0x2245bee600000000, 0xd4f12ab000000000, 0xa210252d00000000,
2646
+ 0x7935445100000000, 0x0fd44bcc00000000, 0xcf7e86a900000000,
2647
+ 0xb99f893400000000, 0x62bae84800000000, 0x145be7d500000000,
2648
+ 0x8ed3c1e500000000, 0xf832ce7800000000, 0x2317af0400000000,
2649
+ 0x55f6a09900000000, 0x955c6dfc00000000, 0xe3bd626100000000,
2650
+ 0x3898031d00000000, 0x4e790c8000000000, 0xb8cd98d600000000,
2651
+ 0xce2c974b00000000, 0x1509f63700000000, 0x63e8f9aa00000000,
2652
+ 0xa34234cf00000000, 0xd5a33b5200000000, 0x0e865a2e00000000,
2653
+ 0x786755b300000000, 0x3a97174e00000000, 0x4c7618d300000000,
2654
+ 0x975379af00000000, 0xe1b2763200000000, 0x2118bb5700000000,
2655
+ 0x57f9b4ca00000000, 0x8cdcd5b600000000, 0xfa3dda2b00000000,
2656
+ 0x0c894e7d00000000, 0x7a6841e000000000, 0xa14d209c00000000,
2657
+ 0xd7ac2f0100000000, 0x1706e26400000000, 0x61e7edf900000000,
2658
+ 0xbac28c8500000000, 0xcc23831800000000, 0x56aba52800000000,
2659
+ 0x204aaab500000000, 0xfb6fcbc900000000, 0x8d8ec45400000000,
2660
+ 0x4d24093100000000, 0x3bc506ac00000000, 0xe0e067d000000000,
2661
+ 0x9601684d00000000, 0x60b5fc1b00000000, 0x1654f38600000000,
2662
+ 0xcd7192fa00000000, 0xbb909d6700000000, 0x7b3a500200000000,
2663
+ 0x0ddb5f9f00000000, 0xd6fe3ee300000000, 0xa01f317e00000000,
2664
+ 0x1318cac200000000, 0x65f9c55f00000000, 0xbedca42300000000,
2665
+ 0xc83dabbe00000000, 0x089766db00000000, 0x7e76694600000000,
2666
+ 0xa553083a00000000, 0xd3b207a700000000, 0x250693f100000000,
2667
+ 0x53e79c6c00000000, 0x88c2fd1000000000, 0xfe23f28d00000000,
2668
+ 0x3e893fe800000000, 0x4868307500000000, 0x934d510900000000,
2669
+ 0xe5ac5e9400000000, 0x7f2478a400000000, 0x09c5773900000000,
2670
+ 0xd2e0164500000000, 0xa40119d800000000, 0x64abd4bd00000000,
2671
+ 0x124adb2000000000, 0xc96fba5c00000000, 0xbf8eb5c100000000,
2672
+ 0x493a219700000000, 0x3fdb2e0a00000000, 0xe4fe4f7600000000,
2673
+ 0x921f40eb00000000, 0x52b58d8e00000000, 0x2454821300000000,
2674
+ 0xff71e36f00000000, 0x8990ecf200000000, 0xcb60ae0f00000000,
2675
+ 0xbd81a19200000000, 0x66a4c0ee00000000, 0x1045cf7300000000,
2676
+ 0xd0ef021600000000, 0xa60e0d8b00000000, 0x7d2b6cf700000000,
2677
+ 0x0bca636a00000000, 0xfd7ef73c00000000, 0x8b9ff8a100000000,
2678
+ 0x50ba99dd00000000, 0x265b964000000000, 0xe6f15b2500000000,
2679
+ 0x901054b800000000, 0x4b3535c400000000, 0x3dd43a5900000000,
2680
+ 0xa75c1c6900000000, 0xd1bd13f400000000, 0x0a98728800000000,
2681
+ 0x7c797d1500000000, 0xbcd3b07000000000, 0xca32bfed00000000,
2682
+ 0x1117de9100000000, 0x67f6d10c00000000, 0x9142455a00000000,
2683
+ 0xe7a34ac700000000, 0x3c862bbb00000000, 0x4a67242600000000,
2684
+ 0x8acde94300000000, 0xfc2ce6de00000000, 0x270987a200000000,
2685
+ 0x51e8883f00000000},
2686
+ {0x0000000000000000, 0xe8dbfbb900000000, 0x91b186a800000000,
2687
+ 0x796a7d1100000000, 0x63657c8a00000000, 0x8bbe873300000000,
2688
+ 0xf2d4fa2200000000, 0x1a0f019b00000000, 0x87cc89cf00000000,
2689
+ 0x6f17727600000000, 0x167d0f6700000000, 0xfea6f4de00000000,
2690
+ 0xe4a9f54500000000, 0x0c720efc00000000, 0x751873ed00000000,
2691
+ 0x9dc3885400000000, 0x4f9f624400000000, 0xa74499fd00000000,
2692
+ 0xde2ee4ec00000000, 0x36f51f5500000000, 0x2cfa1ece00000000,
2693
+ 0xc421e57700000000, 0xbd4b986600000000, 0x559063df00000000,
2694
+ 0xc853eb8b00000000, 0x2088103200000000, 0x59e26d2300000000,
2695
+ 0xb139969a00000000, 0xab36970100000000, 0x43ed6cb800000000,
2696
+ 0x3a8711a900000000, 0xd25cea1000000000, 0x9e3ec58800000000,
2697
+ 0x76e53e3100000000, 0x0f8f432000000000, 0xe754b89900000000,
2698
+ 0xfd5bb90200000000, 0x158042bb00000000, 0x6cea3faa00000000,
2699
+ 0x8431c41300000000, 0x19f24c4700000000, 0xf129b7fe00000000,
2700
+ 0x8843caef00000000, 0x6098315600000000, 0x7a9730cd00000000,
2701
+ 0x924ccb7400000000, 0xeb26b66500000000, 0x03fd4ddc00000000,
2702
+ 0xd1a1a7cc00000000, 0x397a5c7500000000, 0x4010216400000000,
2703
+ 0xa8cbdadd00000000, 0xb2c4db4600000000, 0x5a1f20ff00000000,
2704
+ 0x23755dee00000000, 0xcbaea65700000000, 0x566d2e0300000000,
2705
+ 0xbeb6d5ba00000000, 0xc7dca8ab00000000, 0x2f07531200000000,
2706
+ 0x3508528900000000, 0xddd3a93000000000, 0xa4b9d42100000000,
2707
+ 0x4c622f9800000000, 0x7d7bfbca00000000, 0x95a0007300000000,
2708
+ 0xecca7d6200000000, 0x041186db00000000, 0x1e1e874000000000,
2709
+ 0xf6c57cf900000000, 0x8faf01e800000000, 0x6774fa5100000000,
2710
+ 0xfab7720500000000, 0x126c89bc00000000, 0x6b06f4ad00000000,
2711
+ 0x83dd0f1400000000, 0x99d20e8f00000000, 0x7109f53600000000,
2712
+ 0x0863882700000000, 0xe0b8739e00000000, 0x32e4998e00000000,
2713
+ 0xda3f623700000000, 0xa3551f2600000000, 0x4b8ee49f00000000,
2714
+ 0x5181e50400000000, 0xb95a1ebd00000000, 0xc03063ac00000000,
2715
+ 0x28eb981500000000, 0xb528104100000000, 0x5df3ebf800000000,
2716
+ 0x249996e900000000, 0xcc426d5000000000, 0xd64d6ccb00000000,
2717
+ 0x3e96977200000000, 0x47fcea6300000000, 0xaf2711da00000000,
2718
+ 0xe3453e4200000000, 0x0b9ec5fb00000000, 0x72f4b8ea00000000,
2719
+ 0x9a2f435300000000, 0x802042c800000000, 0x68fbb97100000000,
2720
+ 0x1191c46000000000, 0xf94a3fd900000000, 0x6489b78d00000000,
2721
+ 0x8c524c3400000000, 0xf538312500000000, 0x1de3ca9c00000000,
2722
+ 0x07eccb0700000000, 0xef3730be00000000, 0x965d4daf00000000,
2723
+ 0x7e86b61600000000, 0xacda5c0600000000, 0x4401a7bf00000000,
2724
+ 0x3d6bdaae00000000, 0xd5b0211700000000, 0xcfbf208c00000000,
2725
+ 0x2764db3500000000, 0x5e0ea62400000000, 0xb6d55d9d00000000,
2726
+ 0x2b16d5c900000000, 0xc3cd2e7000000000, 0xbaa7536100000000,
2727
+ 0x527ca8d800000000, 0x4873a94300000000, 0xa0a852fa00000000,
2728
+ 0xd9c22feb00000000, 0x3119d45200000000, 0xbbf0874e00000000,
2729
+ 0x532b7cf700000000, 0x2a4101e600000000, 0xc29afa5f00000000,
2730
+ 0xd895fbc400000000, 0x304e007d00000000, 0x49247d6c00000000,
2731
+ 0xa1ff86d500000000, 0x3c3c0e8100000000, 0xd4e7f53800000000,
2732
+ 0xad8d882900000000, 0x4556739000000000, 0x5f59720b00000000,
2733
+ 0xb78289b200000000, 0xcee8f4a300000000, 0x26330f1a00000000,
2734
+ 0xf46fe50a00000000, 0x1cb41eb300000000, 0x65de63a200000000,
2735
+ 0x8d05981b00000000, 0x970a998000000000, 0x7fd1623900000000,
2736
+ 0x06bb1f2800000000, 0xee60e49100000000, 0x73a36cc500000000,
2737
+ 0x9b78977c00000000, 0xe212ea6d00000000, 0x0ac911d400000000,
2738
+ 0x10c6104f00000000, 0xf81debf600000000, 0x817796e700000000,
2739
+ 0x69ac6d5e00000000, 0x25ce42c600000000, 0xcd15b97f00000000,
2740
+ 0xb47fc46e00000000, 0x5ca43fd700000000, 0x46ab3e4c00000000,
2741
+ 0xae70c5f500000000, 0xd71ab8e400000000, 0x3fc1435d00000000,
2742
+ 0xa202cb0900000000, 0x4ad930b000000000, 0x33b34da100000000,
2743
+ 0xdb68b61800000000, 0xc167b78300000000, 0x29bc4c3a00000000,
2744
+ 0x50d6312b00000000, 0xb80dca9200000000, 0x6a51208200000000,
2745
+ 0x828adb3b00000000, 0xfbe0a62a00000000, 0x133b5d9300000000,
2746
+ 0x09345c0800000000, 0xe1efa7b100000000, 0x9885daa000000000,
2747
+ 0x705e211900000000, 0xed9da94d00000000, 0x054652f400000000,
2748
+ 0x7c2c2fe500000000, 0x94f7d45c00000000, 0x8ef8d5c700000000,
2749
+ 0x66232e7e00000000, 0x1f49536f00000000, 0xf792a8d600000000,
2750
+ 0xc68b7c8400000000, 0x2e50873d00000000, 0x573afa2c00000000,
2751
+ 0xbfe1019500000000, 0xa5ee000e00000000, 0x4d35fbb700000000,
2752
+ 0x345f86a600000000, 0xdc847d1f00000000, 0x4147f54b00000000,
2753
+ 0xa99c0ef200000000, 0xd0f673e300000000, 0x382d885a00000000,
2754
+ 0x222289c100000000, 0xcaf9727800000000, 0xb3930f6900000000,
2755
+ 0x5b48f4d000000000, 0x89141ec000000000, 0x61cfe57900000000,
2756
+ 0x18a5986800000000, 0xf07e63d100000000, 0xea71624a00000000,
2757
+ 0x02aa99f300000000, 0x7bc0e4e200000000, 0x931b1f5b00000000,
2758
+ 0x0ed8970f00000000, 0xe6036cb600000000, 0x9f6911a700000000,
2759
+ 0x77b2ea1e00000000, 0x6dbdeb8500000000, 0x8566103c00000000,
2760
+ 0xfc0c6d2d00000000, 0x14d7969400000000, 0x58b5b90c00000000,
2761
+ 0xb06e42b500000000, 0xc9043fa400000000, 0x21dfc41d00000000,
2762
+ 0x3bd0c58600000000, 0xd30b3e3f00000000, 0xaa61432e00000000,
2763
+ 0x42bab89700000000, 0xdf7930c300000000, 0x37a2cb7a00000000,
2764
+ 0x4ec8b66b00000000, 0xa6134dd200000000, 0xbc1c4c4900000000,
2765
+ 0x54c7b7f000000000, 0x2dadcae100000000, 0xc576315800000000,
2766
+ 0x172adb4800000000, 0xfff120f100000000, 0x869b5de000000000,
2767
+ 0x6e40a65900000000, 0x744fa7c200000000, 0x9c945c7b00000000,
2768
+ 0xe5fe216a00000000, 0x0d25dad300000000, 0x90e6528700000000,
2769
+ 0x783da93e00000000, 0x0157d42f00000000, 0xe98c2f9600000000,
2770
+ 0xf3832e0d00000000, 0x1b58d5b400000000, 0x6232a8a500000000,
2771
+ 0x8ae9531c00000000},
2772
+ {0x0000000000000000, 0x919168ae00000000, 0x6325a08700000000,
2773
+ 0xf2b4c82900000000, 0x874c31d400000000, 0x16dd597a00000000,
2774
+ 0xe469915300000000, 0x75f8f9fd00000000, 0x4f9f137300000000,
2775
+ 0xde0e7bdd00000000, 0x2cbab3f400000000, 0xbd2bdb5a00000000,
2776
+ 0xc8d322a700000000, 0x59424a0900000000, 0xabf6822000000000,
2777
+ 0x3a67ea8e00000000, 0x9e3e27e600000000, 0x0faf4f4800000000,
2778
+ 0xfd1b876100000000, 0x6c8aefcf00000000, 0x1972163200000000,
2779
+ 0x88e37e9c00000000, 0x7a57b6b500000000, 0xebc6de1b00000000,
2780
+ 0xd1a1349500000000, 0x40305c3b00000000, 0xb284941200000000,
2781
+ 0x2315fcbc00000000, 0x56ed054100000000, 0xc77c6def00000000,
2782
+ 0x35c8a5c600000000, 0xa459cd6800000000, 0x7d7b3f1700000000,
2783
+ 0xecea57b900000000, 0x1e5e9f9000000000, 0x8fcff73e00000000,
2784
+ 0xfa370ec300000000, 0x6ba6666d00000000, 0x9912ae4400000000,
2785
+ 0x0883c6ea00000000, 0x32e42c6400000000, 0xa37544ca00000000,
2786
+ 0x51c18ce300000000, 0xc050e44d00000000, 0xb5a81db000000000,
2787
+ 0x2439751e00000000, 0xd68dbd3700000000, 0x471cd59900000000,
2788
+ 0xe34518f100000000, 0x72d4705f00000000, 0x8060b87600000000,
2789
+ 0x11f1d0d800000000, 0x6409292500000000, 0xf598418b00000000,
2790
+ 0x072c89a200000000, 0x96bde10c00000000, 0xacda0b8200000000,
2791
+ 0x3d4b632c00000000, 0xcfffab0500000000, 0x5e6ec3ab00000000,
2792
+ 0x2b963a5600000000, 0xba0752f800000000, 0x48b39ad100000000,
2793
+ 0xd922f27f00000000, 0xfaf67e2e00000000, 0x6b67168000000000,
2794
+ 0x99d3dea900000000, 0x0842b60700000000, 0x7dba4ffa00000000,
2795
+ 0xec2b275400000000, 0x1e9fef7d00000000, 0x8f0e87d300000000,
2796
+ 0xb5696d5d00000000, 0x24f805f300000000, 0xd64ccdda00000000,
2797
+ 0x47dda57400000000, 0x32255c8900000000, 0xa3b4342700000000,
2798
+ 0x5100fc0e00000000, 0xc09194a000000000, 0x64c859c800000000,
2799
+ 0xf559316600000000, 0x07edf94f00000000, 0x967c91e100000000,
2800
+ 0xe384681c00000000, 0x721500b200000000, 0x80a1c89b00000000,
2801
+ 0x1130a03500000000, 0x2b574abb00000000, 0xbac6221500000000,
2802
+ 0x4872ea3c00000000, 0xd9e3829200000000, 0xac1b7b6f00000000,
2803
+ 0x3d8a13c100000000, 0xcf3edbe800000000, 0x5eafb34600000000,
2804
+ 0x878d413900000000, 0x161c299700000000, 0xe4a8e1be00000000,
2805
+ 0x7539891000000000, 0x00c170ed00000000, 0x9150184300000000,
2806
+ 0x63e4d06a00000000, 0xf275b8c400000000, 0xc812524a00000000,
2807
+ 0x59833ae400000000, 0xab37f2cd00000000, 0x3aa69a6300000000,
2808
+ 0x4f5e639e00000000, 0xdecf0b3000000000, 0x2c7bc31900000000,
2809
+ 0xbdeaabb700000000, 0x19b366df00000000, 0x88220e7100000000,
2810
+ 0x7a96c65800000000, 0xeb07aef600000000, 0x9eff570b00000000,
2811
+ 0x0f6e3fa500000000, 0xfddaf78c00000000, 0x6c4b9f2200000000,
2812
+ 0x562c75ac00000000, 0xc7bd1d0200000000, 0x3509d52b00000000,
2813
+ 0xa498bd8500000000, 0xd160447800000000, 0x40f12cd600000000,
2814
+ 0xb245e4ff00000000, 0x23d48c5100000000, 0xf4edfd5c00000000,
2815
+ 0x657c95f200000000, 0x97c85ddb00000000, 0x0659357500000000,
2816
+ 0x73a1cc8800000000, 0xe230a42600000000, 0x10846c0f00000000,
2817
+ 0x811504a100000000, 0xbb72ee2f00000000, 0x2ae3868100000000,
2818
+ 0xd8574ea800000000, 0x49c6260600000000, 0x3c3edffb00000000,
2819
+ 0xadafb75500000000, 0x5f1b7f7c00000000, 0xce8a17d200000000,
2820
+ 0x6ad3daba00000000, 0xfb42b21400000000, 0x09f67a3d00000000,
2821
+ 0x9867129300000000, 0xed9feb6e00000000, 0x7c0e83c000000000,
2822
+ 0x8eba4be900000000, 0x1f2b234700000000, 0x254cc9c900000000,
2823
+ 0xb4dda16700000000, 0x4669694e00000000, 0xd7f801e000000000,
2824
+ 0xa200f81d00000000, 0x339190b300000000, 0xc125589a00000000,
2825
+ 0x50b4303400000000, 0x8996c24b00000000, 0x1807aae500000000,
2826
+ 0xeab362cc00000000, 0x7b220a6200000000, 0x0edaf39f00000000,
2827
+ 0x9f4b9b3100000000, 0x6dff531800000000, 0xfc6e3bb600000000,
2828
+ 0xc609d13800000000, 0x5798b99600000000, 0xa52c71bf00000000,
2829
+ 0x34bd191100000000, 0x4145e0ec00000000, 0xd0d4884200000000,
2830
+ 0x2260406b00000000, 0xb3f128c500000000, 0x17a8e5ad00000000,
2831
+ 0x86398d0300000000, 0x748d452a00000000, 0xe51c2d8400000000,
2832
+ 0x90e4d47900000000, 0x0175bcd700000000, 0xf3c174fe00000000,
2833
+ 0x62501c5000000000, 0x5837f6de00000000, 0xc9a69e7000000000,
2834
+ 0x3b12565900000000, 0xaa833ef700000000, 0xdf7bc70a00000000,
2835
+ 0x4eeaafa400000000, 0xbc5e678d00000000, 0x2dcf0f2300000000,
2836
+ 0x0e1b837200000000, 0x9f8aebdc00000000, 0x6d3e23f500000000,
2837
+ 0xfcaf4b5b00000000, 0x8957b2a600000000, 0x18c6da0800000000,
2838
+ 0xea72122100000000, 0x7be37a8f00000000, 0x4184900100000000,
2839
+ 0xd015f8af00000000, 0x22a1308600000000, 0xb330582800000000,
2840
+ 0xc6c8a1d500000000, 0x5759c97b00000000, 0xa5ed015200000000,
2841
+ 0x347c69fc00000000, 0x9025a49400000000, 0x01b4cc3a00000000,
2842
+ 0xf300041300000000, 0x62916cbd00000000, 0x1769954000000000,
2843
+ 0x86f8fdee00000000, 0x744c35c700000000, 0xe5dd5d6900000000,
2844
+ 0xdfbab7e700000000, 0x4e2bdf4900000000, 0xbc9f176000000000,
2845
+ 0x2d0e7fce00000000, 0x58f6863300000000, 0xc967ee9d00000000,
2846
+ 0x3bd326b400000000, 0xaa424e1a00000000, 0x7360bc6500000000,
2847
+ 0xe2f1d4cb00000000, 0x10451ce200000000, 0x81d4744c00000000,
2848
+ 0xf42c8db100000000, 0x65bde51f00000000, 0x97092d3600000000,
2849
+ 0x0698459800000000, 0x3cffaf1600000000, 0xad6ec7b800000000,
2850
+ 0x5fda0f9100000000, 0xce4b673f00000000, 0xbbb39ec200000000,
2851
+ 0x2a22f66c00000000, 0xd8963e4500000000, 0x490756eb00000000,
2852
+ 0xed5e9b8300000000, 0x7ccff32d00000000, 0x8e7b3b0400000000,
2853
+ 0x1fea53aa00000000, 0x6a12aa5700000000, 0xfb83c2f900000000,
2854
+ 0x09370ad000000000, 0x98a6627e00000000, 0xa2c188f000000000,
2855
+ 0x3350e05e00000000, 0xc1e4287700000000, 0x507540d900000000,
2856
+ 0x258db92400000000, 0xb41cd18a00000000, 0x46a819a300000000,
2857
+ 0xd739710d00000000}};
2858
+
2859
+#else /* W == 4 */
2860
+
2861
+local const z_crc_t FAR crc_braid_table[][256] = {
2862
+ {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa,
2863
+ 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b,
2864
+ 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232,
2865
+ 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8,
2866
+ 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e,
2867
+ 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa,
2868
+ 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b,
2869
+ 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f,
2870
+ 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719,
2871
+ 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3,
2872
+ 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa,
2873
+ 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b,
2874
+ 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed,
2875
+ 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89,
2876
+ 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25,
2877
+ 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041,
2878
+ 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c,
2879
+ 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed,
2880
+ 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4,
2881
+ 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758,
2882
+ 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e,
2883
+ 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a,
2884
+ 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed,
2885
+ 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889,
2886
+ 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df,
2887
+ 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544,
2888
+ 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d,
2889
+ 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c,
2890
+ 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1,
2891
+ 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95,
2892
+ 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839,
2893
+ 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d,
2894
+ 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976,
2895
+ 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7,
2896
+ 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be,
2897
+ 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144,
2898
+ 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12,
2899
+ 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376,
2900
+ 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a,
2901
+ 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e,
2902
+ 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278,
2903
+ 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682,
2904
+ 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b,
2905
+ 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a,
2906
+ 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561,
2907
+ 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05,
2908
+ 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9,
2909
+ 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd,
2910
+ 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0,
2911
+ 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61,
2912
+ 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678,
2913
+ 0x264b06e6},
2914
+ {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413,
2915
+ 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3,
2916
+ 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d,
2917
+ 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653,
2918
+ 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9,
2919
+ 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e,
2920
+ 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5,
2921
+ 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712,
2922
+ 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8,
2923
+ 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6,
2924
+ 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068,
2925
+ 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8,
2926
+ 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579,
2927
+ 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade,
2928
+ 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37,
2929
+ 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590,
2930
+ 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4,
2931
+ 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64,
2932
+ 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea,
2933
+ 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678,
2934
+ 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282,
2935
+ 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25,
2936
+ 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102,
2937
+ 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5,
2938
+ 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f,
2939
+ 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146,
2940
+ 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8,
2941
+ 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08,
2942
+ 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c,
2943
+ 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b,
2944
+ 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972,
2945
+ 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5,
2946
+ 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d,
2947
+ 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd,
2948
+ 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833,
2949
+ 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d,
2950
+ 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7,
2951
+ 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60,
2952
+ 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2,
2953
+ 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105,
2954
+ 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff,
2955
+ 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1,
2956
+ 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f,
2957
+ 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf,
2958
+ 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617,
2959
+ 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0,
2960
+ 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959,
2961
+ 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe,
2962
+ 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca,
2963
+ 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a,
2964
+ 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184,
2965
+ 0x92364a30},
2966
+ {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216,
2967
+ 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8,
2968
+ 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170,
2969
+ 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035,
2970
+ 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6,
2971
+ 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145,
2972
+ 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d,
2973
+ 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e,
2974
+ 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d,
2975
+ 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408,
2976
+ 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0,
2977
+ 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e,
2978
+ 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c,
2979
+ 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf,
2980
+ 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a,
2981
+ 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9,
2982
+ 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1,
2983
+ 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f,
2984
+ 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987,
2985
+ 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4,
2986
+ 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37,
2987
+ 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84,
2988
+ 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca,
2989
+ 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79,
2990
+ 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba,
2991
+ 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d,
2992
+ 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5,
2993
+ 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b,
2994
+ 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643,
2995
+ 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0,
2996
+ 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525,
2997
+ 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496,
2998
+ 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8,
2999
+ 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026,
3000
+ 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e,
3001
+ 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db,
3002
+ 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118,
3003
+ 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab,
3004
+ 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf,
3005
+ 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c,
3006
+ 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf,
3007
+ 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a,
3008
+ 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32,
3009
+ 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec,
3010
+ 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82,
3011
+ 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31,
3012
+ 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4,
3013
+ 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957,
3014
+ 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f,
3015
+ 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1,
3016
+ 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869,
3017
+ 0xe4c4abcc},
3018
+ {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0,
3019
+ 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271,
3020
+ 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61,
3021
+ 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52,
3022
+ 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43,
3023
+ 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333,
3024
+ 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64,
3025
+ 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314,
3026
+ 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205,
3027
+ 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136,
3028
+ 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26,
3029
+ 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997,
3030
+ 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849,
3031
+ 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739,
3032
+ 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8,
3033
+ 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98,
3034
+ 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b,
3035
+ 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba,
3036
+ 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa,
3037
+ 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d,
3038
+ 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c,
3039
+ 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc,
3040
+ 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af,
3041
+ 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf,
3042
+ 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce,
3043
+ 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922,
3044
+ 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532,
3045
+ 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183,
3046
+ 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710,
3047
+ 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860,
3048
+ 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1,
3049
+ 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1,
3050
+ 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956,
3051
+ 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7,
3052
+ 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7,
3053
+ 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4,
3054
+ 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5,
3055
+ 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5,
3056
+ 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb,
3057
+ 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb,
3058
+ 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da,
3059
+ 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9,
3060
+ 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9,
3061
+ 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48,
3062
+ 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df,
3063
+ 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af,
3064
+ 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e,
3065
+ 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e,
3066
+ 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d,
3067
+ 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c,
3068
+ 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c,
3069
+ 0xca64c78c}};
3070
+
3071
+local const z_word_t FAR crc_braid_big_table[][256] = {
3072
+ {0x00000000, 0xb029603d, 0x6053c07a, 0xd07aa047, 0xc0a680f5,
3073
+ 0x708fe0c8, 0xa0f5408f, 0x10dc20b2, 0xc14b7030, 0x7162100d,
3074
+ 0xa118b04a, 0x1131d077, 0x01edf0c5, 0xb1c490f8, 0x61be30bf,
3075
+ 0xd1975082, 0x8297e060, 0x32be805d, 0xe2c4201a, 0x52ed4027,
3076
+ 0x42316095, 0xf21800a8, 0x2262a0ef, 0x924bc0d2, 0x43dc9050,
3077
+ 0xf3f5f06d, 0x238f502a, 0x93a63017, 0x837a10a5, 0x33537098,
3078
+ 0xe329d0df, 0x5300b0e2, 0x042fc1c1, 0xb406a1fc, 0x647c01bb,
3079
+ 0xd4556186, 0xc4894134, 0x74a02109, 0xa4da814e, 0x14f3e173,
3080
+ 0xc564b1f1, 0x754dd1cc, 0xa537718b, 0x151e11b6, 0x05c23104,
3081
+ 0xb5eb5139, 0x6591f17e, 0xd5b89143, 0x86b821a1, 0x3691419c,
3082
+ 0xe6ebe1db, 0x56c281e6, 0x461ea154, 0xf637c169, 0x264d612e,
3083
+ 0x96640113, 0x47f35191, 0xf7da31ac, 0x27a091eb, 0x9789f1d6,
3084
+ 0x8755d164, 0x377cb159, 0xe706111e, 0x572f7123, 0x4958f358,
3085
+ 0xf9719365, 0x290b3322, 0x9922531f, 0x89fe73ad, 0x39d71390,
3086
+ 0xe9adb3d7, 0x5984d3ea, 0x88138368, 0x383ae355, 0xe8404312,
3087
+ 0x5869232f, 0x48b5039d, 0xf89c63a0, 0x28e6c3e7, 0x98cfa3da,
3088
+ 0xcbcf1338, 0x7be67305, 0xab9cd342, 0x1bb5b37f, 0x0b6993cd,
3089
+ 0xbb40f3f0, 0x6b3a53b7, 0xdb13338a, 0x0a846308, 0xbaad0335,
3090
+ 0x6ad7a372, 0xdafec34f, 0xca22e3fd, 0x7a0b83c0, 0xaa712387,
3091
+ 0x1a5843ba, 0x4d773299, 0xfd5e52a4, 0x2d24f2e3, 0x9d0d92de,
3092
+ 0x8dd1b26c, 0x3df8d251, 0xed827216, 0x5dab122b, 0x8c3c42a9,
3093
+ 0x3c152294, 0xec6f82d3, 0x5c46e2ee, 0x4c9ac25c, 0xfcb3a261,
3094
+ 0x2cc90226, 0x9ce0621b, 0xcfe0d2f9, 0x7fc9b2c4, 0xafb31283,
3095
+ 0x1f9a72be, 0x0f46520c, 0xbf6f3231, 0x6f159276, 0xdf3cf24b,
3096
+ 0x0eaba2c9, 0xbe82c2f4, 0x6ef862b3, 0xded1028e, 0xce0d223c,
3097
+ 0x7e244201, 0xae5ee246, 0x1e77827b, 0x92b0e6b1, 0x2299868c,
3098
+ 0xf2e326cb, 0x42ca46f6, 0x52166644, 0xe23f0679, 0x3245a63e,
3099
+ 0x826cc603, 0x53fb9681, 0xe3d2f6bc, 0x33a856fb, 0x838136c6,
3100
+ 0x935d1674, 0x23747649, 0xf30ed60e, 0x4327b633, 0x102706d1,
3101
+ 0xa00e66ec, 0x7074c6ab, 0xc05da696, 0xd0818624, 0x60a8e619,
3102
+ 0xb0d2465e, 0x00fb2663, 0xd16c76e1, 0x614516dc, 0xb13fb69b,
3103
+ 0x0116d6a6, 0x11caf614, 0xa1e39629, 0x7199366e, 0xc1b05653,
3104
+ 0x969f2770, 0x26b6474d, 0xf6cce70a, 0x46e58737, 0x5639a785,
3105
+ 0xe610c7b8, 0x366a67ff, 0x864307c2, 0x57d45740, 0xe7fd377d,
3106
+ 0x3787973a, 0x87aef707, 0x9772d7b5, 0x275bb788, 0xf72117cf,
3107
+ 0x470877f2, 0x1408c710, 0xa421a72d, 0x745b076a, 0xc4726757,
3108
+ 0xd4ae47e5, 0x648727d8, 0xb4fd879f, 0x04d4e7a2, 0xd543b720,
3109
+ 0x656ad71d, 0xb510775a, 0x05391767, 0x15e537d5, 0xa5cc57e8,
3110
+ 0x75b6f7af, 0xc59f9792, 0xdbe815e9, 0x6bc175d4, 0xbbbbd593,
3111
+ 0x0b92b5ae, 0x1b4e951c, 0xab67f521, 0x7b1d5566, 0xcb34355b,
3112
+ 0x1aa365d9, 0xaa8a05e4, 0x7af0a5a3, 0xcad9c59e, 0xda05e52c,
3113
+ 0x6a2c8511, 0xba562556, 0x0a7f456b, 0x597ff589, 0xe95695b4,
3114
+ 0x392c35f3, 0x890555ce, 0x99d9757c, 0x29f01541, 0xf98ab506,
3115
+ 0x49a3d53b, 0x983485b9, 0x281de584, 0xf86745c3, 0x484e25fe,
3116
+ 0x5892054c, 0xe8bb6571, 0x38c1c536, 0x88e8a50b, 0xdfc7d428,
3117
+ 0x6feeb415, 0xbf941452, 0x0fbd746f, 0x1f6154dd, 0xaf4834e0,
3118
+ 0x7f3294a7, 0xcf1bf49a, 0x1e8ca418, 0xaea5c425, 0x7edf6462,
3119
+ 0xcef6045f, 0xde2a24ed, 0x6e0344d0, 0xbe79e497, 0x0e5084aa,
3120
+ 0x5d503448, 0xed795475, 0x3d03f432, 0x8d2a940f, 0x9df6b4bd,
3121
+ 0x2ddfd480, 0xfda574c7, 0x4d8c14fa, 0x9c1b4478, 0x2c322445,
3122
+ 0xfc488402, 0x4c61e43f, 0x5cbdc48d, 0xec94a4b0, 0x3cee04f7,
3123
+ 0x8cc764ca},
3124
+ {0x00000000, 0xa5d35ccb, 0x0ba1c84d, 0xae729486, 0x1642919b,
3125
+ 0xb391cd50, 0x1de359d6, 0xb830051d, 0x6d8253ec, 0xc8510f27,
3126
+ 0x66239ba1, 0xc3f0c76a, 0x7bc0c277, 0xde139ebc, 0x70610a3a,
3127
+ 0xd5b256f1, 0x9b02d603, 0x3ed18ac8, 0x90a31e4e, 0x35704285,
3128
+ 0x8d404798, 0x28931b53, 0x86e18fd5, 0x2332d31e, 0xf68085ef,
3129
+ 0x5353d924, 0xfd214da2, 0x58f21169, 0xe0c21474, 0x451148bf,
3130
+ 0xeb63dc39, 0x4eb080f2, 0x3605ac07, 0x93d6f0cc, 0x3da4644a,
3131
+ 0x98773881, 0x20473d9c, 0x85946157, 0x2be6f5d1, 0x8e35a91a,
3132
+ 0x5b87ffeb, 0xfe54a320, 0x502637a6, 0xf5f56b6d, 0x4dc56e70,
3133
+ 0xe81632bb, 0x4664a63d, 0xe3b7faf6, 0xad077a04, 0x08d426cf,
3134
+ 0xa6a6b249, 0x0375ee82, 0xbb45eb9f, 0x1e96b754, 0xb0e423d2,
3135
+ 0x15377f19, 0xc08529e8, 0x65567523, 0xcb24e1a5, 0x6ef7bd6e,
3136
+ 0xd6c7b873, 0x7314e4b8, 0xdd66703e, 0x78b52cf5, 0x6c0a580f,
3137
+ 0xc9d904c4, 0x67ab9042, 0xc278cc89, 0x7a48c994, 0xdf9b955f,
3138
+ 0x71e901d9, 0xd43a5d12, 0x01880be3, 0xa45b5728, 0x0a29c3ae,
3139
+ 0xaffa9f65, 0x17ca9a78, 0xb219c6b3, 0x1c6b5235, 0xb9b80efe,
3140
+ 0xf7088e0c, 0x52dbd2c7, 0xfca94641, 0x597a1a8a, 0xe14a1f97,
3141
+ 0x4499435c, 0xeaebd7da, 0x4f388b11, 0x9a8adde0, 0x3f59812b,
3142
+ 0x912b15ad, 0x34f84966, 0x8cc84c7b, 0x291b10b0, 0x87698436,
3143
+ 0x22bad8fd, 0x5a0ff408, 0xffdca8c3, 0x51ae3c45, 0xf47d608e,
3144
+ 0x4c4d6593, 0xe99e3958, 0x47ecadde, 0xe23ff115, 0x378da7e4,
3145
+ 0x925efb2f, 0x3c2c6fa9, 0x99ff3362, 0x21cf367f, 0x841c6ab4,
3146
+ 0x2a6efe32, 0x8fbda2f9, 0xc10d220b, 0x64de7ec0, 0xcaacea46,
3147
+ 0x6f7fb68d, 0xd74fb390, 0x729cef5b, 0xdcee7bdd, 0x793d2716,
3148
+ 0xac8f71e7, 0x095c2d2c, 0xa72eb9aa, 0x02fde561, 0xbacde07c,
3149
+ 0x1f1ebcb7, 0xb16c2831, 0x14bf74fa, 0xd814b01e, 0x7dc7ecd5,
3150
+ 0xd3b57853, 0x76662498, 0xce562185, 0x6b857d4e, 0xc5f7e9c8,
3151
+ 0x6024b503, 0xb596e3f2, 0x1045bf39, 0xbe372bbf, 0x1be47774,
3152
+ 0xa3d47269, 0x06072ea2, 0xa875ba24, 0x0da6e6ef, 0x4316661d,
3153
+ 0xe6c53ad6, 0x48b7ae50, 0xed64f29b, 0x5554f786, 0xf087ab4d,
3154
+ 0x5ef53fcb, 0xfb266300, 0x2e9435f1, 0x8b47693a, 0x2535fdbc,
3155
+ 0x80e6a177, 0x38d6a46a, 0x9d05f8a1, 0x33776c27, 0x96a430ec,
3156
+ 0xee111c19, 0x4bc240d2, 0xe5b0d454, 0x4063889f, 0xf8538d82,
3157
+ 0x5d80d149, 0xf3f245cf, 0x56211904, 0x83934ff5, 0x2640133e,
3158
+ 0x883287b8, 0x2de1db73, 0x95d1de6e, 0x300282a5, 0x9e701623,
3159
+ 0x3ba34ae8, 0x7513ca1a, 0xd0c096d1, 0x7eb20257, 0xdb615e9c,
3160
+ 0x63515b81, 0xc682074a, 0x68f093cc, 0xcd23cf07, 0x189199f6,
3161
+ 0xbd42c53d, 0x133051bb, 0xb6e30d70, 0x0ed3086d, 0xab0054a6,
3162
+ 0x0572c020, 0xa0a19ceb, 0xb41ee811, 0x11cdb4da, 0xbfbf205c,
3163
+ 0x1a6c7c97, 0xa25c798a, 0x078f2541, 0xa9fdb1c7, 0x0c2eed0c,
3164
+ 0xd99cbbfd, 0x7c4fe736, 0xd23d73b0, 0x77ee2f7b, 0xcfde2a66,
3165
+ 0x6a0d76ad, 0xc47fe22b, 0x61acbee0, 0x2f1c3e12, 0x8acf62d9,
3166
+ 0x24bdf65f, 0x816eaa94, 0x395eaf89, 0x9c8df342, 0x32ff67c4,
3167
+ 0x972c3b0f, 0x429e6dfe, 0xe74d3135, 0x493fa5b3, 0xececf978,
3168
+ 0x54dcfc65, 0xf10fa0ae, 0x5f7d3428, 0xfaae68e3, 0x821b4416,
3169
+ 0x27c818dd, 0x89ba8c5b, 0x2c69d090, 0x9459d58d, 0x318a8946,
3170
+ 0x9ff81dc0, 0x3a2b410b, 0xef9917fa, 0x4a4a4b31, 0xe438dfb7,
3171
+ 0x41eb837c, 0xf9db8661, 0x5c08daaa, 0xf27a4e2c, 0x57a912e7,
3172
+ 0x19199215, 0xbccacede, 0x12b85a58, 0xb76b0693, 0x0f5b038e,
3173
+ 0xaa885f45, 0x04facbc3, 0xa1299708, 0x749bc1f9, 0xd1489d32,
3174
+ 0x7f3a09b4, 0xdae9557f, 0x62d95062, 0xc70a0ca9, 0x6978982f,
3175
+ 0xccabc4e4},
3176
+ {0x00000000, 0xb40b77a6, 0x29119f97, 0x9d1ae831, 0x13244ff4,
3177
+ 0xa72f3852, 0x3a35d063, 0x8e3ea7c5, 0x674eef33, 0xd3459895,
3178
+ 0x4e5f70a4, 0xfa540702, 0x746aa0c7, 0xc061d761, 0x5d7b3f50,
3179
+ 0xe97048f6, 0xce9cde67, 0x7a97a9c1, 0xe78d41f0, 0x53863656,
3180
+ 0xddb89193, 0x69b3e635, 0xf4a90e04, 0x40a279a2, 0xa9d23154,
3181
+ 0x1dd946f2, 0x80c3aec3, 0x34c8d965, 0xbaf67ea0, 0x0efd0906,
3182
+ 0x93e7e137, 0x27ec9691, 0x9c39bdcf, 0x2832ca69, 0xb5282258,
3183
+ 0x012355fe, 0x8f1df23b, 0x3b16859d, 0xa60c6dac, 0x12071a0a,
3184
+ 0xfb7752fc, 0x4f7c255a, 0xd266cd6b, 0x666dbacd, 0xe8531d08,
3185
+ 0x5c586aae, 0xc142829f, 0x7549f539, 0x52a563a8, 0xe6ae140e,
3186
+ 0x7bb4fc3f, 0xcfbf8b99, 0x41812c5c, 0xf58a5bfa, 0x6890b3cb,
3187
+ 0xdc9bc46d, 0x35eb8c9b, 0x81e0fb3d, 0x1cfa130c, 0xa8f164aa,
3188
+ 0x26cfc36f, 0x92c4b4c9, 0x0fde5cf8, 0xbbd52b5e, 0x79750b44,
3189
+ 0xcd7e7ce2, 0x506494d3, 0xe46fe375, 0x6a5144b0, 0xde5a3316,
3190
+ 0x4340db27, 0xf74bac81, 0x1e3be477, 0xaa3093d1, 0x372a7be0,
3191
+ 0x83210c46, 0x0d1fab83, 0xb914dc25, 0x240e3414, 0x900543b2,
3192
+ 0xb7e9d523, 0x03e2a285, 0x9ef84ab4, 0x2af33d12, 0xa4cd9ad7,
3193
+ 0x10c6ed71, 0x8ddc0540, 0x39d772e6, 0xd0a73a10, 0x64ac4db6,
3194
+ 0xf9b6a587, 0x4dbdd221, 0xc38375e4, 0x77880242, 0xea92ea73,
3195
+ 0x5e999dd5, 0xe54cb68b, 0x5147c12d, 0xcc5d291c, 0x78565eba,
3196
+ 0xf668f97f, 0x42638ed9, 0xdf7966e8, 0x6b72114e, 0x820259b8,
3197
+ 0x36092e1e, 0xab13c62f, 0x1f18b189, 0x9126164c, 0x252d61ea,
3198
+ 0xb83789db, 0x0c3cfe7d, 0x2bd068ec, 0x9fdb1f4a, 0x02c1f77b,
3199
+ 0xb6ca80dd, 0x38f42718, 0x8cff50be, 0x11e5b88f, 0xa5eecf29,
3200
+ 0x4c9e87df, 0xf895f079, 0x658f1848, 0xd1846fee, 0x5fbac82b,
3201
+ 0xebb1bf8d, 0x76ab57bc, 0xc2a0201a, 0xf2ea1688, 0x46e1612e,
3202
+ 0xdbfb891f, 0x6ff0feb9, 0xe1ce597c, 0x55c52eda, 0xc8dfc6eb,
3203
+ 0x7cd4b14d, 0x95a4f9bb, 0x21af8e1d, 0xbcb5662c, 0x08be118a,
3204
+ 0x8680b64f, 0x328bc1e9, 0xaf9129d8, 0x1b9a5e7e, 0x3c76c8ef,
3205
+ 0x887dbf49, 0x15675778, 0xa16c20de, 0x2f52871b, 0x9b59f0bd,
3206
+ 0x0643188c, 0xb2486f2a, 0x5b3827dc, 0xef33507a, 0x7229b84b,
3207
+ 0xc622cfed, 0x481c6828, 0xfc171f8e, 0x610df7bf, 0xd5068019,
3208
+ 0x6ed3ab47, 0xdad8dce1, 0x47c234d0, 0xf3c94376, 0x7df7e4b3,
3209
+ 0xc9fc9315, 0x54e67b24, 0xe0ed0c82, 0x099d4474, 0xbd9633d2,
3210
+ 0x208cdbe3, 0x9487ac45, 0x1ab90b80, 0xaeb27c26, 0x33a89417,
3211
+ 0x87a3e3b1, 0xa04f7520, 0x14440286, 0x895eeab7, 0x3d559d11,
3212
+ 0xb36b3ad4, 0x07604d72, 0x9a7aa543, 0x2e71d2e5, 0xc7019a13,
3213
+ 0x730aedb5, 0xee100584, 0x5a1b7222, 0xd425d5e7, 0x602ea241,
3214
+ 0xfd344a70, 0x493f3dd6, 0x8b9f1dcc, 0x3f946a6a, 0xa28e825b,
3215
+ 0x1685f5fd, 0x98bb5238, 0x2cb0259e, 0xb1aacdaf, 0x05a1ba09,
3216
+ 0xecd1f2ff, 0x58da8559, 0xc5c06d68, 0x71cb1ace, 0xfff5bd0b,
3217
+ 0x4bfecaad, 0xd6e4229c, 0x62ef553a, 0x4503c3ab, 0xf108b40d,
3218
+ 0x6c125c3c, 0xd8192b9a, 0x56278c5f, 0xe22cfbf9, 0x7f3613c8,
3219
+ 0xcb3d646e, 0x224d2c98, 0x96465b3e, 0x0b5cb30f, 0xbf57c4a9,
3220
+ 0x3169636c, 0x856214ca, 0x1878fcfb, 0xac738b5d, 0x17a6a003,
3221
+ 0xa3add7a5, 0x3eb73f94, 0x8abc4832, 0x0482eff7, 0xb0899851,
3222
+ 0x2d937060, 0x999807c6, 0x70e84f30, 0xc4e33896, 0x59f9d0a7,
3223
+ 0xedf2a701, 0x63cc00c4, 0xd7c77762, 0x4add9f53, 0xfed6e8f5,
3224
+ 0xd93a7e64, 0x6d3109c2, 0xf02be1f3, 0x44209655, 0xca1e3190,
3225
+ 0x7e154636, 0xe30fae07, 0x5704d9a1, 0xbe749157, 0x0a7fe6f1,
3226
+ 0x97650ec0, 0x236e7966, 0xad50dea3, 0x195ba905, 0x84414134,
3227
+ 0x304a3692},
3228
+ {0x00000000, 0x9e00aacc, 0x7d072542, 0xe3078f8e, 0xfa0e4a84,
3229
+ 0x640ee048, 0x87096fc6, 0x1909c50a, 0xb51be5d3, 0x2b1b4f1f,
3230
+ 0xc81cc091, 0x561c6a5d, 0x4f15af57, 0xd115059b, 0x32128a15,
3231
+ 0xac1220d9, 0x2b31bb7c, 0xb53111b0, 0x56369e3e, 0xc83634f2,
3232
+ 0xd13ff1f8, 0x4f3f5b34, 0xac38d4ba, 0x32387e76, 0x9e2a5eaf,
3233
+ 0x002af463, 0xe32d7bed, 0x7d2dd121, 0x6424142b, 0xfa24bee7,
3234
+ 0x19233169, 0x87239ba5, 0x566276f9, 0xc862dc35, 0x2b6553bb,
3235
+ 0xb565f977, 0xac6c3c7d, 0x326c96b1, 0xd16b193f, 0x4f6bb3f3,
3236
+ 0xe379932a, 0x7d7939e6, 0x9e7eb668, 0x007e1ca4, 0x1977d9ae,
3237
+ 0x87777362, 0x6470fcec, 0xfa705620, 0x7d53cd85, 0xe3536749,
3238
+ 0x0054e8c7, 0x9e54420b, 0x875d8701, 0x195d2dcd, 0xfa5aa243,
3239
+ 0x645a088f, 0xc8482856, 0x5648829a, 0xb54f0d14, 0x2b4fa7d8,
3240
+ 0x324662d2, 0xac46c81e, 0x4f414790, 0xd141ed5c, 0xedc29d29,
3241
+ 0x73c237e5, 0x90c5b86b, 0x0ec512a7, 0x17ccd7ad, 0x89cc7d61,
3242
+ 0x6acbf2ef, 0xf4cb5823, 0x58d978fa, 0xc6d9d236, 0x25de5db8,
3243
+ 0xbbdef774, 0xa2d7327e, 0x3cd798b2, 0xdfd0173c, 0x41d0bdf0,
3244
+ 0xc6f32655, 0x58f38c99, 0xbbf40317, 0x25f4a9db, 0x3cfd6cd1,
3245
+ 0xa2fdc61d, 0x41fa4993, 0xdffae35f, 0x73e8c386, 0xede8694a,
3246
+ 0x0eefe6c4, 0x90ef4c08, 0x89e68902, 0x17e623ce, 0xf4e1ac40,
3247
+ 0x6ae1068c, 0xbba0ebd0, 0x25a0411c, 0xc6a7ce92, 0x58a7645e,
3248
+ 0x41aea154, 0xdfae0b98, 0x3ca98416, 0xa2a92eda, 0x0ebb0e03,
3249
+ 0x90bba4cf, 0x73bc2b41, 0xedbc818d, 0xf4b54487, 0x6ab5ee4b,
3250
+ 0x89b261c5, 0x17b2cb09, 0x909150ac, 0x0e91fa60, 0xed9675ee,
3251
+ 0x7396df22, 0x6a9f1a28, 0xf49fb0e4, 0x17983f6a, 0x899895a6,
3252
+ 0x258ab57f, 0xbb8a1fb3, 0x588d903d, 0xc68d3af1, 0xdf84fffb,
3253
+ 0x41845537, 0xa283dab9, 0x3c837075, 0xda853b53, 0x4485919f,
3254
+ 0xa7821e11, 0x3982b4dd, 0x208b71d7, 0xbe8bdb1b, 0x5d8c5495,
3255
+ 0xc38cfe59, 0x6f9ede80, 0xf19e744c, 0x1299fbc2, 0x8c99510e,
3256
+ 0x95909404, 0x0b903ec8, 0xe897b146, 0x76971b8a, 0xf1b4802f,
3257
+ 0x6fb42ae3, 0x8cb3a56d, 0x12b30fa1, 0x0bbacaab, 0x95ba6067,
3258
+ 0x76bdefe9, 0xe8bd4525, 0x44af65fc, 0xdaafcf30, 0x39a840be,
3259
+ 0xa7a8ea72, 0xbea12f78, 0x20a185b4, 0xc3a60a3a, 0x5da6a0f6,
3260
+ 0x8ce74daa, 0x12e7e766, 0xf1e068e8, 0x6fe0c224, 0x76e9072e,
3261
+ 0xe8e9ade2, 0x0bee226c, 0x95ee88a0, 0x39fca879, 0xa7fc02b5,
3262
+ 0x44fb8d3b, 0xdafb27f7, 0xc3f2e2fd, 0x5df24831, 0xbef5c7bf,
3263
+ 0x20f56d73, 0xa7d6f6d6, 0x39d65c1a, 0xdad1d394, 0x44d17958,
3264
+ 0x5dd8bc52, 0xc3d8169e, 0x20df9910, 0xbedf33dc, 0x12cd1305,
3265
+ 0x8ccdb9c9, 0x6fca3647, 0xf1ca9c8b, 0xe8c35981, 0x76c3f34d,
3266
+ 0x95c47cc3, 0x0bc4d60f, 0x3747a67a, 0xa9470cb6, 0x4a408338,
3267
+ 0xd44029f4, 0xcd49ecfe, 0x53494632, 0xb04ec9bc, 0x2e4e6370,
3268
+ 0x825c43a9, 0x1c5ce965, 0xff5b66eb, 0x615bcc27, 0x7852092d,
3269
+ 0xe652a3e1, 0x05552c6f, 0x9b5586a3, 0x1c761d06, 0x8276b7ca,
3270
+ 0x61713844, 0xff719288, 0xe6785782, 0x7878fd4e, 0x9b7f72c0,
3271
+ 0x057fd80c, 0xa96df8d5, 0x376d5219, 0xd46add97, 0x4a6a775b,
3272
+ 0x5363b251, 0xcd63189d, 0x2e649713, 0xb0643ddf, 0x6125d083,
3273
+ 0xff257a4f, 0x1c22f5c1, 0x82225f0d, 0x9b2b9a07, 0x052b30cb,
3274
+ 0xe62cbf45, 0x782c1589, 0xd43e3550, 0x4a3e9f9c, 0xa9391012,
3275
+ 0x3739bade, 0x2e307fd4, 0xb030d518, 0x53375a96, 0xcd37f05a,
3276
+ 0x4a146bff, 0xd414c133, 0x37134ebd, 0xa913e471, 0xb01a217b,
3277
+ 0x2e1a8bb7, 0xcd1d0439, 0x531daef5, 0xff0f8e2c, 0x610f24e0,
3278
+ 0x8208ab6e, 0x1c0801a2, 0x0501c4a8, 0x9b016e64, 0x7806e1ea,
3279
+ 0xe6064b26}};
3280
+
3281
+#endif
3282
+
3283
+#endif
3284
+
3285
+#if N == 3
3286
+
3287
+#if W == 8
3288
+
3289
+local const z_crc_t FAR crc_braid_table[][256] = {
3290
+ {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f,
3291
+ 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999,
3292
+ 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee,
3293
+ 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615,
3294
+ 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383,
3295
+ 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb,
3296
+ 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275,
3297
+ 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d,
3298
+ 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b,
3299
+ 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460,
3300
+ 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317,
3301
+ 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1,
3302
+ 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5,
3303
+ 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd,
3304
+ 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04,
3305
+ 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c,
3306
+ 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7,
3307
+ 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11,
3308
+ 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66,
3309
+ 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7,
3310
+ 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871,
3311
+ 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309,
3312
+ 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd,
3313
+ 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85,
3314
+ 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913,
3315
+ 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d,
3316
+ 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a,
3317
+ 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc,
3318
+ 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57,
3319
+ 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f,
3320
+ 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6,
3321
+ 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e,
3322
+ 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f,
3323
+ 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289,
3324
+ 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe,
3325
+ 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05,
3326
+ 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893,
3327
+ 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb,
3328
+ 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0,
3329
+ 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8,
3330
+ 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e,
3331
+ 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5,
3332
+ 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2,
3333
+ 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574,
3334
+ 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5,
3335
+ 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add,
3336
+ 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114,
3337
+ 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c,
3338
+ 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7,
3339
+ 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701,
3340
+ 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076,
3341
+ 0x09cd8551},
3342
+ {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193,
3343
+ 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2,
3344
+ 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c,
3345
+ 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71,
3346
+ 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a,
3347
+ 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d,
3348
+ 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71,
3349
+ 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436,
3350
+ 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d,
3351
+ 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000,
3352
+ 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae,
3353
+ 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf,
3354
+ 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930,
3355
+ 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277,
3356
+ 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff,
3357
+ 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8,
3358
+ 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef,
3359
+ 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e,
3360
+ 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20,
3361
+ 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95,
3362
+ 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e,
3363
+ 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9,
3364
+ 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d,
3365
+ 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a,
3366
+ 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151,
3367
+ 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4,
3368
+ 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a,
3369
+ 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b,
3370
+ 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c,
3371
+ 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b,
3372
+ 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3,
3373
+ 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4,
3374
+ 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b,
3375
+ 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a,
3376
+ 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4,
3377
+ 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189,
3378
+ 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92,
3379
+ 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5,
3380
+ 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9,
3381
+ 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe,
3382
+ 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5,
3383
+ 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8,
3384
+ 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66,
3385
+ 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707,
3386
+ 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8,
3387
+ 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f,
3388
+ 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707,
3389
+ 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40,
3390
+ 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017,
3391
+ 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876,
3392
+ 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8,
3393
+ 0x7bc97a0c},
3394
+ {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300,
3395
+ 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0,
3396
+ 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80,
3397
+ 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701,
3398
+ 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41,
3399
+ 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81,
3400
+ 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43,
3401
+ 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83,
3402
+ 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3,
3403
+ 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42,
3404
+ 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202,
3405
+ 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2,
3406
+ 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7,
3407
+ 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407,
3408
+ 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47,
3409
+ 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87,
3410
+ 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86,
3411
+ 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46,
3412
+ 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506,
3413
+ 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44,
3414
+ 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704,
3415
+ 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4,
3416
+ 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5,
3417
+ 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505,
3418
+ 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45,
3419
+ 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f,
3420
+ 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f,
3421
+ 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f,
3422
+ 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e,
3423
+ 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e,
3424
+ 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e,
3425
+ 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce,
3426
+ 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c,
3427
+ 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc,
3428
+ 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c,
3429
+ 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d,
3430
+ 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d,
3431
+ 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d,
3432
+ 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88,
3433
+ 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48,
3434
+ 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708,
3435
+ 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89,
3436
+ 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9,
3437
+ 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309,
3438
+ 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb,
3439
+ 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b,
3440
+ 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b,
3441
+ 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b,
3442
+ 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a,
3443
+ 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a,
3444
+ 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a,
3445
+ 0x7851a2ca},
3446
+ {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb,
3447
+ 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8,
3448
+ 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0,
3449
+ 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f,
3450
+ 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a,
3451
+ 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf,
3452
+ 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5,
3453
+ 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380,
3454
+ 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815,
3455
+ 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa,
3456
+ 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2,
3457
+ 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1,
3458
+ 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1,
3459
+ 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4,
3460
+ 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa,
3461
+ 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df,
3462
+ 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6,
3463
+ 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5,
3464
+ 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad,
3465
+ 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca,
3466
+ 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f,
3467
+ 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a,
3468
+ 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8,
3469
+ 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d,
3470
+ 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708,
3471
+ 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d,
3472
+ 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865,
3473
+ 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636,
3474
+ 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f,
3475
+ 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a,
3476
+ 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744,
3477
+ 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061,
3478
+ 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0,
3479
+ 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293,
3480
+ 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb,
3481
+ 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874,
3482
+ 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1,
3483
+ 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4,
3484
+ 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f,
3485
+ 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a,
3486
+ 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f,
3487
+ 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120,
3488
+ 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778,
3489
+ 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b,
3490
+ 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a,
3491
+ 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af,
3492
+ 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81,
3493
+ 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4,
3494
+ 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd,
3495
+ 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e,
3496
+ 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6,
3497
+ 0x566b6848},
3498
+ {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59,
3499
+ 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4,
3500
+ 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67,
3501
+ 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef,
3502
+ 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97,
3503
+ 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88,
3504
+ 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687,
3505
+ 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698,
3506
+ 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0,
3507
+ 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068,
3508
+ 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb,
3509
+ 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056,
3510
+ 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016,
3511
+ 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009,
3512
+ 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028,
3513
+ 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037,
3514
+ 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a,
3515
+ 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7,
3516
+ 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054,
3517
+ 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7,
3518
+ 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af,
3519
+ 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0,
3520
+ 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4,
3521
+ 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab,
3522
+ 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3,
3523
+ 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a,
3524
+ 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9,
3525
+ 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54,
3526
+ 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09,
3527
+ 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16,
3528
+ 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37,
3529
+ 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28,
3530
+ 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e,
3531
+ 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3,
3532
+ 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40,
3533
+ 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8,
3534
+ 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0,
3535
+ 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf,
3536
+ 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6,
3537
+ 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9,
3538
+ 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1,
3539
+ 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059,
3540
+ 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca,
3541
+ 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067,
3542
+ 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031,
3543
+ 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e,
3544
+ 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f,
3545
+ 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010,
3546
+ 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d,
3547
+ 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0,
3548
+ 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073,
3549
+ 0xd8ac6b35},
3550
+ {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2,
3551
+ 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd,
3552
+ 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696,
3553
+ 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3,
3554
+ 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f,
3555
+ 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35,
3556
+ 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5,
3557
+ 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f,
3558
+ 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673,
3559
+ 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46,
3560
+ 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d,
3561
+ 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632,
3562
+ 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28,
3563
+ 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192,
3564
+ 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c,
3565
+ 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6,
3566
+ 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0,
3567
+ 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff,
3568
+ 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4,
3569
+ 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95,
3570
+ 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9,
3571
+ 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03,
3572
+ 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7,
3573
+ 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d,
3574
+ 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151,
3575
+ 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808,
3576
+ 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343,
3577
+ 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c,
3578
+ 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a,
3579
+ 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0,
3580
+ 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e,
3581
+ 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594,
3582
+ 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6,
3583
+ 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399,
3584
+ 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2,
3585
+ 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7,
3586
+ 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb,
3587
+ 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571,
3588
+ 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289,
3589
+ 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33,
3590
+ 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f,
3591
+ 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a,
3592
+ 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461,
3593
+ 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e,
3594
+ 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c,
3595
+ 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6,
3596
+ 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918,
3597
+ 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2,
3598
+ 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484,
3599
+ 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb,
3600
+ 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0,
3601
+ 0xa140efa8},
3602
+ {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706,
3603
+ 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed,
3604
+ 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289,
3605
+ 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a,
3606
+ 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214,
3607
+ 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3,
3608
+ 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3,
3609
+ 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254,
3610
+ 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a,
3611
+ 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9,
3612
+ 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad,
3613
+ 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746,
3614
+ 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060,
3615
+ 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187,
3616
+ 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef,
3617
+ 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408,
3618
+ 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e,
3619
+ 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495,
3620
+ 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1,
3621
+ 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532,
3622
+ 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c,
3623
+ 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb,
3624
+ 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb,
3625
+ 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c,
3626
+ 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42,
3627
+ 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060,
3628
+ 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04,
3629
+ 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef,
3630
+ 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99,
3631
+ 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e,
3632
+ 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16,
3633
+ 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1,
3634
+ 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7,
3635
+ 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c,
3636
+ 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38,
3637
+ 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb,
3638
+ 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5,
3639
+ 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42,
3640
+ 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62,
3641
+ 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85,
3642
+ 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb,
3643
+ 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18,
3644
+ 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c,
3645
+ 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997,
3646
+ 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1,
3647
+ 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36,
3648
+ 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e,
3649
+ 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9,
3650
+ 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf,
3651
+ 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24,
3652
+ 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040,
3653
+ 0x917cd6a1},
3654
+ {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf,
3655
+ 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd,
3656
+ 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896,
3657
+ 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9,
3658
+ 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3,
3659
+ 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f,
3660
+ 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d,
3661
+ 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1,
3662
+ 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab,
3663
+ 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4,
3664
+ 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f,
3665
+ 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d,
3666
+ 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4,
3667
+ 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978,
3668
+ 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad,
3669
+ 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621,
3670
+ 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46,
3671
+ 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854,
3672
+ 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f,
3673
+ 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a,
3674
+ 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890,
3675
+ 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c,
3676
+ 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4,
3677
+ 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238,
3678
+ 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622,
3679
+ 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab,
3680
+ 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0,
3681
+ 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2,
3682
+ 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295,
3683
+ 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19,
3684
+ 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc,
3685
+ 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140,
3686
+ 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd,
3687
+ 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf,
3688
+ 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184,
3689
+ 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb,
3690
+ 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1,
3691
+ 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d,
3692
+ 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb,
3693
+ 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257,
3694
+ 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d,
3695
+ 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22,
3696
+ 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069,
3697
+ 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b,
3698
+ 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6,
3699
+ 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a,
3700
+ 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf,
3701
+ 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33,
3702
+ 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254,
3703
+ 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146,
3704
+ 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d,
3705
+ 0x18ba364e}};
3706
+
3707
+local const z_word_t FAR crc_braid_big_table[][256] = {
3708
+ {0x0000000000000000, 0x43cba68700000000, 0xc7903cd400000000,
3709
+ 0x845b9a5300000000, 0xcf27087300000000, 0x8cecaef400000000,
3710
+ 0x08b734a700000000, 0x4b7c922000000000, 0x9e4f10e600000000,
3711
+ 0xdd84b66100000000, 0x59df2c3200000000, 0x1a148ab500000000,
3712
+ 0x5168189500000000, 0x12a3be1200000000, 0x96f8244100000000,
3713
+ 0xd53382c600000000, 0x7d99511700000000, 0x3e52f79000000000,
3714
+ 0xba096dc300000000, 0xf9c2cb4400000000, 0xb2be596400000000,
3715
+ 0xf175ffe300000000, 0x752e65b000000000, 0x36e5c33700000000,
3716
+ 0xe3d641f100000000, 0xa01de77600000000, 0x24467d2500000000,
3717
+ 0x678ddba200000000, 0x2cf1498200000000, 0x6f3aef0500000000,
3718
+ 0xeb61755600000000, 0xa8aad3d100000000, 0xfa32a32e00000000,
3719
+ 0xb9f905a900000000, 0x3da29ffa00000000, 0x7e69397d00000000,
3720
+ 0x3515ab5d00000000, 0x76de0dda00000000, 0xf285978900000000,
3721
+ 0xb14e310e00000000, 0x647db3c800000000, 0x27b6154f00000000,
3722
+ 0xa3ed8f1c00000000, 0xe026299b00000000, 0xab5abbbb00000000,
3723
+ 0xe8911d3c00000000, 0x6cca876f00000000, 0x2f0121e800000000,
3724
+ 0x87abf23900000000, 0xc46054be00000000, 0x403bceed00000000,
3725
+ 0x03f0686a00000000, 0x488cfa4a00000000, 0x0b475ccd00000000,
3726
+ 0x8f1cc69e00000000, 0xccd7601900000000, 0x19e4e2df00000000,
3727
+ 0x5a2f445800000000, 0xde74de0b00000000, 0x9dbf788c00000000,
3728
+ 0xd6c3eaac00000000, 0x95084c2b00000000, 0x1153d67800000000,
3729
+ 0x529870ff00000000, 0xf465465d00000000, 0xb7aee0da00000000,
3730
+ 0x33f57a8900000000, 0x703edc0e00000000, 0x3b424e2e00000000,
3731
+ 0x7889e8a900000000, 0xfcd272fa00000000, 0xbf19d47d00000000,
3732
+ 0x6a2a56bb00000000, 0x29e1f03c00000000, 0xadba6a6f00000000,
3733
+ 0xee71cce800000000, 0xa50d5ec800000000, 0xe6c6f84f00000000,
3734
+ 0x629d621c00000000, 0x2156c49b00000000, 0x89fc174a00000000,
3735
+ 0xca37b1cd00000000, 0x4e6c2b9e00000000, 0x0da78d1900000000,
3736
+ 0x46db1f3900000000, 0x0510b9be00000000, 0x814b23ed00000000,
3737
+ 0xc280856a00000000, 0x17b307ac00000000, 0x5478a12b00000000,
3738
+ 0xd0233b7800000000, 0x93e89dff00000000, 0xd8940fdf00000000,
3739
+ 0x9b5fa95800000000, 0x1f04330b00000000, 0x5ccf958c00000000,
3740
+ 0x0e57e57300000000, 0x4d9c43f400000000, 0xc9c7d9a700000000,
3741
+ 0x8a0c7f2000000000, 0xc170ed0000000000, 0x82bb4b8700000000,
3742
+ 0x06e0d1d400000000, 0x452b775300000000, 0x9018f59500000000,
3743
+ 0xd3d3531200000000, 0x5788c94100000000, 0x14436fc600000000,
3744
+ 0x5f3ffde600000000, 0x1cf45b6100000000, 0x98afc13200000000,
3745
+ 0xdb6467b500000000, 0x73ceb46400000000, 0x300512e300000000,
3746
+ 0xb45e88b000000000, 0xf7952e3700000000, 0xbce9bc1700000000,
3747
+ 0xff221a9000000000, 0x7b7980c300000000, 0x38b2264400000000,
3748
+ 0xed81a48200000000, 0xae4a020500000000, 0x2a11985600000000,
3749
+ 0x69da3ed100000000, 0x22a6acf100000000, 0x616d0a7600000000,
3750
+ 0xe536902500000000, 0xa6fd36a200000000, 0xe8cb8cba00000000,
3751
+ 0xab002a3d00000000, 0x2f5bb06e00000000, 0x6c9016e900000000,
3752
+ 0x27ec84c900000000, 0x6427224e00000000, 0xe07cb81d00000000,
3753
+ 0xa3b71e9a00000000, 0x76849c5c00000000, 0x354f3adb00000000,
3754
+ 0xb114a08800000000, 0xf2df060f00000000, 0xb9a3942f00000000,
3755
+ 0xfa6832a800000000, 0x7e33a8fb00000000, 0x3df80e7c00000000,
3756
+ 0x9552ddad00000000, 0xd6997b2a00000000, 0x52c2e17900000000,
3757
+ 0x110947fe00000000, 0x5a75d5de00000000, 0x19be735900000000,
3758
+ 0x9de5e90a00000000, 0xde2e4f8d00000000, 0x0b1dcd4b00000000,
3759
+ 0x48d66bcc00000000, 0xcc8df19f00000000, 0x8f46571800000000,
3760
+ 0xc43ac53800000000, 0x87f163bf00000000, 0x03aaf9ec00000000,
3761
+ 0x40615f6b00000000, 0x12f92f9400000000, 0x5132891300000000,
3762
+ 0xd569134000000000, 0x96a2b5c700000000, 0xddde27e700000000,
3763
+ 0x9e15816000000000, 0x1a4e1b3300000000, 0x5985bdb400000000,
3764
+ 0x8cb63f7200000000, 0xcf7d99f500000000, 0x4b2603a600000000,
3765
+ 0x08eda52100000000, 0x4391370100000000, 0x005a918600000000,
3766
+ 0x84010bd500000000, 0xc7caad5200000000, 0x6f607e8300000000,
3767
+ 0x2cabd80400000000, 0xa8f0425700000000, 0xeb3be4d000000000,
3768
+ 0xa04776f000000000, 0xe38cd07700000000, 0x67d74a2400000000,
3769
+ 0x241ceca300000000, 0xf12f6e6500000000, 0xb2e4c8e200000000,
3770
+ 0x36bf52b100000000, 0x7574f43600000000, 0x3e08661600000000,
3771
+ 0x7dc3c09100000000, 0xf9985ac200000000, 0xba53fc4500000000,
3772
+ 0x1caecae700000000, 0x5f656c6000000000, 0xdb3ef63300000000,
3773
+ 0x98f550b400000000, 0xd389c29400000000, 0x9042641300000000,
3774
+ 0x1419fe4000000000, 0x57d258c700000000, 0x82e1da0100000000,
3775
+ 0xc12a7c8600000000, 0x4571e6d500000000, 0x06ba405200000000,
3776
+ 0x4dc6d27200000000, 0x0e0d74f500000000, 0x8a56eea600000000,
3777
+ 0xc99d482100000000, 0x61379bf000000000, 0x22fc3d7700000000,
3778
+ 0xa6a7a72400000000, 0xe56c01a300000000, 0xae10938300000000,
3779
+ 0xeddb350400000000, 0x6980af5700000000, 0x2a4b09d000000000,
3780
+ 0xff788b1600000000, 0xbcb32d9100000000, 0x38e8b7c200000000,
3781
+ 0x7b23114500000000, 0x305f836500000000, 0x739425e200000000,
3782
+ 0xf7cfbfb100000000, 0xb404193600000000, 0xe69c69c900000000,
3783
+ 0xa557cf4e00000000, 0x210c551d00000000, 0x62c7f39a00000000,
3784
+ 0x29bb61ba00000000, 0x6a70c73d00000000, 0xee2b5d6e00000000,
3785
+ 0xade0fbe900000000, 0x78d3792f00000000, 0x3b18dfa800000000,
3786
+ 0xbf4345fb00000000, 0xfc88e37c00000000, 0xb7f4715c00000000,
3787
+ 0xf43fd7db00000000, 0x70644d8800000000, 0x33afeb0f00000000,
3788
+ 0x9b0538de00000000, 0xd8ce9e5900000000, 0x5c95040a00000000,
3789
+ 0x1f5ea28d00000000, 0x542230ad00000000, 0x17e9962a00000000,
3790
+ 0x93b20c7900000000, 0xd079aafe00000000, 0x054a283800000000,
3791
+ 0x46818ebf00000000, 0xc2da14ec00000000, 0x8111b26b00000000,
3792
+ 0xca6d204b00000000, 0x89a686cc00000000, 0x0dfd1c9f00000000,
3793
+ 0x4e36ba1800000000},
3794
+ {0x0000000000000000, 0xe1b652ef00000000, 0x836bd40500000000,
3795
+ 0x62dd86ea00000000, 0x06d7a80b00000000, 0xe761fae400000000,
3796
+ 0x85bc7c0e00000000, 0x640a2ee100000000, 0x0cae511700000000,
3797
+ 0xed1803f800000000, 0x8fc5851200000000, 0x6e73d7fd00000000,
3798
+ 0x0a79f91c00000000, 0xebcfabf300000000, 0x89122d1900000000,
3799
+ 0x68a47ff600000000, 0x185ca32e00000000, 0xf9eaf1c100000000,
3800
+ 0x9b37772b00000000, 0x7a8125c400000000, 0x1e8b0b2500000000,
3801
+ 0xff3d59ca00000000, 0x9de0df2000000000, 0x7c568dcf00000000,
3802
+ 0x14f2f23900000000, 0xf544a0d600000000, 0x9799263c00000000,
3803
+ 0x762f74d300000000, 0x12255a3200000000, 0xf39308dd00000000,
3804
+ 0x914e8e3700000000, 0x70f8dcd800000000, 0x30b8465d00000000,
3805
+ 0xd10e14b200000000, 0xb3d3925800000000, 0x5265c0b700000000,
3806
+ 0x366fee5600000000, 0xd7d9bcb900000000, 0xb5043a5300000000,
3807
+ 0x54b268bc00000000, 0x3c16174a00000000, 0xdda045a500000000,
3808
+ 0xbf7dc34f00000000, 0x5ecb91a000000000, 0x3ac1bf4100000000,
3809
+ 0xdb77edae00000000, 0xb9aa6b4400000000, 0x581c39ab00000000,
3810
+ 0x28e4e57300000000, 0xc952b79c00000000, 0xab8f317600000000,
3811
+ 0x4a39639900000000, 0x2e334d7800000000, 0xcf851f9700000000,
3812
+ 0xad58997d00000000, 0x4ceecb9200000000, 0x244ab46400000000,
3813
+ 0xc5fce68b00000000, 0xa721606100000000, 0x4697328e00000000,
3814
+ 0x229d1c6f00000000, 0xc32b4e8000000000, 0xa1f6c86a00000000,
3815
+ 0x40409a8500000000, 0x60708dba00000000, 0x81c6df5500000000,
3816
+ 0xe31b59bf00000000, 0x02ad0b5000000000, 0x66a725b100000000,
3817
+ 0x8711775e00000000, 0xe5ccf1b400000000, 0x047aa35b00000000,
3818
+ 0x6cdedcad00000000, 0x8d688e4200000000, 0xefb508a800000000,
3819
+ 0x0e035a4700000000, 0x6a0974a600000000, 0x8bbf264900000000,
3820
+ 0xe962a0a300000000, 0x08d4f24c00000000, 0x782c2e9400000000,
3821
+ 0x999a7c7b00000000, 0xfb47fa9100000000, 0x1af1a87e00000000,
3822
+ 0x7efb869f00000000, 0x9f4dd47000000000, 0xfd90529a00000000,
3823
+ 0x1c26007500000000, 0x74827f8300000000, 0x95342d6c00000000,
3824
+ 0xf7e9ab8600000000, 0x165ff96900000000, 0x7255d78800000000,
3825
+ 0x93e3856700000000, 0xf13e038d00000000, 0x1088516200000000,
3826
+ 0x50c8cbe700000000, 0xb17e990800000000, 0xd3a31fe200000000,
3827
+ 0x32154d0d00000000, 0x561f63ec00000000, 0xb7a9310300000000,
3828
+ 0xd574b7e900000000, 0x34c2e50600000000, 0x5c669af000000000,
3829
+ 0xbdd0c81f00000000, 0xdf0d4ef500000000, 0x3ebb1c1a00000000,
3830
+ 0x5ab132fb00000000, 0xbb07601400000000, 0xd9dae6fe00000000,
3831
+ 0x386cb41100000000, 0x489468c900000000, 0xa9223a2600000000,
3832
+ 0xcbffbccc00000000, 0x2a49ee2300000000, 0x4e43c0c200000000,
3833
+ 0xaff5922d00000000, 0xcd2814c700000000, 0x2c9e462800000000,
3834
+ 0x443a39de00000000, 0xa58c6b3100000000, 0xc751eddb00000000,
3835
+ 0x26e7bf3400000000, 0x42ed91d500000000, 0xa35bc33a00000000,
3836
+ 0xc18645d000000000, 0x2030173f00000000, 0x81e66bae00000000,
3837
+ 0x6050394100000000, 0x028dbfab00000000, 0xe33bed4400000000,
3838
+ 0x8731c3a500000000, 0x6687914a00000000, 0x045a17a000000000,
3839
+ 0xe5ec454f00000000, 0x8d483ab900000000, 0x6cfe685600000000,
3840
+ 0x0e23eebc00000000, 0xef95bc5300000000, 0x8b9f92b200000000,
3841
+ 0x6a29c05d00000000, 0x08f446b700000000, 0xe942145800000000,
3842
+ 0x99bac88000000000, 0x780c9a6f00000000, 0x1ad11c8500000000,
3843
+ 0xfb674e6a00000000, 0x9f6d608b00000000, 0x7edb326400000000,
3844
+ 0x1c06b48e00000000, 0xfdb0e66100000000, 0x9514999700000000,
3845
+ 0x74a2cb7800000000, 0x167f4d9200000000, 0xf7c91f7d00000000,
3846
+ 0x93c3319c00000000, 0x7275637300000000, 0x10a8e59900000000,
3847
+ 0xf11eb77600000000, 0xb15e2df300000000, 0x50e87f1c00000000,
3848
+ 0x3235f9f600000000, 0xd383ab1900000000, 0xb78985f800000000,
3849
+ 0x563fd71700000000, 0x34e251fd00000000, 0xd554031200000000,
3850
+ 0xbdf07ce400000000, 0x5c462e0b00000000, 0x3e9ba8e100000000,
3851
+ 0xdf2dfa0e00000000, 0xbb27d4ef00000000, 0x5a91860000000000,
3852
+ 0x384c00ea00000000, 0xd9fa520500000000, 0xa9028edd00000000,
3853
+ 0x48b4dc3200000000, 0x2a695ad800000000, 0xcbdf083700000000,
3854
+ 0xafd526d600000000, 0x4e63743900000000, 0x2cbef2d300000000,
3855
+ 0xcd08a03c00000000, 0xa5acdfca00000000, 0x441a8d2500000000,
3856
+ 0x26c70bcf00000000, 0xc771592000000000, 0xa37b77c100000000,
3857
+ 0x42cd252e00000000, 0x2010a3c400000000, 0xc1a6f12b00000000,
3858
+ 0xe196e61400000000, 0x0020b4fb00000000, 0x62fd321100000000,
3859
+ 0x834b60fe00000000, 0xe7414e1f00000000, 0x06f71cf000000000,
3860
+ 0x642a9a1a00000000, 0x859cc8f500000000, 0xed38b70300000000,
3861
+ 0x0c8ee5ec00000000, 0x6e53630600000000, 0x8fe531e900000000,
3862
+ 0xebef1f0800000000, 0x0a594de700000000, 0x6884cb0d00000000,
3863
+ 0x893299e200000000, 0xf9ca453a00000000, 0x187c17d500000000,
3864
+ 0x7aa1913f00000000, 0x9b17c3d000000000, 0xff1ded3100000000,
3865
+ 0x1eabbfde00000000, 0x7c76393400000000, 0x9dc06bdb00000000,
3866
+ 0xf564142d00000000, 0x14d246c200000000, 0x760fc02800000000,
3867
+ 0x97b992c700000000, 0xf3b3bc2600000000, 0x1205eec900000000,
3868
+ 0x70d8682300000000, 0x916e3acc00000000, 0xd12ea04900000000,
3869
+ 0x3098f2a600000000, 0x5245744c00000000, 0xb3f326a300000000,
3870
+ 0xd7f9084200000000, 0x364f5aad00000000, 0x5492dc4700000000,
3871
+ 0xb5248ea800000000, 0xdd80f15e00000000, 0x3c36a3b100000000,
3872
+ 0x5eeb255b00000000, 0xbf5d77b400000000, 0xdb57595500000000,
3873
+ 0x3ae10bba00000000, 0x583c8d5000000000, 0xb98adfbf00000000,
3874
+ 0xc972036700000000, 0x28c4518800000000, 0x4a19d76200000000,
3875
+ 0xabaf858d00000000, 0xcfa5ab6c00000000, 0x2e13f98300000000,
3876
+ 0x4cce7f6900000000, 0xad782d8600000000, 0xc5dc527000000000,
3877
+ 0x246a009f00000000, 0x46b7867500000000, 0xa701d49a00000000,
3878
+ 0xc30bfa7b00000000, 0x22bda89400000000, 0x40602e7e00000000,
3879
+ 0xa1d67c9100000000},
3880
+ {0x0000000000000000, 0x5880e2d700000000, 0xf106b47400000000,
3881
+ 0xa98656a300000000, 0xe20d68e900000000, 0xba8d8a3e00000000,
3882
+ 0x130bdc9d00000000, 0x4b8b3e4a00000000, 0x851da10900000000,
3883
+ 0xdd9d43de00000000, 0x741b157d00000000, 0x2c9bf7aa00000000,
3884
+ 0x6710c9e000000000, 0x3f902b3700000000, 0x96167d9400000000,
3885
+ 0xce969f4300000000, 0x0a3b421300000000, 0x52bba0c400000000,
3886
+ 0xfb3df66700000000, 0xa3bd14b000000000, 0xe8362afa00000000,
3887
+ 0xb0b6c82d00000000, 0x19309e8e00000000, 0x41b07c5900000000,
3888
+ 0x8f26e31a00000000, 0xd7a601cd00000000, 0x7e20576e00000000,
3889
+ 0x26a0b5b900000000, 0x6d2b8bf300000000, 0x35ab692400000000,
3890
+ 0x9c2d3f8700000000, 0xc4addd5000000000, 0x1476842600000000,
3891
+ 0x4cf666f100000000, 0xe570305200000000, 0xbdf0d28500000000,
3892
+ 0xf67beccf00000000, 0xaefb0e1800000000, 0x077d58bb00000000,
3893
+ 0x5ffdba6c00000000, 0x916b252f00000000, 0xc9ebc7f800000000,
3894
+ 0x606d915b00000000, 0x38ed738c00000000, 0x73664dc600000000,
3895
+ 0x2be6af1100000000, 0x8260f9b200000000, 0xdae01b6500000000,
3896
+ 0x1e4dc63500000000, 0x46cd24e200000000, 0xef4b724100000000,
3897
+ 0xb7cb909600000000, 0xfc40aedc00000000, 0xa4c04c0b00000000,
3898
+ 0x0d461aa800000000, 0x55c6f87f00000000, 0x9b50673c00000000,
3899
+ 0xc3d085eb00000000, 0x6a56d34800000000, 0x32d6319f00000000,
3900
+ 0x795d0fd500000000, 0x21dded0200000000, 0x885bbba100000000,
3901
+ 0xd0db597600000000, 0x28ec084d00000000, 0x706cea9a00000000,
3902
+ 0xd9eabc3900000000, 0x816a5eee00000000, 0xcae160a400000000,
3903
+ 0x9261827300000000, 0x3be7d4d000000000, 0x6367360700000000,
3904
+ 0xadf1a94400000000, 0xf5714b9300000000, 0x5cf71d3000000000,
3905
+ 0x0477ffe700000000, 0x4ffcc1ad00000000, 0x177c237a00000000,
3906
+ 0xbefa75d900000000, 0xe67a970e00000000, 0x22d74a5e00000000,
3907
+ 0x7a57a88900000000, 0xd3d1fe2a00000000, 0x8b511cfd00000000,
3908
+ 0xc0da22b700000000, 0x985ac06000000000, 0x31dc96c300000000,
3909
+ 0x695c741400000000, 0xa7caeb5700000000, 0xff4a098000000000,
3910
+ 0x56cc5f2300000000, 0x0e4cbdf400000000, 0x45c783be00000000,
3911
+ 0x1d47616900000000, 0xb4c137ca00000000, 0xec41d51d00000000,
3912
+ 0x3c9a8c6b00000000, 0x641a6ebc00000000, 0xcd9c381f00000000,
3913
+ 0x951cdac800000000, 0xde97e48200000000, 0x8617065500000000,
3914
+ 0x2f9150f600000000, 0x7711b22100000000, 0xb9872d6200000000,
3915
+ 0xe107cfb500000000, 0x4881991600000000, 0x10017bc100000000,
3916
+ 0x5b8a458b00000000, 0x030aa75c00000000, 0xaa8cf1ff00000000,
3917
+ 0xf20c132800000000, 0x36a1ce7800000000, 0x6e212caf00000000,
3918
+ 0xc7a77a0c00000000, 0x9f2798db00000000, 0xd4aca69100000000,
3919
+ 0x8c2c444600000000, 0x25aa12e500000000, 0x7d2af03200000000,
3920
+ 0xb3bc6f7100000000, 0xeb3c8da600000000, 0x42badb0500000000,
3921
+ 0x1a3a39d200000000, 0x51b1079800000000, 0x0931e54f00000000,
3922
+ 0xa0b7b3ec00000000, 0xf837513b00000000, 0x50d8119a00000000,
3923
+ 0x0858f34d00000000, 0xa1dea5ee00000000, 0xf95e473900000000,
3924
+ 0xb2d5797300000000, 0xea559ba400000000, 0x43d3cd0700000000,
3925
+ 0x1b532fd000000000, 0xd5c5b09300000000, 0x8d45524400000000,
3926
+ 0x24c304e700000000, 0x7c43e63000000000, 0x37c8d87a00000000,
3927
+ 0x6f483aad00000000, 0xc6ce6c0e00000000, 0x9e4e8ed900000000,
3928
+ 0x5ae3538900000000, 0x0263b15e00000000, 0xabe5e7fd00000000,
3929
+ 0xf365052a00000000, 0xb8ee3b6000000000, 0xe06ed9b700000000,
3930
+ 0x49e88f1400000000, 0x11686dc300000000, 0xdffef28000000000,
3931
+ 0x877e105700000000, 0x2ef846f400000000, 0x7678a42300000000,
3932
+ 0x3df39a6900000000, 0x657378be00000000, 0xccf52e1d00000000,
3933
+ 0x9475ccca00000000, 0x44ae95bc00000000, 0x1c2e776b00000000,
3934
+ 0xb5a821c800000000, 0xed28c31f00000000, 0xa6a3fd5500000000,
3935
+ 0xfe231f8200000000, 0x57a5492100000000, 0x0f25abf600000000,
3936
+ 0xc1b334b500000000, 0x9933d66200000000, 0x30b580c100000000,
3937
+ 0x6835621600000000, 0x23be5c5c00000000, 0x7b3ebe8b00000000,
3938
+ 0xd2b8e82800000000, 0x8a380aff00000000, 0x4e95d7af00000000,
3939
+ 0x1615357800000000, 0xbf9363db00000000, 0xe713810c00000000,
3940
+ 0xac98bf4600000000, 0xf4185d9100000000, 0x5d9e0b3200000000,
3941
+ 0x051ee9e500000000, 0xcb8876a600000000, 0x9308947100000000,
3942
+ 0x3a8ec2d200000000, 0x620e200500000000, 0x29851e4f00000000,
3943
+ 0x7105fc9800000000, 0xd883aa3b00000000, 0x800348ec00000000,
3944
+ 0x783419d700000000, 0x20b4fb0000000000, 0x8932ada300000000,
3945
+ 0xd1b24f7400000000, 0x9a39713e00000000, 0xc2b993e900000000,
3946
+ 0x6b3fc54a00000000, 0x33bf279d00000000, 0xfd29b8de00000000,
3947
+ 0xa5a95a0900000000, 0x0c2f0caa00000000, 0x54afee7d00000000,
3948
+ 0x1f24d03700000000, 0x47a432e000000000, 0xee22644300000000,
3949
+ 0xb6a2869400000000, 0x720f5bc400000000, 0x2a8fb91300000000,
3950
+ 0x8309efb000000000, 0xdb890d6700000000, 0x9002332d00000000,
3951
+ 0xc882d1fa00000000, 0x6104875900000000, 0x3984658e00000000,
3952
+ 0xf712facd00000000, 0xaf92181a00000000, 0x06144eb900000000,
3953
+ 0x5e94ac6e00000000, 0x151f922400000000, 0x4d9f70f300000000,
3954
+ 0xe419265000000000, 0xbc99c48700000000, 0x6c429df100000000,
3955
+ 0x34c27f2600000000, 0x9d44298500000000, 0xc5c4cb5200000000,
3956
+ 0x8e4ff51800000000, 0xd6cf17cf00000000, 0x7f49416c00000000,
3957
+ 0x27c9a3bb00000000, 0xe95f3cf800000000, 0xb1dfde2f00000000,
3958
+ 0x1859888c00000000, 0x40d96a5b00000000, 0x0b52541100000000,
3959
+ 0x53d2b6c600000000, 0xfa54e06500000000, 0xa2d402b200000000,
3960
+ 0x6679dfe200000000, 0x3ef93d3500000000, 0x977f6b9600000000,
3961
+ 0xcfff894100000000, 0x8474b70b00000000, 0xdcf455dc00000000,
3962
+ 0x7572037f00000000, 0x2df2e1a800000000, 0xe3647eeb00000000,
3963
+ 0xbbe49c3c00000000, 0x1262ca9f00000000, 0x4ae2284800000000,
3964
+ 0x0169160200000000, 0x59e9f4d500000000, 0xf06fa27600000000,
3965
+ 0xa8ef40a100000000},
3966
+ {0x0000000000000000, 0x463b676500000000, 0x8c76ceca00000000,
3967
+ 0xca4da9af00000000, 0x59ebed4e00000000, 0x1fd08a2b00000000,
3968
+ 0xd59d238400000000, 0x93a644e100000000, 0xb2d6db9d00000000,
3969
+ 0xf4edbcf800000000, 0x3ea0155700000000, 0x789b723200000000,
3970
+ 0xeb3d36d300000000, 0xad0651b600000000, 0x674bf81900000000,
3971
+ 0x21709f7c00000000, 0x25abc6e000000000, 0x6390a18500000000,
3972
+ 0xa9dd082a00000000, 0xefe66f4f00000000, 0x7c402bae00000000,
3973
+ 0x3a7b4ccb00000000, 0xf036e56400000000, 0xb60d820100000000,
3974
+ 0x977d1d7d00000000, 0xd1467a1800000000, 0x1b0bd3b700000000,
3975
+ 0x5d30b4d200000000, 0xce96f03300000000, 0x88ad975600000000,
3976
+ 0x42e03ef900000000, 0x04db599c00000000, 0x0b50fc1a00000000,
3977
+ 0x4d6b9b7f00000000, 0x872632d000000000, 0xc11d55b500000000,
3978
+ 0x52bb115400000000, 0x1480763100000000, 0xdecddf9e00000000,
3979
+ 0x98f6b8fb00000000, 0xb986278700000000, 0xffbd40e200000000,
3980
+ 0x35f0e94d00000000, 0x73cb8e2800000000, 0xe06dcac900000000,
3981
+ 0xa656adac00000000, 0x6c1b040300000000, 0x2a20636600000000,
3982
+ 0x2efb3afa00000000, 0x68c05d9f00000000, 0xa28df43000000000,
3983
+ 0xe4b6935500000000, 0x7710d7b400000000, 0x312bb0d100000000,
3984
+ 0xfb66197e00000000, 0xbd5d7e1b00000000, 0x9c2de16700000000,
3985
+ 0xda16860200000000, 0x105b2fad00000000, 0x566048c800000000,
3986
+ 0xc5c60c2900000000, 0x83fd6b4c00000000, 0x49b0c2e300000000,
3987
+ 0x0f8ba58600000000, 0x16a0f83500000000, 0x509b9f5000000000,
3988
+ 0x9ad636ff00000000, 0xdced519a00000000, 0x4f4b157b00000000,
3989
+ 0x0970721e00000000, 0xc33ddbb100000000, 0x8506bcd400000000,
3990
+ 0xa47623a800000000, 0xe24d44cd00000000, 0x2800ed6200000000,
3991
+ 0x6e3b8a0700000000, 0xfd9dcee600000000, 0xbba6a98300000000,
3992
+ 0x71eb002c00000000, 0x37d0674900000000, 0x330b3ed500000000,
3993
+ 0x753059b000000000, 0xbf7df01f00000000, 0xf946977a00000000,
3994
+ 0x6ae0d39b00000000, 0x2cdbb4fe00000000, 0xe6961d5100000000,
3995
+ 0xa0ad7a3400000000, 0x81dde54800000000, 0xc7e6822d00000000,
3996
+ 0x0dab2b8200000000, 0x4b904ce700000000, 0xd836080600000000,
3997
+ 0x9e0d6f6300000000, 0x5440c6cc00000000, 0x127ba1a900000000,
3998
+ 0x1df0042f00000000, 0x5bcb634a00000000, 0x9186cae500000000,
3999
+ 0xd7bdad8000000000, 0x441be96100000000, 0x02208e0400000000,
4000
+ 0xc86d27ab00000000, 0x8e5640ce00000000, 0xaf26dfb200000000,
4001
+ 0xe91db8d700000000, 0x2350117800000000, 0x656b761d00000000,
4002
+ 0xf6cd32fc00000000, 0xb0f6559900000000, 0x7abbfc3600000000,
4003
+ 0x3c809b5300000000, 0x385bc2cf00000000, 0x7e60a5aa00000000,
4004
+ 0xb42d0c0500000000, 0xf2166b6000000000, 0x61b02f8100000000,
4005
+ 0x278b48e400000000, 0xedc6e14b00000000, 0xabfd862e00000000,
4006
+ 0x8a8d195200000000, 0xccb67e3700000000, 0x06fbd79800000000,
4007
+ 0x40c0b0fd00000000, 0xd366f41c00000000, 0x955d937900000000,
4008
+ 0x5f103ad600000000, 0x192b5db300000000, 0x2c40f16b00000000,
4009
+ 0x6a7b960e00000000, 0xa0363fa100000000, 0xe60d58c400000000,
4010
+ 0x75ab1c2500000000, 0x33907b4000000000, 0xf9ddd2ef00000000,
4011
+ 0xbfe6b58a00000000, 0x9e962af600000000, 0xd8ad4d9300000000,
4012
+ 0x12e0e43c00000000, 0x54db835900000000, 0xc77dc7b800000000,
4013
+ 0x8146a0dd00000000, 0x4b0b097200000000, 0x0d306e1700000000,
4014
+ 0x09eb378b00000000, 0x4fd050ee00000000, 0x859df94100000000,
4015
+ 0xc3a69e2400000000, 0x5000dac500000000, 0x163bbda000000000,
4016
+ 0xdc76140f00000000, 0x9a4d736a00000000, 0xbb3dec1600000000,
4017
+ 0xfd068b7300000000, 0x374b22dc00000000, 0x717045b900000000,
4018
+ 0xe2d6015800000000, 0xa4ed663d00000000, 0x6ea0cf9200000000,
4019
+ 0x289ba8f700000000, 0x27100d7100000000, 0x612b6a1400000000,
4020
+ 0xab66c3bb00000000, 0xed5da4de00000000, 0x7efbe03f00000000,
4021
+ 0x38c0875a00000000, 0xf28d2ef500000000, 0xb4b6499000000000,
4022
+ 0x95c6d6ec00000000, 0xd3fdb18900000000, 0x19b0182600000000,
4023
+ 0x5f8b7f4300000000, 0xcc2d3ba200000000, 0x8a165cc700000000,
4024
+ 0x405bf56800000000, 0x0660920d00000000, 0x02bbcb9100000000,
4025
+ 0x4480acf400000000, 0x8ecd055b00000000, 0xc8f6623e00000000,
4026
+ 0x5b5026df00000000, 0x1d6b41ba00000000, 0xd726e81500000000,
4027
+ 0x911d8f7000000000, 0xb06d100c00000000, 0xf656776900000000,
4028
+ 0x3c1bdec600000000, 0x7a20b9a300000000, 0xe986fd4200000000,
4029
+ 0xafbd9a2700000000, 0x65f0338800000000, 0x23cb54ed00000000,
4030
+ 0x3ae0095e00000000, 0x7cdb6e3b00000000, 0xb696c79400000000,
4031
+ 0xf0ada0f100000000, 0x630be41000000000, 0x2530837500000000,
4032
+ 0xef7d2ada00000000, 0xa9464dbf00000000, 0x8836d2c300000000,
4033
+ 0xce0db5a600000000, 0x04401c0900000000, 0x427b7b6c00000000,
4034
+ 0xd1dd3f8d00000000, 0x97e658e800000000, 0x5dabf14700000000,
4035
+ 0x1b90962200000000, 0x1f4bcfbe00000000, 0x5970a8db00000000,
4036
+ 0x933d017400000000, 0xd506661100000000, 0x46a022f000000000,
4037
+ 0x009b459500000000, 0xcad6ec3a00000000, 0x8ced8b5f00000000,
4038
+ 0xad9d142300000000, 0xeba6734600000000, 0x21ebdae900000000,
4039
+ 0x67d0bd8c00000000, 0xf476f96d00000000, 0xb24d9e0800000000,
4040
+ 0x780037a700000000, 0x3e3b50c200000000, 0x31b0f54400000000,
4041
+ 0x778b922100000000, 0xbdc63b8e00000000, 0xfbfd5ceb00000000,
4042
+ 0x685b180a00000000, 0x2e607f6f00000000, 0xe42dd6c000000000,
4043
+ 0xa216b1a500000000, 0x83662ed900000000, 0xc55d49bc00000000,
4044
+ 0x0f10e01300000000, 0x492b877600000000, 0xda8dc39700000000,
4045
+ 0x9cb6a4f200000000, 0x56fb0d5d00000000, 0x10c06a3800000000,
4046
+ 0x141b33a400000000, 0x522054c100000000, 0x986dfd6e00000000,
4047
+ 0xde569a0b00000000, 0x4df0deea00000000, 0x0bcbb98f00000000,
4048
+ 0xc186102000000000, 0x87bd774500000000, 0xa6cde83900000000,
4049
+ 0xe0f68f5c00000000, 0x2abb26f300000000, 0x6c80419600000000,
4050
+ 0xff26057700000000, 0xb91d621200000000, 0x7350cbbd00000000,
4051
+ 0x356bacd800000000},
4052
+ {0x0000000000000000, 0x9e83da9f00000000, 0x7d01c4e400000000,
4053
+ 0xe3821e7b00000000, 0xbb04f91200000000, 0x2587238d00000000,
4054
+ 0xc6053df600000000, 0x5886e76900000000, 0x7609f22500000000,
4055
+ 0xe88a28ba00000000, 0x0b0836c100000000, 0x958bec5e00000000,
4056
+ 0xcd0d0b3700000000, 0x538ed1a800000000, 0xb00ccfd300000000,
4057
+ 0x2e8f154c00000000, 0xec12e44b00000000, 0x72913ed400000000,
4058
+ 0x911320af00000000, 0x0f90fa3000000000, 0x57161d5900000000,
4059
+ 0xc995c7c600000000, 0x2a17d9bd00000000, 0xb494032200000000,
4060
+ 0x9a1b166e00000000, 0x0498ccf100000000, 0xe71ad28a00000000,
4061
+ 0x7999081500000000, 0x211fef7c00000000, 0xbf9c35e300000000,
4062
+ 0x5c1e2b9800000000, 0xc29df10700000000, 0xd825c89700000000,
4063
+ 0x46a6120800000000, 0xa5240c7300000000, 0x3ba7d6ec00000000,
4064
+ 0x6321318500000000, 0xfda2eb1a00000000, 0x1e20f56100000000,
4065
+ 0x80a32ffe00000000, 0xae2c3ab200000000, 0x30afe02d00000000,
4066
+ 0xd32dfe5600000000, 0x4dae24c900000000, 0x1528c3a000000000,
4067
+ 0x8bab193f00000000, 0x6829074400000000, 0xf6aadddb00000000,
4068
+ 0x34372cdc00000000, 0xaab4f64300000000, 0x4936e83800000000,
4069
+ 0xd7b532a700000000, 0x8f33d5ce00000000, 0x11b00f5100000000,
4070
+ 0xf232112a00000000, 0x6cb1cbb500000000, 0x423edef900000000,
4071
+ 0xdcbd046600000000, 0x3f3f1a1d00000000, 0xa1bcc08200000000,
4072
+ 0xf93a27eb00000000, 0x67b9fd7400000000, 0x843be30f00000000,
4073
+ 0x1ab8399000000000, 0xf14de1f400000000, 0x6fce3b6b00000000,
4074
+ 0x8c4c251000000000, 0x12cfff8f00000000, 0x4a4918e600000000,
4075
+ 0xd4cac27900000000, 0x3748dc0200000000, 0xa9cb069d00000000,
4076
+ 0x874413d100000000, 0x19c7c94e00000000, 0xfa45d73500000000,
4077
+ 0x64c60daa00000000, 0x3c40eac300000000, 0xa2c3305c00000000,
4078
+ 0x41412e2700000000, 0xdfc2f4b800000000, 0x1d5f05bf00000000,
4079
+ 0x83dcdf2000000000, 0x605ec15b00000000, 0xfedd1bc400000000,
4080
+ 0xa65bfcad00000000, 0x38d8263200000000, 0xdb5a384900000000,
4081
+ 0x45d9e2d600000000, 0x6b56f79a00000000, 0xf5d52d0500000000,
4082
+ 0x1657337e00000000, 0x88d4e9e100000000, 0xd0520e8800000000,
4083
+ 0x4ed1d41700000000, 0xad53ca6c00000000, 0x33d010f300000000,
4084
+ 0x2968296300000000, 0xb7ebf3fc00000000, 0x5469ed8700000000,
4085
+ 0xcaea371800000000, 0x926cd07100000000, 0x0cef0aee00000000,
4086
+ 0xef6d149500000000, 0x71eece0a00000000, 0x5f61db4600000000,
4087
+ 0xc1e201d900000000, 0x22601fa200000000, 0xbce3c53d00000000,
4088
+ 0xe465225400000000, 0x7ae6f8cb00000000, 0x9964e6b000000000,
4089
+ 0x07e73c2f00000000, 0xc57acd2800000000, 0x5bf917b700000000,
4090
+ 0xb87b09cc00000000, 0x26f8d35300000000, 0x7e7e343a00000000,
4091
+ 0xe0fdeea500000000, 0x037ff0de00000000, 0x9dfc2a4100000000,
4092
+ 0xb3733f0d00000000, 0x2df0e59200000000, 0xce72fbe900000000,
4093
+ 0x50f1217600000000, 0x0877c61f00000000, 0x96f41c8000000000,
4094
+ 0x757602fb00000000, 0xebf5d86400000000, 0xa39db33200000000,
4095
+ 0x3d1e69ad00000000, 0xde9c77d600000000, 0x401fad4900000000,
4096
+ 0x18994a2000000000, 0x861a90bf00000000, 0x65988ec400000000,
4097
+ 0xfb1b545b00000000, 0xd594411700000000, 0x4b179b8800000000,
4098
+ 0xa89585f300000000, 0x36165f6c00000000, 0x6e90b80500000000,
4099
+ 0xf013629a00000000, 0x13917ce100000000, 0x8d12a67e00000000,
4100
+ 0x4f8f577900000000, 0xd10c8de600000000, 0x328e939d00000000,
4101
+ 0xac0d490200000000, 0xf48bae6b00000000, 0x6a0874f400000000,
4102
+ 0x898a6a8f00000000, 0x1709b01000000000, 0x3986a55c00000000,
4103
+ 0xa7057fc300000000, 0x448761b800000000, 0xda04bb2700000000,
4104
+ 0x82825c4e00000000, 0x1c0186d100000000, 0xff8398aa00000000,
4105
+ 0x6100423500000000, 0x7bb87ba500000000, 0xe53ba13a00000000,
4106
+ 0x06b9bf4100000000, 0x983a65de00000000, 0xc0bc82b700000000,
4107
+ 0x5e3f582800000000, 0xbdbd465300000000, 0x233e9ccc00000000,
4108
+ 0x0db1898000000000, 0x9332531f00000000, 0x70b04d6400000000,
4109
+ 0xee3397fb00000000, 0xb6b5709200000000, 0x2836aa0d00000000,
4110
+ 0xcbb4b47600000000, 0x55376ee900000000, 0x97aa9fee00000000,
4111
+ 0x0929457100000000, 0xeaab5b0a00000000, 0x7428819500000000,
4112
+ 0x2cae66fc00000000, 0xb22dbc6300000000, 0x51afa21800000000,
4113
+ 0xcf2c788700000000, 0xe1a36dcb00000000, 0x7f20b75400000000,
4114
+ 0x9ca2a92f00000000, 0x022173b000000000, 0x5aa794d900000000,
4115
+ 0xc4244e4600000000, 0x27a6503d00000000, 0xb9258aa200000000,
4116
+ 0x52d052c600000000, 0xcc53885900000000, 0x2fd1962200000000,
4117
+ 0xb1524cbd00000000, 0xe9d4abd400000000, 0x7757714b00000000,
4118
+ 0x94d56f3000000000, 0x0a56b5af00000000, 0x24d9a0e300000000,
4119
+ 0xba5a7a7c00000000, 0x59d8640700000000, 0xc75bbe9800000000,
4120
+ 0x9fdd59f100000000, 0x015e836e00000000, 0xe2dc9d1500000000,
4121
+ 0x7c5f478a00000000, 0xbec2b68d00000000, 0x20416c1200000000,
4122
+ 0xc3c3726900000000, 0x5d40a8f600000000, 0x05c64f9f00000000,
4123
+ 0x9b45950000000000, 0x78c78b7b00000000, 0xe64451e400000000,
4124
+ 0xc8cb44a800000000, 0x56489e3700000000, 0xb5ca804c00000000,
4125
+ 0x2b495ad300000000, 0x73cfbdba00000000, 0xed4c672500000000,
4126
+ 0x0ece795e00000000, 0x904da3c100000000, 0x8af59a5100000000,
4127
+ 0x147640ce00000000, 0xf7f45eb500000000, 0x6977842a00000000,
4128
+ 0x31f1634300000000, 0xaf72b9dc00000000, 0x4cf0a7a700000000,
4129
+ 0xd2737d3800000000, 0xfcfc687400000000, 0x627fb2eb00000000,
4130
+ 0x81fdac9000000000, 0x1f7e760f00000000, 0x47f8916600000000,
4131
+ 0xd97b4bf900000000, 0x3af9558200000000, 0xa47a8f1d00000000,
4132
+ 0x66e77e1a00000000, 0xf864a48500000000, 0x1be6bafe00000000,
4133
+ 0x8565606100000000, 0xdde3870800000000, 0x43605d9700000000,
4134
+ 0xa0e243ec00000000, 0x3e61997300000000, 0x10ee8c3f00000000,
4135
+ 0x8e6d56a000000000, 0x6def48db00000000, 0xf36c924400000000,
4136
+ 0xabea752d00000000, 0x3569afb200000000, 0xd6ebb1c900000000,
4137
+ 0x48686b5600000000},
4138
+ {0x0000000000000000, 0xc064281700000000, 0x80c9502e00000000,
4139
+ 0x40ad783900000000, 0x0093a15c00000000, 0xc0f7894b00000000,
4140
+ 0x805af17200000000, 0x403ed96500000000, 0x002643b900000000,
4141
+ 0xc0426bae00000000, 0x80ef139700000000, 0x408b3b8000000000,
4142
+ 0x00b5e2e500000000, 0xc0d1caf200000000, 0x807cb2cb00000000,
4143
+ 0x40189adc00000000, 0x414af7a900000000, 0x812edfbe00000000,
4144
+ 0xc183a78700000000, 0x01e78f9000000000, 0x41d956f500000000,
4145
+ 0x81bd7ee200000000, 0xc11006db00000000, 0x01742ecc00000000,
4146
+ 0x416cb41000000000, 0x81089c0700000000, 0xc1a5e43e00000000,
4147
+ 0x01c1cc2900000000, 0x41ff154c00000000, 0x819b3d5b00000000,
4148
+ 0xc136456200000000, 0x01526d7500000000, 0xc3929f8800000000,
4149
+ 0x03f6b79f00000000, 0x435bcfa600000000, 0x833fe7b100000000,
4150
+ 0xc3013ed400000000, 0x036516c300000000, 0x43c86efa00000000,
4151
+ 0x83ac46ed00000000, 0xc3b4dc3100000000, 0x03d0f42600000000,
4152
+ 0x437d8c1f00000000, 0x8319a40800000000, 0xc3277d6d00000000,
4153
+ 0x0343557a00000000, 0x43ee2d4300000000, 0x838a055400000000,
4154
+ 0x82d8682100000000, 0x42bc403600000000, 0x0211380f00000000,
4155
+ 0xc275101800000000, 0x824bc97d00000000, 0x422fe16a00000000,
4156
+ 0x0282995300000000, 0xc2e6b14400000000, 0x82fe2b9800000000,
4157
+ 0x429a038f00000000, 0x02377bb600000000, 0xc25353a100000000,
4158
+ 0x826d8ac400000000, 0x4209a2d300000000, 0x02a4daea00000000,
4159
+ 0xc2c0f2fd00000000, 0xc7234eca00000000, 0x074766dd00000000,
4160
+ 0x47ea1ee400000000, 0x878e36f300000000, 0xc7b0ef9600000000,
4161
+ 0x07d4c78100000000, 0x4779bfb800000000, 0x871d97af00000000,
4162
+ 0xc7050d7300000000, 0x0761256400000000, 0x47cc5d5d00000000,
4163
+ 0x87a8754a00000000, 0xc796ac2f00000000, 0x07f2843800000000,
4164
+ 0x475ffc0100000000, 0x873bd41600000000, 0x8669b96300000000,
4165
+ 0x460d917400000000, 0x06a0e94d00000000, 0xc6c4c15a00000000,
4166
+ 0x86fa183f00000000, 0x469e302800000000, 0x0633481100000000,
4167
+ 0xc657600600000000, 0x864ffada00000000, 0x462bd2cd00000000,
4168
+ 0x0686aaf400000000, 0xc6e282e300000000, 0x86dc5b8600000000,
4169
+ 0x46b8739100000000, 0x06150ba800000000, 0xc67123bf00000000,
4170
+ 0x04b1d14200000000, 0xc4d5f95500000000, 0x8478816c00000000,
4171
+ 0x441ca97b00000000, 0x0422701e00000000, 0xc446580900000000,
4172
+ 0x84eb203000000000, 0x448f082700000000, 0x049792fb00000000,
4173
+ 0xc4f3baec00000000, 0x845ec2d500000000, 0x443aeac200000000,
4174
+ 0x040433a700000000, 0xc4601bb000000000, 0x84cd638900000000,
4175
+ 0x44a94b9e00000000, 0x45fb26eb00000000, 0x859f0efc00000000,
4176
+ 0xc53276c500000000, 0x05565ed200000000, 0x456887b700000000,
4177
+ 0x850cafa000000000, 0xc5a1d79900000000, 0x05c5ff8e00000000,
4178
+ 0x45dd655200000000, 0x85b94d4500000000, 0xc514357c00000000,
4179
+ 0x05701d6b00000000, 0x454ec40e00000000, 0x852aec1900000000,
4180
+ 0xc587942000000000, 0x05e3bc3700000000, 0xcf41ed4f00000000,
4181
+ 0x0f25c55800000000, 0x4f88bd6100000000, 0x8fec957600000000,
4182
+ 0xcfd24c1300000000, 0x0fb6640400000000, 0x4f1b1c3d00000000,
4183
+ 0x8f7f342a00000000, 0xcf67aef600000000, 0x0f0386e100000000,
4184
+ 0x4faefed800000000, 0x8fcad6cf00000000, 0xcff40faa00000000,
4185
+ 0x0f9027bd00000000, 0x4f3d5f8400000000, 0x8f59779300000000,
4186
+ 0x8e0b1ae600000000, 0x4e6f32f100000000, 0x0ec24ac800000000,
4187
+ 0xcea662df00000000, 0x8e98bbba00000000, 0x4efc93ad00000000,
4188
+ 0x0e51eb9400000000, 0xce35c38300000000, 0x8e2d595f00000000,
4189
+ 0x4e49714800000000, 0x0ee4097100000000, 0xce80216600000000,
4190
+ 0x8ebef80300000000, 0x4edad01400000000, 0x0e77a82d00000000,
4191
+ 0xce13803a00000000, 0x0cd372c700000000, 0xccb75ad000000000,
4192
+ 0x8c1a22e900000000, 0x4c7e0afe00000000, 0x0c40d39b00000000,
4193
+ 0xcc24fb8c00000000, 0x8c8983b500000000, 0x4cedaba200000000,
4194
+ 0x0cf5317e00000000, 0xcc91196900000000, 0x8c3c615000000000,
4195
+ 0x4c58494700000000, 0x0c66902200000000, 0xcc02b83500000000,
4196
+ 0x8cafc00c00000000, 0x4ccbe81b00000000, 0x4d99856e00000000,
4197
+ 0x8dfdad7900000000, 0xcd50d54000000000, 0x0d34fd5700000000,
4198
+ 0x4d0a243200000000, 0x8d6e0c2500000000, 0xcdc3741c00000000,
4199
+ 0x0da75c0b00000000, 0x4dbfc6d700000000, 0x8ddbeec000000000,
4200
+ 0xcd7696f900000000, 0x0d12beee00000000, 0x4d2c678b00000000,
4201
+ 0x8d484f9c00000000, 0xcde537a500000000, 0x0d811fb200000000,
4202
+ 0x0862a38500000000, 0xc8068b9200000000, 0x88abf3ab00000000,
4203
+ 0x48cfdbbc00000000, 0x08f102d900000000, 0xc8952ace00000000,
4204
+ 0x883852f700000000, 0x485c7ae000000000, 0x0844e03c00000000,
4205
+ 0xc820c82b00000000, 0x888db01200000000, 0x48e9980500000000,
4206
+ 0x08d7416000000000, 0xc8b3697700000000, 0x881e114e00000000,
4207
+ 0x487a395900000000, 0x4928542c00000000, 0x894c7c3b00000000,
4208
+ 0xc9e1040200000000, 0x09852c1500000000, 0x49bbf57000000000,
4209
+ 0x89dfdd6700000000, 0xc972a55e00000000, 0x09168d4900000000,
4210
+ 0x490e179500000000, 0x896a3f8200000000, 0xc9c747bb00000000,
4211
+ 0x09a36fac00000000, 0x499db6c900000000, 0x89f99ede00000000,
4212
+ 0xc954e6e700000000, 0x0930cef000000000, 0xcbf03c0d00000000,
4213
+ 0x0b94141a00000000, 0x4b396c2300000000, 0x8b5d443400000000,
4214
+ 0xcb639d5100000000, 0x0b07b54600000000, 0x4baacd7f00000000,
4215
+ 0x8bcee56800000000, 0xcbd67fb400000000, 0x0bb257a300000000,
4216
+ 0x4b1f2f9a00000000, 0x8b7b078d00000000, 0xcb45dee800000000,
4217
+ 0x0b21f6ff00000000, 0x4b8c8ec600000000, 0x8be8a6d100000000,
4218
+ 0x8abacba400000000, 0x4adee3b300000000, 0x0a739b8a00000000,
4219
+ 0xca17b39d00000000, 0x8a296af800000000, 0x4a4d42ef00000000,
4220
+ 0x0ae03ad600000000, 0xca8412c100000000, 0x8a9c881d00000000,
4221
+ 0x4af8a00a00000000, 0x0a55d83300000000, 0xca31f02400000000,
4222
+ 0x8a0f294100000000, 0x4a6b015600000000, 0x0ac6796f00000000,
4223
+ 0xcaa2517800000000},
4224
+ {0x0000000000000000, 0xd4ea739b00000000, 0xe9d396ed00000000,
4225
+ 0x3d39e57600000000, 0x93a15c0000000000, 0x474b2f9b00000000,
4226
+ 0x7a72caed00000000, 0xae98b97600000000, 0x2643b90000000000,
4227
+ 0xf2a9ca9b00000000, 0xcf902fed00000000, 0x1b7a5c7600000000,
4228
+ 0xb5e2e50000000000, 0x6108969b00000000, 0x5c3173ed00000000,
4229
+ 0x88db007600000000, 0x4c86720100000000, 0x986c019a00000000,
4230
+ 0xa555e4ec00000000, 0x71bf977700000000, 0xdf272e0100000000,
4231
+ 0x0bcd5d9a00000000, 0x36f4b8ec00000000, 0xe21ecb7700000000,
4232
+ 0x6ac5cb0100000000, 0xbe2fb89a00000000, 0x83165dec00000000,
4233
+ 0x57fc2e7700000000, 0xf964970100000000, 0x2d8ee49a00000000,
4234
+ 0x10b701ec00000000, 0xc45d727700000000, 0x980ce50200000000,
4235
+ 0x4ce6969900000000, 0x71df73ef00000000, 0xa535007400000000,
4236
+ 0x0badb90200000000, 0xdf47ca9900000000, 0xe27e2fef00000000,
4237
+ 0x36945c7400000000, 0xbe4f5c0200000000, 0x6aa52f9900000000,
4238
+ 0x579ccaef00000000, 0x8376b97400000000, 0x2dee000200000000,
4239
+ 0xf904739900000000, 0xc43d96ef00000000, 0x10d7e57400000000,
4240
+ 0xd48a970300000000, 0x0060e49800000000, 0x3d5901ee00000000,
4241
+ 0xe9b3727500000000, 0x472bcb0300000000, 0x93c1b89800000000,
4242
+ 0xaef85dee00000000, 0x7a122e7500000000, 0xf2c92e0300000000,
4243
+ 0x26235d9800000000, 0x1b1ab8ee00000000, 0xcff0cb7500000000,
4244
+ 0x6168720300000000, 0xb582019800000000, 0x88bbe4ee00000000,
4245
+ 0x5c51977500000000, 0x3019ca0500000000, 0xe4f3b99e00000000,
4246
+ 0xd9ca5ce800000000, 0x0d202f7300000000, 0xa3b8960500000000,
4247
+ 0x7752e59e00000000, 0x4a6b00e800000000, 0x9e81737300000000,
4248
+ 0x165a730500000000, 0xc2b0009e00000000, 0xff89e5e800000000,
4249
+ 0x2b63967300000000, 0x85fb2f0500000000, 0x51115c9e00000000,
4250
+ 0x6c28b9e800000000, 0xb8c2ca7300000000, 0x7c9fb80400000000,
4251
+ 0xa875cb9f00000000, 0x954c2ee900000000, 0x41a65d7200000000,
4252
+ 0xef3ee40400000000, 0x3bd4979f00000000, 0x06ed72e900000000,
4253
+ 0xd207017200000000, 0x5adc010400000000, 0x8e36729f00000000,
4254
+ 0xb30f97e900000000, 0x67e5e47200000000, 0xc97d5d0400000000,
4255
+ 0x1d972e9f00000000, 0x20aecbe900000000, 0xf444b87200000000,
4256
+ 0xa8152f0700000000, 0x7cff5c9c00000000, 0x41c6b9ea00000000,
4257
+ 0x952cca7100000000, 0x3bb4730700000000, 0xef5e009c00000000,
4258
+ 0xd267e5ea00000000, 0x068d967100000000, 0x8e56960700000000,
4259
+ 0x5abce59c00000000, 0x678500ea00000000, 0xb36f737100000000,
4260
+ 0x1df7ca0700000000, 0xc91db99c00000000, 0xf4245cea00000000,
4261
+ 0x20ce2f7100000000, 0xe4935d0600000000, 0x30792e9d00000000,
4262
+ 0x0d40cbeb00000000, 0xd9aab87000000000, 0x7732010600000000,
4263
+ 0xa3d8729d00000000, 0x9ee197eb00000000, 0x4a0be47000000000,
4264
+ 0xc2d0e40600000000, 0x163a979d00000000, 0x2b0372eb00000000,
4265
+ 0xffe9017000000000, 0x5171b80600000000, 0x859bcb9d00000000,
4266
+ 0xb8a22eeb00000000, 0x6c485d7000000000, 0x6032940b00000000,
4267
+ 0xb4d8e79000000000, 0x89e102e600000000, 0x5d0b717d00000000,
4268
+ 0xf393c80b00000000, 0x2779bb9000000000, 0x1a405ee600000000,
4269
+ 0xceaa2d7d00000000, 0x46712d0b00000000, 0x929b5e9000000000,
4270
+ 0xafa2bbe600000000, 0x7b48c87d00000000, 0xd5d0710b00000000,
4271
+ 0x013a029000000000, 0x3c03e7e600000000, 0xe8e9947d00000000,
4272
+ 0x2cb4e60a00000000, 0xf85e959100000000, 0xc56770e700000000,
4273
+ 0x118d037c00000000, 0xbf15ba0a00000000, 0x6bffc99100000000,
4274
+ 0x56c62ce700000000, 0x822c5f7c00000000, 0x0af75f0a00000000,
4275
+ 0xde1d2c9100000000, 0xe324c9e700000000, 0x37ceba7c00000000,
4276
+ 0x9956030a00000000, 0x4dbc709100000000, 0x708595e700000000,
4277
+ 0xa46fe67c00000000, 0xf83e710900000000, 0x2cd4029200000000,
4278
+ 0x11ede7e400000000, 0xc507947f00000000, 0x6b9f2d0900000000,
4279
+ 0xbf755e9200000000, 0x824cbbe400000000, 0x56a6c87f00000000,
4280
+ 0xde7dc80900000000, 0x0a97bb9200000000, 0x37ae5ee400000000,
4281
+ 0xe3442d7f00000000, 0x4ddc940900000000, 0x9936e79200000000,
4282
+ 0xa40f02e400000000, 0x70e5717f00000000, 0xb4b8030800000000,
4283
+ 0x6052709300000000, 0x5d6b95e500000000, 0x8981e67e00000000,
4284
+ 0x27195f0800000000, 0xf3f32c9300000000, 0xcecac9e500000000,
4285
+ 0x1a20ba7e00000000, 0x92fbba0800000000, 0x4611c99300000000,
4286
+ 0x7b282ce500000000, 0xafc25f7e00000000, 0x015ae60800000000,
4287
+ 0xd5b0959300000000, 0xe88970e500000000, 0x3c63037e00000000,
4288
+ 0x502b5e0e00000000, 0x84c12d9500000000, 0xb9f8c8e300000000,
4289
+ 0x6d12bb7800000000, 0xc38a020e00000000, 0x1760719500000000,
4290
+ 0x2a5994e300000000, 0xfeb3e77800000000, 0x7668e70e00000000,
4291
+ 0xa282949500000000, 0x9fbb71e300000000, 0x4b51027800000000,
4292
+ 0xe5c9bb0e00000000, 0x3123c89500000000, 0x0c1a2de300000000,
4293
+ 0xd8f05e7800000000, 0x1cad2c0f00000000, 0xc8475f9400000000,
4294
+ 0xf57ebae200000000, 0x2194c97900000000, 0x8f0c700f00000000,
4295
+ 0x5be6039400000000, 0x66dfe6e200000000, 0xb235957900000000,
4296
+ 0x3aee950f00000000, 0xee04e69400000000, 0xd33d03e200000000,
4297
+ 0x07d7707900000000, 0xa94fc90f00000000, 0x7da5ba9400000000,
4298
+ 0x409c5fe200000000, 0x94762c7900000000, 0xc827bb0c00000000,
4299
+ 0x1ccdc89700000000, 0x21f42de100000000, 0xf51e5e7a00000000,
4300
+ 0x5b86e70c00000000, 0x8f6c949700000000, 0xb25571e100000000,
4301
+ 0x66bf027a00000000, 0xee64020c00000000, 0x3a8e719700000000,
4302
+ 0x07b794e100000000, 0xd35de77a00000000, 0x7dc55e0c00000000,
4303
+ 0xa92f2d9700000000, 0x9416c8e100000000, 0x40fcbb7a00000000,
4304
+ 0x84a1c90d00000000, 0x504bba9600000000, 0x6d725fe000000000,
4305
+ 0xb9982c7b00000000, 0x1700950d00000000, 0xc3eae69600000000,
4306
+ 0xfed303e000000000, 0x2a39707b00000000, 0xa2e2700d00000000,
4307
+ 0x7608039600000000, 0x4b31e6e000000000, 0x9fdb957b00000000,
4308
+ 0x31432c0d00000000, 0xe5a95f9600000000, 0xd890bae000000000,
4309
+ 0x0c7ac97b00000000},
4310
+ {0x0000000000000000, 0x2765258100000000, 0x0fcc3bd900000000,
4311
+ 0x28a91e5800000000, 0x5f9e066900000000, 0x78fb23e800000000,
4312
+ 0x50523db000000000, 0x7737183100000000, 0xbe3c0dd200000000,
4313
+ 0x9959285300000000, 0xb1f0360b00000000, 0x9695138a00000000,
4314
+ 0xe1a20bbb00000000, 0xc6c72e3a00000000, 0xee6e306200000000,
4315
+ 0xc90b15e300000000, 0x3d7f6b7f00000000, 0x1a1a4efe00000000,
4316
+ 0x32b350a600000000, 0x15d6752700000000, 0x62e16d1600000000,
4317
+ 0x4584489700000000, 0x6d2d56cf00000000, 0x4a48734e00000000,
4318
+ 0x834366ad00000000, 0xa426432c00000000, 0x8c8f5d7400000000,
4319
+ 0xabea78f500000000, 0xdcdd60c400000000, 0xfbb8454500000000,
4320
+ 0xd3115b1d00000000, 0xf4747e9c00000000, 0x7afed6fe00000000,
4321
+ 0x5d9bf37f00000000, 0x7532ed2700000000, 0x5257c8a600000000,
4322
+ 0x2560d09700000000, 0x0205f51600000000, 0x2aaceb4e00000000,
4323
+ 0x0dc9cecf00000000, 0xc4c2db2c00000000, 0xe3a7fead00000000,
4324
+ 0xcb0ee0f500000000, 0xec6bc57400000000, 0x9b5cdd4500000000,
4325
+ 0xbc39f8c400000000, 0x9490e69c00000000, 0xb3f5c31d00000000,
4326
+ 0x4781bd8100000000, 0x60e4980000000000, 0x484d865800000000,
4327
+ 0x6f28a3d900000000, 0x181fbbe800000000, 0x3f7a9e6900000000,
4328
+ 0x17d3803100000000, 0x30b6a5b000000000, 0xf9bdb05300000000,
4329
+ 0xded895d200000000, 0xf6718b8a00000000, 0xd114ae0b00000000,
4330
+ 0xa623b63a00000000, 0x814693bb00000000, 0xa9ef8de300000000,
4331
+ 0x8e8aa86200000000, 0xb5fadc2600000000, 0x929ff9a700000000,
4332
+ 0xba36e7ff00000000, 0x9d53c27e00000000, 0xea64da4f00000000,
4333
+ 0xcd01ffce00000000, 0xe5a8e19600000000, 0xc2cdc41700000000,
4334
+ 0x0bc6d1f400000000, 0x2ca3f47500000000, 0x040aea2d00000000,
4335
+ 0x236fcfac00000000, 0x5458d79d00000000, 0x733df21c00000000,
4336
+ 0x5b94ec4400000000, 0x7cf1c9c500000000, 0x8885b75900000000,
4337
+ 0xafe092d800000000, 0x87498c8000000000, 0xa02ca90100000000,
4338
+ 0xd71bb13000000000, 0xf07e94b100000000, 0xd8d78ae900000000,
4339
+ 0xffb2af6800000000, 0x36b9ba8b00000000, 0x11dc9f0a00000000,
4340
+ 0x3975815200000000, 0x1e10a4d300000000, 0x6927bce200000000,
4341
+ 0x4e42996300000000, 0x66eb873b00000000, 0x418ea2ba00000000,
4342
+ 0xcf040ad800000000, 0xe8612f5900000000, 0xc0c8310100000000,
4343
+ 0xe7ad148000000000, 0x909a0cb100000000, 0xb7ff293000000000,
4344
+ 0x9f56376800000000, 0xb83312e900000000, 0x7138070a00000000,
4345
+ 0x565d228b00000000, 0x7ef43cd300000000, 0x5991195200000000,
4346
+ 0x2ea6016300000000, 0x09c324e200000000, 0x216a3aba00000000,
4347
+ 0x060f1f3b00000000, 0xf27b61a700000000, 0xd51e442600000000,
4348
+ 0xfdb75a7e00000000, 0xdad27fff00000000, 0xade567ce00000000,
4349
+ 0x8a80424f00000000, 0xa2295c1700000000, 0x854c799600000000,
4350
+ 0x4c476c7500000000, 0x6b2249f400000000, 0x438b57ac00000000,
4351
+ 0x64ee722d00000000, 0x13d96a1c00000000, 0x34bc4f9d00000000,
4352
+ 0x1c1551c500000000, 0x3b70744400000000, 0x6af5b94d00000000,
4353
+ 0x4d909ccc00000000, 0x6539829400000000, 0x425ca71500000000,
4354
+ 0x356bbf2400000000, 0x120e9aa500000000, 0x3aa784fd00000000,
4355
+ 0x1dc2a17c00000000, 0xd4c9b49f00000000, 0xf3ac911e00000000,
4356
+ 0xdb058f4600000000, 0xfc60aac700000000, 0x8b57b2f600000000,
4357
+ 0xac32977700000000, 0x849b892f00000000, 0xa3feacae00000000,
4358
+ 0x578ad23200000000, 0x70eff7b300000000, 0x5846e9eb00000000,
4359
+ 0x7f23cc6a00000000, 0x0814d45b00000000, 0x2f71f1da00000000,
4360
+ 0x07d8ef8200000000, 0x20bdca0300000000, 0xe9b6dfe000000000,
4361
+ 0xced3fa6100000000, 0xe67ae43900000000, 0xc11fc1b800000000,
4362
+ 0xb628d98900000000, 0x914dfc0800000000, 0xb9e4e25000000000,
4363
+ 0x9e81c7d100000000, 0x100b6fb300000000, 0x376e4a3200000000,
4364
+ 0x1fc7546a00000000, 0x38a271eb00000000, 0x4f9569da00000000,
4365
+ 0x68f04c5b00000000, 0x4059520300000000, 0x673c778200000000,
4366
+ 0xae37626100000000, 0x895247e000000000, 0xa1fb59b800000000,
4367
+ 0x869e7c3900000000, 0xf1a9640800000000, 0xd6cc418900000000,
4368
+ 0xfe655fd100000000, 0xd9007a5000000000, 0x2d7404cc00000000,
4369
+ 0x0a11214d00000000, 0x22b83f1500000000, 0x05dd1a9400000000,
4370
+ 0x72ea02a500000000, 0x558f272400000000, 0x7d26397c00000000,
4371
+ 0x5a431cfd00000000, 0x9348091e00000000, 0xb42d2c9f00000000,
4372
+ 0x9c8432c700000000, 0xbbe1174600000000, 0xccd60f7700000000,
4373
+ 0xebb32af600000000, 0xc31a34ae00000000, 0xe47f112f00000000,
4374
+ 0xdf0f656b00000000, 0xf86a40ea00000000, 0xd0c35eb200000000,
4375
+ 0xf7a67b3300000000, 0x8091630200000000, 0xa7f4468300000000,
4376
+ 0x8f5d58db00000000, 0xa8387d5a00000000, 0x613368b900000000,
4377
+ 0x46564d3800000000, 0x6eff536000000000, 0x499a76e100000000,
4378
+ 0x3ead6ed000000000, 0x19c84b5100000000, 0x3161550900000000,
4379
+ 0x1604708800000000, 0xe2700e1400000000, 0xc5152b9500000000,
4380
+ 0xedbc35cd00000000, 0xcad9104c00000000, 0xbdee087d00000000,
4381
+ 0x9a8b2dfc00000000, 0xb22233a400000000, 0x9547162500000000,
4382
+ 0x5c4c03c600000000, 0x7b29264700000000, 0x5380381f00000000,
4383
+ 0x74e51d9e00000000, 0x03d205af00000000, 0x24b7202e00000000,
4384
+ 0x0c1e3e7600000000, 0x2b7b1bf700000000, 0xa5f1b39500000000,
4385
+ 0x8294961400000000, 0xaa3d884c00000000, 0x8d58adcd00000000,
4386
+ 0xfa6fb5fc00000000, 0xdd0a907d00000000, 0xf5a38e2500000000,
4387
+ 0xd2c6aba400000000, 0x1bcdbe4700000000, 0x3ca89bc600000000,
4388
+ 0x1401859e00000000, 0x3364a01f00000000, 0x4453b82e00000000,
4389
+ 0x63369daf00000000, 0x4b9f83f700000000, 0x6cfaa67600000000,
4390
+ 0x988ed8ea00000000, 0xbfebfd6b00000000, 0x9742e33300000000,
4391
+ 0xb027c6b200000000, 0xc710de8300000000, 0xe075fb0200000000,
4392
+ 0xc8dce55a00000000, 0xefb9c0db00000000, 0x26b2d53800000000,
4393
+ 0x01d7f0b900000000, 0x297eeee100000000, 0x0e1bcb6000000000,
4394
+ 0x792cd35100000000, 0x5e49f6d000000000, 0x76e0e88800000000,
4395
+ 0x5185cd0900000000}};
4396
+
4397
+#else /* W == 4 */
4398
+
4399
+local const z_crc_t FAR crc_braid_table[][256] = {
4400
+ {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f,
4401
+ 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91,
4402
+ 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e,
4403
+ 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c,
4404
+ 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02,
4405
+ 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12,
4406
+ 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567,
4407
+ 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277,
4408
+ 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679,
4409
+ 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b,
4410
+ 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4,
4411
+ 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a,
4412
+ 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0,
4413
+ 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0,
4414
+ 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91,
4415
+ 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881,
4416
+ 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173,
4417
+ 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d,
4418
+ 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912,
4419
+ 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8,
4420
+ 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6,
4421
+ 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6,
4422
+ 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b,
4423
+ 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b,
4424
+ 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75,
4425
+ 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f,
4426
+ 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00,
4427
+ 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee,
4428
+ 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c,
4429
+ 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c,
4430
+ 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d,
4431
+ 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d,
4432
+ 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67,
4433
+ 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89,
4434
+ 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706,
4435
+ 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14,
4436
+ 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a,
4437
+ 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a,
4438
+ 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f,
4439
+ 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f,
4440
+ 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591,
4441
+ 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983,
4442
+ 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c,
4443
+ 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2,
4444
+ 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8,
4445
+ 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8,
4446
+ 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89,
4447
+ 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99,
4448
+ 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b,
4449
+ 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485,
4450
+ 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a,
4451
+ 0x36197165},
4452
+ {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382,
4453
+ 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85,
4454
+ 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06,
4455
+ 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca,
4456
+ 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e,
4457
+ 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc,
4458
+ 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616,
4459
+ 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54,
4460
+ 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10,
4461
+ 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc,
4462
+ 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f,
4463
+ 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58,
4464
+ 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef,
4465
+ 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad,
4466
+ 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b,
4467
+ 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29,
4468
+ 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6,
4469
+ 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1,
4470
+ 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622,
4471
+ 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039,
4472
+ 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d,
4473
+ 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f,
4474
+ 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32,
4475
+ 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770,
4476
+ 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034,
4477
+ 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f,
4478
+ 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc,
4479
+ 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db,
4480
+ 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154,
4481
+ 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16,
4482
+ 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0,
4483
+ 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592,
4484
+ 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca,
4485
+ 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd,
4486
+ 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e,
4487
+ 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882,
4488
+ 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6,
4489
+ 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384,
4490
+ 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1,
4491
+ 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3,
4492
+ 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7,
4493
+ 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b,
4494
+ 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8,
4495
+ 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff,
4496
+ 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7,
4497
+ 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5,
4498
+ 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23,
4499
+ 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761,
4500
+ 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee,
4501
+ 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9,
4502
+ 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a,
4503
+ 0x1a3b93aa},
4504
+ {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a,
4505
+ 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca,
4506
+ 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3,
4507
+ 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb,
4508
+ 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c,
4509
+ 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58,
4510
+ 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed,
4511
+ 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9,
4512
+ 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e,
4513
+ 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906,
4514
+ 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f,
4515
+ 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf,
4516
+ 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0,
4517
+ 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4,
4518
+ 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769,
4519
+ 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d,
4520
+ 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632,
4521
+ 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82,
4522
+ 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb,
4523
+ 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73,
4524
+ 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484,
4525
+ 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0,
4526
+ 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5,
4527
+ 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1,
4528
+ 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516,
4529
+ 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f,
4530
+ 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946,
4531
+ 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6,
4532
+ 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9,
4533
+ 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad,
4534
+ 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820,
4535
+ 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364,
4536
+ 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab,
4537
+ 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b,
4538
+ 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62,
4539
+ 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a,
4540
+ 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd,
4541
+ 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089,
4542
+ 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c,
4543
+ 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8,
4544
+ 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f,
4545
+ 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477,
4546
+ 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e,
4547
+ 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be,
4548
+ 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71,
4549
+ 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635,
4550
+ 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8,
4551
+ 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc,
4552
+ 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3,
4553
+ 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753,
4554
+ 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a,
4555
+ 0xe147d714},
4556
+ {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c,
4557
+ 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b,
4558
+ 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92,
4559
+ 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4,
4560
+ 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069,
4561
+ 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526,
4562
+ 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25,
4563
+ 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a,
4564
+ 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7,
4565
+ 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491,
4566
+ 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958,
4567
+ 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f,
4568
+ 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307,
4569
+ 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648,
4570
+ 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999,
4571
+ 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6,
4572
+ 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a,
4573
+ 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d,
4574
+ 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4,
4575
+ 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61,
4576
+ 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc,
4577
+ 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3,
4578
+ 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53,
4579
+ 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c,
4580
+ 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1,
4581
+ 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c,
4582
+ 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5,
4583
+ 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92,
4584
+ 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e,
4585
+ 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771,
4586
+ 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0,
4587
+ 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def,
4588
+ 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0,
4589
+ 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7,
4590
+ 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e,
4591
+ 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58,
4592
+ 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285,
4593
+ 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca,
4594
+ 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce,
4595
+ 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81,
4596
+ 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c,
4597
+ 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a,
4598
+ 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3,
4599
+ 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4,
4600
+ 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb,
4601
+ 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4,
4602
+ 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75,
4603
+ 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a,
4604
+ 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296,
4605
+ 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1,
4606
+ 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808,
4607
+ 0x494f0c4b}};
4608
+
4609
+local const z_word_t FAR crc_braid_big_table[][256] = {
4610
+ {0x00000000, 0x43147b17, 0x8628f62e, 0xc53c8d39, 0x0c51ec5d,
4611
+ 0x4f45974a, 0x8a791a73, 0xc96d6164, 0x18a2d8bb, 0x5bb6a3ac,
4612
+ 0x9e8a2e95, 0xdd9e5582, 0x14f334e6, 0x57e74ff1, 0x92dbc2c8,
4613
+ 0xd1cfb9df, 0x7142c0ac, 0x3256bbbb, 0xf76a3682, 0xb47e4d95,
4614
+ 0x7d132cf1, 0x3e0757e6, 0xfb3bdadf, 0xb82fa1c8, 0x69e01817,
4615
+ 0x2af46300, 0xefc8ee39, 0xacdc952e, 0x65b1f44a, 0x26a58f5d,
4616
+ 0xe3990264, 0xa08d7973, 0xa382f182, 0xe0968a95, 0x25aa07ac,
4617
+ 0x66be7cbb, 0xafd31ddf, 0xecc766c8, 0x29fbebf1, 0x6aef90e6,
4618
+ 0xbb202939, 0xf834522e, 0x3d08df17, 0x7e1ca400, 0xb771c564,
4619
+ 0xf465be73, 0x3159334a, 0x724d485d, 0xd2c0312e, 0x91d44a39,
4620
+ 0x54e8c700, 0x17fcbc17, 0xde91dd73, 0x9d85a664, 0x58b92b5d,
4621
+ 0x1bad504a, 0xca62e995, 0x89769282, 0x4c4a1fbb, 0x0f5e64ac,
4622
+ 0xc63305c8, 0x85277edf, 0x401bf3e6, 0x030f88f1, 0x070392de,
4623
+ 0x4417e9c9, 0x812b64f0, 0xc23f1fe7, 0x0b527e83, 0x48460594,
4624
+ 0x8d7a88ad, 0xce6ef3ba, 0x1fa14a65, 0x5cb53172, 0x9989bc4b,
4625
+ 0xda9dc75c, 0x13f0a638, 0x50e4dd2f, 0x95d85016, 0xd6cc2b01,
4626
+ 0x76415272, 0x35552965, 0xf069a45c, 0xb37ddf4b, 0x7a10be2f,
4627
+ 0x3904c538, 0xfc384801, 0xbf2c3316, 0x6ee38ac9, 0x2df7f1de,
4628
+ 0xe8cb7ce7, 0xabdf07f0, 0x62b26694, 0x21a61d83, 0xe49a90ba,
4629
+ 0xa78eebad, 0xa481635c, 0xe795184b, 0x22a99572, 0x61bdee65,
4630
+ 0xa8d08f01, 0xebc4f416, 0x2ef8792f, 0x6dec0238, 0xbc23bbe7,
4631
+ 0xff37c0f0, 0x3a0b4dc9, 0x791f36de, 0xb07257ba, 0xf3662cad,
4632
+ 0x365aa194, 0x754eda83, 0xd5c3a3f0, 0x96d7d8e7, 0x53eb55de,
4633
+ 0x10ff2ec9, 0xd9924fad, 0x9a8634ba, 0x5fbab983, 0x1caec294,
4634
+ 0xcd617b4b, 0x8e75005c, 0x4b498d65, 0x085df672, 0xc1309716,
4635
+ 0x8224ec01, 0x47186138, 0x040c1a2f, 0x4f005566, 0x0c142e71,
4636
+ 0xc928a348, 0x8a3cd85f, 0x4351b93b, 0x0045c22c, 0xc5794f15,
4637
+ 0x866d3402, 0x57a28ddd, 0x14b6f6ca, 0xd18a7bf3, 0x929e00e4,
4638
+ 0x5bf36180, 0x18e71a97, 0xdddb97ae, 0x9ecfecb9, 0x3e4295ca,
4639
+ 0x7d56eedd, 0xb86a63e4, 0xfb7e18f3, 0x32137997, 0x71070280,
4640
+ 0xb43b8fb9, 0xf72ff4ae, 0x26e04d71, 0x65f43666, 0xa0c8bb5f,
4641
+ 0xe3dcc048, 0x2ab1a12c, 0x69a5da3b, 0xac995702, 0xef8d2c15,
4642
+ 0xec82a4e4, 0xaf96dff3, 0x6aaa52ca, 0x29be29dd, 0xe0d348b9,
4643
+ 0xa3c733ae, 0x66fbbe97, 0x25efc580, 0xf4207c5f, 0xb7340748,
4644
+ 0x72088a71, 0x311cf166, 0xf8719002, 0xbb65eb15, 0x7e59662c,
4645
+ 0x3d4d1d3b, 0x9dc06448, 0xded41f5f, 0x1be89266, 0x58fce971,
4646
+ 0x91918815, 0xd285f302, 0x17b97e3b, 0x54ad052c, 0x8562bcf3,
4647
+ 0xc676c7e4, 0x034a4add, 0x405e31ca, 0x893350ae, 0xca272bb9,
4648
+ 0x0f1ba680, 0x4c0fdd97, 0x4803c7b8, 0x0b17bcaf, 0xce2b3196,
4649
+ 0x8d3f4a81, 0x44522be5, 0x074650f2, 0xc27addcb, 0x816ea6dc,
4650
+ 0x50a11f03, 0x13b56414, 0xd689e92d, 0x959d923a, 0x5cf0f35e,
4651
+ 0x1fe48849, 0xdad80570, 0x99cc7e67, 0x39410714, 0x7a557c03,
4652
+ 0xbf69f13a, 0xfc7d8a2d, 0x3510eb49, 0x7604905e, 0xb3381d67,
4653
+ 0xf02c6670, 0x21e3dfaf, 0x62f7a4b8, 0xa7cb2981, 0xe4df5296,
4654
+ 0x2db233f2, 0x6ea648e5, 0xab9ac5dc, 0xe88ebecb, 0xeb81363a,
4655
+ 0xa8954d2d, 0x6da9c014, 0x2ebdbb03, 0xe7d0da67, 0xa4c4a170,
4656
+ 0x61f82c49, 0x22ec575e, 0xf323ee81, 0xb0379596, 0x750b18af,
4657
+ 0x361f63b8, 0xff7202dc, 0xbc6679cb, 0x795af4f2, 0x3a4e8fe5,
4658
+ 0x9ac3f696, 0xd9d78d81, 0x1ceb00b8, 0x5fff7baf, 0x96921acb,
4659
+ 0xd58661dc, 0x10baece5, 0x53ae97f2, 0x82612e2d, 0xc175553a,
4660
+ 0x0449d803, 0x475da314, 0x8e30c270, 0xcd24b967, 0x0818345e,
4661
+ 0x4b0c4f49},
4662
+ {0x00000000, 0x3e6bc2ef, 0x3dd0f504, 0x03bb37eb, 0x7aa0eb09,
4663
+ 0x44cb29e6, 0x47701e0d, 0x791bdce2, 0xf440d713, 0xca2b15fc,
4664
+ 0xc9902217, 0xf7fbe0f8, 0x8ee03c1a, 0xb08bfef5, 0xb330c91e,
4665
+ 0x8d5b0bf1, 0xe881ae27, 0xd6ea6cc8, 0xd5515b23, 0xeb3a99cc,
4666
+ 0x9221452e, 0xac4a87c1, 0xaff1b02a, 0x919a72c5, 0x1cc17934,
4667
+ 0x22aabbdb, 0x21118c30, 0x1f7a4edf, 0x6661923d, 0x580a50d2,
4668
+ 0x5bb16739, 0x65daa5d6, 0xd0035d4f, 0xee689fa0, 0xedd3a84b,
4669
+ 0xd3b86aa4, 0xaaa3b646, 0x94c874a9, 0x97734342, 0xa91881ad,
4670
+ 0x24438a5c, 0x1a2848b3, 0x19937f58, 0x27f8bdb7, 0x5ee36155,
4671
+ 0x6088a3ba, 0x63339451, 0x5d5856be, 0x3882f368, 0x06e93187,
4672
+ 0x0552066c, 0x3b39c483, 0x42221861, 0x7c49da8e, 0x7ff2ed65,
4673
+ 0x41992f8a, 0xccc2247b, 0xf2a9e694, 0xf112d17f, 0xcf791390,
4674
+ 0xb662cf72, 0x88090d9d, 0x8bb23a76, 0xb5d9f899, 0xa007ba9e,
4675
+ 0x9e6c7871, 0x9dd74f9a, 0xa3bc8d75, 0xdaa75197, 0xe4cc9378,
4676
+ 0xe777a493, 0xd91c667c, 0x54476d8d, 0x6a2caf62, 0x69979889,
4677
+ 0x57fc5a66, 0x2ee78684, 0x108c446b, 0x13377380, 0x2d5cb16f,
4678
+ 0x488614b9, 0x76edd656, 0x7556e1bd, 0x4b3d2352, 0x3226ffb0,
4679
+ 0x0c4d3d5f, 0x0ff60ab4, 0x319dc85b, 0xbcc6c3aa, 0x82ad0145,
4680
+ 0x811636ae, 0xbf7df441, 0xc66628a3, 0xf80dea4c, 0xfbb6dda7,
4681
+ 0xc5dd1f48, 0x7004e7d1, 0x4e6f253e, 0x4dd412d5, 0x73bfd03a,
4682
+ 0x0aa40cd8, 0x34cfce37, 0x3774f9dc, 0x091f3b33, 0x844430c2,
4683
+ 0xba2ff22d, 0xb994c5c6, 0x87ff0729, 0xfee4dbcb, 0xc08f1924,
4684
+ 0xc3342ecf, 0xfd5fec20, 0x988549f6, 0xa6ee8b19, 0xa555bcf2,
4685
+ 0x9b3e7e1d, 0xe225a2ff, 0xdc4e6010, 0xdff557fb, 0xe19e9514,
4686
+ 0x6cc59ee5, 0x52ae5c0a, 0x51156be1, 0x6f7ea90e, 0x166575ec,
4687
+ 0x280eb703, 0x2bb580e8, 0x15de4207, 0x010905e6, 0x3f62c709,
4688
+ 0x3cd9f0e2, 0x02b2320d, 0x7ba9eeef, 0x45c22c00, 0x46791beb,
4689
+ 0x7812d904, 0xf549d2f5, 0xcb22101a, 0xc89927f1, 0xf6f2e51e,
4690
+ 0x8fe939fc, 0xb182fb13, 0xb239ccf8, 0x8c520e17, 0xe988abc1,
4691
+ 0xd7e3692e, 0xd4585ec5, 0xea339c2a, 0x932840c8, 0xad438227,
4692
+ 0xaef8b5cc, 0x90937723, 0x1dc87cd2, 0x23a3be3d, 0x201889d6,
4693
+ 0x1e734b39, 0x676897db, 0x59035534, 0x5ab862df, 0x64d3a030,
4694
+ 0xd10a58a9, 0xef619a46, 0xecdaadad, 0xd2b16f42, 0xabaab3a0,
4695
+ 0x95c1714f, 0x967a46a4, 0xa811844b, 0x254a8fba, 0x1b214d55,
4696
+ 0x189a7abe, 0x26f1b851, 0x5fea64b3, 0x6181a65c, 0x623a91b7,
4697
+ 0x5c515358, 0x398bf68e, 0x07e03461, 0x045b038a, 0x3a30c165,
4698
+ 0x432b1d87, 0x7d40df68, 0x7efbe883, 0x40902a6c, 0xcdcb219d,
4699
+ 0xf3a0e372, 0xf01bd499, 0xce701676, 0xb76bca94, 0x8900087b,
4700
+ 0x8abb3f90, 0xb4d0fd7f, 0xa10ebf78, 0x9f657d97, 0x9cde4a7c,
4701
+ 0xa2b58893, 0xdbae5471, 0xe5c5969e, 0xe67ea175, 0xd815639a,
4702
+ 0x554e686b, 0x6b25aa84, 0x689e9d6f, 0x56f55f80, 0x2fee8362,
4703
+ 0x1185418d, 0x123e7666, 0x2c55b489, 0x498f115f, 0x77e4d3b0,
4704
+ 0x745fe45b, 0x4a3426b4, 0x332ffa56, 0x0d4438b9, 0x0eff0f52,
4705
+ 0x3094cdbd, 0xbdcfc64c, 0x83a404a3, 0x801f3348, 0xbe74f1a7,
4706
+ 0xc76f2d45, 0xf904efaa, 0xfabfd841, 0xc4d41aae, 0x710de237,
4707
+ 0x4f6620d8, 0x4cdd1733, 0x72b6d5dc, 0x0bad093e, 0x35c6cbd1,
4708
+ 0x367dfc3a, 0x08163ed5, 0x854d3524, 0xbb26f7cb, 0xb89dc020,
4709
+ 0x86f602cf, 0xffedde2d, 0xc1861cc2, 0xc23d2b29, 0xfc56e9c6,
4710
+ 0x998c4c10, 0xa7e78eff, 0xa45cb914, 0x9a377bfb, 0xe32ca719,
4711
+ 0xdd4765f6, 0xdefc521d, 0xe09790f2, 0x6dcc9b03, 0x53a759ec,
4712
+ 0x501c6e07, 0x6e77ace8, 0x176c700a, 0x2907b2e5, 0x2abc850e,
4713
+ 0x14d747e1},
4714
+ {0x00000000, 0xc0df8ec1, 0xc1b96c58, 0x0166e299, 0x8273d9b0,
4715
+ 0x42ac5771, 0x43cab5e8, 0x83153b29, 0x45e1c3ba, 0x853e4d7b,
4716
+ 0x8458afe2, 0x44872123, 0xc7921a0a, 0x074d94cb, 0x062b7652,
4717
+ 0xc6f4f893, 0xcbc4f6ae, 0x0b1b786f, 0x0a7d9af6, 0xcaa21437,
4718
+ 0x49b72f1e, 0x8968a1df, 0x880e4346, 0x48d1cd87, 0x8e253514,
4719
+ 0x4efabbd5, 0x4f9c594c, 0x8f43d78d, 0x0c56eca4, 0xcc896265,
4720
+ 0xcdef80fc, 0x0d300e3d, 0xd78f9c86, 0x17501247, 0x1636f0de,
4721
+ 0xd6e97e1f, 0x55fc4536, 0x9523cbf7, 0x9445296e, 0x549aa7af,
4722
+ 0x926e5f3c, 0x52b1d1fd, 0x53d73364, 0x9308bda5, 0x101d868c,
4723
+ 0xd0c2084d, 0xd1a4ead4, 0x117b6415, 0x1c4b6a28, 0xdc94e4e9,
4724
+ 0xddf20670, 0x1d2d88b1, 0x9e38b398, 0x5ee73d59, 0x5f81dfc0,
4725
+ 0x9f5e5101, 0x59aaa992, 0x99752753, 0x9813c5ca, 0x58cc4b0b,
4726
+ 0xdbd97022, 0x1b06fee3, 0x1a601c7a, 0xdabf92bb, 0xef1948d6,
4727
+ 0x2fc6c617, 0x2ea0248e, 0xee7faa4f, 0x6d6a9166, 0xadb51fa7,
4728
+ 0xacd3fd3e, 0x6c0c73ff, 0xaaf88b6c, 0x6a2705ad, 0x6b41e734,
4729
+ 0xab9e69f5, 0x288b52dc, 0xe854dc1d, 0xe9323e84, 0x29edb045,
4730
+ 0x24ddbe78, 0xe40230b9, 0xe564d220, 0x25bb5ce1, 0xa6ae67c8,
4731
+ 0x6671e909, 0x67170b90, 0xa7c88551, 0x613c7dc2, 0xa1e3f303,
4732
+ 0xa085119a, 0x605a9f5b, 0xe34fa472, 0x23902ab3, 0x22f6c82a,
4733
+ 0xe22946eb, 0x3896d450, 0xf8495a91, 0xf92fb808, 0x39f036c9,
4734
+ 0xbae50de0, 0x7a3a8321, 0x7b5c61b8, 0xbb83ef79, 0x7d7717ea,
4735
+ 0xbda8992b, 0xbcce7bb2, 0x7c11f573, 0xff04ce5a, 0x3fdb409b,
4736
+ 0x3ebda202, 0xfe622cc3, 0xf35222fe, 0x338dac3f, 0x32eb4ea6,
4737
+ 0xf234c067, 0x7121fb4e, 0xb1fe758f, 0xb0989716, 0x704719d7,
4738
+ 0xb6b3e144, 0x766c6f85, 0x770a8d1c, 0xb7d503dd, 0x34c038f4,
4739
+ 0xf41fb635, 0xf57954ac, 0x35a6da6d, 0x9f35e177, 0x5fea6fb6,
4740
+ 0x5e8c8d2f, 0x9e5303ee, 0x1d4638c7, 0xdd99b606, 0xdcff549f,
4741
+ 0x1c20da5e, 0xdad422cd, 0x1a0bac0c, 0x1b6d4e95, 0xdbb2c054,
4742
+ 0x58a7fb7d, 0x987875bc, 0x991e9725, 0x59c119e4, 0x54f117d9,
4743
+ 0x942e9918, 0x95487b81, 0x5597f540, 0xd682ce69, 0x165d40a8,
4744
+ 0x173ba231, 0xd7e42cf0, 0x1110d463, 0xd1cf5aa2, 0xd0a9b83b,
4745
+ 0x107636fa, 0x93630dd3, 0x53bc8312, 0x52da618b, 0x9205ef4a,
4746
+ 0x48ba7df1, 0x8865f330, 0x890311a9, 0x49dc9f68, 0xcac9a441,
4747
+ 0x0a162a80, 0x0b70c819, 0xcbaf46d8, 0x0d5bbe4b, 0xcd84308a,
4748
+ 0xcce2d213, 0x0c3d5cd2, 0x8f2867fb, 0x4ff7e93a, 0x4e910ba3,
4749
+ 0x8e4e8562, 0x837e8b5f, 0x43a1059e, 0x42c7e707, 0x821869c6,
4750
+ 0x010d52ef, 0xc1d2dc2e, 0xc0b43eb7, 0x006bb076, 0xc69f48e5,
4751
+ 0x0640c624, 0x072624bd, 0xc7f9aa7c, 0x44ec9155, 0x84331f94,
4752
+ 0x8555fd0d, 0x458a73cc, 0x702ca9a1, 0xb0f32760, 0xb195c5f9,
4753
+ 0x714a4b38, 0xf25f7011, 0x3280fed0, 0x33e61c49, 0xf3399288,
4754
+ 0x35cd6a1b, 0xf512e4da, 0xf4740643, 0x34ab8882, 0xb7beb3ab,
4755
+ 0x77613d6a, 0x7607dff3, 0xb6d85132, 0xbbe85f0f, 0x7b37d1ce,
4756
+ 0x7a513357, 0xba8ebd96, 0x399b86bf, 0xf944087e, 0xf822eae7,
4757
+ 0x38fd6426, 0xfe099cb5, 0x3ed61274, 0x3fb0f0ed, 0xff6f7e2c,
4758
+ 0x7c7a4505, 0xbca5cbc4, 0xbdc3295d, 0x7d1ca79c, 0xa7a33527,
4759
+ 0x677cbbe6, 0x661a597f, 0xa6c5d7be, 0x25d0ec97, 0xe50f6256,
4760
+ 0xe46980cf, 0x24b60e0e, 0xe242f69d, 0x229d785c, 0x23fb9ac5,
4761
+ 0xe3241404, 0x60312f2d, 0xa0eea1ec, 0xa1884375, 0x6157cdb4,
4762
+ 0x6c67c389, 0xacb84d48, 0xaddeafd1, 0x6d012110, 0xee141a39,
4763
+ 0x2ecb94f8, 0x2fad7661, 0xef72f8a0, 0x29860033, 0xe9598ef2,
4764
+ 0xe83f6c6b, 0x28e0e2aa, 0xabf5d983, 0x6b2a5742, 0x6a4cb5db,
4765
+ 0xaa933b1a},
4766
+ {0x00000000, 0x6f4ca59b, 0x9f9e3bec, 0xf0d29e77, 0x7f3b0603,
4767
+ 0x1077a398, 0xe0a53def, 0x8fe99874, 0xfe760c06, 0x913aa99d,
4768
+ 0x61e837ea, 0x0ea49271, 0x814d0a05, 0xee01af9e, 0x1ed331e9,
4769
+ 0x719f9472, 0xfced180c, 0x93a1bd97, 0x637323e0, 0x0c3f867b,
4770
+ 0x83d61e0f, 0xec9abb94, 0x1c4825e3, 0x73048078, 0x029b140a,
4771
+ 0x6dd7b191, 0x9d052fe6, 0xf2498a7d, 0x7da01209, 0x12ecb792,
4772
+ 0xe23e29e5, 0x8d728c7e, 0xf8db3118, 0x97979483, 0x67450af4,
4773
+ 0x0809af6f, 0x87e0371b, 0xe8ac9280, 0x187e0cf7, 0x7732a96c,
4774
+ 0x06ad3d1e, 0x69e19885, 0x993306f2, 0xf67fa369, 0x79963b1d,
4775
+ 0x16da9e86, 0xe60800f1, 0x8944a56a, 0x04362914, 0x6b7a8c8f,
4776
+ 0x9ba812f8, 0xf4e4b763, 0x7b0d2f17, 0x14418a8c, 0xe49314fb,
4777
+ 0x8bdfb160, 0xfa402512, 0x950c8089, 0x65de1efe, 0x0a92bb65,
4778
+ 0x857b2311, 0xea37868a, 0x1ae518fd, 0x75a9bd66, 0xf0b76330,
4779
+ 0x9ffbc6ab, 0x6f2958dc, 0x0065fd47, 0x8f8c6533, 0xe0c0c0a8,
4780
+ 0x10125edf, 0x7f5efb44, 0x0ec16f36, 0x618dcaad, 0x915f54da,
4781
+ 0xfe13f141, 0x71fa6935, 0x1eb6ccae, 0xee6452d9, 0x8128f742,
4782
+ 0x0c5a7b3c, 0x6316dea7, 0x93c440d0, 0xfc88e54b, 0x73617d3f,
4783
+ 0x1c2dd8a4, 0xecff46d3, 0x83b3e348, 0xf22c773a, 0x9d60d2a1,
4784
+ 0x6db24cd6, 0x02fee94d, 0x8d177139, 0xe25bd4a2, 0x12894ad5,
4785
+ 0x7dc5ef4e, 0x086c5228, 0x6720f7b3, 0x97f269c4, 0xf8becc5f,
4786
+ 0x7757542b, 0x181bf1b0, 0xe8c96fc7, 0x8785ca5c, 0xf61a5e2e,
4787
+ 0x9956fbb5, 0x698465c2, 0x06c8c059, 0x8921582d, 0xe66dfdb6,
4788
+ 0x16bf63c1, 0x79f3c65a, 0xf4814a24, 0x9bcdefbf, 0x6b1f71c8,
4789
+ 0x0453d453, 0x8bba4c27, 0xe4f6e9bc, 0x142477cb, 0x7b68d250,
4790
+ 0x0af74622, 0x65bbe3b9, 0x95697dce, 0xfa25d855, 0x75cc4021,
4791
+ 0x1a80e5ba, 0xea527bcd, 0x851ede56, 0xe06fc760, 0x8f2362fb,
4792
+ 0x7ff1fc8c, 0x10bd5917, 0x9f54c163, 0xf01864f8, 0x00cafa8f,
4793
+ 0x6f865f14, 0x1e19cb66, 0x71556efd, 0x8187f08a, 0xeecb5511,
4794
+ 0x6122cd65, 0x0e6e68fe, 0xfebcf689, 0x91f05312, 0x1c82df6c,
4795
+ 0x73ce7af7, 0x831ce480, 0xec50411b, 0x63b9d96f, 0x0cf57cf4,
4796
+ 0xfc27e283, 0x936b4718, 0xe2f4d36a, 0x8db876f1, 0x7d6ae886,
4797
+ 0x12264d1d, 0x9dcfd569, 0xf28370f2, 0x0251ee85, 0x6d1d4b1e,
4798
+ 0x18b4f678, 0x77f853e3, 0x872acd94, 0xe866680f, 0x678ff07b,
4799
+ 0x08c355e0, 0xf811cb97, 0x975d6e0c, 0xe6c2fa7e, 0x898e5fe5,
4800
+ 0x795cc192, 0x16106409, 0x99f9fc7d, 0xf6b559e6, 0x0667c791,
4801
+ 0x692b620a, 0xe459ee74, 0x8b154bef, 0x7bc7d598, 0x148b7003,
4802
+ 0x9b62e877, 0xf42e4dec, 0x04fcd39b, 0x6bb07600, 0x1a2fe272,
4803
+ 0x756347e9, 0x85b1d99e, 0xeafd7c05, 0x6514e471, 0x0a5841ea,
4804
+ 0xfa8adf9d, 0x95c67a06, 0x10d8a450, 0x7f9401cb, 0x8f469fbc,
4805
+ 0xe00a3a27, 0x6fe3a253, 0x00af07c8, 0xf07d99bf, 0x9f313c24,
4806
+ 0xeeaea856, 0x81e20dcd, 0x713093ba, 0x1e7c3621, 0x9195ae55,
4807
+ 0xfed90bce, 0x0e0b95b9, 0x61473022, 0xec35bc5c, 0x837919c7,
4808
+ 0x73ab87b0, 0x1ce7222b, 0x930eba5f, 0xfc421fc4, 0x0c9081b3,
4809
+ 0x63dc2428, 0x1243b05a, 0x7d0f15c1, 0x8ddd8bb6, 0xe2912e2d,
4810
+ 0x6d78b659, 0x023413c2, 0xf2e68db5, 0x9daa282e, 0xe8039548,
4811
+ 0x874f30d3, 0x779daea4, 0x18d10b3f, 0x9738934b, 0xf87436d0,
4812
+ 0x08a6a8a7, 0x67ea0d3c, 0x1675994e, 0x79393cd5, 0x89eba2a2,
4813
+ 0xe6a70739, 0x694e9f4d, 0x06023ad6, 0xf6d0a4a1, 0x999c013a,
4814
+ 0x14ee8d44, 0x7ba228df, 0x8b70b6a8, 0xe43c1333, 0x6bd58b47,
4815
+ 0x04992edc, 0xf44bb0ab, 0x9b071530, 0xea988142, 0x85d424d9,
4816
+ 0x7506baae, 0x1a4a1f35, 0x95a38741, 0xfaef22da, 0x0a3dbcad,
4817
+ 0x65711936}};
4818
+
4819
+#endif
4820
+
4821
+#endif
4822
+
4823
+#if N == 4
4824
+
4825
+#if W == 8
4826
+
4827
+local const z_crc_t FAR crc_braid_table[][256] = {
4828
+ {0x00000000, 0xf1da05aa, 0x38c50d15, 0xc91f08bf, 0x718a1a2a,
4829
+ 0x80501f80, 0x494f173f, 0xb8951295, 0xe3143454, 0x12ce31fe,
4830
+ 0xdbd13941, 0x2a0b3ceb, 0x929e2e7e, 0x63442bd4, 0xaa5b236b,
4831
+ 0x5b8126c1, 0x1d596ee9, 0xec836b43, 0x259c63fc, 0xd4466656,
4832
+ 0x6cd374c3, 0x9d097169, 0x541679d6, 0xa5cc7c7c, 0xfe4d5abd,
4833
+ 0x0f975f17, 0xc68857a8, 0x37525202, 0x8fc74097, 0x7e1d453d,
4834
+ 0xb7024d82, 0x46d84828, 0x3ab2ddd2, 0xcb68d878, 0x0277d0c7,
4835
+ 0xf3add56d, 0x4b38c7f8, 0xbae2c252, 0x73fdcaed, 0x8227cf47,
4836
+ 0xd9a6e986, 0x287cec2c, 0xe163e493, 0x10b9e139, 0xa82cf3ac,
4837
+ 0x59f6f606, 0x90e9feb9, 0x6133fb13, 0x27ebb33b, 0xd631b691,
4838
+ 0x1f2ebe2e, 0xeef4bb84, 0x5661a911, 0xa7bbacbb, 0x6ea4a404,
4839
+ 0x9f7ea1ae, 0xc4ff876f, 0x352582c5, 0xfc3a8a7a, 0x0de08fd0,
4840
+ 0xb5759d45, 0x44af98ef, 0x8db09050, 0x7c6a95fa, 0x7565bba4,
4841
+ 0x84bfbe0e, 0x4da0b6b1, 0xbc7ab31b, 0x04efa18e, 0xf535a424,
4842
+ 0x3c2aac9b, 0xcdf0a931, 0x96718ff0, 0x67ab8a5a, 0xaeb482e5,
4843
+ 0x5f6e874f, 0xe7fb95da, 0x16219070, 0xdf3e98cf, 0x2ee49d65,
4844
+ 0x683cd54d, 0x99e6d0e7, 0x50f9d858, 0xa123ddf2, 0x19b6cf67,
4845
+ 0xe86ccacd, 0x2173c272, 0xd0a9c7d8, 0x8b28e119, 0x7af2e4b3,
4846
+ 0xb3edec0c, 0x4237e9a6, 0xfaa2fb33, 0x0b78fe99, 0xc267f626,
4847
+ 0x33bdf38c, 0x4fd76676, 0xbe0d63dc, 0x77126b63, 0x86c86ec9,
4848
+ 0x3e5d7c5c, 0xcf8779f6, 0x06987149, 0xf74274e3, 0xacc35222,
4849
+ 0x5d195788, 0x94065f37, 0x65dc5a9d, 0xdd494808, 0x2c934da2,
4850
+ 0xe58c451d, 0x145640b7, 0x528e089f, 0xa3540d35, 0x6a4b058a,
4851
+ 0x9b910020, 0x230412b5, 0xd2de171f, 0x1bc11fa0, 0xea1b1a0a,
4852
+ 0xb19a3ccb, 0x40403961, 0x895f31de, 0x78853474, 0xc01026e1,
4853
+ 0x31ca234b, 0xf8d52bf4, 0x090f2e5e, 0xeacb7748, 0x1b1172e2,
4854
+ 0xd20e7a5d, 0x23d47ff7, 0x9b416d62, 0x6a9b68c8, 0xa3846077,
4855
+ 0x525e65dd, 0x09df431c, 0xf80546b6, 0x311a4e09, 0xc0c04ba3,
4856
+ 0x78555936, 0x898f5c9c, 0x40905423, 0xb14a5189, 0xf79219a1,
4857
+ 0x06481c0b, 0xcf5714b4, 0x3e8d111e, 0x8618038b, 0x77c20621,
4858
+ 0xbedd0e9e, 0x4f070b34, 0x14862df5, 0xe55c285f, 0x2c4320e0,
4859
+ 0xdd99254a, 0x650c37df, 0x94d63275, 0x5dc93aca, 0xac133f60,
4860
+ 0xd079aa9a, 0x21a3af30, 0xe8bca78f, 0x1966a225, 0xa1f3b0b0,
4861
+ 0x5029b51a, 0x9936bda5, 0x68ecb80f, 0x336d9ece, 0xc2b79b64,
4862
+ 0x0ba893db, 0xfa729671, 0x42e784e4, 0xb33d814e, 0x7a2289f1,
4863
+ 0x8bf88c5b, 0xcd20c473, 0x3cfac1d9, 0xf5e5c966, 0x043fcccc,
4864
+ 0xbcaade59, 0x4d70dbf3, 0x846fd34c, 0x75b5d6e6, 0x2e34f027,
4865
+ 0xdfeef58d, 0x16f1fd32, 0xe72bf898, 0x5fbeea0d, 0xae64efa7,
4866
+ 0x677be718, 0x96a1e2b2, 0x9faeccec, 0x6e74c946, 0xa76bc1f9,
4867
+ 0x56b1c453, 0xee24d6c6, 0x1ffed36c, 0xd6e1dbd3, 0x273bde79,
4868
+ 0x7cbaf8b8, 0x8d60fd12, 0x447ff5ad, 0xb5a5f007, 0x0d30e292,
4869
+ 0xfceae738, 0x35f5ef87, 0xc42fea2d, 0x82f7a205, 0x732da7af,
4870
+ 0xba32af10, 0x4be8aaba, 0xf37db82f, 0x02a7bd85, 0xcbb8b53a,
4871
+ 0x3a62b090, 0x61e39651, 0x903993fb, 0x59269b44, 0xa8fc9eee,
4872
+ 0x10698c7b, 0xe1b389d1, 0x28ac816e, 0xd97684c4, 0xa51c113e,
4873
+ 0x54c61494, 0x9dd91c2b, 0x6c031981, 0xd4960b14, 0x254c0ebe,
4874
+ 0xec530601, 0x1d8903ab, 0x4608256a, 0xb7d220c0, 0x7ecd287f,
4875
+ 0x8f172dd5, 0x37823f40, 0xc6583aea, 0x0f473255, 0xfe9d37ff,
4876
+ 0xb8457fd7, 0x499f7a7d, 0x808072c2, 0x715a7768, 0xc9cf65fd,
4877
+ 0x38156057, 0xf10a68e8, 0x00d06d42, 0x5b514b83, 0xaa8b4e29,
4878
+ 0x63944696, 0x924e433c, 0x2adb51a9, 0xdb015403, 0x121e5cbc,
4879
+ 0xe3c45916},
4880
+ {0x00000000, 0x0ee7e8d1, 0x1dcfd1a2, 0x13283973, 0x3b9fa344,
4881
+ 0x35784b95, 0x265072e6, 0x28b79a37, 0x773f4688, 0x79d8ae59,
4882
+ 0x6af0972a, 0x64177ffb, 0x4ca0e5cc, 0x42470d1d, 0x516f346e,
4883
+ 0x5f88dcbf, 0xee7e8d10, 0xe09965c1, 0xf3b15cb2, 0xfd56b463,
4884
+ 0xd5e12e54, 0xdb06c685, 0xc82efff6, 0xc6c91727, 0x9941cb98,
4885
+ 0x97a62349, 0x848e1a3a, 0x8a69f2eb, 0xa2de68dc, 0xac39800d,
4886
+ 0xbf11b97e, 0xb1f651af, 0x078c1c61, 0x096bf4b0, 0x1a43cdc3,
4887
+ 0x14a42512, 0x3c13bf25, 0x32f457f4, 0x21dc6e87, 0x2f3b8656,
4888
+ 0x70b35ae9, 0x7e54b238, 0x6d7c8b4b, 0x639b639a, 0x4b2cf9ad,
4889
+ 0x45cb117c, 0x56e3280f, 0x5804c0de, 0xe9f29171, 0xe71579a0,
4890
+ 0xf43d40d3, 0xfadaa802, 0xd26d3235, 0xdc8adae4, 0xcfa2e397,
4891
+ 0xc1450b46, 0x9ecdd7f9, 0x902a3f28, 0x8302065b, 0x8de5ee8a,
4892
+ 0xa55274bd, 0xabb59c6c, 0xb89da51f, 0xb67a4dce, 0x0f1838c2,
4893
+ 0x01ffd013, 0x12d7e960, 0x1c3001b1, 0x34879b86, 0x3a607357,
4894
+ 0x29484a24, 0x27afa2f5, 0x78277e4a, 0x76c0969b, 0x65e8afe8,
4895
+ 0x6b0f4739, 0x43b8dd0e, 0x4d5f35df, 0x5e770cac, 0x5090e47d,
4896
+ 0xe166b5d2, 0xef815d03, 0xfca96470, 0xf24e8ca1, 0xdaf91696,
4897
+ 0xd41efe47, 0xc736c734, 0xc9d12fe5, 0x9659f35a, 0x98be1b8b,
4898
+ 0x8b9622f8, 0x8571ca29, 0xadc6501e, 0xa321b8cf, 0xb00981bc,
4899
+ 0xbeee696d, 0x089424a3, 0x0673cc72, 0x155bf501, 0x1bbc1dd0,
4900
+ 0x330b87e7, 0x3dec6f36, 0x2ec45645, 0x2023be94, 0x7fab622b,
4901
+ 0x714c8afa, 0x6264b389, 0x6c835b58, 0x4434c16f, 0x4ad329be,
4902
+ 0x59fb10cd, 0x571cf81c, 0xe6eaa9b3, 0xe80d4162, 0xfb257811,
4903
+ 0xf5c290c0, 0xdd750af7, 0xd392e226, 0xc0badb55, 0xce5d3384,
4904
+ 0x91d5ef3b, 0x9f3207ea, 0x8c1a3e99, 0x82fdd648, 0xaa4a4c7f,
4905
+ 0xa4ada4ae, 0xb7859ddd, 0xb962750c, 0x1e307184, 0x10d79955,
4906
+ 0x03ffa026, 0x0d1848f7, 0x25afd2c0, 0x2b483a11, 0x38600362,
4907
+ 0x3687ebb3, 0x690f370c, 0x67e8dfdd, 0x74c0e6ae, 0x7a270e7f,
4908
+ 0x52909448, 0x5c777c99, 0x4f5f45ea, 0x41b8ad3b, 0xf04efc94,
4909
+ 0xfea91445, 0xed812d36, 0xe366c5e7, 0xcbd15fd0, 0xc536b701,
4910
+ 0xd61e8e72, 0xd8f966a3, 0x8771ba1c, 0x899652cd, 0x9abe6bbe,
4911
+ 0x9459836f, 0xbcee1958, 0xb209f189, 0xa121c8fa, 0xafc6202b,
4912
+ 0x19bc6de5, 0x175b8534, 0x0473bc47, 0x0a945496, 0x2223cea1,
4913
+ 0x2cc42670, 0x3fec1f03, 0x310bf7d2, 0x6e832b6d, 0x6064c3bc,
4914
+ 0x734cfacf, 0x7dab121e, 0x551c8829, 0x5bfb60f8, 0x48d3598b,
4915
+ 0x4634b15a, 0xf7c2e0f5, 0xf9250824, 0xea0d3157, 0xe4ead986,
4916
+ 0xcc5d43b1, 0xc2baab60, 0xd1929213, 0xdf757ac2, 0x80fda67d,
4917
+ 0x8e1a4eac, 0x9d3277df, 0x93d59f0e, 0xbb620539, 0xb585ede8,
4918
+ 0xa6add49b, 0xa84a3c4a, 0x11284946, 0x1fcfa197, 0x0ce798e4,
4919
+ 0x02007035, 0x2ab7ea02, 0x245002d3, 0x37783ba0, 0x399fd371,
4920
+ 0x66170fce, 0x68f0e71f, 0x7bd8de6c, 0x753f36bd, 0x5d88ac8a,
4921
+ 0x536f445b, 0x40477d28, 0x4ea095f9, 0xff56c456, 0xf1b12c87,
4922
+ 0xe29915f4, 0xec7efd25, 0xc4c96712, 0xca2e8fc3, 0xd906b6b0,
4923
+ 0xd7e15e61, 0x886982de, 0x868e6a0f, 0x95a6537c, 0x9b41bbad,
4924
+ 0xb3f6219a, 0xbd11c94b, 0xae39f038, 0xa0de18e9, 0x16a45527,
4925
+ 0x1843bdf6, 0x0b6b8485, 0x058c6c54, 0x2d3bf663, 0x23dc1eb2,
4926
+ 0x30f427c1, 0x3e13cf10, 0x619b13af, 0x6f7cfb7e, 0x7c54c20d,
4927
+ 0x72b32adc, 0x5a04b0eb, 0x54e3583a, 0x47cb6149, 0x492c8998,
4928
+ 0xf8dad837, 0xf63d30e6, 0xe5150995, 0xebf2e144, 0xc3457b73,
4929
+ 0xcda293a2, 0xde8aaad1, 0xd06d4200, 0x8fe59ebf, 0x8102766e,
4930
+ 0x922a4f1d, 0x9ccda7cc, 0xb47a3dfb, 0xba9dd52a, 0xa9b5ec59,
4931
+ 0xa7520488},
4932
+ {0x00000000, 0x3c60e308, 0x78c1c610, 0x44a12518, 0xf1838c20,
4933
+ 0xcde36f28, 0x89424a30, 0xb522a938, 0x38761e01, 0x0416fd09,
4934
+ 0x40b7d811, 0x7cd73b19, 0xc9f59221, 0xf5957129, 0xb1345431,
4935
+ 0x8d54b739, 0x70ec3c02, 0x4c8cdf0a, 0x082dfa12, 0x344d191a,
4936
+ 0x816fb022, 0xbd0f532a, 0xf9ae7632, 0xc5ce953a, 0x489a2203,
4937
+ 0x74fac10b, 0x305be413, 0x0c3b071b, 0xb919ae23, 0x85794d2b,
4938
+ 0xc1d86833, 0xfdb88b3b, 0xe1d87804, 0xddb89b0c, 0x9919be14,
4939
+ 0xa5795d1c, 0x105bf424, 0x2c3b172c, 0x689a3234, 0x54fad13c,
4940
+ 0xd9ae6605, 0xe5ce850d, 0xa16fa015, 0x9d0f431d, 0x282dea25,
4941
+ 0x144d092d, 0x50ec2c35, 0x6c8ccf3d, 0x91344406, 0xad54a70e,
4942
+ 0xe9f58216, 0xd595611e, 0x60b7c826, 0x5cd72b2e, 0x18760e36,
4943
+ 0x2416ed3e, 0xa9425a07, 0x9522b90f, 0xd1839c17, 0xede37f1f,
4944
+ 0x58c1d627, 0x64a1352f, 0x20001037, 0x1c60f33f, 0x18c1f649,
4945
+ 0x24a11541, 0x60003059, 0x5c60d351, 0xe9427a69, 0xd5229961,
4946
+ 0x9183bc79, 0xade35f71, 0x20b7e848, 0x1cd70b40, 0x58762e58,
4947
+ 0x6416cd50, 0xd1346468, 0xed548760, 0xa9f5a278, 0x95954170,
4948
+ 0x682dca4b, 0x544d2943, 0x10ec0c5b, 0x2c8cef53, 0x99ae466b,
4949
+ 0xa5cea563, 0xe16f807b, 0xdd0f6373, 0x505bd44a, 0x6c3b3742,
4950
+ 0x289a125a, 0x14faf152, 0xa1d8586a, 0x9db8bb62, 0xd9199e7a,
4951
+ 0xe5797d72, 0xf9198e4d, 0xc5796d45, 0x81d8485d, 0xbdb8ab55,
4952
+ 0x089a026d, 0x34fae165, 0x705bc47d, 0x4c3b2775, 0xc16f904c,
4953
+ 0xfd0f7344, 0xb9ae565c, 0x85ceb554, 0x30ec1c6c, 0x0c8cff64,
4954
+ 0x482dda7c, 0x744d3974, 0x89f5b24f, 0xb5955147, 0xf134745f,
4955
+ 0xcd549757, 0x78763e6f, 0x4416dd67, 0x00b7f87f, 0x3cd71b77,
4956
+ 0xb183ac4e, 0x8de34f46, 0xc9426a5e, 0xf5228956, 0x4000206e,
4957
+ 0x7c60c366, 0x38c1e67e, 0x04a10576, 0x3183ec92, 0x0de30f9a,
4958
+ 0x49422a82, 0x7522c98a, 0xc00060b2, 0xfc6083ba, 0xb8c1a6a2,
4959
+ 0x84a145aa, 0x09f5f293, 0x3595119b, 0x71343483, 0x4d54d78b,
4960
+ 0xf8767eb3, 0xc4169dbb, 0x80b7b8a3, 0xbcd75bab, 0x416fd090,
4961
+ 0x7d0f3398, 0x39ae1680, 0x05cef588, 0xb0ec5cb0, 0x8c8cbfb8,
4962
+ 0xc82d9aa0, 0xf44d79a8, 0x7919ce91, 0x45792d99, 0x01d80881,
4963
+ 0x3db8eb89, 0x889a42b1, 0xb4faa1b9, 0xf05b84a1, 0xcc3b67a9,
4964
+ 0xd05b9496, 0xec3b779e, 0xa89a5286, 0x94fab18e, 0x21d818b6,
4965
+ 0x1db8fbbe, 0x5919dea6, 0x65793dae, 0xe82d8a97, 0xd44d699f,
4966
+ 0x90ec4c87, 0xac8caf8f, 0x19ae06b7, 0x25cee5bf, 0x616fc0a7,
4967
+ 0x5d0f23af, 0xa0b7a894, 0x9cd74b9c, 0xd8766e84, 0xe4168d8c,
4968
+ 0x513424b4, 0x6d54c7bc, 0x29f5e2a4, 0x159501ac, 0x98c1b695,
4969
+ 0xa4a1559d, 0xe0007085, 0xdc60938d, 0x69423ab5, 0x5522d9bd,
4970
+ 0x1183fca5, 0x2de31fad, 0x29421adb, 0x1522f9d3, 0x5183dccb,
4971
+ 0x6de33fc3, 0xd8c196fb, 0xe4a175f3, 0xa00050eb, 0x9c60b3e3,
4972
+ 0x113404da, 0x2d54e7d2, 0x69f5c2ca, 0x559521c2, 0xe0b788fa,
4973
+ 0xdcd76bf2, 0x98764eea, 0xa416ade2, 0x59ae26d9, 0x65cec5d1,
4974
+ 0x216fe0c9, 0x1d0f03c1, 0xa82daaf9, 0x944d49f1, 0xd0ec6ce9,
4975
+ 0xec8c8fe1, 0x61d838d8, 0x5db8dbd0, 0x1919fec8, 0x25791dc0,
4976
+ 0x905bb4f8, 0xac3b57f0, 0xe89a72e8, 0xd4fa91e0, 0xc89a62df,
4977
+ 0xf4fa81d7, 0xb05ba4cf, 0x8c3b47c7, 0x3919eeff, 0x05790df7,
4978
+ 0x41d828ef, 0x7db8cbe7, 0xf0ec7cde, 0xcc8c9fd6, 0x882dbace,
4979
+ 0xb44d59c6, 0x016ff0fe, 0x3d0f13f6, 0x79ae36ee, 0x45ced5e6,
4980
+ 0xb8765edd, 0x8416bdd5, 0xc0b798cd, 0xfcd77bc5, 0x49f5d2fd,
4981
+ 0x759531f5, 0x313414ed, 0x0d54f7e5, 0x800040dc, 0xbc60a3d4,
4982
+ 0xf8c186cc, 0xc4a165c4, 0x7183ccfc, 0x4de32ff4, 0x09420aec,
4983
+ 0x3522e9e4},
4984
+ {0x00000000, 0x6307d924, 0xc60fb248, 0xa5086b6c, 0x576e62d1,
4985
+ 0x3469bbf5, 0x9161d099, 0xf26609bd, 0xaedcc5a2, 0xcddb1c86,
4986
+ 0x68d377ea, 0x0bd4aece, 0xf9b2a773, 0x9ab57e57, 0x3fbd153b,
4987
+ 0x5cbacc1f, 0x86c88d05, 0xe5cf5421, 0x40c73f4d, 0x23c0e669,
4988
+ 0xd1a6efd4, 0xb2a136f0, 0x17a95d9c, 0x74ae84b8, 0x281448a7,
4989
+ 0x4b139183, 0xee1bfaef, 0x8d1c23cb, 0x7f7a2a76, 0x1c7df352,
4990
+ 0xb975983e, 0xda72411a, 0xd6e01c4b, 0xb5e7c56f, 0x10efae03,
4991
+ 0x73e87727, 0x818e7e9a, 0xe289a7be, 0x4781ccd2, 0x248615f6,
4992
+ 0x783cd9e9, 0x1b3b00cd, 0xbe336ba1, 0xdd34b285, 0x2f52bb38,
4993
+ 0x4c55621c, 0xe95d0970, 0x8a5ad054, 0x5028914e, 0x332f486a,
4994
+ 0x96272306, 0xf520fa22, 0x0746f39f, 0x64412abb, 0xc14941d7,
4995
+ 0xa24e98f3, 0xfef454ec, 0x9df38dc8, 0x38fbe6a4, 0x5bfc3f80,
4996
+ 0xa99a363d, 0xca9def19, 0x6f958475, 0x0c925d51, 0x76b13ed7,
4997
+ 0x15b6e7f3, 0xb0be8c9f, 0xd3b955bb, 0x21df5c06, 0x42d88522,
4998
+ 0xe7d0ee4e, 0x84d7376a, 0xd86dfb75, 0xbb6a2251, 0x1e62493d,
4999
+ 0x7d659019, 0x8f0399a4, 0xec044080, 0x490c2bec, 0x2a0bf2c8,
5000
+ 0xf079b3d2, 0x937e6af6, 0x3676019a, 0x5571d8be, 0xa717d103,
5001
+ 0xc4100827, 0x6118634b, 0x021fba6f, 0x5ea57670, 0x3da2af54,
5002
+ 0x98aac438, 0xfbad1d1c, 0x09cb14a1, 0x6acccd85, 0xcfc4a6e9,
5003
+ 0xacc37fcd, 0xa051229c, 0xc356fbb8, 0x665e90d4, 0x055949f0,
5004
+ 0xf73f404d, 0x94389969, 0x3130f205, 0x52372b21, 0x0e8de73e,
5005
+ 0x6d8a3e1a, 0xc8825576, 0xab858c52, 0x59e385ef, 0x3ae45ccb,
5006
+ 0x9fec37a7, 0xfcebee83, 0x2699af99, 0x459e76bd, 0xe0961dd1,
5007
+ 0x8391c4f5, 0x71f7cd48, 0x12f0146c, 0xb7f87f00, 0xd4ffa624,
5008
+ 0x88456a3b, 0xeb42b31f, 0x4e4ad873, 0x2d4d0157, 0xdf2b08ea,
5009
+ 0xbc2cd1ce, 0x1924baa2, 0x7a236386, 0xed627dae, 0x8e65a48a,
5010
+ 0x2b6dcfe6, 0x486a16c2, 0xba0c1f7f, 0xd90bc65b, 0x7c03ad37,
5011
+ 0x1f047413, 0x43beb80c, 0x20b96128, 0x85b10a44, 0xe6b6d360,
5012
+ 0x14d0dadd, 0x77d703f9, 0xd2df6895, 0xb1d8b1b1, 0x6baaf0ab,
5013
+ 0x08ad298f, 0xada542e3, 0xcea29bc7, 0x3cc4927a, 0x5fc34b5e,
5014
+ 0xfacb2032, 0x99ccf916, 0xc5763509, 0xa671ec2d, 0x03798741,
5015
+ 0x607e5e65, 0x921857d8, 0xf11f8efc, 0x5417e590, 0x37103cb4,
5016
+ 0x3b8261e5, 0x5885b8c1, 0xfd8dd3ad, 0x9e8a0a89, 0x6cec0334,
5017
+ 0x0febda10, 0xaae3b17c, 0xc9e46858, 0x955ea447, 0xf6597d63,
5018
+ 0x5351160f, 0x3056cf2b, 0xc230c696, 0xa1371fb2, 0x043f74de,
5019
+ 0x6738adfa, 0xbd4aece0, 0xde4d35c4, 0x7b455ea8, 0x1842878c,
5020
+ 0xea248e31, 0x89235715, 0x2c2b3c79, 0x4f2ce55d, 0x13962942,
5021
+ 0x7091f066, 0xd5999b0a, 0xb69e422e, 0x44f84b93, 0x27ff92b7,
5022
+ 0x82f7f9db, 0xe1f020ff, 0x9bd34379, 0xf8d49a5d, 0x5ddcf131,
5023
+ 0x3edb2815, 0xccbd21a8, 0xafbaf88c, 0x0ab293e0, 0x69b54ac4,
5024
+ 0x350f86db, 0x56085fff, 0xf3003493, 0x9007edb7, 0x6261e40a,
5025
+ 0x01663d2e, 0xa46e5642, 0xc7698f66, 0x1d1bce7c, 0x7e1c1758,
5026
+ 0xdb147c34, 0xb813a510, 0x4a75acad, 0x29727589, 0x8c7a1ee5,
5027
+ 0xef7dc7c1, 0xb3c70bde, 0xd0c0d2fa, 0x75c8b996, 0x16cf60b2,
5028
+ 0xe4a9690f, 0x87aeb02b, 0x22a6db47, 0x41a10263, 0x4d335f32,
5029
+ 0x2e348616, 0x8b3ced7a, 0xe83b345e, 0x1a5d3de3, 0x795ae4c7,
5030
+ 0xdc528fab, 0xbf55568f, 0xe3ef9a90, 0x80e843b4, 0x25e028d8,
5031
+ 0x46e7f1fc, 0xb481f841, 0xd7862165, 0x728e4a09, 0x1189932d,
5032
+ 0xcbfbd237, 0xa8fc0b13, 0x0df4607f, 0x6ef3b95b, 0x9c95b0e6,
5033
+ 0xff9269c2, 0x5a9a02ae, 0x399ddb8a, 0x65271795, 0x0620ceb1,
5034
+ 0xa328a5dd, 0xc02f7cf9, 0x32497544, 0x514eac60, 0xf446c70c,
5035
+ 0x97411e28},
5036
+ {0x00000000, 0x01b5fd1d, 0x036bfa3a, 0x02de0727, 0x06d7f474,
5037
+ 0x07620969, 0x05bc0e4e, 0x0409f353, 0x0dafe8e8, 0x0c1a15f5,
5038
+ 0x0ec412d2, 0x0f71efcf, 0x0b781c9c, 0x0acde181, 0x0813e6a6,
5039
+ 0x09a61bbb, 0x1b5fd1d0, 0x1aea2ccd, 0x18342bea, 0x1981d6f7,
5040
+ 0x1d8825a4, 0x1c3dd8b9, 0x1ee3df9e, 0x1f562283, 0x16f03938,
5041
+ 0x1745c425, 0x159bc302, 0x142e3e1f, 0x1027cd4c, 0x11923051,
5042
+ 0x134c3776, 0x12f9ca6b, 0x36bfa3a0, 0x370a5ebd, 0x35d4599a,
5043
+ 0x3461a487, 0x306857d4, 0x31ddaac9, 0x3303adee, 0x32b650f3,
5044
+ 0x3b104b48, 0x3aa5b655, 0x387bb172, 0x39ce4c6f, 0x3dc7bf3c,
5045
+ 0x3c724221, 0x3eac4506, 0x3f19b81b, 0x2de07270, 0x2c558f6d,
5046
+ 0x2e8b884a, 0x2f3e7557, 0x2b378604, 0x2a827b19, 0x285c7c3e,
5047
+ 0x29e98123, 0x204f9a98, 0x21fa6785, 0x232460a2, 0x22919dbf,
5048
+ 0x26986eec, 0x272d93f1, 0x25f394d6, 0x244669cb, 0x6d7f4740,
5049
+ 0x6ccaba5d, 0x6e14bd7a, 0x6fa14067, 0x6ba8b334, 0x6a1d4e29,
5050
+ 0x68c3490e, 0x6976b413, 0x60d0afa8, 0x616552b5, 0x63bb5592,
5051
+ 0x620ea88f, 0x66075bdc, 0x67b2a6c1, 0x656ca1e6, 0x64d95cfb,
5052
+ 0x76209690, 0x77956b8d, 0x754b6caa, 0x74fe91b7, 0x70f762e4,
5053
+ 0x71429ff9, 0x739c98de, 0x722965c3, 0x7b8f7e78, 0x7a3a8365,
5054
+ 0x78e48442, 0x7951795f, 0x7d588a0c, 0x7ced7711, 0x7e337036,
5055
+ 0x7f868d2b, 0x5bc0e4e0, 0x5a7519fd, 0x58ab1eda, 0x591ee3c7,
5056
+ 0x5d171094, 0x5ca2ed89, 0x5e7ceaae, 0x5fc917b3, 0x566f0c08,
5057
+ 0x57daf115, 0x5504f632, 0x54b10b2f, 0x50b8f87c, 0x510d0561,
5058
+ 0x53d30246, 0x5266ff5b, 0x409f3530, 0x412ac82d, 0x43f4cf0a,
5059
+ 0x42413217, 0x4648c144, 0x47fd3c59, 0x45233b7e, 0x4496c663,
5060
+ 0x4d30ddd8, 0x4c8520c5, 0x4e5b27e2, 0x4feedaff, 0x4be729ac,
5061
+ 0x4a52d4b1, 0x488cd396, 0x49392e8b, 0xdafe8e80, 0xdb4b739d,
5062
+ 0xd99574ba, 0xd82089a7, 0xdc297af4, 0xdd9c87e9, 0xdf4280ce,
5063
+ 0xdef77dd3, 0xd7516668, 0xd6e49b75, 0xd43a9c52, 0xd58f614f,
5064
+ 0xd186921c, 0xd0336f01, 0xd2ed6826, 0xd358953b, 0xc1a15f50,
5065
+ 0xc014a24d, 0xc2caa56a, 0xc37f5877, 0xc776ab24, 0xc6c35639,
5066
+ 0xc41d511e, 0xc5a8ac03, 0xcc0eb7b8, 0xcdbb4aa5, 0xcf654d82,
5067
+ 0xced0b09f, 0xcad943cc, 0xcb6cbed1, 0xc9b2b9f6, 0xc80744eb,
5068
+ 0xec412d20, 0xedf4d03d, 0xef2ad71a, 0xee9f2a07, 0xea96d954,
5069
+ 0xeb232449, 0xe9fd236e, 0xe848de73, 0xe1eec5c8, 0xe05b38d5,
5070
+ 0xe2853ff2, 0xe330c2ef, 0xe73931bc, 0xe68ccca1, 0xe452cb86,
5071
+ 0xe5e7369b, 0xf71efcf0, 0xf6ab01ed, 0xf47506ca, 0xf5c0fbd7,
5072
+ 0xf1c90884, 0xf07cf599, 0xf2a2f2be, 0xf3170fa3, 0xfab11418,
5073
+ 0xfb04e905, 0xf9daee22, 0xf86f133f, 0xfc66e06c, 0xfdd31d71,
5074
+ 0xff0d1a56, 0xfeb8e74b, 0xb781c9c0, 0xb63434dd, 0xb4ea33fa,
5075
+ 0xb55fcee7, 0xb1563db4, 0xb0e3c0a9, 0xb23dc78e, 0xb3883a93,
5076
+ 0xba2e2128, 0xbb9bdc35, 0xb945db12, 0xb8f0260f, 0xbcf9d55c,
5077
+ 0xbd4c2841, 0xbf922f66, 0xbe27d27b, 0xacde1810, 0xad6be50d,
5078
+ 0xafb5e22a, 0xae001f37, 0xaa09ec64, 0xabbc1179, 0xa962165e,
5079
+ 0xa8d7eb43, 0xa171f0f8, 0xa0c40de5, 0xa21a0ac2, 0xa3aff7df,
5080
+ 0xa7a6048c, 0xa613f991, 0xa4cdfeb6, 0xa57803ab, 0x813e6a60,
5081
+ 0x808b977d, 0x8255905a, 0x83e06d47, 0x87e99e14, 0x865c6309,
5082
+ 0x8482642e, 0x85379933, 0x8c918288, 0x8d247f95, 0x8ffa78b2,
5083
+ 0x8e4f85af, 0x8a4676fc, 0x8bf38be1, 0x892d8cc6, 0x889871db,
5084
+ 0x9a61bbb0, 0x9bd446ad, 0x990a418a, 0x98bfbc97, 0x9cb64fc4,
5085
+ 0x9d03b2d9, 0x9fddb5fe, 0x9e6848e3, 0x97ce5358, 0x967bae45,
5086
+ 0x94a5a962, 0x9510547f, 0x9119a72c, 0x90ac5a31, 0x92725d16,
5087
+ 0x93c7a00b},
5088
+ {0x00000000, 0x6e8c1b41, 0xdd183682, 0xb3942dc3, 0x61416b45,
5089
+ 0x0fcd7004, 0xbc595dc7, 0xd2d54686, 0xc282d68a, 0xac0ecdcb,
5090
+ 0x1f9ae008, 0x7116fb49, 0xa3c3bdcf, 0xcd4fa68e, 0x7edb8b4d,
5091
+ 0x1057900c, 0x5e74ab55, 0x30f8b014, 0x836c9dd7, 0xede08696,
5092
+ 0x3f35c010, 0x51b9db51, 0xe22df692, 0x8ca1edd3, 0x9cf67ddf,
5093
+ 0xf27a669e, 0x41ee4b5d, 0x2f62501c, 0xfdb7169a, 0x933b0ddb,
5094
+ 0x20af2018, 0x4e233b59, 0xbce956aa, 0xd2654deb, 0x61f16028,
5095
+ 0x0f7d7b69, 0xdda83def, 0xb32426ae, 0x00b00b6d, 0x6e3c102c,
5096
+ 0x7e6b8020, 0x10e79b61, 0xa373b6a2, 0xcdffade3, 0x1f2aeb65,
5097
+ 0x71a6f024, 0xc232dde7, 0xacbec6a6, 0xe29dfdff, 0x8c11e6be,
5098
+ 0x3f85cb7d, 0x5109d03c, 0x83dc96ba, 0xed508dfb, 0x5ec4a038,
5099
+ 0x3048bb79, 0x201f2b75, 0x4e933034, 0xfd071df7, 0x938b06b6,
5100
+ 0x415e4030, 0x2fd25b71, 0x9c4676b2, 0xf2ca6df3, 0xa2a3ab15,
5101
+ 0xcc2fb054, 0x7fbb9d97, 0x113786d6, 0xc3e2c050, 0xad6edb11,
5102
+ 0x1efaf6d2, 0x7076ed93, 0x60217d9f, 0x0ead66de, 0xbd394b1d,
5103
+ 0xd3b5505c, 0x016016da, 0x6fec0d9b, 0xdc782058, 0xb2f43b19,
5104
+ 0xfcd70040, 0x925b1b01, 0x21cf36c2, 0x4f432d83, 0x9d966b05,
5105
+ 0xf31a7044, 0x408e5d87, 0x2e0246c6, 0x3e55d6ca, 0x50d9cd8b,
5106
+ 0xe34de048, 0x8dc1fb09, 0x5f14bd8f, 0x3198a6ce, 0x820c8b0d,
5107
+ 0xec80904c, 0x1e4afdbf, 0x70c6e6fe, 0xc352cb3d, 0xadded07c,
5108
+ 0x7f0b96fa, 0x11878dbb, 0xa213a078, 0xcc9fbb39, 0xdcc82b35,
5109
+ 0xb2443074, 0x01d01db7, 0x6f5c06f6, 0xbd894070, 0xd3055b31,
5110
+ 0x609176f2, 0x0e1d6db3, 0x403e56ea, 0x2eb24dab, 0x9d266068,
5111
+ 0xf3aa7b29, 0x217f3daf, 0x4ff326ee, 0xfc670b2d, 0x92eb106c,
5112
+ 0x82bc8060, 0xec309b21, 0x5fa4b6e2, 0x3128ada3, 0xe3fdeb25,
5113
+ 0x8d71f064, 0x3ee5dda7, 0x5069c6e6, 0x9e36506b, 0xf0ba4b2a,
5114
+ 0x432e66e9, 0x2da27da8, 0xff773b2e, 0x91fb206f, 0x226f0dac,
5115
+ 0x4ce316ed, 0x5cb486e1, 0x32389da0, 0x81acb063, 0xef20ab22,
5116
+ 0x3df5eda4, 0x5379f6e5, 0xe0eddb26, 0x8e61c067, 0xc042fb3e,
5117
+ 0xaecee07f, 0x1d5acdbc, 0x73d6d6fd, 0xa103907b, 0xcf8f8b3a,
5118
+ 0x7c1ba6f9, 0x1297bdb8, 0x02c02db4, 0x6c4c36f5, 0xdfd81b36,
5119
+ 0xb1540077, 0x638146f1, 0x0d0d5db0, 0xbe997073, 0xd0156b32,
5120
+ 0x22df06c1, 0x4c531d80, 0xffc73043, 0x914b2b02, 0x439e6d84,
5121
+ 0x2d1276c5, 0x9e865b06, 0xf00a4047, 0xe05dd04b, 0x8ed1cb0a,
5122
+ 0x3d45e6c9, 0x53c9fd88, 0x811cbb0e, 0xef90a04f, 0x5c048d8c,
5123
+ 0x328896cd, 0x7cabad94, 0x1227b6d5, 0xa1b39b16, 0xcf3f8057,
5124
+ 0x1deac6d1, 0x7366dd90, 0xc0f2f053, 0xae7eeb12, 0xbe297b1e,
5125
+ 0xd0a5605f, 0x63314d9c, 0x0dbd56dd, 0xdf68105b, 0xb1e40b1a,
5126
+ 0x027026d9, 0x6cfc3d98, 0x3c95fb7e, 0x5219e03f, 0xe18dcdfc,
5127
+ 0x8f01d6bd, 0x5dd4903b, 0x33588b7a, 0x80cca6b9, 0xee40bdf8,
5128
+ 0xfe172df4, 0x909b36b5, 0x230f1b76, 0x4d830037, 0x9f5646b1,
5129
+ 0xf1da5df0, 0x424e7033, 0x2cc26b72, 0x62e1502b, 0x0c6d4b6a,
5130
+ 0xbff966a9, 0xd1757de8, 0x03a03b6e, 0x6d2c202f, 0xdeb80dec,
5131
+ 0xb03416ad, 0xa06386a1, 0xceef9de0, 0x7d7bb023, 0x13f7ab62,
5132
+ 0xc122ede4, 0xafaef6a5, 0x1c3adb66, 0x72b6c027, 0x807cadd4,
5133
+ 0xeef0b695, 0x5d649b56, 0x33e88017, 0xe13dc691, 0x8fb1ddd0,
5134
+ 0x3c25f013, 0x52a9eb52, 0x42fe7b5e, 0x2c72601f, 0x9fe64ddc,
5135
+ 0xf16a569d, 0x23bf101b, 0x4d330b5a, 0xfea72699, 0x902b3dd8,
5136
+ 0xde080681, 0xb0841dc0, 0x03103003, 0x6d9c2b42, 0xbf496dc4,
5137
+ 0xd1c57685, 0x62515b46, 0x0cdd4007, 0x1c8ad00b, 0x7206cb4a,
5138
+ 0xc192e689, 0xaf1efdc8, 0x7dcbbb4e, 0x1347a00f, 0xa0d38dcc,
5139
+ 0xce5f968d},
5140
+ {0x00000000, 0xe71da697, 0x154a4b6f, 0xf257edf8, 0x2a9496de,
5141
+ 0xcd893049, 0x3fdeddb1, 0xd8c37b26, 0x55292dbc, 0xb2348b2b,
5142
+ 0x406366d3, 0xa77ec044, 0x7fbdbb62, 0x98a01df5, 0x6af7f00d,
5143
+ 0x8dea569a, 0xaa525b78, 0x4d4ffdef, 0xbf181017, 0x5805b680,
5144
+ 0x80c6cda6, 0x67db6b31, 0x958c86c9, 0x7291205e, 0xff7b76c4,
5145
+ 0x1866d053, 0xea313dab, 0x0d2c9b3c, 0xd5efe01a, 0x32f2468d,
5146
+ 0xc0a5ab75, 0x27b80de2, 0x8fd5b0b1, 0x68c81626, 0x9a9ffbde,
5147
+ 0x7d825d49, 0xa541266f, 0x425c80f8, 0xb00b6d00, 0x5716cb97,
5148
+ 0xdafc9d0d, 0x3de13b9a, 0xcfb6d662, 0x28ab70f5, 0xf0680bd3,
5149
+ 0x1775ad44, 0xe52240bc, 0x023fe62b, 0x2587ebc9, 0xc29a4d5e,
5150
+ 0x30cda0a6, 0xd7d00631, 0x0f137d17, 0xe80edb80, 0x1a593678,
5151
+ 0xfd4490ef, 0x70aec675, 0x97b360e2, 0x65e48d1a, 0x82f92b8d,
5152
+ 0x5a3a50ab, 0xbd27f63c, 0x4f701bc4, 0xa86dbd53, 0xc4da6723,
5153
+ 0x23c7c1b4, 0xd1902c4c, 0x368d8adb, 0xee4ef1fd, 0x0953576a,
5154
+ 0xfb04ba92, 0x1c191c05, 0x91f34a9f, 0x76eeec08, 0x84b901f0,
5155
+ 0x63a4a767, 0xbb67dc41, 0x5c7a7ad6, 0xae2d972e, 0x493031b9,
5156
+ 0x6e883c5b, 0x89959acc, 0x7bc27734, 0x9cdfd1a3, 0x441caa85,
5157
+ 0xa3010c12, 0x5156e1ea, 0xb64b477d, 0x3ba111e7, 0xdcbcb770,
5158
+ 0x2eeb5a88, 0xc9f6fc1f, 0x11358739, 0xf62821ae, 0x047fcc56,
5159
+ 0xe3626ac1, 0x4b0fd792, 0xac127105, 0x5e459cfd, 0xb9583a6a,
5160
+ 0x619b414c, 0x8686e7db, 0x74d10a23, 0x93ccacb4, 0x1e26fa2e,
5161
+ 0xf93b5cb9, 0x0b6cb141, 0xec7117d6, 0x34b26cf0, 0xd3afca67,
5162
+ 0x21f8279f, 0xc6e58108, 0xe15d8cea, 0x06402a7d, 0xf417c785,
5163
+ 0x130a6112, 0xcbc91a34, 0x2cd4bca3, 0xde83515b, 0x399ef7cc,
5164
+ 0xb474a156, 0x536907c1, 0xa13eea39, 0x46234cae, 0x9ee03788,
5165
+ 0x79fd911f, 0x8baa7ce7, 0x6cb7da70, 0x52c5c807, 0xb5d86e90,
5166
+ 0x478f8368, 0xa09225ff, 0x78515ed9, 0x9f4cf84e, 0x6d1b15b6,
5167
+ 0x8a06b321, 0x07ece5bb, 0xe0f1432c, 0x12a6aed4, 0xf5bb0843,
5168
+ 0x2d787365, 0xca65d5f2, 0x3832380a, 0xdf2f9e9d, 0xf897937f,
5169
+ 0x1f8a35e8, 0xedddd810, 0x0ac07e87, 0xd20305a1, 0x351ea336,
5170
+ 0xc7494ece, 0x2054e859, 0xadbebec3, 0x4aa31854, 0xb8f4f5ac,
5171
+ 0x5fe9533b, 0x872a281d, 0x60378e8a, 0x92606372, 0x757dc5e5,
5172
+ 0xdd1078b6, 0x3a0dde21, 0xc85a33d9, 0x2f47954e, 0xf784ee68,
5173
+ 0x109948ff, 0xe2cea507, 0x05d30390, 0x8839550a, 0x6f24f39d,
5174
+ 0x9d731e65, 0x7a6eb8f2, 0xa2adc3d4, 0x45b06543, 0xb7e788bb,
5175
+ 0x50fa2e2c, 0x774223ce, 0x905f8559, 0x620868a1, 0x8515ce36,
5176
+ 0x5dd6b510, 0xbacb1387, 0x489cfe7f, 0xaf8158e8, 0x226b0e72,
5177
+ 0xc576a8e5, 0x3721451d, 0xd03ce38a, 0x08ff98ac, 0xefe23e3b,
5178
+ 0x1db5d3c3, 0xfaa87554, 0x961faf24, 0x710209b3, 0x8355e44b,
5179
+ 0x644842dc, 0xbc8b39fa, 0x5b969f6d, 0xa9c17295, 0x4edcd402,
5180
+ 0xc3368298, 0x242b240f, 0xd67cc9f7, 0x31616f60, 0xe9a21446,
5181
+ 0x0ebfb2d1, 0xfce85f29, 0x1bf5f9be, 0x3c4df45c, 0xdb5052cb,
5182
+ 0x2907bf33, 0xce1a19a4, 0x16d96282, 0xf1c4c415, 0x039329ed,
5183
+ 0xe48e8f7a, 0x6964d9e0, 0x8e797f77, 0x7c2e928f, 0x9b333418,
5184
+ 0x43f04f3e, 0xa4ede9a9, 0x56ba0451, 0xb1a7a2c6, 0x19ca1f95,
5185
+ 0xfed7b902, 0x0c8054fa, 0xeb9df26d, 0x335e894b, 0xd4432fdc,
5186
+ 0x2614c224, 0xc10964b3, 0x4ce33229, 0xabfe94be, 0x59a97946,
5187
+ 0xbeb4dfd1, 0x6677a4f7, 0x816a0260, 0x733def98, 0x9420490f,
5188
+ 0xb39844ed, 0x5485e27a, 0xa6d20f82, 0x41cfa915, 0x990cd233,
5189
+ 0x7e1174a4, 0x8c46995c, 0x6b5b3fcb, 0xe6b16951, 0x01accfc6,
5190
+ 0xf3fb223e, 0x14e684a9, 0xcc25ff8f, 0x2b385918, 0xd96fb4e0,
5191
+ 0x3e721277},
5192
+ {0x00000000, 0xa58b900e, 0x9066265d, 0x35edb653, 0xfbbd4afb,
5193
+ 0x5e36daf5, 0x6bdb6ca6, 0xce50fca8, 0x2c0b93b7, 0x898003b9,
5194
+ 0xbc6db5ea, 0x19e625e4, 0xd7b6d94c, 0x723d4942, 0x47d0ff11,
5195
+ 0xe25b6f1f, 0x5817276e, 0xfd9cb760, 0xc8710133, 0x6dfa913d,
5196
+ 0xa3aa6d95, 0x0621fd9b, 0x33cc4bc8, 0x9647dbc6, 0x741cb4d9,
5197
+ 0xd19724d7, 0xe47a9284, 0x41f1028a, 0x8fa1fe22, 0x2a2a6e2c,
5198
+ 0x1fc7d87f, 0xba4c4871, 0xb02e4edc, 0x15a5ded2, 0x20486881,
5199
+ 0x85c3f88f, 0x4b930427, 0xee189429, 0xdbf5227a, 0x7e7eb274,
5200
+ 0x9c25dd6b, 0x39ae4d65, 0x0c43fb36, 0xa9c86b38, 0x67989790,
5201
+ 0xc213079e, 0xf7feb1cd, 0x527521c3, 0xe83969b2, 0x4db2f9bc,
5202
+ 0x785f4fef, 0xddd4dfe1, 0x13842349, 0xb60fb347, 0x83e20514,
5203
+ 0x2669951a, 0xc432fa05, 0x61b96a0b, 0x5454dc58, 0xf1df4c56,
5204
+ 0x3f8fb0fe, 0x9a0420f0, 0xafe996a3, 0x0a6206ad, 0xbb2d9bf9,
5205
+ 0x1ea60bf7, 0x2b4bbda4, 0x8ec02daa, 0x4090d102, 0xe51b410c,
5206
+ 0xd0f6f75f, 0x757d6751, 0x9726084e, 0x32ad9840, 0x07402e13,
5207
+ 0xa2cbbe1d, 0x6c9b42b5, 0xc910d2bb, 0xfcfd64e8, 0x5976f4e6,
5208
+ 0xe33abc97, 0x46b12c99, 0x735c9aca, 0xd6d70ac4, 0x1887f66c,
5209
+ 0xbd0c6662, 0x88e1d031, 0x2d6a403f, 0xcf312f20, 0x6ababf2e,
5210
+ 0x5f57097d, 0xfadc9973, 0x348c65db, 0x9107f5d5, 0xa4ea4386,
5211
+ 0x0161d388, 0x0b03d525, 0xae88452b, 0x9b65f378, 0x3eee6376,
5212
+ 0xf0be9fde, 0x55350fd0, 0x60d8b983, 0xc553298d, 0x27084692,
5213
+ 0x8283d69c, 0xb76e60cf, 0x12e5f0c1, 0xdcb50c69, 0x793e9c67,
5214
+ 0x4cd32a34, 0xe958ba3a, 0x5314f24b, 0xf69f6245, 0xc372d416,
5215
+ 0x66f94418, 0xa8a9b8b0, 0x0d2228be, 0x38cf9eed, 0x9d440ee3,
5216
+ 0x7f1f61fc, 0xda94f1f2, 0xef7947a1, 0x4af2d7af, 0x84a22b07,
5217
+ 0x2129bb09, 0x14c40d5a, 0xb14f9d54, 0xad2a31b3, 0x08a1a1bd,
5218
+ 0x3d4c17ee, 0x98c787e0, 0x56977b48, 0xf31ceb46, 0xc6f15d15,
5219
+ 0x637acd1b, 0x8121a204, 0x24aa320a, 0x11478459, 0xb4cc1457,
5220
+ 0x7a9ce8ff, 0xdf1778f1, 0xeafacea2, 0x4f715eac, 0xf53d16dd,
5221
+ 0x50b686d3, 0x655b3080, 0xc0d0a08e, 0x0e805c26, 0xab0bcc28,
5222
+ 0x9ee67a7b, 0x3b6dea75, 0xd936856a, 0x7cbd1564, 0x4950a337,
5223
+ 0xecdb3339, 0x228bcf91, 0x87005f9f, 0xb2ede9cc, 0x176679c2,
5224
+ 0x1d047f6f, 0xb88fef61, 0x8d625932, 0x28e9c93c, 0xe6b93594,
5225
+ 0x4332a59a, 0x76df13c9, 0xd35483c7, 0x310fecd8, 0x94847cd6,
5226
+ 0xa169ca85, 0x04e25a8b, 0xcab2a623, 0x6f39362d, 0x5ad4807e,
5227
+ 0xff5f1070, 0x45135801, 0xe098c80f, 0xd5757e5c, 0x70feee52,
5228
+ 0xbeae12fa, 0x1b2582f4, 0x2ec834a7, 0x8b43a4a9, 0x6918cbb6,
5229
+ 0xcc935bb8, 0xf97eedeb, 0x5cf57de5, 0x92a5814d, 0x372e1143,
5230
+ 0x02c3a710, 0xa748371e, 0x1607aa4a, 0xb38c3a44, 0x86618c17,
5231
+ 0x23ea1c19, 0xedbae0b1, 0x483170bf, 0x7ddcc6ec, 0xd85756e2,
5232
+ 0x3a0c39fd, 0x9f87a9f3, 0xaa6a1fa0, 0x0fe18fae, 0xc1b17306,
5233
+ 0x643ae308, 0x51d7555b, 0xf45cc555, 0x4e108d24, 0xeb9b1d2a,
5234
+ 0xde76ab79, 0x7bfd3b77, 0xb5adc7df, 0x102657d1, 0x25cbe182,
5235
+ 0x8040718c, 0x621b1e93, 0xc7908e9d, 0xf27d38ce, 0x57f6a8c0,
5236
+ 0x99a65468, 0x3c2dc466, 0x09c07235, 0xac4be23b, 0xa629e496,
5237
+ 0x03a27498, 0x364fc2cb, 0x93c452c5, 0x5d94ae6d, 0xf81f3e63,
5238
+ 0xcdf28830, 0x6879183e, 0x8a227721, 0x2fa9e72f, 0x1a44517c,
5239
+ 0xbfcfc172, 0x719f3dda, 0xd414add4, 0xe1f91b87, 0x44728b89,
5240
+ 0xfe3ec3f8, 0x5bb553f6, 0x6e58e5a5, 0xcbd375ab, 0x05838903,
5241
+ 0xa008190d, 0x95e5af5e, 0x306e3f50, 0xd235504f, 0x77bec041,
5242
+ 0x42537612, 0xe7d8e61c, 0x29881ab4, 0x8c038aba, 0xb9ee3ce9,
5243
+ 0x1c65ace7}};
5244
+
5245
+local const z_word_t FAR crc_braid_big_table[][256] = {
5246
+ {0x0000000000000000, 0x0e908ba500000000, 0x5d26669000000000,
5247
+ 0x53b6ed3500000000, 0xfb4abdfb00000000, 0xf5da365e00000000,
5248
+ 0xa66cdb6b00000000, 0xa8fc50ce00000000, 0xb7930b2c00000000,
5249
+ 0xb903808900000000, 0xeab56dbc00000000, 0xe425e61900000000,
5250
+ 0x4cd9b6d700000000, 0x42493d7200000000, 0x11ffd04700000000,
5251
+ 0x1f6f5be200000000, 0x6e27175800000000, 0x60b79cfd00000000,
5252
+ 0x330171c800000000, 0x3d91fa6d00000000, 0x956daaa300000000,
5253
+ 0x9bfd210600000000, 0xc84bcc3300000000, 0xc6db479600000000,
5254
+ 0xd9b41c7400000000, 0xd72497d100000000, 0x84927ae400000000,
5255
+ 0x8a02f14100000000, 0x22fea18f00000000, 0x2c6e2a2a00000000,
5256
+ 0x7fd8c71f00000000, 0x71484cba00000000, 0xdc4e2eb000000000,
5257
+ 0xd2dea51500000000, 0x8168482000000000, 0x8ff8c38500000000,
5258
+ 0x2704934b00000000, 0x299418ee00000000, 0x7a22f5db00000000,
5259
+ 0x74b27e7e00000000, 0x6bdd259c00000000, 0x654dae3900000000,
5260
+ 0x36fb430c00000000, 0x386bc8a900000000, 0x9097986700000000,
5261
+ 0x9e0713c200000000, 0xcdb1fef700000000, 0xc321755200000000,
5262
+ 0xb26939e800000000, 0xbcf9b24d00000000, 0xef4f5f7800000000,
5263
+ 0xe1dfd4dd00000000, 0x4923841300000000, 0x47b30fb600000000,
5264
+ 0x1405e28300000000, 0x1a95692600000000, 0x05fa32c400000000,
5265
+ 0x0b6ab96100000000, 0x58dc545400000000, 0x564cdff100000000,
5266
+ 0xfeb08f3f00000000, 0xf020049a00000000, 0xa396e9af00000000,
5267
+ 0xad06620a00000000, 0xf99b2dbb00000000, 0xf70ba61e00000000,
5268
+ 0xa4bd4b2b00000000, 0xaa2dc08e00000000, 0x02d1904000000000,
5269
+ 0x0c411be500000000, 0x5ff7f6d000000000, 0x51677d7500000000,
5270
+ 0x4e08269700000000, 0x4098ad3200000000, 0x132e400700000000,
5271
+ 0x1dbecba200000000, 0xb5429b6c00000000, 0xbbd210c900000000,
5272
+ 0xe864fdfc00000000, 0xe6f4765900000000, 0x97bc3ae300000000,
5273
+ 0x992cb14600000000, 0xca9a5c7300000000, 0xc40ad7d600000000,
5274
+ 0x6cf6871800000000, 0x62660cbd00000000, 0x31d0e18800000000,
5275
+ 0x3f406a2d00000000, 0x202f31cf00000000, 0x2ebfba6a00000000,
5276
+ 0x7d09575f00000000, 0x7399dcfa00000000, 0xdb658c3400000000,
5277
+ 0xd5f5079100000000, 0x8643eaa400000000, 0x88d3610100000000,
5278
+ 0x25d5030b00000000, 0x2b4588ae00000000, 0x78f3659b00000000,
5279
+ 0x7663ee3e00000000, 0xde9fbef000000000, 0xd00f355500000000,
5280
+ 0x83b9d86000000000, 0x8d2953c500000000, 0x9246082700000000,
5281
+ 0x9cd6838200000000, 0xcf606eb700000000, 0xc1f0e51200000000,
5282
+ 0x690cb5dc00000000, 0x679c3e7900000000, 0x342ad34c00000000,
5283
+ 0x3aba58e900000000, 0x4bf2145300000000, 0x45629ff600000000,
5284
+ 0x16d472c300000000, 0x1844f96600000000, 0xb0b8a9a800000000,
5285
+ 0xbe28220d00000000, 0xed9ecf3800000000, 0xe30e449d00000000,
5286
+ 0xfc611f7f00000000, 0xf2f194da00000000, 0xa14779ef00000000,
5287
+ 0xafd7f24a00000000, 0x072ba28400000000, 0x09bb292100000000,
5288
+ 0x5a0dc41400000000, 0x549d4fb100000000, 0xb3312aad00000000,
5289
+ 0xbda1a10800000000, 0xee174c3d00000000, 0xe087c79800000000,
5290
+ 0x487b975600000000, 0x46eb1cf300000000, 0x155df1c600000000,
5291
+ 0x1bcd7a6300000000, 0x04a2218100000000, 0x0a32aa2400000000,
5292
+ 0x5984471100000000, 0x5714ccb400000000, 0xffe89c7a00000000,
5293
+ 0xf17817df00000000, 0xa2cefaea00000000, 0xac5e714f00000000,
5294
+ 0xdd163df500000000, 0xd386b65000000000, 0x80305b6500000000,
5295
+ 0x8ea0d0c000000000, 0x265c800e00000000, 0x28cc0bab00000000,
5296
+ 0x7b7ae69e00000000, 0x75ea6d3b00000000, 0x6a8536d900000000,
5297
+ 0x6415bd7c00000000, 0x37a3504900000000, 0x3933dbec00000000,
5298
+ 0x91cf8b2200000000, 0x9f5f008700000000, 0xcce9edb200000000,
5299
+ 0xc279661700000000, 0x6f7f041d00000000, 0x61ef8fb800000000,
5300
+ 0x3259628d00000000, 0x3cc9e92800000000, 0x9435b9e600000000,
5301
+ 0x9aa5324300000000, 0xc913df7600000000, 0xc78354d300000000,
5302
+ 0xd8ec0f3100000000, 0xd67c849400000000, 0x85ca69a100000000,
5303
+ 0x8b5ae20400000000, 0x23a6b2ca00000000, 0x2d36396f00000000,
5304
+ 0x7e80d45a00000000, 0x70105fff00000000, 0x0158134500000000,
5305
+ 0x0fc898e000000000, 0x5c7e75d500000000, 0x52eefe7000000000,
5306
+ 0xfa12aebe00000000, 0xf482251b00000000, 0xa734c82e00000000,
5307
+ 0xa9a4438b00000000, 0xb6cb186900000000, 0xb85b93cc00000000,
5308
+ 0xebed7ef900000000, 0xe57df55c00000000, 0x4d81a59200000000,
5309
+ 0x43112e3700000000, 0x10a7c30200000000, 0x1e3748a700000000,
5310
+ 0x4aaa071600000000, 0x443a8cb300000000, 0x178c618600000000,
5311
+ 0x191cea2300000000, 0xb1e0baed00000000, 0xbf70314800000000,
5312
+ 0xecc6dc7d00000000, 0xe25657d800000000, 0xfd390c3a00000000,
5313
+ 0xf3a9879f00000000, 0xa01f6aaa00000000, 0xae8fe10f00000000,
5314
+ 0x0673b1c100000000, 0x08e33a6400000000, 0x5b55d75100000000,
5315
+ 0x55c55cf400000000, 0x248d104e00000000, 0x2a1d9beb00000000,
5316
+ 0x79ab76de00000000, 0x773bfd7b00000000, 0xdfc7adb500000000,
5317
+ 0xd157261000000000, 0x82e1cb2500000000, 0x8c71408000000000,
5318
+ 0x931e1b6200000000, 0x9d8e90c700000000, 0xce387df200000000,
5319
+ 0xc0a8f65700000000, 0x6854a69900000000, 0x66c42d3c00000000,
5320
+ 0x3572c00900000000, 0x3be24bac00000000, 0x96e429a600000000,
5321
+ 0x9874a20300000000, 0xcbc24f3600000000, 0xc552c49300000000,
5322
+ 0x6dae945d00000000, 0x633e1ff800000000, 0x3088f2cd00000000,
5323
+ 0x3e18796800000000, 0x2177228a00000000, 0x2fe7a92f00000000,
5324
+ 0x7c51441a00000000, 0x72c1cfbf00000000, 0xda3d9f7100000000,
5325
+ 0xd4ad14d400000000, 0x871bf9e100000000, 0x898b724400000000,
5326
+ 0xf8c33efe00000000, 0xf653b55b00000000, 0xa5e5586e00000000,
5327
+ 0xab75d3cb00000000, 0x0389830500000000, 0x0d1908a000000000,
5328
+ 0x5eafe59500000000, 0x503f6e3000000000, 0x4f5035d200000000,
5329
+ 0x41c0be7700000000, 0x1276534200000000, 0x1ce6d8e700000000,
5330
+ 0xb41a882900000000, 0xba8a038c00000000, 0xe93ceeb900000000,
5331
+ 0xe7ac651c00000000},
5332
+ {0x0000000000000000, 0x97a61de700000000, 0x6f4b4a1500000000,
5333
+ 0xf8ed57f200000000, 0xde96942a00000000, 0x493089cd00000000,
5334
+ 0xb1ddde3f00000000, 0x267bc3d800000000, 0xbc2d295500000000,
5335
+ 0x2b8b34b200000000, 0xd366634000000000, 0x44c07ea700000000,
5336
+ 0x62bbbd7f00000000, 0xf51da09800000000, 0x0df0f76a00000000,
5337
+ 0x9a56ea8d00000000, 0x785b52aa00000000, 0xeffd4f4d00000000,
5338
+ 0x171018bf00000000, 0x80b6055800000000, 0xa6cdc68000000000,
5339
+ 0x316bdb6700000000, 0xc9868c9500000000, 0x5e20917200000000,
5340
+ 0xc4767bff00000000, 0x53d0661800000000, 0xab3d31ea00000000,
5341
+ 0x3c9b2c0d00000000, 0x1ae0efd500000000, 0x8d46f23200000000,
5342
+ 0x75aba5c000000000, 0xe20db82700000000, 0xb1b0d58f00000000,
5343
+ 0x2616c86800000000, 0xdefb9f9a00000000, 0x495d827d00000000,
5344
+ 0x6f2641a500000000, 0xf8805c4200000000, 0x006d0bb000000000,
5345
+ 0x97cb165700000000, 0x0d9dfcda00000000, 0x9a3be13d00000000,
5346
+ 0x62d6b6cf00000000, 0xf570ab2800000000, 0xd30b68f000000000,
5347
+ 0x44ad751700000000, 0xbc4022e500000000, 0x2be63f0200000000,
5348
+ 0xc9eb872500000000, 0x5e4d9ac200000000, 0xa6a0cd3000000000,
5349
+ 0x3106d0d700000000, 0x177d130f00000000, 0x80db0ee800000000,
5350
+ 0x7836591a00000000, 0xef9044fd00000000, 0x75c6ae7000000000,
5351
+ 0xe260b39700000000, 0x1a8de46500000000, 0x8d2bf98200000000,
5352
+ 0xab503a5a00000000, 0x3cf627bd00000000, 0xc41b704f00000000,
5353
+ 0x53bd6da800000000, 0x2367dac400000000, 0xb4c1c72300000000,
5354
+ 0x4c2c90d100000000, 0xdb8a8d3600000000, 0xfdf14eee00000000,
5355
+ 0x6a57530900000000, 0x92ba04fb00000000, 0x051c191c00000000,
5356
+ 0x9f4af39100000000, 0x08ecee7600000000, 0xf001b98400000000,
5357
+ 0x67a7a46300000000, 0x41dc67bb00000000, 0xd67a7a5c00000000,
5358
+ 0x2e972dae00000000, 0xb931304900000000, 0x5b3c886e00000000,
5359
+ 0xcc9a958900000000, 0x3477c27b00000000, 0xa3d1df9c00000000,
5360
+ 0x85aa1c4400000000, 0x120c01a300000000, 0xeae1565100000000,
5361
+ 0x7d474bb600000000, 0xe711a13b00000000, 0x70b7bcdc00000000,
5362
+ 0x885aeb2e00000000, 0x1ffcf6c900000000, 0x3987351100000000,
5363
+ 0xae2128f600000000, 0x56cc7f0400000000, 0xc16a62e300000000,
5364
+ 0x92d70f4b00000000, 0x057112ac00000000, 0xfd9c455e00000000,
5365
+ 0x6a3a58b900000000, 0x4c419b6100000000, 0xdbe7868600000000,
5366
+ 0x230ad17400000000, 0xb4accc9300000000, 0x2efa261e00000000,
5367
+ 0xb95c3bf900000000, 0x41b16c0b00000000, 0xd61771ec00000000,
5368
+ 0xf06cb23400000000, 0x67caafd300000000, 0x9f27f82100000000,
5369
+ 0x0881e5c600000000, 0xea8c5de100000000, 0x7d2a400600000000,
5370
+ 0x85c717f400000000, 0x12610a1300000000, 0x341ac9cb00000000,
5371
+ 0xa3bcd42c00000000, 0x5b5183de00000000, 0xccf79e3900000000,
5372
+ 0x56a174b400000000, 0xc107695300000000, 0x39ea3ea100000000,
5373
+ 0xae4c234600000000, 0x8837e09e00000000, 0x1f91fd7900000000,
5374
+ 0xe77caa8b00000000, 0x70dab76c00000000, 0x07c8c55200000000,
5375
+ 0x906ed8b500000000, 0x68838f4700000000, 0xff2592a000000000,
5376
+ 0xd95e517800000000, 0x4ef84c9f00000000, 0xb6151b6d00000000,
5377
+ 0x21b3068a00000000, 0xbbe5ec0700000000, 0x2c43f1e000000000,
5378
+ 0xd4aea61200000000, 0x4308bbf500000000, 0x6573782d00000000,
5379
+ 0xf2d565ca00000000, 0x0a38323800000000, 0x9d9e2fdf00000000,
5380
+ 0x7f9397f800000000, 0xe8358a1f00000000, 0x10d8dded00000000,
5381
+ 0x877ec00a00000000, 0xa10503d200000000, 0x36a31e3500000000,
5382
+ 0xce4e49c700000000, 0x59e8542000000000, 0xc3bebead00000000,
5383
+ 0x5418a34a00000000, 0xacf5f4b800000000, 0x3b53e95f00000000,
5384
+ 0x1d282a8700000000, 0x8a8e376000000000, 0x7263609200000000,
5385
+ 0xe5c57d7500000000, 0xb67810dd00000000, 0x21de0d3a00000000,
5386
+ 0xd9335ac800000000, 0x4e95472f00000000, 0x68ee84f700000000,
5387
+ 0xff48991000000000, 0x07a5cee200000000, 0x9003d30500000000,
5388
+ 0x0a55398800000000, 0x9df3246f00000000, 0x651e739d00000000,
5389
+ 0xf2b86e7a00000000, 0xd4c3ada200000000, 0x4365b04500000000,
5390
+ 0xbb88e7b700000000, 0x2c2efa5000000000, 0xce23427700000000,
5391
+ 0x59855f9000000000, 0xa168086200000000, 0x36ce158500000000,
5392
+ 0x10b5d65d00000000, 0x8713cbba00000000, 0x7ffe9c4800000000,
5393
+ 0xe85881af00000000, 0x720e6b2200000000, 0xe5a876c500000000,
5394
+ 0x1d45213700000000, 0x8ae33cd000000000, 0xac98ff0800000000,
5395
+ 0x3b3ee2ef00000000, 0xc3d3b51d00000000, 0x5475a8fa00000000,
5396
+ 0x24af1f9600000000, 0xb309027100000000, 0x4be4558300000000,
5397
+ 0xdc42486400000000, 0xfa398bbc00000000, 0x6d9f965b00000000,
5398
+ 0x9572c1a900000000, 0x02d4dc4e00000000, 0x988236c300000000,
5399
+ 0x0f242b2400000000, 0xf7c97cd600000000, 0x606f613100000000,
5400
+ 0x4614a2e900000000, 0xd1b2bf0e00000000, 0x295fe8fc00000000,
5401
+ 0xbef9f51b00000000, 0x5cf44d3c00000000, 0xcb5250db00000000,
5402
+ 0x33bf072900000000, 0xa4191ace00000000, 0x8262d91600000000,
5403
+ 0x15c4c4f100000000, 0xed29930300000000, 0x7a8f8ee400000000,
5404
+ 0xe0d9646900000000, 0x777f798e00000000, 0x8f922e7c00000000,
5405
+ 0x1834339b00000000, 0x3e4ff04300000000, 0xa9e9eda400000000,
5406
+ 0x5104ba5600000000, 0xc6a2a7b100000000, 0x951fca1900000000,
5407
+ 0x02b9d7fe00000000, 0xfa54800c00000000, 0x6df29deb00000000,
5408
+ 0x4b895e3300000000, 0xdc2f43d400000000, 0x24c2142600000000,
5409
+ 0xb36409c100000000, 0x2932e34c00000000, 0xbe94feab00000000,
5410
+ 0x4679a95900000000, 0xd1dfb4be00000000, 0xf7a4776600000000,
5411
+ 0x60026a8100000000, 0x98ef3d7300000000, 0x0f49209400000000,
5412
+ 0xed4498b300000000, 0x7ae2855400000000, 0x820fd2a600000000,
5413
+ 0x15a9cf4100000000, 0x33d20c9900000000, 0xa474117e00000000,
5414
+ 0x5c99468c00000000, 0xcb3f5b6b00000000, 0x5169b1e600000000,
5415
+ 0xc6cfac0100000000, 0x3e22fbf300000000, 0xa984e61400000000,
5416
+ 0x8fff25cc00000000, 0x1859382b00000000, 0xe0b46fd900000000,
5417
+ 0x7712723e00000000},
5418
+ {0x0000000000000000, 0x411b8c6e00000000, 0x823618dd00000000,
5419
+ 0xc32d94b300000000, 0x456b416100000000, 0x0470cd0f00000000,
5420
+ 0xc75d59bc00000000, 0x8646d5d200000000, 0x8ad682c200000000,
5421
+ 0xcbcd0eac00000000, 0x08e09a1f00000000, 0x49fb167100000000,
5422
+ 0xcfbdc3a300000000, 0x8ea64fcd00000000, 0x4d8bdb7e00000000,
5423
+ 0x0c90571000000000, 0x55ab745e00000000, 0x14b0f83000000000,
5424
+ 0xd79d6c8300000000, 0x9686e0ed00000000, 0x10c0353f00000000,
5425
+ 0x51dbb95100000000, 0x92f62de200000000, 0xd3eda18c00000000,
5426
+ 0xdf7df69c00000000, 0x9e667af200000000, 0x5d4bee4100000000,
5427
+ 0x1c50622f00000000, 0x9a16b7fd00000000, 0xdb0d3b9300000000,
5428
+ 0x1820af2000000000, 0x593b234e00000000, 0xaa56e9bc00000000,
5429
+ 0xeb4d65d200000000, 0x2860f16100000000, 0x697b7d0f00000000,
5430
+ 0xef3da8dd00000000, 0xae2624b300000000, 0x6d0bb00000000000,
5431
+ 0x2c103c6e00000000, 0x20806b7e00000000, 0x619be71000000000,
5432
+ 0xa2b673a300000000, 0xe3adffcd00000000, 0x65eb2a1f00000000,
5433
+ 0x24f0a67100000000, 0xe7dd32c200000000, 0xa6c6beac00000000,
5434
+ 0xfffd9de200000000, 0xbee6118c00000000, 0x7dcb853f00000000,
5435
+ 0x3cd0095100000000, 0xba96dc8300000000, 0xfb8d50ed00000000,
5436
+ 0x38a0c45e00000000, 0x79bb483000000000, 0x752b1f2000000000,
5437
+ 0x3430934e00000000, 0xf71d07fd00000000, 0xb6068b9300000000,
5438
+ 0x30405e4100000000, 0x715bd22f00000000, 0xb276469c00000000,
5439
+ 0xf36dcaf200000000, 0x15aba3a200000000, 0x54b02fcc00000000,
5440
+ 0x979dbb7f00000000, 0xd686371100000000, 0x50c0e2c300000000,
5441
+ 0x11db6ead00000000, 0xd2f6fa1e00000000, 0x93ed767000000000,
5442
+ 0x9f7d216000000000, 0xde66ad0e00000000, 0x1d4b39bd00000000,
5443
+ 0x5c50b5d300000000, 0xda16600100000000, 0x9b0dec6f00000000,
5444
+ 0x582078dc00000000, 0x193bf4b200000000, 0x4000d7fc00000000,
5445
+ 0x011b5b9200000000, 0xc236cf2100000000, 0x832d434f00000000,
5446
+ 0x056b969d00000000, 0x44701af300000000, 0x875d8e4000000000,
5447
+ 0xc646022e00000000, 0xcad6553e00000000, 0x8bcdd95000000000,
5448
+ 0x48e04de300000000, 0x09fbc18d00000000, 0x8fbd145f00000000,
5449
+ 0xcea6983100000000, 0x0d8b0c8200000000, 0x4c9080ec00000000,
5450
+ 0xbffd4a1e00000000, 0xfee6c67000000000, 0x3dcb52c300000000,
5451
+ 0x7cd0dead00000000, 0xfa960b7f00000000, 0xbb8d871100000000,
5452
+ 0x78a013a200000000, 0x39bb9fcc00000000, 0x352bc8dc00000000,
5453
+ 0x743044b200000000, 0xb71dd00100000000, 0xf6065c6f00000000,
5454
+ 0x704089bd00000000, 0x315b05d300000000, 0xf276916000000000,
5455
+ 0xb36d1d0e00000000, 0xea563e4000000000, 0xab4db22e00000000,
5456
+ 0x6860269d00000000, 0x297baaf300000000, 0xaf3d7f2100000000,
5457
+ 0xee26f34f00000000, 0x2d0b67fc00000000, 0x6c10eb9200000000,
5458
+ 0x6080bc8200000000, 0x219b30ec00000000, 0xe2b6a45f00000000,
5459
+ 0xa3ad283100000000, 0x25ebfde300000000, 0x64f0718d00000000,
5460
+ 0xa7dde53e00000000, 0xe6c6695000000000, 0x6b50369e00000000,
5461
+ 0x2a4bbaf000000000, 0xe9662e4300000000, 0xa87da22d00000000,
5462
+ 0x2e3b77ff00000000, 0x6f20fb9100000000, 0xac0d6f2200000000,
5463
+ 0xed16e34c00000000, 0xe186b45c00000000, 0xa09d383200000000,
5464
+ 0x63b0ac8100000000, 0x22ab20ef00000000, 0xa4edf53d00000000,
5465
+ 0xe5f6795300000000, 0x26dbede000000000, 0x67c0618e00000000,
5466
+ 0x3efb42c000000000, 0x7fe0ceae00000000, 0xbccd5a1d00000000,
5467
+ 0xfdd6d67300000000, 0x7b9003a100000000, 0x3a8b8fcf00000000,
5468
+ 0xf9a61b7c00000000, 0xb8bd971200000000, 0xb42dc00200000000,
5469
+ 0xf5364c6c00000000, 0x361bd8df00000000, 0x770054b100000000,
5470
+ 0xf146816300000000, 0xb05d0d0d00000000, 0x737099be00000000,
5471
+ 0x326b15d000000000, 0xc106df2200000000, 0x801d534c00000000,
5472
+ 0x4330c7ff00000000, 0x022b4b9100000000, 0x846d9e4300000000,
5473
+ 0xc576122d00000000, 0x065b869e00000000, 0x47400af000000000,
5474
+ 0x4bd05de000000000, 0x0acbd18e00000000, 0xc9e6453d00000000,
5475
+ 0x88fdc95300000000, 0x0ebb1c8100000000, 0x4fa090ef00000000,
5476
+ 0x8c8d045c00000000, 0xcd96883200000000, 0x94adab7c00000000,
5477
+ 0xd5b6271200000000, 0x169bb3a100000000, 0x57803fcf00000000,
5478
+ 0xd1c6ea1d00000000, 0x90dd667300000000, 0x53f0f2c000000000,
5479
+ 0x12eb7eae00000000, 0x1e7b29be00000000, 0x5f60a5d000000000,
5480
+ 0x9c4d316300000000, 0xdd56bd0d00000000, 0x5b1068df00000000,
5481
+ 0x1a0be4b100000000, 0xd926700200000000, 0x983dfc6c00000000,
5482
+ 0x7efb953c00000000, 0x3fe0195200000000, 0xfccd8de100000000,
5483
+ 0xbdd6018f00000000, 0x3b90d45d00000000, 0x7a8b583300000000,
5484
+ 0xb9a6cc8000000000, 0xf8bd40ee00000000, 0xf42d17fe00000000,
5485
+ 0xb5369b9000000000, 0x761b0f2300000000, 0x3700834d00000000,
5486
+ 0xb146569f00000000, 0xf05ddaf100000000, 0x33704e4200000000,
5487
+ 0x726bc22c00000000, 0x2b50e16200000000, 0x6a4b6d0c00000000,
5488
+ 0xa966f9bf00000000, 0xe87d75d100000000, 0x6e3ba00300000000,
5489
+ 0x2f202c6d00000000, 0xec0db8de00000000, 0xad1634b000000000,
5490
+ 0xa18663a000000000, 0xe09defce00000000, 0x23b07b7d00000000,
5491
+ 0x62abf71300000000, 0xe4ed22c100000000, 0xa5f6aeaf00000000,
5492
+ 0x66db3a1c00000000, 0x27c0b67200000000, 0xd4ad7c8000000000,
5493
+ 0x95b6f0ee00000000, 0x569b645d00000000, 0x1780e83300000000,
5494
+ 0x91c63de100000000, 0xd0ddb18f00000000, 0x13f0253c00000000,
5495
+ 0x52eba95200000000, 0x5e7bfe4200000000, 0x1f60722c00000000,
5496
+ 0xdc4de69f00000000, 0x9d566af100000000, 0x1b10bf2300000000,
5497
+ 0x5a0b334d00000000, 0x9926a7fe00000000, 0xd83d2b9000000000,
5498
+ 0x810608de00000000, 0xc01d84b000000000, 0x0330100300000000,
5499
+ 0x422b9c6d00000000, 0xc46d49bf00000000, 0x8576c5d100000000,
5500
+ 0x465b516200000000, 0x0740dd0c00000000, 0x0bd08a1c00000000,
5501
+ 0x4acb067200000000, 0x89e692c100000000, 0xc8fd1eaf00000000,
5502
+ 0x4ebbcb7d00000000, 0x0fa0471300000000, 0xcc8dd3a000000000,
5503
+ 0x8d965fce00000000},
5504
+ {0x0000000000000000, 0x1dfdb50100000000, 0x3afa6b0300000000,
5505
+ 0x2707de0200000000, 0x74f4d70600000000, 0x6909620700000000,
5506
+ 0x4e0ebc0500000000, 0x53f3090400000000, 0xe8e8af0d00000000,
5507
+ 0xf5151a0c00000000, 0xd212c40e00000000, 0xcfef710f00000000,
5508
+ 0x9c1c780b00000000, 0x81e1cd0a00000000, 0xa6e6130800000000,
5509
+ 0xbb1ba60900000000, 0xd0d15f1b00000000, 0xcd2cea1a00000000,
5510
+ 0xea2b341800000000, 0xf7d6811900000000, 0xa425881d00000000,
5511
+ 0xb9d83d1c00000000, 0x9edfe31e00000000, 0x8322561f00000000,
5512
+ 0x3839f01600000000, 0x25c4451700000000, 0x02c39b1500000000,
5513
+ 0x1f3e2e1400000000, 0x4ccd271000000000, 0x5130921100000000,
5514
+ 0x76374c1300000000, 0x6bcaf91200000000, 0xa0a3bf3600000000,
5515
+ 0xbd5e0a3700000000, 0x9a59d43500000000, 0x87a4613400000000,
5516
+ 0xd457683000000000, 0xc9aadd3100000000, 0xeead033300000000,
5517
+ 0xf350b63200000000, 0x484b103b00000000, 0x55b6a53a00000000,
5518
+ 0x72b17b3800000000, 0x6f4cce3900000000, 0x3cbfc73d00000000,
5519
+ 0x2142723c00000000, 0x0645ac3e00000000, 0x1bb8193f00000000,
5520
+ 0x7072e02d00000000, 0x6d8f552c00000000, 0x4a888b2e00000000,
5521
+ 0x57753e2f00000000, 0x0486372b00000000, 0x197b822a00000000,
5522
+ 0x3e7c5c2800000000, 0x2381e92900000000, 0x989a4f2000000000,
5523
+ 0x8567fa2100000000, 0xa260242300000000, 0xbf9d912200000000,
5524
+ 0xec6e982600000000, 0xf1932d2700000000, 0xd694f32500000000,
5525
+ 0xcb69462400000000, 0x40477f6d00000000, 0x5dbaca6c00000000,
5526
+ 0x7abd146e00000000, 0x6740a16f00000000, 0x34b3a86b00000000,
5527
+ 0x294e1d6a00000000, 0x0e49c36800000000, 0x13b4766900000000,
5528
+ 0xa8afd06000000000, 0xb552656100000000, 0x9255bb6300000000,
5529
+ 0x8fa80e6200000000, 0xdc5b076600000000, 0xc1a6b26700000000,
5530
+ 0xe6a16c6500000000, 0xfb5cd96400000000, 0x9096207600000000,
5531
+ 0x8d6b957700000000, 0xaa6c4b7500000000, 0xb791fe7400000000,
5532
+ 0xe462f77000000000, 0xf99f427100000000, 0xde989c7300000000,
5533
+ 0xc365297200000000, 0x787e8f7b00000000, 0x65833a7a00000000,
5534
+ 0x4284e47800000000, 0x5f79517900000000, 0x0c8a587d00000000,
5535
+ 0x1177ed7c00000000, 0x3670337e00000000, 0x2b8d867f00000000,
5536
+ 0xe0e4c05b00000000, 0xfd19755a00000000, 0xda1eab5800000000,
5537
+ 0xc7e31e5900000000, 0x9410175d00000000, 0x89eda25c00000000,
5538
+ 0xaeea7c5e00000000, 0xb317c95f00000000, 0x080c6f5600000000,
5539
+ 0x15f1da5700000000, 0x32f6045500000000, 0x2f0bb15400000000,
5540
+ 0x7cf8b85000000000, 0x61050d5100000000, 0x4602d35300000000,
5541
+ 0x5bff665200000000, 0x30359f4000000000, 0x2dc82a4100000000,
5542
+ 0x0acff44300000000, 0x1732414200000000, 0x44c1484600000000,
5543
+ 0x593cfd4700000000, 0x7e3b234500000000, 0x63c6964400000000,
5544
+ 0xd8dd304d00000000, 0xc520854c00000000, 0xe2275b4e00000000,
5545
+ 0xffdaee4f00000000, 0xac29e74b00000000, 0xb1d4524a00000000,
5546
+ 0x96d38c4800000000, 0x8b2e394900000000, 0x808efeda00000000,
5547
+ 0x9d734bdb00000000, 0xba7495d900000000, 0xa78920d800000000,
5548
+ 0xf47a29dc00000000, 0xe9879cdd00000000, 0xce8042df00000000,
5549
+ 0xd37df7de00000000, 0x686651d700000000, 0x759be4d600000000,
5550
+ 0x529c3ad400000000, 0x4f618fd500000000, 0x1c9286d100000000,
5551
+ 0x016f33d000000000, 0x2668edd200000000, 0x3b9558d300000000,
5552
+ 0x505fa1c100000000, 0x4da214c000000000, 0x6aa5cac200000000,
5553
+ 0x77587fc300000000, 0x24ab76c700000000, 0x3956c3c600000000,
5554
+ 0x1e511dc400000000, 0x03aca8c500000000, 0xb8b70ecc00000000,
5555
+ 0xa54abbcd00000000, 0x824d65cf00000000, 0x9fb0d0ce00000000,
5556
+ 0xcc43d9ca00000000, 0xd1be6ccb00000000, 0xf6b9b2c900000000,
5557
+ 0xeb4407c800000000, 0x202d41ec00000000, 0x3dd0f4ed00000000,
5558
+ 0x1ad72aef00000000, 0x072a9fee00000000, 0x54d996ea00000000,
5559
+ 0x492423eb00000000, 0x6e23fde900000000, 0x73de48e800000000,
5560
+ 0xc8c5eee100000000, 0xd5385be000000000, 0xf23f85e200000000,
5561
+ 0xefc230e300000000, 0xbc3139e700000000, 0xa1cc8ce600000000,
5562
+ 0x86cb52e400000000, 0x9b36e7e500000000, 0xf0fc1ef700000000,
5563
+ 0xed01abf600000000, 0xca0675f400000000, 0xd7fbc0f500000000,
5564
+ 0x8408c9f100000000, 0x99f57cf000000000, 0xbef2a2f200000000,
5565
+ 0xa30f17f300000000, 0x1814b1fa00000000, 0x05e904fb00000000,
5566
+ 0x22eedaf900000000, 0x3f136ff800000000, 0x6ce066fc00000000,
5567
+ 0x711dd3fd00000000, 0x561a0dff00000000, 0x4be7b8fe00000000,
5568
+ 0xc0c981b700000000, 0xdd3434b600000000, 0xfa33eab400000000,
5569
+ 0xe7ce5fb500000000, 0xb43d56b100000000, 0xa9c0e3b000000000,
5570
+ 0x8ec73db200000000, 0x933a88b300000000, 0x28212eba00000000,
5571
+ 0x35dc9bbb00000000, 0x12db45b900000000, 0x0f26f0b800000000,
5572
+ 0x5cd5f9bc00000000, 0x41284cbd00000000, 0x662f92bf00000000,
5573
+ 0x7bd227be00000000, 0x1018deac00000000, 0x0de56bad00000000,
5574
+ 0x2ae2b5af00000000, 0x371f00ae00000000, 0x64ec09aa00000000,
5575
+ 0x7911bcab00000000, 0x5e1662a900000000, 0x43ebd7a800000000,
5576
+ 0xf8f071a100000000, 0xe50dc4a000000000, 0xc20a1aa200000000,
5577
+ 0xdff7afa300000000, 0x8c04a6a700000000, 0x91f913a600000000,
5578
+ 0xb6fecda400000000, 0xab0378a500000000, 0x606a3e8100000000,
5579
+ 0x7d978b8000000000, 0x5a90558200000000, 0x476de08300000000,
5580
+ 0x149ee98700000000, 0x09635c8600000000, 0x2e64828400000000,
5581
+ 0x3399378500000000, 0x8882918c00000000, 0x957f248d00000000,
5582
+ 0xb278fa8f00000000, 0xaf854f8e00000000, 0xfc76468a00000000,
5583
+ 0xe18bf38b00000000, 0xc68c2d8900000000, 0xdb71988800000000,
5584
+ 0xb0bb619a00000000, 0xad46d49b00000000, 0x8a410a9900000000,
5585
+ 0x97bcbf9800000000, 0xc44fb69c00000000, 0xd9b2039d00000000,
5586
+ 0xfeb5dd9f00000000, 0xe348689e00000000, 0x5853ce9700000000,
5587
+ 0x45ae7b9600000000, 0x62a9a59400000000, 0x7f54109500000000,
5588
+ 0x2ca7199100000000, 0x315aac9000000000, 0x165d729200000000,
5589
+ 0x0ba0c79300000000},
5590
+ {0x0000000000000000, 0x24d9076300000000, 0x48b20fc600000000,
5591
+ 0x6c6b08a500000000, 0xd1626e5700000000, 0xf5bb693400000000,
5592
+ 0x99d0619100000000, 0xbd0966f200000000, 0xa2c5dcae00000000,
5593
+ 0x861cdbcd00000000, 0xea77d36800000000, 0xceaed40b00000000,
5594
+ 0x73a7b2f900000000, 0x577eb59a00000000, 0x3b15bd3f00000000,
5595
+ 0x1fccba5c00000000, 0x058dc88600000000, 0x2154cfe500000000,
5596
+ 0x4d3fc74000000000, 0x69e6c02300000000, 0xd4efa6d100000000,
5597
+ 0xf036a1b200000000, 0x9c5da91700000000, 0xb884ae7400000000,
5598
+ 0xa748142800000000, 0x8391134b00000000, 0xeffa1bee00000000,
5599
+ 0xcb231c8d00000000, 0x762a7a7f00000000, 0x52f37d1c00000000,
5600
+ 0x3e9875b900000000, 0x1a4172da00000000, 0x4b1ce0d600000000,
5601
+ 0x6fc5e7b500000000, 0x03aeef1000000000, 0x2777e87300000000,
5602
+ 0x9a7e8e8100000000, 0xbea789e200000000, 0xd2cc814700000000,
5603
+ 0xf615862400000000, 0xe9d93c7800000000, 0xcd003b1b00000000,
5604
+ 0xa16b33be00000000, 0x85b234dd00000000, 0x38bb522f00000000,
5605
+ 0x1c62554c00000000, 0x70095de900000000, 0x54d05a8a00000000,
5606
+ 0x4e91285000000000, 0x6a482f3300000000, 0x0623279600000000,
5607
+ 0x22fa20f500000000, 0x9ff3460700000000, 0xbb2a416400000000,
5608
+ 0xd74149c100000000, 0xf3984ea200000000, 0xec54f4fe00000000,
5609
+ 0xc88df39d00000000, 0xa4e6fb3800000000, 0x803ffc5b00000000,
5610
+ 0x3d369aa900000000, 0x19ef9dca00000000, 0x7584956f00000000,
5611
+ 0x515d920c00000000, 0xd73eb17600000000, 0xf3e7b61500000000,
5612
+ 0x9f8cbeb000000000, 0xbb55b9d300000000, 0x065cdf2100000000,
5613
+ 0x2285d84200000000, 0x4eeed0e700000000, 0x6a37d78400000000,
5614
+ 0x75fb6dd800000000, 0x51226abb00000000, 0x3d49621e00000000,
5615
+ 0x1990657d00000000, 0xa499038f00000000, 0x804004ec00000000,
5616
+ 0xec2b0c4900000000, 0xc8f20b2a00000000, 0xd2b379f000000000,
5617
+ 0xf66a7e9300000000, 0x9a01763600000000, 0xbed8715500000000,
5618
+ 0x03d117a700000000, 0x270810c400000000, 0x4b63186100000000,
5619
+ 0x6fba1f0200000000, 0x7076a55e00000000, 0x54afa23d00000000,
5620
+ 0x38c4aa9800000000, 0x1c1dadfb00000000, 0xa114cb0900000000,
5621
+ 0x85cdcc6a00000000, 0xe9a6c4cf00000000, 0xcd7fc3ac00000000,
5622
+ 0x9c2251a000000000, 0xb8fb56c300000000, 0xd4905e6600000000,
5623
+ 0xf049590500000000, 0x4d403ff700000000, 0x6999389400000000,
5624
+ 0x05f2303100000000, 0x212b375200000000, 0x3ee78d0e00000000,
5625
+ 0x1a3e8a6d00000000, 0x765582c800000000, 0x528c85ab00000000,
5626
+ 0xef85e35900000000, 0xcb5ce43a00000000, 0xa737ec9f00000000,
5627
+ 0x83eeebfc00000000, 0x99af992600000000, 0xbd769e4500000000,
5628
+ 0xd11d96e000000000, 0xf5c4918300000000, 0x48cdf77100000000,
5629
+ 0x6c14f01200000000, 0x007ff8b700000000, 0x24a6ffd400000000,
5630
+ 0x3b6a458800000000, 0x1fb342eb00000000, 0x73d84a4e00000000,
5631
+ 0x57014d2d00000000, 0xea082bdf00000000, 0xced12cbc00000000,
5632
+ 0xa2ba241900000000, 0x8663237a00000000, 0xae7d62ed00000000,
5633
+ 0x8aa4658e00000000, 0xe6cf6d2b00000000, 0xc2166a4800000000,
5634
+ 0x7f1f0cba00000000, 0x5bc60bd900000000, 0x37ad037c00000000,
5635
+ 0x1374041f00000000, 0x0cb8be4300000000, 0x2861b92000000000,
5636
+ 0x440ab18500000000, 0x60d3b6e600000000, 0xdddad01400000000,
5637
+ 0xf903d77700000000, 0x9568dfd200000000, 0xb1b1d8b100000000,
5638
+ 0xabf0aa6b00000000, 0x8f29ad0800000000, 0xe342a5ad00000000,
5639
+ 0xc79ba2ce00000000, 0x7a92c43c00000000, 0x5e4bc35f00000000,
5640
+ 0x3220cbfa00000000, 0x16f9cc9900000000, 0x093576c500000000,
5641
+ 0x2dec71a600000000, 0x4187790300000000, 0x655e7e6000000000,
5642
+ 0xd857189200000000, 0xfc8e1ff100000000, 0x90e5175400000000,
5643
+ 0xb43c103700000000, 0xe561823b00000000, 0xc1b8855800000000,
5644
+ 0xadd38dfd00000000, 0x890a8a9e00000000, 0x3403ec6c00000000,
5645
+ 0x10daeb0f00000000, 0x7cb1e3aa00000000, 0x5868e4c900000000,
5646
+ 0x47a45e9500000000, 0x637d59f600000000, 0x0f16515300000000,
5647
+ 0x2bcf563000000000, 0x96c630c200000000, 0xb21f37a100000000,
5648
+ 0xde743f0400000000, 0xfaad386700000000, 0xe0ec4abd00000000,
5649
+ 0xc4354dde00000000, 0xa85e457b00000000, 0x8c87421800000000,
5650
+ 0x318e24ea00000000, 0x1557238900000000, 0x793c2b2c00000000,
5651
+ 0x5de52c4f00000000, 0x4229961300000000, 0x66f0917000000000,
5652
+ 0x0a9b99d500000000, 0x2e429eb600000000, 0x934bf84400000000,
5653
+ 0xb792ff2700000000, 0xdbf9f78200000000, 0xff20f0e100000000,
5654
+ 0x7943d39b00000000, 0x5d9ad4f800000000, 0x31f1dc5d00000000,
5655
+ 0x1528db3e00000000, 0xa821bdcc00000000, 0x8cf8baaf00000000,
5656
+ 0xe093b20a00000000, 0xc44ab56900000000, 0xdb860f3500000000,
5657
+ 0xff5f085600000000, 0x933400f300000000, 0xb7ed079000000000,
5658
+ 0x0ae4616200000000, 0x2e3d660100000000, 0x42566ea400000000,
5659
+ 0x668f69c700000000, 0x7cce1b1d00000000, 0x58171c7e00000000,
5660
+ 0x347c14db00000000, 0x10a513b800000000, 0xadac754a00000000,
5661
+ 0x8975722900000000, 0xe51e7a8c00000000, 0xc1c77def00000000,
5662
+ 0xde0bc7b300000000, 0xfad2c0d000000000, 0x96b9c87500000000,
5663
+ 0xb260cf1600000000, 0x0f69a9e400000000, 0x2bb0ae8700000000,
5664
+ 0x47dba62200000000, 0x6302a14100000000, 0x325f334d00000000,
5665
+ 0x1686342e00000000, 0x7aed3c8b00000000, 0x5e343be800000000,
5666
+ 0xe33d5d1a00000000, 0xc7e45a7900000000, 0xab8f52dc00000000,
5667
+ 0x8f5655bf00000000, 0x909aefe300000000, 0xb443e88000000000,
5668
+ 0xd828e02500000000, 0xfcf1e74600000000, 0x41f881b400000000,
5669
+ 0x652186d700000000, 0x094a8e7200000000, 0x2d93891100000000,
5670
+ 0x37d2fbcb00000000, 0x130bfca800000000, 0x7f60f40d00000000,
5671
+ 0x5bb9f36e00000000, 0xe6b0959c00000000, 0xc26992ff00000000,
5672
+ 0xae029a5a00000000, 0x8adb9d3900000000, 0x9517276500000000,
5673
+ 0xb1ce200600000000, 0xdda528a300000000, 0xf97c2fc000000000,
5674
+ 0x4475493200000000, 0x60ac4e5100000000, 0x0cc746f400000000,
5675
+ 0x281e419700000000},
5676
+ {0x0000000000000000, 0x08e3603c00000000, 0x10c6c17800000000,
5677
+ 0x1825a14400000000, 0x208c83f100000000, 0x286fe3cd00000000,
5678
+ 0x304a428900000000, 0x38a922b500000000, 0x011e763800000000,
5679
+ 0x09fd160400000000, 0x11d8b74000000000, 0x193bd77c00000000,
5680
+ 0x2192f5c900000000, 0x297195f500000000, 0x315434b100000000,
5681
+ 0x39b7548d00000000, 0x023cec7000000000, 0x0adf8c4c00000000,
5682
+ 0x12fa2d0800000000, 0x1a194d3400000000, 0x22b06f8100000000,
5683
+ 0x2a530fbd00000000, 0x3276aef900000000, 0x3a95cec500000000,
5684
+ 0x03229a4800000000, 0x0bc1fa7400000000, 0x13e45b3000000000,
5685
+ 0x1b073b0c00000000, 0x23ae19b900000000, 0x2b4d798500000000,
5686
+ 0x3368d8c100000000, 0x3b8bb8fd00000000, 0x0478d8e100000000,
5687
+ 0x0c9bb8dd00000000, 0x14be199900000000, 0x1c5d79a500000000,
5688
+ 0x24f45b1000000000, 0x2c173b2c00000000, 0x34329a6800000000,
5689
+ 0x3cd1fa5400000000, 0x0566aed900000000, 0x0d85cee500000000,
5690
+ 0x15a06fa100000000, 0x1d430f9d00000000, 0x25ea2d2800000000,
5691
+ 0x2d094d1400000000, 0x352cec5000000000, 0x3dcf8c6c00000000,
5692
+ 0x0644349100000000, 0x0ea754ad00000000, 0x1682f5e900000000,
5693
+ 0x1e6195d500000000, 0x26c8b76000000000, 0x2e2bd75c00000000,
5694
+ 0x360e761800000000, 0x3eed162400000000, 0x075a42a900000000,
5695
+ 0x0fb9229500000000, 0x179c83d100000000, 0x1f7fe3ed00000000,
5696
+ 0x27d6c15800000000, 0x2f35a16400000000, 0x3710002000000000,
5697
+ 0x3ff3601c00000000, 0x49f6c11800000000, 0x4115a12400000000,
5698
+ 0x5930006000000000, 0x51d3605c00000000, 0x697a42e900000000,
5699
+ 0x619922d500000000, 0x79bc839100000000, 0x715fe3ad00000000,
5700
+ 0x48e8b72000000000, 0x400bd71c00000000, 0x582e765800000000,
5701
+ 0x50cd166400000000, 0x686434d100000000, 0x608754ed00000000,
5702
+ 0x78a2f5a900000000, 0x7041959500000000, 0x4bca2d6800000000,
5703
+ 0x43294d5400000000, 0x5b0cec1000000000, 0x53ef8c2c00000000,
5704
+ 0x6b46ae9900000000, 0x63a5cea500000000, 0x7b806fe100000000,
5705
+ 0x73630fdd00000000, 0x4ad45b5000000000, 0x42373b6c00000000,
5706
+ 0x5a129a2800000000, 0x52f1fa1400000000, 0x6a58d8a100000000,
5707
+ 0x62bbb89d00000000, 0x7a9e19d900000000, 0x727d79e500000000,
5708
+ 0x4d8e19f900000000, 0x456d79c500000000, 0x5d48d88100000000,
5709
+ 0x55abb8bd00000000, 0x6d029a0800000000, 0x65e1fa3400000000,
5710
+ 0x7dc45b7000000000, 0x75273b4c00000000, 0x4c906fc100000000,
5711
+ 0x44730ffd00000000, 0x5c56aeb900000000, 0x54b5ce8500000000,
5712
+ 0x6c1cec3000000000, 0x64ff8c0c00000000, 0x7cda2d4800000000,
5713
+ 0x74394d7400000000, 0x4fb2f58900000000, 0x475195b500000000,
5714
+ 0x5f7434f100000000, 0x579754cd00000000, 0x6f3e767800000000,
5715
+ 0x67dd164400000000, 0x7ff8b70000000000, 0x771bd73c00000000,
5716
+ 0x4eac83b100000000, 0x464fe38d00000000, 0x5e6a42c900000000,
5717
+ 0x568922f500000000, 0x6e20004000000000, 0x66c3607c00000000,
5718
+ 0x7ee6c13800000000, 0x7605a10400000000, 0x92ec833100000000,
5719
+ 0x9a0fe30d00000000, 0x822a424900000000, 0x8ac9227500000000,
5720
+ 0xb26000c000000000, 0xba8360fc00000000, 0xa2a6c1b800000000,
5721
+ 0xaa45a18400000000, 0x93f2f50900000000, 0x9b11953500000000,
5722
+ 0x8334347100000000, 0x8bd7544d00000000, 0xb37e76f800000000,
5723
+ 0xbb9d16c400000000, 0xa3b8b78000000000, 0xab5bd7bc00000000,
5724
+ 0x90d06f4100000000, 0x98330f7d00000000, 0x8016ae3900000000,
5725
+ 0x88f5ce0500000000, 0xb05cecb000000000, 0xb8bf8c8c00000000,
5726
+ 0xa09a2dc800000000, 0xa8794df400000000, 0x91ce197900000000,
5727
+ 0x992d794500000000, 0x8108d80100000000, 0x89ebb83d00000000,
5728
+ 0xb1429a8800000000, 0xb9a1fab400000000, 0xa1845bf000000000,
5729
+ 0xa9673bcc00000000, 0x96945bd000000000, 0x9e773bec00000000,
5730
+ 0x86529aa800000000, 0x8eb1fa9400000000, 0xb618d82100000000,
5731
+ 0xbefbb81d00000000, 0xa6de195900000000, 0xae3d796500000000,
5732
+ 0x978a2de800000000, 0x9f694dd400000000, 0x874cec9000000000,
5733
+ 0x8faf8cac00000000, 0xb706ae1900000000, 0xbfe5ce2500000000,
5734
+ 0xa7c06f6100000000, 0xaf230f5d00000000, 0x94a8b7a000000000,
5735
+ 0x9c4bd79c00000000, 0x846e76d800000000, 0x8c8d16e400000000,
5736
+ 0xb424345100000000, 0xbcc7546d00000000, 0xa4e2f52900000000,
5737
+ 0xac01951500000000, 0x95b6c19800000000, 0x9d55a1a400000000,
5738
+ 0x857000e000000000, 0x8d9360dc00000000, 0xb53a426900000000,
5739
+ 0xbdd9225500000000, 0xa5fc831100000000, 0xad1fe32d00000000,
5740
+ 0xdb1a422900000000, 0xd3f9221500000000, 0xcbdc835100000000,
5741
+ 0xc33fe36d00000000, 0xfb96c1d800000000, 0xf375a1e400000000,
5742
+ 0xeb5000a000000000, 0xe3b3609c00000000, 0xda04341100000000,
5743
+ 0xd2e7542d00000000, 0xcac2f56900000000, 0xc221955500000000,
5744
+ 0xfa88b7e000000000, 0xf26bd7dc00000000, 0xea4e769800000000,
5745
+ 0xe2ad16a400000000, 0xd926ae5900000000, 0xd1c5ce6500000000,
5746
+ 0xc9e06f2100000000, 0xc1030f1d00000000, 0xf9aa2da800000000,
5747
+ 0xf1494d9400000000, 0xe96cecd000000000, 0xe18f8cec00000000,
5748
+ 0xd838d86100000000, 0xd0dbb85d00000000, 0xc8fe191900000000,
5749
+ 0xc01d792500000000, 0xf8b45b9000000000, 0xf0573bac00000000,
5750
+ 0xe8729ae800000000, 0xe091fad400000000, 0xdf629ac800000000,
5751
+ 0xd781faf400000000, 0xcfa45bb000000000, 0xc7473b8c00000000,
5752
+ 0xffee193900000000, 0xf70d790500000000, 0xef28d84100000000,
5753
+ 0xe7cbb87d00000000, 0xde7cecf000000000, 0xd69f8ccc00000000,
5754
+ 0xceba2d8800000000, 0xc6594db400000000, 0xfef06f0100000000,
5755
+ 0xf6130f3d00000000, 0xee36ae7900000000, 0xe6d5ce4500000000,
5756
+ 0xdd5e76b800000000, 0xd5bd168400000000, 0xcd98b7c000000000,
5757
+ 0xc57bd7fc00000000, 0xfdd2f54900000000, 0xf531957500000000,
5758
+ 0xed14343100000000, 0xe5f7540d00000000, 0xdc40008000000000,
5759
+ 0xd4a360bc00000000, 0xcc86c1f800000000, 0xc465a1c400000000,
5760
+ 0xfccc837100000000, 0xf42fe34d00000000, 0xec0a420900000000,
5761
+ 0xe4e9223500000000},
5762
+ {0x0000000000000000, 0xd1e8e70e00000000, 0xa2d1cf1d00000000,
5763
+ 0x7339281300000000, 0x44a39f3b00000000, 0x954b783500000000,
5764
+ 0xe672502600000000, 0x379ab72800000000, 0x88463f7700000000,
5765
+ 0x59aed87900000000, 0x2a97f06a00000000, 0xfb7f176400000000,
5766
+ 0xcce5a04c00000000, 0x1d0d474200000000, 0x6e346f5100000000,
5767
+ 0xbfdc885f00000000, 0x108d7eee00000000, 0xc16599e000000000,
5768
+ 0xb25cb1f300000000, 0x63b456fd00000000, 0x542ee1d500000000,
5769
+ 0x85c606db00000000, 0xf6ff2ec800000000, 0x2717c9c600000000,
5770
+ 0x98cb419900000000, 0x4923a69700000000, 0x3a1a8e8400000000,
5771
+ 0xebf2698a00000000, 0xdc68dea200000000, 0x0d8039ac00000000,
5772
+ 0x7eb911bf00000000, 0xaf51f6b100000000, 0x611c8c0700000000,
5773
+ 0xb0f46b0900000000, 0xc3cd431a00000000, 0x1225a41400000000,
5774
+ 0x25bf133c00000000, 0xf457f43200000000, 0x876edc2100000000,
5775
+ 0x56863b2f00000000, 0xe95ab37000000000, 0x38b2547e00000000,
5776
+ 0x4b8b7c6d00000000, 0x9a639b6300000000, 0xadf92c4b00000000,
5777
+ 0x7c11cb4500000000, 0x0f28e35600000000, 0xdec0045800000000,
5778
+ 0x7191f2e900000000, 0xa07915e700000000, 0xd3403df400000000,
5779
+ 0x02a8dafa00000000, 0x35326dd200000000, 0xe4da8adc00000000,
5780
+ 0x97e3a2cf00000000, 0x460b45c100000000, 0xf9d7cd9e00000000,
5781
+ 0x283f2a9000000000, 0x5b06028300000000, 0x8aeee58d00000000,
5782
+ 0xbd7452a500000000, 0x6c9cb5ab00000000, 0x1fa59db800000000,
5783
+ 0xce4d7ab600000000, 0xc238180f00000000, 0x13d0ff0100000000,
5784
+ 0x60e9d71200000000, 0xb101301c00000000, 0x869b873400000000,
5785
+ 0x5773603a00000000, 0x244a482900000000, 0xf5a2af2700000000,
5786
+ 0x4a7e277800000000, 0x9b96c07600000000, 0xe8afe86500000000,
5787
+ 0x39470f6b00000000, 0x0eddb84300000000, 0xdf355f4d00000000,
5788
+ 0xac0c775e00000000, 0x7de4905000000000, 0xd2b566e100000000,
5789
+ 0x035d81ef00000000, 0x7064a9fc00000000, 0xa18c4ef200000000,
5790
+ 0x9616f9da00000000, 0x47fe1ed400000000, 0x34c736c700000000,
5791
+ 0xe52fd1c900000000, 0x5af3599600000000, 0x8b1bbe9800000000,
5792
+ 0xf822968b00000000, 0x29ca718500000000, 0x1e50c6ad00000000,
5793
+ 0xcfb821a300000000, 0xbc8109b000000000, 0x6d69eebe00000000,
5794
+ 0xa324940800000000, 0x72cc730600000000, 0x01f55b1500000000,
5795
+ 0xd01dbc1b00000000, 0xe7870b3300000000, 0x366fec3d00000000,
5796
+ 0x4556c42e00000000, 0x94be232000000000, 0x2b62ab7f00000000,
5797
+ 0xfa8a4c7100000000, 0x89b3646200000000, 0x585b836c00000000,
5798
+ 0x6fc1344400000000, 0xbe29d34a00000000, 0xcd10fb5900000000,
5799
+ 0x1cf81c5700000000, 0xb3a9eae600000000, 0x62410de800000000,
5800
+ 0x117825fb00000000, 0xc090c2f500000000, 0xf70a75dd00000000,
5801
+ 0x26e292d300000000, 0x55dbbac000000000, 0x84335dce00000000,
5802
+ 0x3befd59100000000, 0xea07329f00000000, 0x993e1a8c00000000,
5803
+ 0x48d6fd8200000000, 0x7f4c4aaa00000000, 0xaea4ada400000000,
5804
+ 0xdd9d85b700000000, 0x0c7562b900000000, 0x8471301e00000000,
5805
+ 0x5599d71000000000, 0x26a0ff0300000000, 0xf748180d00000000,
5806
+ 0xc0d2af2500000000, 0x113a482b00000000, 0x6203603800000000,
5807
+ 0xb3eb873600000000, 0x0c370f6900000000, 0xdddfe86700000000,
5808
+ 0xaee6c07400000000, 0x7f0e277a00000000, 0x4894905200000000,
5809
+ 0x997c775c00000000, 0xea455f4f00000000, 0x3badb84100000000,
5810
+ 0x94fc4ef000000000, 0x4514a9fe00000000, 0x362d81ed00000000,
5811
+ 0xe7c566e300000000, 0xd05fd1cb00000000, 0x01b736c500000000,
5812
+ 0x728e1ed600000000, 0xa366f9d800000000, 0x1cba718700000000,
5813
+ 0xcd52968900000000, 0xbe6bbe9a00000000, 0x6f83599400000000,
5814
+ 0x5819eebc00000000, 0x89f109b200000000, 0xfac821a100000000,
5815
+ 0x2b20c6af00000000, 0xe56dbc1900000000, 0x34855b1700000000,
5816
+ 0x47bc730400000000, 0x9654940a00000000, 0xa1ce232200000000,
5817
+ 0x7026c42c00000000, 0x031fec3f00000000, 0xd2f70b3100000000,
5818
+ 0x6d2b836e00000000, 0xbcc3646000000000, 0xcffa4c7300000000,
5819
+ 0x1e12ab7d00000000, 0x29881c5500000000, 0xf860fb5b00000000,
5820
+ 0x8b59d34800000000, 0x5ab1344600000000, 0xf5e0c2f700000000,
5821
+ 0x240825f900000000, 0x57310dea00000000, 0x86d9eae400000000,
5822
+ 0xb1435dcc00000000, 0x60abbac200000000, 0x139292d100000000,
5823
+ 0xc27a75df00000000, 0x7da6fd8000000000, 0xac4e1a8e00000000,
5824
+ 0xdf77329d00000000, 0x0e9fd59300000000, 0x390562bb00000000,
5825
+ 0xe8ed85b500000000, 0x9bd4ada600000000, 0x4a3c4aa800000000,
5826
+ 0x4649281100000000, 0x97a1cf1f00000000, 0xe498e70c00000000,
5827
+ 0x3570000200000000, 0x02eab72a00000000, 0xd302502400000000,
5828
+ 0xa03b783700000000, 0x71d39f3900000000, 0xce0f176600000000,
5829
+ 0x1fe7f06800000000, 0x6cded87b00000000, 0xbd363f7500000000,
5830
+ 0x8aac885d00000000, 0x5b446f5300000000, 0x287d474000000000,
5831
+ 0xf995a04e00000000, 0x56c456ff00000000, 0x872cb1f100000000,
5832
+ 0xf41599e200000000, 0x25fd7eec00000000, 0x1267c9c400000000,
5833
+ 0xc38f2eca00000000, 0xb0b606d900000000, 0x615ee1d700000000,
5834
+ 0xde82698800000000, 0x0f6a8e8600000000, 0x7c53a69500000000,
5835
+ 0xadbb419b00000000, 0x9a21f6b300000000, 0x4bc911bd00000000,
5836
+ 0x38f039ae00000000, 0xe918dea000000000, 0x2755a41600000000,
5837
+ 0xf6bd431800000000, 0x85846b0b00000000, 0x546c8c0500000000,
5838
+ 0x63f63b2d00000000, 0xb21edc2300000000, 0xc127f43000000000,
5839
+ 0x10cf133e00000000, 0xaf139b6100000000, 0x7efb7c6f00000000,
5840
+ 0x0dc2547c00000000, 0xdc2ab37200000000, 0xebb0045a00000000,
5841
+ 0x3a58e35400000000, 0x4961cb4700000000, 0x98892c4900000000,
5842
+ 0x37d8daf800000000, 0xe6303df600000000, 0x950915e500000000,
5843
+ 0x44e1f2eb00000000, 0x737b45c300000000, 0xa293a2cd00000000,
5844
+ 0xd1aa8ade00000000, 0x00426dd000000000, 0xbf9ee58f00000000,
5845
+ 0x6e76028100000000, 0x1d4f2a9200000000, 0xcca7cd9c00000000,
5846
+ 0xfb3d7ab400000000, 0x2ad59dba00000000, 0x59ecb5a900000000,
5847
+ 0x880452a700000000},
5848
+ {0x0000000000000000, 0xaa05daf100000000, 0x150dc53800000000,
5849
+ 0xbf081fc900000000, 0x2a1a8a7100000000, 0x801f508000000000,
5850
+ 0x3f174f4900000000, 0x951295b800000000, 0x543414e300000000,
5851
+ 0xfe31ce1200000000, 0x4139d1db00000000, 0xeb3c0b2a00000000,
5852
+ 0x7e2e9e9200000000, 0xd42b446300000000, 0x6b235baa00000000,
5853
+ 0xc126815b00000000, 0xe96e591d00000000, 0x436b83ec00000000,
5854
+ 0xfc639c2500000000, 0x566646d400000000, 0xc374d36c00000000,
5855
+ 0x6971099d00000000, 0xd679165400000000, 0x7c7ccca500000000,
5856
+ 0xbd5a4dfe00000000, 0x175f970f00000000, 0xa85788c600000000,
5857
+ 0x0252523700000000, 0x9740c78f00000000, 0x3d451d7e00000000,
5858
+ 0x824d02b700000000, 0x2848d84600000000, 0xd2ddb23a00000000,
5859
+ 0x78d868cb00000000, 0xc7d0770200000000, 0x6dd5adf300000000,
5860
+ 0xf8c7384b00000000, 0x52c2e2ba00000000, 0xedcafd7300000000,
5861
+ 0x47cf278200000000, 0x86e9a6d900000000, 0x2cec7c2800000000,
5862
+ 0x93e463e100000000, 0x39e1b91000000000, 0xacf32ca800000000,
5863
+ 0x06f6f65900000000, 0xb9fee99000000000, 0x13fb336100000000,
5864
+ 0x3bb3eb2700000000, 0x91b631d600000000, 0x2ebe2e1f00000000,
5865
+ 0x84bbf4ee00000000, 0x11a9615600000000, 0xbbacbba700000000,
5866
+ 0x04a4a46e00000000, 0xaea17e9f00000000, 0x6f87ffc400000000,
5867
+ 0xc582253500000000, 0x7a8a3afc00000000, 0xd08fe00d00000000,
5868
+ 0x459d75b500000000, 0xef98af4400000000, 0x5090b08d00000000,
5869
+ 0xfa956a7c00000000, 0xa4bb657500000000, 0x0ebebf8400000000,
5870
+ 0xb1b6a04d00000000, 0x1bb37abc00000000, 0x8ea1ef0400000000,
5871
+ 0x24a435f500000000, 0x9bac2a3c00000000, 0x31a9f0cd00000000,
5872
+ 0xf08f719600000000, 0x5a8aab6700000000, 0xe582b4ae00000000,
5873
+ 0x4f876e5f00000000, 0xda95fbe700000000, 0x7090211600000000,
5874
+ 0xcf983edf00000000, 0x659de42e00000000, 0x4dd53c6800000000,
5875
+ 0xe7d0e69900000000, 0x58d8f95000000000, 0xf2dd23a100000000,
5876
+ 0x67cfb61900000000, 0xcdca6ce800000000, 0x72c2732100000000,
5877
+ 0xd8c7a9d000000000, 0x19e1288b00000000, 0xb3e4f27a00000000,
5878
+ 0x0cecedb300000000, 0xa6e9374200000000, 0x33fba2fa00000000,
5879
+ 0x99fe780b00000000, 0x26f667c200000000, 0x8cf3bd3300000000,
5880
+ 0x7666d74f00000000, 0xdc630dbe00000000, 0x636b127700000000,
5881
+ 0xc96ec88600000000, 0x5c7c5d3e00000000, 0xf67987cf00000000,
5882
+ 0x4971980600000000, 0xe37442f700000000, 0x2252c3ac00000000,
5883
+ 0x8857195d00000000, 0x375f069400000000, 0x9d5adc6500000000,
5884
+ 0x084849dd00000000, 0xa24d932c00000000, 0x1d458ce500000000,
5885
+ 0xb740561400000000, 0x9f088e5200000000, 0x350d54a300000000,
5886
+ 0x8a054b6a00000000, 0x2000919b00000000, 0xb512042300000000,
5887
+ 0x1f17ded200000000, 0xa01fc11b00000000, 0x0a1a1bea00000000,
5888
+ 0xcb3c9ab100000000, 0x6139404000000000, 0xde315f8900000000,
5889
+ 0x7434857800000000, 0xe12610c000000000, 0x4b23ca3100000000,
5890
+ 0xf42bd5f800000000, 0x5e2e0f0900000000, 0x4877cbea00000000,
5891
+ 0xe272111b00000000, 0x5d7a0ed200000000, 0xf77fd42300000000,
5892
+ 0x626d419b00000000, 0xc8689b6a00000000, 0x776084a300000000,
5893
+ 0xdd655e5200000000, 0x1c43df0900000000, 0xb64605f800000000,
5894
+ 0x094e1a3100000000, 0xa34bc0c000000000, 0x3659557800000000,
5895
+ 0x9c5c8f8900000000, 0x2354904000000000, 0x89514ab100000000,
5896
+ 0xa11992f700000000, 0x0b1c480600000000, 0xb41457cf00000000,
5897
+ 0x1e118d3e00000000, 0x8b03188600000000, 0x2106c27700000000,
5898
+ 0x9e0eddbe00000000, 0x340b074f00000000, 0xf52d861400000000,
5899
+ 0x5f285ce500000000, 0xe020432c00000000, 0x4a2599dd00000000,
5900
+ 0xdf370c6500000000, 0x7532d69400000000, 0xca3ac95d00000000,
5901
+ 0x603f13ac00000000, 0x9aaa79d000000000, 0x30afa32100000000,
5902
+ 0x8fa7bce800000000, 0x25a2661900000000, 0xb0b0f3a100000000,
5903
+ 0x1ab5295000000000, 0xa5bd369900000000, 0x0fb8ec6800000000,
5904
+ 0xce9e6d3300000000, 0x649bb7c200000000, 0xdb93a80b00000000,
5905
+ 0x719672fa00000000, 0xe484e74200000000, 0x4e813db300000000,
5906
+ 0xf189227a00000000, 0x5b8cf88b00000000, 0x73c420cd00000000,
5907
+ 0xd9c1fa3c00000000, 0x66c9e5f500000000, 0xcccc3f0400000000,
5908
+ 0x59deaabc00000000, 0xf3db704d00000000, 0x4cd36f8400000000,
5909
+ 0xe6d6b57500000000, 0x27f0342e00000000, 0x8df5eedf00000000,
5910
+ 0x32fdf11600000000, 0x98f82be700000000, 0x0deabe5f00000000,
5911
+ 0xa7ef64ae00000000, 0x18e77b6700000000, 0xb2e2a19600000000,
5912
+ 0xecccae9f00000000, 0x46c9746e00000000, 0xf9c16ba700000000,
5913
+ 0x53c4b15600000000, 0xc6d624ee00000000, 0x6cd3fe1f00000000,
5914
+ 0xd3dbe1d600000000, 0x79de3b2700000000, 0xb8f8ba7c00000000,
5915
+ 0x12fd608d00000000, 0xadf57f4400000000, 0x07f0a5b500000000,
5916
+ 0x92e2300d00000000, 0x38e7eafc00000000, 0x87eff53500000000,
5917
+ 0x2dea2fc400000000, 0x05a2f78200000000, 0xafa72d7300000000,
5918
+ 0x10af32ba00000000, 0xbaaae84b00000000, 0x2fb87df300000000,
5919
+ 0x85bda70200000000, 0x3ab5b8cb00000000, 0x90b0623a00000000,
5920
+ 0x5196e36100000000, 0xfb93399000000000, 0x449b265900000000,
5921
+ 0xee9efca800000000, 0x7b8c691000000000, 0xd189b3e100000000,
5922
+ 0x6e81ac2800000000, 0xc48476d900000000, 0x3e111ca500000000,
5923
+ 0x9414c65400000000, 0x2b1cd99d00000000, 0x8119036c00000000,
5924
+ 0x140b96d400000000, 0xbe0e4c2500000000, 0x010653ec00000000,
5925
+ 0xab03891d00000000, 0x6a25084600000000, 0xc020d2b700000000,
5926
+ 0x7f28cd7e00000000, 0xd52d178f00000000, 0x403f823700000000,
5927
+ 0xea3a58c600000000, 0x5532470f00000000, 0xff379dfe00000000,
5928
+ 0xd77f45b800000000, 0x7d7a9f4900000000, 0xc272808000000000,
5929
+ 0x68775a7100000000, 0xfd65cfc900000000, 0x5760153800000000,
5930
+ 0xe8680af100000000, 0x426dd00000000000, 0x834b515b00000000,
5931
+ 0x294e8baa00000000, 0x9646946300000000, 0x3c434e9200000000,
5932
+ 0xa951db2a00000000, 0x035401db00000000, 0xbc5c1e1200000000,
5933
+ 0x1659c4e300000000}};
5934
+
5935
+#else /* W == 4 */
5936
+
5937
+local const z_crc_t FAR crc_braid_table[][256] = {
5938
+ {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87,
5939
+ 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede,
5940
+ 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab,
5941
+ 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c,
5942
+ 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1,
5943
+ 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7,
5944
+ 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e,
5945
+ 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308,
5946
+ 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5,
5947
+ 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472,
5948
+ 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07,
5949
+ 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e,
5950
+ 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa,
5951
+ 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec,
5952
+ 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6,
5953
+ 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0,
5954
+ 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3,
5955
+ 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba,
5956
+ 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf,
5957
+ 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975,
5958
+ 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8,
5959
+ 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde,
5960
+ 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a,
5961
+ 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c,
5962
+ 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1,
5963
+ 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65,
5964
+ 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410,
5965
+ 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649,
5966
+ 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a,
5967
+ 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c,
5968
+ 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946,
5969
+ 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450,
5970
+ 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e,
5971
+ 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857,
5972
+ 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022,
5973
+ 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5,
5974
+ 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758,
5975
+ 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e,
5976
+ 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d,
5977
+ 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b,
5978
+ 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6,
5979
+ 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401,
5980
+ 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74,
5981
+ 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d,
5982
+ 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073,
5983
+ 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65,
5984
+ 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f,
5985
+ 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749,
5986
+ 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a,
5987
+ 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033,
5988
+ 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846,
5989
+ 0x0d7139d7},
5990
+ {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563,
5991
+ 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f,
5992
+ 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875,
5993
+ 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536,
5994
+ 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8,
5995
+ 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43,
5996
+ 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f,
5997
+ 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184,
5998
+ 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a,
5999
+ 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39,
6000
+ 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523,
6001
+ 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f,
6002
+ 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d,
6003
+ 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6,
6004
+ 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b,
6005
+ 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0,
6006
+ 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151,
6007
+ 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d,
6008
+ 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47,
6009
+ 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a,
6010
+ 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964,
6011
+ 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef,
6012
+ 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d,
6013
+ 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6,
6014
+ 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348,
6015
+ 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53,
6016
+ 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449,
6017
+ 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645,
6018
+ 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4,
6019
+ 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f,
6020
+ 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2,
6021
+ 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69,
6022
+ 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46,
6023
+ 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a,
6024
+ 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650,
6025
+ 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13,
6026
+ 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded,
6027
+ 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366,
6028
+ 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57,
6029
+ 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc,
6030
+ 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222,
6031
+ 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61,
6032
+ 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b,
6033
+ 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277,
6034
+ 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558,
6035
+ 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3,
6036
+ 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e,
6037
+ 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5,
6038
+ 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74,
6039
+ 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78,
6040
+ 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262,
6041
+ 0x1c53e98a},
6042
+ {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b,
6043
+ 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40,
6044
+ 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580,
6045
+ 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7,
6046
+ 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a,
6047
+ 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37,
6048
+ 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75,
6049
+ 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218,
6050
+ 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5,
6051
+ 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2,
6052
+ 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02,
6053
+ 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59,
6054
+ 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1,
6055
+ 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c,
6056
+ 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a,
6057
+ 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307,
6058
+ 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486,
6059
+ 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd,
6060
+ 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d,
6061
+ 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2,
6062
+ 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f,
6063
+ 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72,
6064
+ 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8,
6065
+ 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985,
6066
+ 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268,
6067
+ 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94,
6068
+ 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454,
6069
+ 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f,
6070
+ 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e,
6071
+ 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3,
6072
+ 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915,
6073
+ 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778,
6074
+ 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821,
6075
+ 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a,
6076
+ 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba,
6077
+ 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d,
6078
+ 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560,
6079
+ 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d,
6080
+ 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe,
6081
+ 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3,
6082
+ 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e,
6083
+ 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509,
6084
+ 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9,
6085
+ 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92,
6086
+ 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb,
6087
+ 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6,
6088
+ 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50,
6089
+ 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d,
6090
+ 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc,
6091
+ 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7,
6092
+ 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927,
6093
+ 0x3f88e851},
6094
+ {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96,
6095
+ 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8,
6096
+ 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0,
6097
+ 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14,
6098
+ 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7,
6099
+ 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4,
6100
+ 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe,
6101
+ 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad,
6102
+ 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e,
6103
+ 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa,
6104
+ 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2,
6105
+ 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c,
6106
+ 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab,
6107
+ 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8,
6108
+ 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d,
6109
+ 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e,
6110
+ 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7,
6111
+ 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99,
6112
+ 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1,
6113
+ 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690,
6114
+ 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933,
6115
+ 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20,
6116
+ 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf,
6117
+ 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc,
6118
+ 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f,
6119
+ 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92,
6120
+ 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca,
6121
+ 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4,
6122
+ 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd,
6123
+ 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de,
6124
+ 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb,
6125
+ 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8,
6126
+ 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474,
6127
+ 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a,
6128
+ 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252,
6129
+ 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6,
6130
+ 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55,
6131
+ 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846,
6132
+ 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7,
6133
+ 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4,
6134
+ 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47,
6135
+ 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3,
6136
+ 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb,
6137
+ 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5,
6138
+ 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49,
6139
+ 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a,
6140
+ 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f,
6141
+ 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c,
6142
+ 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305,
6143
+ 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b,
6144
+ 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523,
6145
+ 0x3dee8ca6}};
6146
+
6147
+local const z_word_t FAR crc_braid_big_table[][256] = {
6148
+ {0x00000000, 0x85d996dd, 0x4bb55c60, 0xce6ccabd, 0x966ab9c0,
6149
+ 0x13b32f1d, 0xdddfe5a0, 0x5806737d, 0x6dd3035a, 0xe80a9587,
6150
+ 0x26665f3a, 0xa3bfc9e7, 0xfbb9ba9a, 0x7e602c47, 0xb00ce6fa,
6151
+ 0x35d57027, 0xdaa607b4, 0x5f7f9169, 0x91135bd4, 0x14cacd09,
6152
+ 0x4cccbe74, 0xc91528a9, 0x0779e214, 0x82a074c9, 0xb77504ee,
6153
+ 0x32ac9233, 0xfcc0588e, 0x7919ce53, 0x211fbd2e, 0xa4c62bf3,
6154
+ 0x6aaae14e, 0xef737793, 0xf54b7eb3, 0x7092e86e, 0xbefe22d3,
6155
+ 0x3b27b40e, 0x6321c773, 0xe6f851ae, 0x28949b13, 0xad4d0dce,
6156
+ 0x98987de9, 0x1d41eb34, 0xd32d2189, 0x56f4b754, 0x0ef2c429,
6157
+ 0x8b2b52f4, 0x45479849, 0xc09e0e94, 0x2fed7907, 0xaa34efda,
6158
+ 0x64582567, 0xe181b3ba, 0xb987c0c7, 0x3c5e561a, 0xf2329ca7,
6159
+ 0x77eb0a7a, 0x423e7a5d, 0xc7e7ec80, 0x098b263d, 0x8c52b0e0,
6160
+ 0xd454c39d, 0x518d5540, 0x9fe19ffd, 0x1a380920, 0xab918dbd,
6161
+ 0x2e481b60, 0xe024d1dd, 0x65fd4700, 0x3dfb347d, 0xb822a2a0,
6162
+ 0x764e681d, 0xf397fec0, 0xc6428ee7, 0x439b183a, 0x8df7d287,
6163
+ 0x082e445a, 0x50283727, 0xd5f1a1fa, 0x1b9d6b47, 0x9e44fd9a,
6164
+ 0x71378a09, 0xf4ee1cd4, 0x3a82d669, 0xbf5b40b4, 0xe75d33c9,
6165
+ 0x6284a514, 0xace86fa9, 0x2931f974, 0x1ce48953, 0x993d1f8e,
6166
+ 0x5751d533, 0xd28843ee, 0x8a8e3093, 0x0f57a64e, 0xc13b6cf3,
6167
+ 0x44e2fa2e, 0x5edaf30e, 0xdb0365d3, 0x156faf6e, 0x90b639b3,
6168
+ 0xc8b04ace, 0x4d69dc13, 0x830516ae, 0x06dc8073, 0x3309f054,
6169
+ 0xb6d06689, 0x78bcac34, 0xfd653ae9, 0xa5634994, 0x20badf49,
6170
+ 0xeed615f4, 0x6b0f8329, 0x847cf4ba, 0x01a56267, 0xcfc9a8da,
6171
+ 0x4a103e07, 0x12164d7a, 0x97cfdba7, 0x59a3111a, 0xdc7a87c7,
6172
+ 0xe9aff7e0, 0x6c76613d, 0xa21aab80, 0x27c33d5d, 0x7fc54e20,
6173
+ 0xfa1cd8fd, 0x34701240, 0xb1a9849d, 0x17256aa0, 0x92fcfc7d,
6174
+ 0x5c9036c0, 0xd949a01d, 0x814fd360, 0x049645bd, 0xcafa8f00,
6175
+ 0x4f2319dd, 0x7af669fa, 0xff2fff27, 0x3143359a, 0xb49aa347,
6176
+ 0xec9cd03a, 0x694546e7, 0xa7298c5a, 0x22f01a87, 0xcd836d14,
6177
+ 0x485afbc9, 0x86363174, 0x03efa7a9, 0x5be9d4d4, 0xde304209,
6178
+ 0x105c88b4, 0x95851e69, 0xa0506e4e, 0x2589f893, 0xebe5322e,
6179
+ 0x6e3ca4f3, 0x363ad78e, 0xb3e34153, 0x7d8f8bee, 0xf8561d33,
6180
+ 0xe26e1413, 0x67b782ce, 0xa9db4873, 0x2c02deae, 0x7404add3,
6181
+ 0xf1dd3b0e, 0x3fb1f1b3, 0xba68676e, 0x8fbd1749, 0x0a648194,
6182
+ 0xc4084b29, 0x41d1ddf4, 0x19d7ae89, 0x9c0e3854, 0x5262f2e9,
6183
+ 0xd7bb6434, 0x38c813a7, 0xbd11857a, 0x737d4fc7, 0xf6a4d91a,
6184
+ 0xaea2aa67, 0x2b7b3cba, 0xe517f607, 0x60ce60da, 0x551b10fd,
6185
+ 0xd0c28620, 0x1eae4c9d, 0x9b77da40, 0xc371a93d, 0x46a83fe0,
6186
+ 0x88c4f55d, 0x0d1d6380, 0xbcb4e71d, 0x396d71c0, 0xf701bb7d,
6187
+ 0x72d82da0, 0x2ade5edd, 0xaf07c800, 0x616b02bd, 0xe4b29460,
6188
+ 0xd167e447, 0x54be729a, 0x9ad2b827, 0x1f0b2efa, 0x470d5d87,
6189
+ 0xc2d4cb5a, 0x0cb801e7, 0x8961973a, 0x6612e0a9, 0xe3cb7674,
6190
+ 0x2da7bcc9, 0xa87e2a14, 0xf0785969, 0x75a1cfb4, 0xbbcd0509,
6191
+ 0x3e1493d4, 0x0bc1e3f3, 0x8e18752e, 0x4074bf93, 0xc5ad294e,
6192
+ 0x9dab5a33, 0x1872ccee, 0xd61e0653, 0x53c7908e, 0x49ff99ae,
6193
+ 0xcc260f73, 0x024ac5ce, 0x87935313, 0xdf95206e, 0x5a4cb6b3,
6194
+ 0x94207c0e, 0x11f9ead3, 0x242c9af4, 0xa1f50c29, 0x6f99c694,
6195
+ 0xea405049, 0xb2462334, 0x379fb5e9, 0xf9f37f54, 0x7c2ae989,
6196
+ 0x93599e1a, 0x168008c7, 0xd8ecc27a, 0x5d3554a7, 0x053327da,
6197
+ 0x80eab107, 0x4e867bba, 0xcb5fed67, 0xfe8a9d40, 0x7b530b9d,
6198
+ 0xb53fc120, 0x30e657fd, 0x68e02480, 0xed39b25d, 0x235578e0,
6199
+ 0xa68cee3d},
6200
+ {0x00000000, 0x76e10f9d, 0xadc46ee1, 0xdb25617c, 0x1b8fac19,
6201
+ 0x6d6ea384, 0xb64bc2f8, 0xc0aacd65, 0x361e5933, 0x40ff56ae,
6202
+ 0x9bda37d2, 0xed3b384f, 0x2d91f52a, 0x5b70fab7, 0x80559bcb,
6203
+ 0xf6b49456, 0x6c3cb266, 0x1addbdfb, 0xc1f8dc87, 0xb719d31a,
6204
+ 0x77b31e7f, 0x015211e2, 0xda77709e, 0xac967f03, 0x5a22eb55,
6205
+ 0x2cc3e4c8, 0xf7e685b4, 0x81078a29, 0x41ad474c, 0x374c48d1,
6206
+ 0xec6929ad, 0x9a882630, 0xd87864cd, 0xae996b50, 0x75bc0a2c,
6207
+ 0x035d05b1, 0xc3f7c8d4, 0xb516c749, 0x6e33a635, 0x18d2a9a8,
6208
+ 0xee663dfe, 0x98873263, 0x43a2531f, 0x35435c82, 0xf5e991e7,
6209
+ 0x83089e7a, 0x582dff06, 0x2eccf09b, 0xb444d6ab, 0xc2a5d936,
6210
+ 0x1980b84a, 0x6f61b7d7, 0xafcb7ab2, 0xd92a752f, 0x020f1453,
6211
+ 0x74ee1bce, 0x825a8f98, 0xf4bb8005, 0x2f9ee179, 0x597feee4,
6212
+ 0x99d52381, 0xef342c1c, 0x34114d60, 0x42f042fd, 0xf1f7b941,
6213
+ 0x8716b6dc, 0x5c33d7a0, 0x2ad2d83d, 0xea781558, 0x9c991ac5,
6214
+ 0x47bc7bb9, 0x315d7424, 0xc7e9e072, 0xb108efef, 0x6a2d8e93,
6215
+ 0x1ccc810e, 0xdc664c6b, 0xaa8743f6, 0x71a2228a, 0x07432d17,
6216
+ 0x9dcb0b27, 0xeb2a04ba, 0x300f65c6, 0x46ee6a5b, 0x8644a73e,
6217
+ 0xf0a5a8a3, 0x2b80c9df, 0x5d61c642, 0xabd55214, 0xdd345d89,
6218
+ 0x06113cf5, 0x70f03368, 0xb05afe0d, 0xc6bbf190, 0x1d9e90ec,
6219
+ 0x6b7f9f71, 0x298fdd8c, 0x5f6ed211, 0x844bb36d, 0xf2aabcf0,
6220
+ 0x32007195, 0x44e17e08, 0x9fc41f74, 0xe92510e9, 0x1f9184bf,
6221
+ 0x69708b22, 0xb255ea5e, 0xc4b4e5c3, 0x041e28a6, 0x72ff273b,
6222
+ 0xa9da4647, 0xdf3b49da, 0x45b36fea, 0x33526077, 0xe877010b,
6223
+ 0x9e960e96, 0x5e3cc3f3, 0x28ddcc6e, 0xf3f8ad12, 0x8519a28f,
6224
+ 0x73ad36d9, 0x054c3944, 0xde695838, 0xa88857a5, 0x68229ac0,
6225
+ 0x1ec3955d, 0xc5e6f421, 0xb307fbbc, 0xe2ef7383, 0x940e7c1e,
6226
+ 0x4f2b1d62, 0x39ca12ff, 0xf960df9a, 0x8f81d007, 0x54a4b17b,
6227
+ 0x2245bee6, 0xd4f12ab0, 0xa210252d, 0x79354451, 0x0fd44bcc,
6228
+ 0xcf7e86a9, 0xb99f8934, 0x62bae848, 0x145be7d5, 0x8ed3c1e5,
6229
+ 0xf832ce78, 0x2317af04, 0x55f6a099, 0x955c6dfc, 0xe3bd6261,
6230
+ 0x3898031d, 0x4e790c80, 0xb8cd98d6, 0xce2c974b, 0x1509f637,
6231
+ 0x63e8f9aa, 0xa34234cf, 0xd5a33b52, 0x0e865a2e, 0x786755b3,
6232
+ 0x3a97174e, 0x4c7618d3, 0x975379af, 0xe1b27632, 0x2118bb57,
6233
+ 0x57f9b4ca, 0x8cdcd5b6, 0xfa3dda2b, 0x0c894e7d, 0x7a6841e0,
6234
+ 0xa14d209c, 0xd7ac2f01, 0x1706e264, 0x61e7edf9, 0xbac28c85,
6235
+ 0xcc238318, 0x56aba528, 0x204aaab5, 0xfb6fcbc9, 0x8d8ec454,
6236
+ 0x4d240931, 0x3bc506ac, 0xe0e067d0, 0x9601684d, 0x60b5fc1b,
6237
+ 0x1654f386, 0xcd7192fa, 0xbb909d67, 0x7b3a5002, 0x0ddb5f9f,
6238
+ 0xd6fe3ee3, 0xa01f317e, 0x1318cac2, 0x65f9c55f, 0xbedca423,
6239
+ 0xc83dabbe, 0x089766db, 0x7e766946, 0xa553083a, 0xd3b207a7,
6240
+ 0x250693f1, 0x53e79c6c, 0x88c2fd10, 0xfe23f28d, 0x3e893fe8,
6241
+ 0x48683075, 0x934d5109, 0xe5ac5e94, 0x7f2478a4, 0x09c57739,
6242
+ 0xd2e01645, 0xa40119d8, 0x64abd4bd, 0x124adb20, 0xc96fba5c,
6243
+ 0xbf8eb5c1, 0x493a2197, 0x3fdb2e0a, 0xe4fe4f76, 0x921f40eb,
6244
+ 0x52b58d8e, 0x24548213, 0xff71e36f, 0x8990ecf2, 0xcb60ae0f,
6245
+ 0xbd81a192, 0x66a4c0ee, 0x1045cf73, 0xd0ef0216, 0xa60e0d8b,
6246
+ 0x7d2b6cf7, 0x0bca636a, 0xfd7ef73c, 0x8b9ff8a1, 0x50ba99dd,
6247
+ 0x265b9640, 0xe6f15b25, 0x901054b8, 0x4b3535c4, 0x3dd43a59,
6248
+ 0xa75c1c69, 0xd1bd13f4, 0x0a987288, 0x7c797d15, 0xbcd3b070,
6249
+ 0xca32bfed, 0x1117de91, 0x67f6d10c, 0x9142455a, 0xe7a34ac7,
6250
+ 0x3c862bbb, 0x4a672426, 0x8acde943, 0xfc2ce6de, 0x270987a2,
6251
+ 0x51e8883f},
6252
+ {0x00000000, 0xe8dbfbb9, 0x91b186a8, 0x796a7d11, 0x63657c8a,
6253
+ 0x8bbe8733, 0xf2d4fa22, 0x1a0f019b, 0x87cc89cf, 0x6f177276,
6254
+ 0x167d0f67, 0xfea6f4de, 0xe4a9f545, 0x0c720efc, 0x751873ed,
6255
+ 0x9dc38854, 0x4f9f6244, 0xa74499fd, 0xde2ee4ec, 0x36f51f55,
6256
+ 0x2cfa1ece, 0xc421e577, 0xbd4b9866, 0x559063df, 0xc853eb8b,
6257
+ 0x20881032, 0x59e26d23, 0xb139969a, 0xab369701, 0x43ed6cb8,
6258
+ 0x3a8711a9, 0xd25cea10, 0x9e3ec588, 0x76e53e31, 0x0f8f4320,
6259
+ 0xe754b899, 0xfd5bb902, 0x158042bb, 0x6cea3faa, 0x8431c413,
6260
+ 0x19f24c47, 0xf129b7fe, 0x8843caef, 0x60983156, 0x7a9730cd,
6261
+ 0x924ccb74, 0xeb26b665, 0x03fd4ddc, 0xd1a1a7cc, 0x397a5c75,
6262
+ 0x40102164, 0xa8cbdadd, 0xb2c4db46, 0x5a1f20ff, 0x23755dee,
6263
+ 0xcbaea657, 0x566d2e03, 0xbeb6d5ba, 0xc7dca8ab, 0x2f075312,
6264
+ 0x35085289, 0xddd3a930, 0xa4b9d421, 0x4c622f98, 0x7d7bfbca,
6265
+ 0x95a00073, 0xecca7d62, 0x041186db, 0x1e1e8740, 0xf6c57cf9,
6266
+ 0x8faf01e8, 0x6774fa51, 0xfab77205, 0x126c89bc, 0x6b06f4ad,
6267
+ 0x83dd0f14, 0x99d20e8f, 0x7109f536, 0x08638827, 0xe0b8739e,
6268
+ 0x32e4998e, 0xda3f6237, 0xa3551f26, 0x4b8ee49f, 0x5181e504,
6269
+ 0xb95a1ebd, 0xc03063ac, 0x28eb9815, 0xb5281041, 0x5df3ebf8,
6270
+ 0x249996e9, 0xcc426d50, 0xd64d6ccb, 0x3e969772, 0x47fcea63,
6271
+ 0xaf2711da, 0xe3453e42, 0x0b9ec5fb, 0x72f4b8ea, 0x9a2f4353,
6272
+ 0x802042c8, 0x68fbb971, 0x1191c460, 0xf94a3fd9, 0x6489b78d,
6273
+ 0x8c524c34, 0xf5383125, 0x1de3ca9c, 0x07eccb07, 0xef3730be,
6274
+ 0x965d4daf, 0x7e86b616, 0xacda5c06, 0x4401a7bf, 0x3d6bdaae,
6275
+ 0xd5b02117, 0xcfbf208c, 0x2764db35, 0x5e0ea624, 0xb6d55d9d,
6276
+ 0x2b16d5c9, 0xc3cd2e70, 0xbaa75361, 0x527ca8d8, 0x4873a943,
6277
+ 0xa0a852fa, 0xd9c22feb, 0x3119d452, 0xbbf0874e, 0x532b7cf7,
6278
+ 0x2a4101e6, 0xc29afa5f, 0xd895fbc4, 0x304e007d, 0x49247d6c,
6279
+ 0xa1ff86d5, 0x3c3c0e81, 0xd4e7f538, 0xad8d8829, 0x45567390,
6280
+ 0x5f59720b, 0xb78289b2, 0xcee8f4a3, 0x26330f1a, 0xf46fe50a,
6281
+ 0x1cb41eb3, 0x65de63a2, 0x8d05981b, 0x970a9980, 0x7fd16239,
6282
+ 0x06bb1f28, 0xee60e491, 0x73a36cc5, 0x9b78977c, 0xe212ea6d,
6283
+ 0x0ac911d4, 0x10c6104f, 0xf81debf6, 0x817796e7, 0x69ac6d5e,
6284
+ 0x25ce42c6, 0xcd15b97f, 0xb47fc46e, 0x5ca43fd7, 0x46ab3e4c,
6285
+ 0xae70c5f5, 0xd71ab8e4, 0x3fc1435d, 0xa202cb09, 0x4ad930b0,
6286
+ 0x33b34da1, 0xdb68b618, 0xc167b783, 0x29bc4c3a, 0x50d6312b,
6287
+ 0xb80dca92, 0x6a512082, 0x828adb3b, 0xfbe0a62a, 0x133b5d93,
6288
+ 0x09345c08, 0xe1efa7b1, 0x9885daa0, 0x705e2119, 0xed9da94d,
6289
+ 0x054652f4, 0x7c2c2fe5, 0x94f7d45c, 0x8ef8d5c7, 0x66232e7e,
6290
+ 0x1f49536f, 0xf792a8d6, 0xc68b7c84, 0x2e50873d, 0x573afa2c,
6291
+ 0xbfe10195, 0xa5ee000e, 0x4d35fbb7, 0x345f86a6, 0xdc847d1f,
6292
+ 0x4147f54b, 0xa99c0ef2, 0xd0f673e3, 0x382d885a, 0x222289c1,
6293
+ 0xcaf97278, 0xb3930f69, 0x5b48f4d0, 0x89141ec0, 0x61cfe579,
6294
+ 0x18a59868, 0xf07e63d1, 0xea71624a, 0x02aa99f3, 0x7bc0e4e2,
6295
+ 0x931b1f5b, 0x0ed8970f, 0xe6036cb6, 0x9f6911a7, 0x77b2ea1e,
6296
+ 0x6dbdeb85, 0x8566103c, 0xfc0c6d2d, 0x14d79694, 0x58b5b90c,
6297
+ 0xb06e42b5, 0xc9043fa4, 0x21dfc41d, 0x3bd0c586, 0xd30b3e3f,
6298
+ 0xaa61432e, 0x42bab897, 0xdf7930c3, 0x37a2cb7a, 0x4ec8b66b,
6299
+ 0xa6134dd2, 0xbc1c4c49, 0x54c7b7f0, 0x2dadcae1, 0xc5763158,
6300
+ 0x172adb48, 0xfff120f1, 0x869b5de0, 0x6e40a659, 0x744fa7c2,
6301
+ 0x9c945c7b, 0xe5fe216a, 0x0d25dad3, 0x90e65287, 0x783da93e,
6302
+ 0x0157d42f, 0xe98c2f96, 0xf3832e0d, 0x1b58d5b4, 0x6232a8a5,
6303
+ 0x8ae9531c},
6304
+ {0x00000000, 0x919168ae, 0x6325a087, 0xf2b4c829, 0x874c31d4,
6305
+ 0x16dd597a, 0xe4699153, 0x75f8f9fd, 0x4f9f1373, 0xde0e7bdd,
6306
+ 0x2cbab3f4, 0xbd2bdb5a, 0xc8d322a7, 0x59424a09, 0xabf68220,
6307
+ 0x3a67ea8e, 0x9e3e27e6, 0x0faf4f48, 0xfd1b8761, 0x6c8aefcf,
6308
+ 0x19721632, 0x88e37e9c, 0x7a57b6b5, 0xebc6de1b, 0xd1a13495,
6309
+ 0x40305c3b, 0xb2849412, 0x2315fcbc, 0x56ed0541, 0xc77c6def,
6310
+ 0x35c8a5c6, 0xa459cd68, 0x7d7b3f17, 0xecea57b9, 0x1e5e9f90,
6311
+ 0x8fcff73e, 0xfa370ec3, 0x6ba6666d, 0x9912ae44, 0x0883c6ea,
6312
+ 0x32e42c64, 0xa37544ca, 0x51c18ce3, 0xc050e44d, 0xb5a81db0,
6313
+ 0x2439751e, 0xd68dbd37, 0x471cd599, 0xe34518f1, 0x72d4705f,
6314
+ 0x8060b876, 0x11f1d0d8, 0x64092925, 0xf598418b, 0x072c89a2,
6315
+ 0x96bde10c, 0xacda0b82, 0x3d4b632c, 0xcfffab05, 0x5e6ec3ab,
6316
+ 0x2b963a56, 0xba0752f8, 0x48b39ad1, 0xd922f27f, 0xfaf67e2e,
6317
+ 0x6b671680, 0x99d3dea9, 0x0842b607, 0x7dba4ffa, 0xec2b2754,
6318
+ 0x1e9fef7d, 0x8f0e87d3, 0xb5696d5d, 0x24f805f3, 0xd64ccdda,
6319
+ 0x47dda574, 0x32255c89, 0xa3b43427, 0x5100fc0e, 0xc09194a0,
6320
+ 0x64c859c8, 0xf5593166, 0x07edf94f, 0x967c91e1, 0xe384681c,
6321
+ 0x721500b2, 0x80a1c89b, 0x1130a035, 0x2b574abb, 0xbac62215,
6322
+ 0x4872ea3c, 0xd9e38292, 0xac1b7b6f, 0x3d8a13c1, 0xcf3edbe8,
6323
+ 0x5eafb346, 0x878d4139, 0x161c2997, 0xe4a8e1be, 0x75398910,
6324
+ 0x00c170ed, 0x91501843, 0x63e4d06a, 0xf275b8c4, 0xc812524a,
6325
+ 0x59833ae4, 0xab37f2cd, 0x3aa69a63, 0x4f5e639e, 0xdecf0b30,
6326
+ 0x2c7bc319, 0xbdeaabb7, 0x19b366df, 0x88220e71, 0x7a96c658,
6327
+ 0xeb07aef6, 0x9eff570b, 0x0f6e3fa5, 0xfddaf78c, 0x6c4b9f22,
6328
+ 0x562c75ac, 0xc7bd1d02, 0x3509d52b, 0xa498bd85, 0xd1604478,
6329
+ 0x40f12cd6, 0xb245e4ff, 0x23d48c51, 0xf4edfd5c, 0x657c95f2,
6330
+ 0x97c85ddb, 0x06593575, 0x73a1cc88, 0xe230a426, 0x10846c0f,
6331
+ 0x811504a1, 0xbb72ee2f, 0x2ae38681, 0xd8574ea8, 0x49c62606,
6332
+ 0x3c3edffb, 0xadafb755, 0x5f1b7f7c, 0xce8a17d2, 0x6ad3daba,
6333
+ 0xfb42b214, 0x09f67a3d, 0x98671293, 0xed9feb6e, 0x7c0e83c0,
6334
+ 0x8eba4be9, 0x1f2b2347, 0x254cc9c9, 0xb4dda167, 0x4669694e,
6335
+ 0xd7f801e0, 0xa200f81d, 0x339190b3, 0xc125589a, 0x50b43034,
6336
+ 0x8996c24b, 0x1807aae5, 0xeab362cc, 0x7b220a62, 0x0edaf39f,
6337
+ 0x9f4b9b31, 0x6dff5318, 0xfc6e3bb6, 0xc609d138, 0x5798b996,
6338
+ 0xa52c71bf, 0x34bd1911, 0x4145e0ec, 0xd0d48842, 0x2260406b,
6339
+ 0xb3f128c5, 0x17a8e5ad, 0x86398d03, 0x748d452a, 0xe51c2d84,
6340
+ 0x90e4d479, 0x0175bcd7, 0xf3c174fe, 0x62501c50, 0x5837f6de,
6341
+ 0xc9a69e70, 0x3b125659, 0xaa833ef7, 0xdf7bc70a, 0x4eeaafa4,
6342
+ 0xbc5e678d, 0x2dcf0f23, 0x0e1b8372, 0x9f8aebdc, 0x6d3e23f5,
6343
+ 0xfcaf4b5b, 0x8957b2a6, 0x18c6da08, 0xea721221, 0x7be37a8f,
6344
+ 0x41849001, 0xd015f8af, 0x22a13086, 0xb3305828, 0xc6c8a1d5,
6345
+ 0x5759c97b, 0xa5ed0152, 0x347c69fc, 0x9025a494, 0x01b4cc3a,
6346
+ 0xf3000413, 0x62916cbd, 0x17699540, 0x86f8fdee, 0x744c35c7,
6347
+ 0xe5dd5d69, 0xdfbab7e7, 0x4e2bdf49, 0xbc9f1760, 0x2d0e7fce,
6348
+ 0x58f68633, 0xc967ee9d, 0x3bd326b4, 0xaa424e1a, 0x7360bc65,
6349
+ 0xe2f1d4cb, 0x10451ce2, 0x81d4744c, 0xf42c8db1, 0x65bde51f,
6350
+ 0x97092d36, 0x06984598, 0x3cffaf16, 0xad6ec7b8, 0x5fda0f91,
6351
+ 0xce4b673f, 0xbbb39ec2, 0x2a22f66c, 0xd8963e45, 0x490756eb,
6352
+ 0xed5e9b83, 0x7ccff32d, 0x8e7b3b04, 0x1fea53aa, 0x6a12aa57,
6353
+ 0xfb83c2f9, 0x09370ad0, 0x98a6627e, 0xa2c188f0, 0x3350e05e,
6354
+ 0xc1e42877, 0x507540d9, 0x258db924, 0xb41cd18a, 0x46a819a3,
6355
+ 0xd739710d}};
6356
+
6357
+#endif
6358
+
6359
+#endif
6360
+
6361
+#if N == 5
6362
+
6363
+#if W == 8
6364
+
6365
+local const z_crc_t FAR crc_braid_table[][256] = {
6366
+ {0x00000000, 0xaf449247, 0x85f822cf, 0x2abcb088, 0xd08143df,
6367
+ 0x7fc5d198, 0x55796110, 0xfa3df357, 0x7a7381ff, 0xd53713b8,
6368
+ 0xff8ba330, 0x50cf3177, 0xaaf2c220, 0x05b65067, 0x2f0ae0ef,
6369
+ 0x804e72a8, 0xf4e703fe, 0x5ba391b9, 0x711f2131, 0xde5bb376,
6370
+ 0x24664021, 0x8b22d266, 0xa19e62ee, 0x0edaf0a9, 0x8e948201,
6371
+ 0x21d01046, 0x0b6ca0ce, 0xa4283289, 0x5e15c1de, 0xf1515399,
6372
+ 0xdbede311, 0x74a97156, 0x32bf01bd, 0x9dfb93fa, 0xb7472372,
6373
+ 0x1803b135, 0xe23e4262, 0x4d7ad025, 0x67c660ad, 0xc882f2ea,
6374
+ 0x48cc8042, 0xe7881205, 0xcd34a28d, 0x627030ca, 0x984dc39d,
6375
+ 0x370951da, 0x1db5e152, 0xb2f17315, 0xc6580243, 0x691c9004,
6376
+ 0x43a0208c, 0xece4b2cb, 0x16d9419c, 0xb99dd3db, 0x93216353,
6377
+ 0x3c65f114, 0xbc2b83bc, 0x136f11fb, 0x39d3a173, 0x96973334,
6378
+ 0x6caac063, 0xc3ee5224, 0xe952e2ac, 0x461670eb, 0x657e037a,
6379
+ 0xca3a913d, 0xe08621b5, 0x4fc2b3f2, 0xb5ff40a5, 0x1abbd2e2,
6380
+ 0x3007626a, 0x9f43f02d, 0x1f0d8285, 0xb04910c2, 0x9af5a04a,
6381
+ 0x35b1320d, 0xcf8cc15a, 0x60c8531d, 0x4a74e395, 0xe53071d2,
6382
+ 0x91990084, 0x3edd92c3, 0x1461224b, 0xbb25b00c, 0x4118435b,
6383
+ 0xee5cd11c, 0xc4e06194, 0x6ba4f3d3, 0xebea817b, 0x44ae133c,
6384
+ 0x6e12a3b4, 0xc15631f3, 0x3b6bc2a4, 0x942f50e3, 0xbe93e06b,
6385
+ 0x11d7722c, 0x57c102c7, 0xf8859080, 0xd2392008, 0x7d7db24f,
6386
+ 0x87404118, 0x2804d35f, 0x02b863d7, 0xadfcf190, 0x2db28338,
6387
+ 0x82f6117f, 0xa84aa1f7, 0x070e33b0, 0xfd33c0e7, 0x527752a0,
6388
+ 0x78cbe228, 0xd78f706f, 0xa3260139, 0x0c62937e, 0x26de23f6,
6389
+ 0x899ab1b1, 0x73a742e6, 0xdce3d0a1, 0xf65f6029, 0x591bf26e,
6390
+ 0xd95580c6, 0x76111281, 0x5cada209, 0xf3e9304e, 0x09d4c319,
6391
+ 0xa690515e, 0x8c2ce1d6, 0x23687391, 0xcafc06f4, 0x65b894b3,
6392
+ 0x4f04243b, 0xe040b67c, 0x1a7d452b, 0xb539d76c, 0x9f8567e4,
6393
+ 0x30c1f5a3, 0xb08f870b, 0x1fcb154c, 0x3577a5c4, 0x9a333783,
6394
+ 0x600ec4d4, 0xcf4a5693, 0xe5f6e61b, 0x4ab2745c, 0x3e1b050a,
6395
+ 0x915f974d, 0xbbe327c5, 0x14a7b582, 0xee9a46d5, 0x41ded492,
6396
+ 0x6b62641a, 0xc426f65d, 0x446884f5, 0xeb2c16b2, 0xc190a63a,
6397
+ 0x6ed4347d, 0x94e9c72a, 0x3bad556d, 0x1111e5e5, 0xbe5577a2,
6398
+ 0xf8430749, 0x5707950e, 0x7dbb2586, 0xd2ffb7c1, 0x28c24496,
6399
+ 0x8786d6d1, 0xad3a6659, 0x027ef41e, 0x823086b6, 0x2d7414f1,
6400
+ 0x07c8a479, 0xa88c363e, 0x52b1c569, 0xfdf5572e, 0xd749e7a6,
6401
+ 0x780d75e1, 0x0ca404b7, 0xa3e096f0, 0x895c2678, 0x2618b43f,
6402
+ 0xdc254768, 0x7361d52f, 0x59dd65a7, 0xf699f7e0, 0x76d78548,
6403
+ 0xd993170f, 0xf32fa787, 0x5c6b35c0, 0xa656c697, 0x091254d0,
6404
+ 0x23aee458, 0x8cea761f, 0xaf82058e, 0x00c697c9, 0x2a7a2741,
6405
+ 0x853eb506, 0x7f034651, 0xd047d416, 0xfafb649e, 0x55bff6d9,
6406
+ 0xd5f18471, 0x7ab51636, 0x5009a6be, 0xff4d34f9, 0x0570c7ae,
6407
+ 0xaa3455e9, 0x8088e561, 0x2fcc7726, 0x5b650670, 0xf4219437,
6408
+ 0xde9d24bf, 0x71d9b6f8, 0x8be445af, 0x24a0d7e8, 0x0e1c6760,
6409
+ 0xa158f527, 0x2116878f, 0x8e5215c8, 0xa4eea540, 0x0baa3707,
6410
+ 0xf197c450, 0x5ed35617, 0x746fe69f, 0xdb2b74d8, 0x9d3d0433,
6411
+ 0x32799674, 0x18c526fc, 0xb781b4bb, 0x4dbc47ec, 0xe2f8d5ab,
6412
+ 0xc8446523, 0x6700f764, 0xe74e85cc, 0x480a178b, 0x62b6a703,
6413
+ 0xcdf23544, 0x37cfc613, 0x988b5454, 0xb237e4dc, 0x1d73769b,
6414
+ 0x69da07cd, 0xc69e958a, 0xec222502, 0x4366b745, 0xb95b4412,
6415
+ 0x161fd655, 0x3ca366dd, 0x93e7f49a, 0x13a98632, 0xbced1475,
6416
+ 0x9651a4fd, 0x391536ba, 0xc328c5ed, 0x6c6c57aa, 0x46d0e722,
6417
+ 0xe9947565},
6418
+ {0x00000000, 0x4e890ba9, 0x9d121752, 0xd39b1cfb, 0xe15528e5,
6419
+ 0xafdc234c, 0x7c473fb7, 0x32ce341e, 0x19db578b, 0x57525c22,
6420
+ 0x84c940d9, 0xca404b70, 0xf88e7f6e, 0xb60774c7, 0x659c683c,
6421
+ 0x2b156395, 0x33b6af16, 0x7d3fa4bf, 0xaea4b844, 0xe02db3ed,
6422
+ 0xd2e387f3, 0x9c6a8c5a, 0x4ff190a1, 0x01789b08, 0x2a6df89d,
6423
+ 0x64e4f334, 0xb77fefcf, 0xf9f6e466, 0xcb38d078, 0x85b1dbd1,
6424
+ 0x562ac72a, 0x18a3cc83, 0x676d5e2c, 0x29e45585, 0xfa7f497e,
6425
+ 0xb4f642d7, 0x863876c9, 0xc8b17d60, 0x1b2a619b, 0x55a36a32,
6426
+ 0x7eb609a7, 0x303f020e, 0xe3a41ef5, 0xad2d155c, 0x9fe32142,
6427
+ 0xd16a2aeb, 0x02f13610, 0x4c783db9, 0x54dbf13a, 0x1a52fa93,
6428
+ 0xc9c9e668, 0x8740edc1, 0xb58ed9df, 0xfb07d276, 0x289cce8d,
6429
+ 0x6615c524, 0x4d00a6b1, 0x0389ad18, 0xd012b1e3, 0x9e9bba4a,
6430
+ 0xac558e54, 0xe2dc85fd, 0x31479906, 0x7fce92af, 0xcedabc58,
6431
+ 0x8053b7f1, 0x53c8ab0a, 0x1d41a0a3, 0x2f8f94bd, 0x61069f14,
6432
+ 0xb29d83ef, 0xfc148846, 0xd701ebd3, 0x9988e07a, 0x4a13fc81,
6433
+ 0x049af728, 0x3654c336, 0x78ddc89f, 0xab46d464, 0xe5cfdfcd,
6434
+ 0xfd6c134e, 0xb3e518e7, 0x607e041c, 0x2ef70fb5, 0x1c393bab,
6435
+ 0x52b03002, 0x812b2cf9, 0xcfa22750, 0xe4b744c5, 0xaa3e4f6c,
6436
+ 0x79a55397, 0x372c583e, 0x05e26c20, 0x4b6b6789, 0x98f07b72,
6437
+ 0xd67970db, 0xa9b7e274, 0xe73ee9dd, 0x34a5f526, 0x7a2cfe8f,
6438
+ 0x48e2ca91, 0x066bc138, 0xd5f0ddc3, 0x9b79d66a, 0xb06cb5ff,
6439
+ 0xfee5be56, 0x2d7ea2ad, 0x63f7a904, 0x51399d1a, 0x1fb096b3,
6440
+ 0xcc2b8a48, 0x82a281e1, 0x9a014d62, 0xd48846cb, 0x07135a30,
6441
+ 0x499a5199, 0x7b546587, 0x35dd6e2e, 0xe64672d5, 0xa8cf797c,
6442
+ 0x83da1ae9, 0xcd531140, 0x1ec80dbb, 0x50410612, 0x628f320c,
6443
+ 0x2c0639a5, 0xff9d255e, 0xb1142ef7, 0x46c47ef1, 0x084d7558,
6444
+ 0xdbd669a3, 0x955f620a, 0xa7915614, 0xe9185dbd, 0x3a834146,
6445
+ 0x740a4aef, 0x5f1f297a, 0x119622d3, 0xc20d3e28, 0x8c843581,
6446
+ 0xbe4a019f, 0xf0c30a36, 0x235816cd, 0x6dd11d64, 0x7572d1e7,
6447
+ 0x3bfbda4e, 0xe860c6b5, 0xa6e9cd1c, 0x9427f902, 0xdaaef2ab,
6448
+ 0x0935ee50, 0x47bce5f9, 0x6ca9866c, 0x22208dc5, 0xf1bb913e,
6449
+ 0xbf329a97, 0x8dfcae89, 0xc375a520, 0x10eeb9db, 0x5e67b272,
6450
+ 0x21a920dd, 0x6f202b74, 0xbcbb378f, 0xf2323c26, 0xc0fc0838,
6451
+ 0x8e750391, 0x5dee1f6a, 0x136714c3, 0x38727756, 0x76fb7cff,
6452
+ 0xa5606004, 0xebe96bad, 0xd9275fb3, 0x97ae541a, 0x443548e1,
6453
+ 0x0abc4348, 0x121f8fcb, 0x5c968462, 0x8f0d9899, 0xc1849330,
6454
+ 0xf34aa72e, 0xbdc3ac87, 0x6e58b07c, 0x20d1bbd5, 0x0bc4d840,
6455
+ 0x454dd3e9, 0x96d6cf12, 0xd85fc4bb, 0xea91f0a5, 0xa418fb0c,
6456
+ 0x7783e7f7, 0x390aec5e, 0x881ec2a9, 0xc697c900, 0x150cd5fb,
6457
+ 0x5b85de52, 0x694bea4c, 0x27c2e1e5, 0xf459fd1e, 0xbad0f6b7,
6458
+ 0x91c59522, 0xdf4c9e8b, 0x0cd78270, 0x425e89d9, 0x7090bdc7,
6459
+ 0x3e19b66e, 0xed82aa95, 0xa30ba13c, 0xbba86dbf, 0xf5216616,
6460
+ 0x26ba7aed, 0x68337144, 0x5afd455a, 0x14744ef3, 0xc7ef5208,
6461
+ 0x896659a1, 0xa2733a34, 0xecfa319d, 0x3f612d66, 0x71e826cf,
6462
+ 0x432612d1, 0x0daf1978, 0xde340583, 0x90bd0e2a, 0xef739c85,
6463
+ 0xa1fa972c, 0x72618bd7, 0x3ce8807e, 0x0e26b460, 0x40afbfc9,
6464
+ 0x9334a332, 0xddbda89b, 0xf6a8cb0e, 0xb821c0a7, 0x6bbadc5c,
6465
+ 0x2533d7f5, 0x17fde3eb, 0x5974e842, 0x8aeff4b9, 0xc466ff10,
6466
+ 0xdcc53393, 0x924c383a, 0x41d724c1, 0x0f5e2f68, 0x3d901b76,
6467
+ 0x731910df, 0xa0820c24, 0xee0b078d, 0xc51e6418, 0x8b976fb1,
6468
+ 0x580c734a, 0x168578e3, 0x244b4cfd, 0x6ac24754, 0xb9595baf,
6469
+ 0xf7d05006},
6470
+ {0x00000000, 0x8d88fde2, 0xc060fd85, 0x4de80067, 0x5bb0fd4b,
6471
+ 0xd63800a9, 0x9bd000ce, 0x1658fd2c, 0xb761fa96, 0x3ae90774,
6472
+ 0x77010713, 0xfa89faf1, 0xecd107dd, 0x6159fa3f, 0x2cb1fa58,
6473
+ 0xa13907ba, 0xb5b2f36d, 0x383a0e8f, 0x75d20ee8, 0xf85af30a,
6474
+ 0xee020e26, 0x638af3c4, 0x2e62f3a3, 0xa3ea0e41, 0x02d309fb,
6475
+ 0x8f5bf419, 0xc2b3f47e, 0x4f3b099c, 0x5963f4b0, 0xd4eb0952,
6476
+ 0x99030935, 0x148bf4d7, 0xb014e09b, 0x3d9c1d79, 0x70741d1e,
6477
+ 0xfdfce0fc, 0xeba41dd0, 0x662ce032, 0x2bc4e055, 0xa64c1db7,
6478
+ 0x07751a0d, 0x8afde7ef, 0xc715e788, 0x4a9d1a6a, 0x5cc5e746,
6479
+ 0xd14d1aa4, 0x9ca51ac3, 0x112de721, 0x05a613f6, 0x882eee14,
6480
+ 0xc5c6ee73, 0x484e1391, 0x5e16eebd, 0xd39e135f, 0x9e761338,
6481
+ 0x13feeeda, 0xb2c7e960, 0x3f4f1482, 0x72a714e5, 0xff2fe907,
6482
+ 0xe977142b, 0x64ffe9c9, 0x2917e9ae, 0xa49f144c, 0xbb58c777,
6483
+ 0x36d03a95, 0x7b383af2, 0xf6b0c710, 0xe0e83a3c, 0x6d60c7de,
6484
+ 0x2088c7b9, 0xad003a5b, 0x0c393de1, 0x81b1c003, 0xcc59c064,
6485
+ 0x41d13d86, 0x5789c0aa, 0xda013d48, 0x97e93d2f, 0x1a61c0cd,
6486
+ 0x0eea341a, 0x8362c9f8, 0xce8ac99f, 0x4302347d, 0x555ac951,
6487
+ 0xd8d234b3, 0x953a34d4, 0x18b2c936, 0xb98bce8c, 0x3403336e,
6488
+ 0x79eb3309, 0xf463ceeb, 0xe23b33c7, 0x6fb3ce25, 0x225bce42,
6489
+ 0xafd333a0, 0x0b4c27ec, 0x86c4da0e, 0xcb2cda69, 0x46a4278b,
6490
+ 0x50fcdaa7, 0xdd742745, 0x909c2722, 0x1d14dac0, 0xbc2ddd7a,
6491
+ 0x31a52098, 0x7c4d20ff, 0xf1c5dd1d, 0xe79d2031, 0x6a15ddd3,
6492
+ 0x27fdddb4, 0xaa752056, 0xbefed481, 0x33762963, 0x7e9e2904,
6493
+ 0xf316d4e6, 0xe54e29ca, 0x68c6d428, 0x252ed44f, 0xa8a629ad,
6494
+ 0x099f2e17, 0x8417d3f5, 0xc9ffd392, 0x44772e70, 0x522fd35c,
6495
+ 0xdfa72ebe, 0x924f2ed9, 0x1fc7d33b, 0xadc088af, 0x2048754d,
6496
+ 0x6da0752a, 0xe02888c8, 0xf67075e4, 0x7bf88806, 0x36108861,
6497
+ 0xbb987583, 0x1aa17239, 0x97298fdb, 0xdac18fbc, 0x5749725e,
6498
+ 0x41118f72, 0xcc997290, 0x817172f7, 0x0cf98f15, 0x18727bc2,
6499
+ 0x95fa8620, 0xd8128647, 0x559a7ba5, 0x43c28689, 0xce4a7b6b,
6500
+ 0x83a27b0c, 0x0e2a86ee, 0xaf138154, 0x229b7cb6, 0x6f737cd1,
6501
+ 0xe2fb8133, 0xf4a37c1f, 0x792b81fd, 0x34c3819a, 0xb94b7c78,
6502
+ 0x1dd46834, 0x905c95d6, 0xddb495b1, 0x503c6853, 0x4664957f,
6503
+ 0xcbec689d, 0x860468fa, 0x0b8c9518, 0xaab592a2, 0x273d6f40,
6504
+ 0x6ad56f27, 0xe75d92c5, 0xf1056fe9, 0x7c8d920b, 0x3165926c,
6505
+ 0xbced6f8e, 0xa8669b59, 0x25ee66bb, 0x680666dc, 0xe58e9b3e,
6506
+ 0xf3d66612, 0x7e5e9bf0, 0x33b69b97, 0xbe3e6675, 0x1f0761cf,
6507
+ 0x928f9c2d, 0xdf679c4a, 0x52ef61a8, 0x44b79c84, 0xc93f6166,
6508
+ 0x84d76101, 0x095f9ce3, 0x16984fd8, 0x9b10b23a, 0xd6f8b25d,
6509
+ 0x5b704fbf, 0x4d28b293, 0xc0a04f71, 0x8d484f16, 0x00c0b2f4,
6510
+ 0xa1f9b54e, 0x2c7148ac, 0x619948cb, 0xec11b529, 0xfa494805,
6511
+ 0x77c1b5e7, 0x3a29b580, 0xb7a14862, 0xa32abcb5, 0x2ea24157,
6512
+ 0x634a4130, 0xeec2bcd2, 0xf89a41fe, 0x7512bc1c, 0x38fabc7b,
6513
+ 0xb5724199, 0x144b4623, 0x99c3bbc1, 0xd42bbba6, 0x59a34644,
6514
+ 0x4ffbbb68, 0xc273468a, 0x8f9b46ed, 0x0213bb0f, 0xa68caf43,
6515
+ 0x2b0452a1, 0x66ec52c6, 0xeb64af24, 0xfd3c5208, 0x70b4afea,
6516
+ 0x3d5caf8d, 0xb0d4526f, 0x11ed55d5, 0x9c65a837, 0xd18da850,
6517
+ 0x5c0555b2, 0x4a5da89e, 0xc7d5557c, 0x8a3d551b, 0x07b5a8f9,
6518
+ 0x133e5c2e, 0x9eb6a1cc, 0xd35ea1ab, 0x5ed65c49, 0x488ea165,
6519
+ 0xc5065c87, 0x88ee5ce0, 0x0566a102, 0xa45fa6b8, 0x29d75b5a,
6520
+ 0x643f5b3d, 0xe9b7a6df, 0xffef5bf3, 0x7267a611, 0x3f8fa676,
6521
+ 0xb2075b94},
6522
+ {0x00000000, 0x80f0171f, 0xda91287f, 0x5a613f60, 0x6e5356bf,
6523
+ 0xeea341a0, 0xb4c27ec0, 0x343269df, 0xdca6ad7e, 0x5c56ba61,
6524
+ 0x06378501, 0x86c7921e, 0xb2f5fbc1, 0x3205ecde, 0x6864d3be,
6525
+ 0xe894c4a1, 0x623c5cbd, 0xe2cc4ba2, 0xb8ad74c2, 0x385d63dd,
6526
+ 0x0c6f0a02, 0x8c9f1d1d, 0xd6fe227d, 0x560e3562, 0xbe9af1c3,
6527
+ 0x3e6ae6dc, 0x640bd9bc, 0xe4fbcea3, 0xd0c9a77c, 0x5039b063,
6528
+ 0x0a588f03, 0x8aa8981c, 0xc478b97a, 0x4488ae65, 0x1ee99105,
6529
+ 0x9e19861a, 0xaa2befc5, 0x2adbf8da, 0x70bac7ba, 0xf04ad0a5,
6530
+ 0x18de1404, 0x982e031b, 0xc24f3c7b, 0x42bf2b64, 0x768d42bb,
6531
+ 0xf67d55a4, 0xac1c6ac4, 0x2cec7ddb, 0xa644e5c7, 0x26b4f2d8,
6532
+ 0x7cd5cdb8, 0xfc25daa7, 0xc817b378, 0x48e7a467, 0x12869b07,
6533
+ 0x92768c18, 0x7ae248b9, 0xfa125fa6, 0xa07360c6, 0x208377d9,
6534
+ 0x14b11e06, 0x94410919, 0xce203679, 0x4ed02166, 0x538074b5,
6535
+ 0xd37063aa, 0x89115cca, 0x09e14bd5, 0x3dd3220a, 0xbd233515,
6536
+ 0xe7420a75, 0x67b21d6a, 0x8f26d9cb, 0x0fd6ced4, 0x55b7f1b4,
6537
+ 0xd547e6ab, 0xe1758f74, 0x6185986b, 0x3be4a70b, 0xbb14b014,
6538
+ 0x31bc2808, 0xb14c3f17, 0xeb2d0077, 0x6bdd1768, 0x5fef7eb7,
6539
+ 0xdf1f69a8, 0x857e56c8, 0x058e41d7, 0xed1a8576, 0x6dea9269,
6540
+ 0x378bad09, 0xb77bba16, 0x8349d3c9, 0x03b9c4d6, 0x59d8fbb6,
6541
+ 0xd928eca9, 0x97f8cdcf, 0x1708dad0, 0x4d69e5b0, 0xcd99f2af,
6542
+ 0xf9ab9b70, 0x795b8c6f, 0x233ab30f, 0xa3caa410, 0x4b5e60b1,
6543
+ 0xcbae77ae, 0x91cf48ce, 0x113f5fd1, 0x250d360e, 0xa5fd2111,
6544
+ 0xff9c1e71, 0x7f6c096e, 0xf5c49172, 0x7534866d, 0x2f55b90d,
6545
+ 0xafa5ae12, 0x9b97c7cd, 0x1b67d0d2, 0x4106efb2, 0xc1f6f8ad,
6546
+ 0x29623c0c, 0xa9922b13, 0xf3f31473, 0x7303036c, 0x47316ab3,
6547
+ 0xc7c17dac, 0x9da042cc, 0x1d5055d3, 0xa700e96a, 0x27f0fe75,
6548
+ 0x7d91c115, 0xfd61d60a, 0xc953bfd5, 0x49a3a8ca, 0x13c297aa,
6549
+ 0x933280b5, 0x7ba64414, 0xfb56530b, 0xa1376c6b, 0x21c77b74,
6550
+ 0x15f512ab, 0x950505b4, 0xcf643ad4, 0x4f942dcb, 0xc53cb5d7,
6551
+ 0x45cca2c8, 0x1fad9da8, 0x9f5d8ab7, 0xab6fe368, 0x2b9ff477,
6552
+ 0x71fecb17, 0xf10edc08, 0x199a18a9, 0x996a0fb6, 0xc30b30d6,
6553
+ 0x43fb27c9, 0x77c94e16, 0xf7395909, 0xad586669, 0x2da87176,
6554
+ 0x63785010, 0xe388470f, 0xb9e9786f, 0x39196f70, 0x0d2b06af,
6555
+ 0x8ddb11b0, 0xd7ba2ed0, 0x574a39cf, 0xbfdefd6e, 0x3f2eea71,
6556
+ 0x654fd511, 0xe5bfc20e, 0xd18dabd1, 0x517dbcce, 0x0b1c83ae,
6557
+ 0x8bec94b1, 0x01440cad, 0x81b41bb2, 0xdbd524d2, 0x5b2533cd,
6558
+ 0x6f175a12, 0xefe74d0d, 0xb586726d, 0x35766572, 0xdde2a1d3,
6559
+ 0x5d12b6cc, 0x077389ac, 0x87839eb3, 0xb3b1f76c, 0x3341e073,
6560
+ 0x6920df13, 0xe9d0c80c, 0xf4809ddf, 0x74708ac0, 0x2e11b5a0,
6561
+ 0xaee1a2bf, 0x9ad3cb60, 0x1a23dc7f, 0x4042e31f, 0xc0b2f400,
6562
+ 0x282630a1, 0xa8d627be, 0xf2b718de, 0x72470fc1, 0x4675661e,
6563
+ 0xc6857101, 0x9ce44e61, 0x1c14597e, 0x96bcc162, 0x164cd67d,
6564
+ 0x4c2de91d, 0xccddfe02, 0xf8ef97dd, 0x781f80c2, 0x227ebfa2,
6565
+ 0xa28ea8bd, 0x4a1a6c1c, 0xcaea7b03, 0x908b4463, 0x107b537c,
6566
+ 0x24493aa3, 0xa4b92dbc, 0xfed812dc, 0x7e2805c3, 0x30f824a5,
6567
+ 0xb00833ba, 0xea690cda, 0x6a991bc5, 0x5eab721a, 0xde5b6505,
6568
+ 0x843a5a65, 0x04ca4d7a, 0xec5e89db, 0x6cae9ec4, 0x36cfa1a4,
6569
+ 0xb63fb6bb, 0x820ddf64, 0x02fdc87b, 0x589cf71b, 0xd86ce004,
6570
+ 0x52c47818, 0xd2346f07, 0x88555067, 0x08a54778, 0x3c972ea7,
6571
+ 0xbc6739b8, 0xe60606d8, 0x66f611c7, 0x8e62d566, 0x0e92c279,
6572
+ 0x54f3fd19, 0xd403ea06, 0xe03183d9, 0x60c194c6, 0x3aa0aba6,
6573
+ 0xba50bcb9},
6574
+ {0x00000000, 0x9570d495, 0xf190af6b, 0x64e07bfe, 0x38505897,
6575
+ 0xad208c02, 0xc9c0f7fc, 0x5cb02369, 0x70a0b12e, 0xe5d065bb,
6576
+ 0x81301e45, 0x1440cad0, 0x48f0e9b9, 0xdd803d2c, 0xb96046d2,
6577
+ 0x2c109247, 0xe141625c, 0x7431b6c9, 0x10d1cd37, 0x85a119a2,
6578
+ 0xd9113acb, 0x4c61ee5e, 0x288195a0, 0xbdf14135, 0x91e1d372,
6579
+ 0x049107e7, 0x60717c19, 0xf501a88c, 0xa9b18be5, 0x3cc15f70,
6580
+ 0x5821248e, 0xcd51f01b, 0x19f3c2f9, 0x8c83166c, 0xe8636d92,
6581
+ 0x7d13b907, 0x21a39a6e, 0xb4d34efb, 0xd0333505, 0x4543e190,
6582
+ 0x695373d7, 0xfc23a742, 0x98c3dcbc, 0x0db30829, 0x51032b40,
6583
+ 0xc473ffd5, 0xa093842b, 0x35e350be, 0xf8b2a0a5, 0x6dc27430,
6584
+ 0x09220fce, 0x9c52db5b, 0xc0e2f832, 0x55922ca7, 0x31725759,
6585
+ 0xa40283cc, 0x8812118b, 0x1d62c51e, 0x7982bee0, 0xecf26a75,
6586
+ 0xb042491c, 0x25329d89, 0x41d2e677, 0xd4a232e2, 0x33e785f2,
6587
+ 0xa6975167, 0xc2772a99, 0x5707fe0c, 0x0bb7dd65, 0x9ec709f0,
6588
+ 0xfa27720e, 0x6f57a69b, 0x434734dc, 0xd637e049, 0xb2d79bb7,
6589
+ 0x27a74f22, 0x7b176c4b, 0xee67b8de, 0x8a87c320, 0x1ff717b5,
6590
+ 0xd2a6e7ae, 0x47d6333b, 0x233648c5, 0xb6469c50, 0xeaf6bf39,
6591
+ 0x7f866bac, 0x1b661052, 0x8e16c4c7, 0xa2065680, 0x37768215,
6592
+ 0x5396f9eb, 0xc6e62d7e, 0x9a560e17, 0x0f26da82, 0x6bc6a17c,
6593
+ 0xfeb675e9, 0x2a14470b, 0xbf64939e, 0xdb84e860, 0x4ef43cf5,
6594
+ 0x12441f9c, 0x8734cb09, 0xe3d4b0f7, 0x76a46462, 0x5ab4f625,
6595
+ 0xcfc422b0, 0xab24594e, 0x3e548ddb, 0x62e4aeb2, 0xf7947a27,
6596
+ 0x937401d9, 0x0604d54c, 0xcb552557, 0x5e25f1c2, 0x3ac58a3c,
6597
+ 0xafb55ea9, 0xf3057dc0, 0x6675a955, 0x0295d2ab, 0x97e5063e,
6598
+ 0xbbf59479, 0x2e8540ec, 0x4a653b12, 0xdf15ef87, 0x83a5ccee,
6599
+ 0x16d5187b, 0x72356385, 0xe745b710, 0x67cf0be4, 0xf2bfdf71,
6600
+ 0x965fa48f, 0x032f701a, 0x5f9f5373, 0xcaef87e6, 0xae0ffc18,
6601
+ 0x3b7f288d, 0x176fbaca, 0x821f6e5f, 0xe6ff15a1, 0x738fc134,
6602
+ 0x2f3fe25d, 0xba4f36c8, 0xdeaf4d36, 0x4bdf99a3, 0x868e69b8,
6603
+ 0x13febd2d, 0x771ec6d3, 0xe26e1246, 0xbede312f, 0x2baee5ba,
6604
+ 0x4f4e9e44, 0xda3e4ad1, 0xf62ed896, 0x635e0c03, 0x07be77fd,
6605
+ 0x92cea368, 0xce7e8001, 0x5b0e5494, 0x3fee2f6a, 0xaa9efbff,
6606
+ 0x7e3cc91d, 0xeb4c1d88, 0x8fac6676, 0x1adcb2e3, 0x466c918a,
6607
+ 0xd31c451f, 0xb7fc3ee1, 0x228cea74, 0x0e9c7833, 0x9becaca6,
6608
+ 0xff0cd758, 0x6a7c03cd, 0x36cc20a4, 0xa3bcf431, 0xc75c8fcf,
6609
+ 0x522c5b5a, 0x9f7dab41, 0x0a0d7fd4, 0x6eed042a, 0xfb9dd0bf,
6610
+ 0xa72df3d6, 0x325d2743, 0x56bd5cbd, 0xc3cd8828, 0xefdd1a6f,
6611
+ 0x7aadcefa, 0x1e4db504, 0x8b3d6191, 0xd78d42f8, 0x42fd966d,
6612
+ 0x261ded93, 0xb36d3906, 0x54288e16, 0xc1585a83, 0xa5b8217d,
6613
+ 0x30c8f5e8, 0x6c78d681, 0xf9080214, 0x9de879ea, 0x0898ad7f,
6614
+ 0x24883f38, 0xb1f8ebad, 0xd5189053, 0x406844c6, 0x1cd867af,
6615
+ 0x89a8b33a, 0xed48c8c4, 0x78381c51, 0xb569ec4a, 0x201938df,
6616
+ 0x44f94321, 0xd18997b4, 0x8d39b4dd, 0x18496048, 0x7ca91bb6,
6617
+ 0xe9d9cf23, 0xc5c95d64, 0x50b989f1, 0x3459f20f, 0xa129269a,
6618
+ 0xfd9905f3, 0x68e9d166, 0x0c09aa98, 0x99797e0d, 0x4ddb4cef,
6619
+ 0xd8ab987a, 0xbc4be384, 0x293b3711, 0x758b1478, 0xe0fbc0ed,
6620
+ 0x841bbb13, 0x116b6f86, 0x3d7bfdc1, 0xa80b2954, 0xcceb52aa,
6621
+ 0x599b863f, 0x052ba556, 0x905b71c3, 0xf4bb0a3d, 0x61cbdea8,
6622
+ 0xac9a2eb3, 0x39eafa26, 0x5d0a81d8, 0xc87a554d, 0x94ca7624,
6623
+ 0x01baa2b1, 0x655ad94f, 0xf02a0dda, 0xdc3a9f9d, 0x494a4b08,
6624
+ 0x2daa30f6, 0xb8dae463, 0xe46ac70a, 0x711a139f, 0x15fa6861,
6625
+ 0x808abcf4},
6626
+ {0x00000000, 0xcf9e17c8, 0x444d29d1, 0x8bd33e19, 0x889a53a2,
6627
+ 0x4704446a, 0xccd77a73, 0x03496dbb, 0xca45a105, 0x05dbb6cd,
6628
+ 0x8e0888d4, 0x41969f1c, 0x42dff2a7, 0x8d41e56f, 0x0692db76,
6629
+ 0xc90cccbe, 0x4ffa444b, 0x80645383, 0x0bb76d9a, 0xc4297a52,
6630
+ 0xc76017e9, 0x08fe0021, 0x832d3e38, 0x4cb329f0, 0x85bfe54e,
6631
+ 0x4a21f286, 0xc1f2cc9f, 0x0e6cdb57, 0x0d25b6ec, 0xc2bba124,
6632
+ 0x49689f3d, 0x86f688f5, 0x9ff48896, 0x506a9f5e, 0xdbb9a147,
6633
+ 0x1427b68f, 0x176edb34, 0xd8f0ccfc, 0x5323f2e5, 0x9cbde52d,
6634
+ 0x55b12993, 0x9a2f3e5b, 0x11fc0042, 0xde62178a, 0xdd2b7a31,
6635
+ 0x12b56df9, 0x996653e0, 0x56f84428, 0xd00eccdd, 0x1f90db15,
6636
+ 0x9443e50c, 0x5bddf2c4, 0x58949f7f, 0x970a88b7, 0x1cd9b6ae,
6637
+ 0xd347a166, 0x1a4b6dd8, 0xd5d57a10, 0x5e064409, 0x919853c1,
6638
+ 0x92d13e7a, 0x5d4f29b2, 0xd69c17ab, 0x19020063, 0xe498176d,
6639
+ 0x2b0600a5, 0xa0d53ebc, 0x6f4b2974, 0x6c0244cf, 0xa39c5307,
6640
+ 0x284f6d1e, 0xe7d17ad6, 0x2eddb668, 0xe143a1a0, 0x6a909fb9,
6641
+ 0xa50e8871, 0xa647e5ca, 0x69d9f202, 0xe20acc1b, 0x2d94dbd3,
6642
+ 0xab625326, 0x64fc44ee, 0xef2f7af7, 0x20b16d3f, 0x23f80084,
6643
+ 0xec66174c, 0x67b52955, 0xa82b3e9d, 0x6127f223, 0xaeb9e5eb,
6644
+ 0x256adbf2, 0xeaf4cc3a, 0xe9bda181, 0x2623b649, 0xadf08850,
6645
+ 0x626e9f98, 0x7b6c9ffb, 0xb4f28833, 0x3f21b62a, 0xf0bfa1e2,
6646
+ 0xf3f6cc59, 0x3c68db91, 0xb7bbe588, 0x7825f240, 0xb1293efe,
6647
+ 0x7eb72936, 0xf564172f, 0x3afa00e7, 0x39b36d5c, 0xf62d7a94,
6648
+ 0x7dfe448d, 0xb2605345, 0x3496dbb0, 0xfb08cc78, 0x70dbf261,
6649
+ 0xbf45e5a9, 0xbc0c8812, 0x73929fda, 0xf841a1c3, 0x37dfb60b,
6650
+ 0xfed37ab5, 0x314d6d7d, 0xba9e5364, 0x750044ac, 0x76492917,
6651
+ 0xb9d73edf, 0x320400c6, 0xfd9a170e, 0x1241289b, 0xdddf3f53,
6652
+ 0x560c014a, 0x99921682, 0x9adb7b39, 0x55456cf1, 0xde9652e8,
6653
+ 0x11084520, 0xd804899e, 0x179a9e56, 0x9c49a04f, 0x53d7b787,
6654
+ 0x509eda3c, 0x9f00cdf4, 0x14d3f3ed, 0xdb4de425, 0x5dbb6cd0,
6655
+ 0x92257b18, 0x19f64501, 0xd66852c9, 0xd5213f72, 0x1abf28ba,
6656
+ 0x916c16a3, 0x5ef2016b, 0x97fecdd5, 0x5860da1d, 0xd3b3e404,
6657
+ 0x1c2df3cc, 0x1f649e77, 0xd0fa89bf, 0x5b29b7a6, 0x94b7a06e,
6658
+ 0x8db5a00d, 0x422bb7c5, 0xc9f889dc, 0x06669e14, 0x052ff3af,
6659
+ 0xcab1e467, 0x4162da7e, 0x8efccdb6, 0x47f00108, 0x886e16c0,
6660
+ 0x03bd28d9, 0xcc233f11, 0xcf6a52aa, 0x00f44562, 0x8b277b7b,
6661
+ 0x44b96cb3, 0xc24fe446, 0x0dd1f38e, 0x8602cd97, 0x499cda5f,
6662
+ 0x4ad5b7e4, 0x854ba02c, 0x0e989e35, 0xc10689fd, 0x080a4543,
6663
+ 0xc794528b, 0x4c476c92, 0x83d97b5a, 0x809016e1, 0x4f0e0129,
6664
+ 0xc4dd3f30, 0x0b4328f8, 0xf6d93ff6, 0x3947283e, 0xb2941627,
6665
+ 0x7d0a01ef, 0x7e436c54, 0xb1dd7b9c, 0x3a0e4585, 0xf590524d,
6666
+ 0x3c9c9ef3, 0xf302893b, 0x78d1b722, 0xb74fa0ea, 0xb406cd51,
6667
+ 0x7b98da99, 0xf04be480, 0x3fd5f348, 0xb9237bbd, 0x76bd6c75,
6668
+ 0xfd6e526c, 0x32f045a4, 0x31b9281f, 0xfe273fd7, 0x75f401ce,
6669
+ 0xba6a1606, 0x7366dab8, 0xbcf8cd70, 0x372bf369, 0xf8b5e4a1,
6670
+ 0xfbfc891a, 0x34629ed2, 0xbfb1a0cb, 0x702fb703, 0x692db760,
6671
+ 0xa6b3a0a8, 0x2d609eb1, 0xe2fe8979, 0xe1b7e4c2, 0x2e29f30a,
6672
+ 0xa5facd13, 0x6a64dadb, 0xa3681665, 0x6cf601ad, 0xe7253fb4,
6673
+ 0x28bb287c, 0x2bf245c7, 0xe46c520f, 0x6fbf6c16, 0xa0217bde,
6674
+ 0x26d7f32b, 0xe949e4e3, 0x629adafa, 0xad04cd32, 0xae4da089,
6675
+ 0x61d3b741, 0xea008958, 0x259e9e90, 0xec92522e, 0x230c45e6,
6676
+ 0xa8df7bff, 0x67416c37, 0x6408018c, 0xab961644, 0x2045285d,
6677
+ 0xefdb3f95},
6678
+ {0x00000000, 0x24825136, 0x4904a26c, 0x6d86f35a, 0x920944d8,
6679
+ 0xb68b15ee, 0xdb0de6b4, 0xff8fb782, 0xff638ff1, 0xdbe1dec7,
6680
+ 0xb6672d9d, 0x92e57cab, 0x6d6acb29, 0x49e89a1f, 0x246e6945,
6681
+ 0x00ec3873, 0x25b619a3, 0x01344895, 0x6cb2bbcf, 0x4830eaf9,
6682
+ 0xb7bf5d7b, 0x933d0c4d, 0xfebbff17, 0xda39ae21, 0xdad59652,
6683
+ 0xfe57c764, 0x93d1343e, 0xb7536508, 0x48dcd28a, 0x6c5e83bc,
6684
+ 0x01d870e6, 0x255a21d0, 0x4b6c3346, 0x6fee6270, 0x0268912a,
6685
+ 0x26eac01c, 0xd965779e, 0xfde726a8, 0x9061d5f2, 0xb4e384c4,
6686
+ 0xb40fbcb7, 0x908ded81, 0xfd0b1edb, 0xd9894fed, 0x2606f86f,
6687
+ 0x0284a959, 0x6f025a03, 0x4b800b35, 0x6eda2ae5, 0x4a587bd3,
6688
+ 0x27de8889, 0x035cd9bf, 0xfcd36e3d, 0xd8513f0b, 0xb5d7cc51,
6689
+ 0x91559d67, 0x91b9a514, 0xb53bf422, 0xd8bd0778, 0xfc3f564e,
6690
+ 0x03b0e1cc, 0x2732b0fa, 0x4ab443a0, 0x6e361296, 0x96d8668c,
6691
+ 0xb25a37ba, 0xdfdcc4e0, 0xfb5e95d6, 0x04d12254, 0x20537362,
6692
+ 0x4dd58038, 0x6957d10e, 0x69bbe97d, 0x4d39b84b, 0x20bf4b11,
6693
+ 0x043d1a27, 0xfbb2ada5, 0xdf30fc93, 0xb2b60fc9, 0x96345eff,
6694
+ 0xb36e7f2f, 0x97ec2e19, 0xfa6add43, 0xdee88c75, 0x21673bf7,
6695
+ 0x05e56ac1, 0x6863999b, 0x4ce1c8ad, 0x4c0df0de, 0x688fa1e8,
6696
+ 0x050952b2, 0x218b0384, 0xde04b406, 0xfa86e530, 0x9700166a,
6697
+ 0xb382475c, 0xddb455ca, 0xf93604fc, 0x94b0f7a6, 0xb032a690,
6698
+ 0x4fbd1112, 0x6b3f4024, 0x06b9b37e, 0x223be248, 0x22d7da3b,
6699
+ 0x06558b0d, 0x6bd37857, 0x4f512961, 0xb0de9ee3, 0x945ccfd5,
6700
+ 0xf9da3c8f, 0xdd586db9, 0xf8024c69, 0xdc801d5f, 0xb106ee05,
6701
+ 0x9584bf33, 0x6a0b08b1, 0x4e895987, 0x230faadd, 0x078dfbeb,
6702
+ 0x0761c398, 0x23e392ae, 0x4e6561f4, 0x6ae730c2, 0x95688740,
6703
+ 0xb1ead676, 0xdc6c252c, 0xf8ee741a, 0xf6c1cb59, 0xd2439a6f,
6704
+ 0xbfc56935, 0x9b473803, 0x64c88f81, 0x404adeb7, 0x2dcc2ded,
6705
+ 0x094e7cdb, 0x09a244a8, 0x2d20159e, 0x40a6e6c4, 0x6424b7f2,
6706
+ 0x9bab0070, 0xbf295146, 0xd2afa21c, 0xf62df32a, 0xd377d2fa,
6707
+ 0xf7f583cc, 0x9a737096, 0xbef121a0, 0x417e9622, 0x65fcc714,
6708
+ 0x087a344e, 0x2cf86578, 0x2c145d0b, 0x08960c3d, 0x6510ff67,
6709
+ 0x4192ae51, 0xbe1d19d3, 0x9a9f48e5, 0xf719bbbf, 0xd39bea89,
6710
+ 0xbdadf81f, 0x992fa929, 0xf4a95a73, 0xd02b0b45, 0x2fa4bcc7,
6711
+ 0x0b26edf1, 0x66a01eab, 0x42224f9d, 0x42ce77ee, 0x664c26d8,
6712
+ 0x0bcad582, 0x2f4884b4, 0xd0c73336, 0xf4456200, 0x99c3915a,
6713
+ 0xbd41c06c, 0x981be1bc, 0xbc99b08a, 0xd11f43d0, 0xf59d12e6,
6714
+ 0x0a12a564, 0x2e90f452, 0x43160708, 0x6794563e, 0x67786e4d,
6715
+ 0x43fa3f7b, 0x2e7ccc21, 0x0afe9d17, 0xf5712a95, 0xd1f37ba3,
6716
+ 0xbc7588f9, 0x98f7d9cf, 0x6019add5, 0x449bfce3, 0x291d0fb9,
6717
+ 0x0d9f5e8f, 0xf210e90d, 0xd692b83b, 0xbb144b61, 0x9f961a57,
6718
+ 0x9f7a2224, 0xbbf87312, 0xd67e8048, 0xf2fcd17e, 0x0d7366fc,
6719
+ 0x29f137ca, 0x4477c490, 0x60f595a6, 0x45afb476, 0x612de540,
6720
+ 0x0cab161a, 0x2829472c, 0xd7a6f0ae, 0xf324a198, 0x9ea252c2,
6721
+ 0xba2003f4, 0xbacc3b87, 0x9e4e6ab1, 0xf3c899eb, 0xd74ac8dd,
6722
+ 0x28c57f5f, 0x0c472e69, 0x61c1dd33, 0x45438c05, 0x2b759e93,
6723
+ 0x0ff7cfa5, 0x62713cff, 0x46f36dc9, 0xb97cda4b, 0x9dfe8b7d,
6724
+ 0xf0787827, 0xd4fa2911, 0xd4161162, 0xf0944054, 0x9d12b30e,
6725
+ 0xb990e238, 0x461f55ba, 0x629d048c, 0x0f1bf7d6, 0x2b99a6e0,
6726
+ 0x0ec38730, 0x2a41d606, 0x47c7255c, 0x6345746a, 0x9ccac3e8,
6727
+ 0xb84892de, 0xd5ce6184, 0xf14c30b2, 0xf1a008c1, 0xd52259f7,
6728
+ 0xb8a4aaad, 0x9c26fb9b, 0x63a94c19, 0x472b1d2f, 0x2aadee75,
6729
+ 0x0e2fbf43},
6730
+ {0x00000000, 0x36f290f3, 0x6de521e6, 0x5b17b115, 0xdbca43cc,
6731
+ 0xed38d33f, 0xb62f622a, 0x80ddf2d9, 0x6ce581d9, 0x5a17112a,
6732
+ 0x0100a03f, 0x37f230cc, 0xb72fc215, 0x81dd52e6, 0xdacae3f3,
6733
+ 0xec387300, 0xd9cb03b2, 0xef399341, 0xb42e2254, 0x82dcb2a7,
6734
+ 0x0201407e, 0x34f3d08d, 0x6fe46198, 0x5916f16b, 0xb52e826b,
6735
+ 0x83dc1298, 0xd8cba38d, 0xee39337e, 0x6ee4c1a7, 0x58165154,
6736
+ 0x0301e041, 0x35f370b2, 0x68e70125, 0x5e1591d6, 0x050220c3,
6737
+ 0x33f0b030, 0xb32d42e9, 0x85dfd21a, 0xdec8630f, 0xe83af3fc,
6738
+ 0x040280fc, 0x32f0100f, 0x69e7a11a, 0x5f1531e9, 0xdfc8c330,
6739
+ 0xe93a53c3, 0xb22de2d6, 0x84df7225, 0xb12c0297, 0x87de9264,
6740
+ 0xdcc92371, 0xea3bb382, 0x6ae6415b, 0x5c14d1a8, 0x070360bd,
6741
+ 0x31f1f04e, 0xddc9834e, 0xeb3b13bd, 0xb02ca2a8, 0x86de325b,
6742
+ 0x0603c082, 0x30f15071, 0x6be6e164, 0x5d147197, 0xd1ce024a,
6743
+ 0xe73c92b9, 0xbc2b23ac, 0x8ad9b35f, 0x0a044186, 0x3cf6d175,
6744
+ 0x67e16060, 0x5113f093, 0xbd2b8393, 0x8bd91360, 0xd0cea275,
6745
+ 0xe63c3286, 0x66e1c05f, 0x501350ac, 0x0b04e1b9, 0x3df6714a,
6746
+ 0x080501f8, 0x3ef7910b, 0x65e0201e, 0x5312b0ed, 0xd3cf4234,
6747
+ 0xe53dd2c7, 0xbe2a63d2, 0x88d8f321, 0x64e08021, 0x521210d2,
6748
+ 0x0905a1c7, 0x3ff73134, 0xbf2ac3ed, 0x89d8531e, 0xd2cfe20b,
6749
+ 0xe43d72f8, 0xb929036f, 0x8fdb939c, 0xd4cc2289, 0xe23eb27a,
6750
+ 0x62e340a3, 0x5411d050, 0x0f066145, 0x39f4f1b6, 0xd5cc82b6,
6751
+ 0xe33e1245, 0xb829a350, 0x8edb33a3, 0x0e06c17a, 0x38f45189,
6752
+ 0x63e3e09c, 0x5511706f, 0x60e200dd, 0x5610902e, 0x0d07213b,
6753
+ 0x3bf5b1c8, 0xbb284311, 0x8ddad3e2, 0xd6cd62f7, 0xe03ff204,
6754
+ 0x0c078104, 0x3af511f7, 0x61e2a0e2, 0x57103011, 0xd7cdc2c8,
6755
+ 0xe13f523b, 0xba28e32e, 0x8cda73dd, 0x78ed02d5, 0x4e1f9226,
6756
+ 0x15082333, 0x23fab3c0, 0xa3274119, 0x95d5d1ea, 0xcec260ff,
6757
+ 0xf830f00c, 0x1408830c, 0x22fa13ff, 0x79eda2ea, 0x4f1f3219,
6758
+ 0xcfc2c0c0, 0xf9305033, 0xa227e126, 0x94d571d5, 0xa1260167,
6759
+ 0x97d49194, 0xccc32081, 0xfa31b072, 0x7aec42ab, 0x4c1ed258,
6760
+ 0x1709634d, 0x21fbf3be, 0xcdc380be, 0xfb31104d, 0xa026a158,
6761
+ 0x96d431ab, 0x1609c372, 0x20fb5381, 0x7bece294, 0x4d1e7267,
6762
+ 0x100a03f0, 0x26f89303, 0x7def2216, 0x4b1db2e5, 0xcbc0403c,
6763
+ 0xfd32d0cf, 0xa62561da, 0x90d7f129, 0x7cef8229, 0x4a1d12da,
6764
+ 0x110aa3cf, 0x27f8333c, 0xa725c1e5, 0x91d75116, 0xcac0e003,
6765
+ 0xfc3270f0, 0xc9c10042, 0xff3390b1, 0xa42421a4, 0x92d6b157,
6766
+ 0x120b438e, 0x24f9d37d, 0x7fee6268, 0x491cf29b, 0xa524819b,
6767
+ 0x93d61168, 0xc8c1a07d, 0xfe33308e, 0x7eeec257, 0x481c52a4,
6768
+ 0x130be3b1, 0x25f97342, 0xa923009f, 0x9fd1906c, 0xc4c62179,
6769
+ 0xf234b18a, 0x72e94353, 0x441bd3a0, 0x1f0c62b5, 0x29fef246,
6770
+ 0xc5c68146, 0xf33411b5, 0xa823a0a0, 0x9ed13053, 0x1e0cc28a,
6771
+ 0x28fe5279, 0x73e9e36c, 0x451b739f, 0x70e8032d, 0x461a93de,
6772
+ 0x1d0d22cb, 0x2bffb238, 0xab2240e1, 0x9dd0d012, 0xc6c76107,
6773
+ 0xf035f1f4, 0x1c0d82f4, 0x2aff1207, 0x71e8a312, 0x471a33e1,
6774
+ 0xc7c7c138, 0xf13551cb, 0xaa22e0de, 0x9cd0702d, 0xc1c401ba,
6775
+ 0xf7369149, 0xac21205c, 0x9ad3b0af, 0x1a0e4276, 0x2cfcd285,
6776
+ 0x77eb6390, 0x4119f363, 0xad218063, 0x9bd31090, 0xc0c4a185,
6777
+ 0xf6363176, 0x76ebc3af, 0x4019535c, 0x1b0ee249, 0x2dfc72ba,
6778
+ 0x180f0208, 0x2efd92fb, 0x75ea23ee, 0x4318b31d, 0xc3c541c4,
6779
+ 0xf537d137, 0xae206022, 0x98d2f0d1, 0x74ea83d1, 0x42181322,
6780
+ 0x190fa237, 0x2ffd32c4, 0xaf20c01d, 0x99d250ee, 0xc2c5e1fb,
6781
+ 0xf4377108}};
6782
+
6783
+local const z_word_t FAR crc_braid_big_table[][256] = {
6784
+ {0x0000000000000000, 0xf390f23600000000, 0xe621e56d00000000,
6785
+ 0x15b1175b00000000, 0xcc43cadb00000000, 0x3fd338ed00000000,
6786
+ 0x2a622fb600000000, 0xd9f2dd8000000000, 0xd981e56c00000000,
6787
+ 0x2a11175a00000000, 0x3fa0000100000000, 0xcc30f23700000000,
6788
+ 0x15c22fb700000000, 0xe652dd8100000000, 0xf3e3cada00000000,
6789
+ 0x007338ec00000000, 0xb203cbd900000000, 0x419339ef00000000,
6790
+ 0x54222eb400000000, 0xa7b2dc8200000000, 0x7e40010200000000,
6791
+ 0x8dd0f33400000000, 0x9861e46f00000000, 0x6bf1165900000000,
6792
+ 0x6b822eb500000000, 0x9812dc8300000000, 0x8da3cbd800000000,
6793
+ 0x7e3339ee00000000, 0xa7c1e46e00000000, 0x5451165800000000,
6794
+ 0x41e0010300000000, 0xb270f33500000000, 0x2501e76800000000,
6795
+ 0xd691155e00000000, 0xc320020500000000, 0x30b0f03300000000,
6796
+ 0xe9422db300000000, 0x1ad2df8500000000, 0x0f63c8de00000000,
6797
+ 0xfcf33ae800000000, 0xfc80020400000000, 0x0f10f03200000000,
6798
+ 0x1aa1e76900000000, 0xe931155f00000000, 0x30c3c8df00000000,
6799
+ 0xc3533ae900000000, 0xd6e22db200000000, 0x2572df8400000000,
6800
+ 0x97022cb100000000, 0x6492de8700000000, 0x7123c9dc00000000,
6801
+ 0x82b33bea00000000, 0x5b41e66a00000000, 0xa8d1145c00000000,
6802
+ 0xbd60030700000000, 0x4ef0f13100000000, 0x4e83c9dd00000000,
6803
+ 0xbd133beb00000000, 0xa8a22cb000000000, 0x5b32de8600000000,
6804
+ 0x82c0030600000000, 0x7150f13000000000, 0x64e1e66b00000000,
6805
+ 0x9771145d00000000, 0x4a02ced100000000, 0xb9923ce700000000,
6806
+ 0xac232bbc00000000, 0x5fb3d98a00000000, 0x8641040a00000000,
6807
+ 0x75d1f63c00000000, 0x6060e16700000000, 0x93f0135100000000,
6808
+ 0x93832bbd00000000, 0x6013d98b00000000, 0x75a2ced000000000,
6809
+ 0x86323ce600000000, 0x5fc0e16600000000, 0xac50135000000000,
6810
+ 0xb9e1040b00000000, 0x4a71f63d00000000, 0xf801050800000000,
6811
+ 0x0b91f73e00000000, 0x1e20e06500000000, 0xedb0125300000000,
6812
+ 0x3442cfd300000000, 0xc7d23de500000000, 0xd2632abe00000000,
6813
+ 0x21f3d88800000000, 0x2180e06400000000, 0xd210125200000000,
6814
+ 0xc7a1050900000000, 0x3431f73f00000000, 0xedc32abf00000000,
6815
+ 0x1e53d88900000000, 0x0be2cfd200000000, 0xf8723de400000000,
6816
+ 0x6f0329b900000000, 0x9c93db8f00000000, 0x8922ccd400000000,
6817
+ 0x7ab23ee200000000, 0xa340e36200000000, 0x50d0115400000000,
6818
+ 0x4561060f00000000, 0xb6f1f43900000000, 0xb682ccd500000000,
6819
+ 0x45123ee300000000, 0x50a329b800000000, 0xa333db8e00000000,
6820
+ 0x7ac1060e00000000, 0x8951f43800000000, 0x9ce0e36300000000,
6821
+ 0x6f70115500000000, 0xdd00e26000000000, 0x2e90105600000000,
6822
+ 0x3b21070d00000000, 0xc8b1f53b00000000, 0x114328bb00000000,
6823
+ 0xe2d3da8d00000000, 0xf762cdd600000000, 0x04f23fe000000000,
6824
+ 0x0481070c00000000, 0xf711f53a00000000, 0xe2a0e26100000000,
6825
+ 0x1130105700000000, 0xc8c2cdd700000000, 0x3b523fe100000000,
6826
+ 0x2ee328ba00000000, 0xdd73da8c00000000, 0xd502ed7800000000,
6827
+ 0x26921f4e00000000, 0x3323081500000000, 0xc0b3fa2300000000,
6828
+ 0x194127a300000000, 0xead1d59500000000, 0xff60c2ce00000000,
6829
+ 0x0cf030f800000000, 0x0c83081400000000, 0xff13fa2200000000,
6830
+ 0xeaa2ed7900000000, 0x19321f4f00000000, 0xc0c0c2cf00000000,
6831
+ 0x335030f900000000, 0x26e127a200000000, 0xd571d59400000000,
6832
+ 0x670126a100000000, 0x9491d49700000000, 0x8120c3cc00000000,
6833
+ 0x72b031fa00000000, 0xab42ec7a00000000, 0x58d21e4c00000000,
6834
+ 0x4d63091700000000, 0xbef3fb2100000000, 0xbe80c3cd00000000,
6835
+ 0x4d1031fb00000000, 0x58a126a000000000, 0xab31d49600000000,
6836
+ 0x72c3091600000000, 0x8153fb2000000000, 0x94e2ec7b00000000,
6837
+ 0x67721e4d00000000, 0xf0030a1000000000, 0x0393f82600000000,
6838
+ 0x1622ef7d00000000, 0xe5b21d4b00000000, 0x3c40c0cb00000000,
6839
+ 0xcfd032fd00000000, 0xda6125a600000000, 0x29f1d79000000000,
6840
+ 0x2982ef7c00000000, 0xda121d4a00000000, 0xcfa30a1100000000,
6841
+ 0x3c33f82700000000, 0xe5c125a700000000, 0x1651d79100000000,
6842
+ 0x03e0c0ca00000000, 0xf07032fc00000000, 0x4200c1c900000000,
6843
+ 0xb19033ff00000000, 0xa42124a400000000, 0x57b1d69200000000,
6844
+ 0x8e430b1200000000, 0x7dd3f92400000000, 0x6862ee7f00000000,
6845
+ 0x9bf21c4900000000, 0x9b8124a500000000, 0x6811d69300000000,
6846
+ 0x7da0c1c800000000, 0x8e3033fe00000000, 0x57c2ee7e00000000,
6847
+ 0xa4521c4800000000, 0xb1e30b1300000000, 0x4273f92500000000,
6848
+ 0x9f0023a900000000, 0x6c90d19f00000000, 0x7921c6c400000000,
6849
+ 0x8ab134f200000000, 0x5343e97200000000, 0xa0d31b4400000000,
6850
+ 0xb5620c1f00000000, 0x46f2fe2900000000, 0x4681c6c500000000,
6851
+ 0xb51134f300000000, 0xa0a023a800000000, 0x5330d19e00000000,
6852
+ 0x8ac20c1e00000000, 0x7952fe2800000000, 0x6ce3e97300000000,
6853
+ 0x9f731b4500000000, 0x2d03e87000000000, 0xde931a4600000000,
6854
+ 0xcb220d1d00000000, 0x38b2ff2b00000000, 0xe14022ab00000000,
6855
+ 0x12d0d09d00000000, 0x0761c7c600000000, 0xf4f135f000000000,
6856
+ 0xf4820d1c00000000, 0x0712ff2a00000000, 0x12a3e87100000000,
6857
+ 0xe1331a4700000000, 0x38c1c7c700000000, 0xcb5135f100000000,
6858
+ 0xdee022aa00000000, 0x2d70d09c00000000, 0xba01c4c100000000,
6859
+ 0x499136f700000000, 0x5c2021ac00000000, 0xafb0d39a00000000,
6860
+ 0x76420e1a00000000, 0x85d2fc2c00000000, 0x9063eb7700000000,
6861
+ 0x63f3194100000000, 0x638021ad00000000, 0x9010d39b00000000,
6862
+ 0x85a1c4c000000000, 0x763136f600000000, 0xafc3eb7600000000,
6863
+ 0x5c53194000000000, 0x49e20e1b00000000, 0xba72fc2d00000000,
6864
+ 0x08020f1800000000, 0xfb92fd2e00000000, 0xee23ea7500000000,
6865
+ 0x1db3184300000000, 0xc441c5c300000000, 0x37d137f500000000,
6866
+ 0x226020ae00000000, 0xd1f0d29800000000, 0xd183ea7400000000,
6867
+ 0x2213184200000000, 0x37a20f1900000000, 0xc432fd2f00000000,
6868
+ 0x1dc020af00000000, 0xee50d29900000000, 0xfbe1c5c200000000,
6869
+ 0x087137f400000000},
6870
+ {0x0000000000000000, 0x3651822400000000, 0x6ca2044900000000,
6871
+ 0x5af3866d00000000, 0xd844099200000000, 0xee158bb600000000,
6872
+ 0xb4e60ddb00000000, 0x82b78fff00000000, 0xf18f63ff00000000,
6873
+ 0xc7dee1db00000000, 0x9d2d67b600000000, 0xab7ce59200000000,
6874
+ 0x29cb6a6d00000000, 0x1f9ae84900000000, 0x45696e2400000000,
6875
+ 0x7338ec0000000000, 0xa319b62500000000, 0x9548340100000000,
6876
+ 0xcfbbb26c00000000, 0xf9ea304800000000, 0x7b5dbfb700000000,
6877
+ 0x4d0c3d9300000000, 0x17ffbbfe00000000, 0x21ae39da00000000,
6878
+ 0x5296d5da00000000, 0x64c757fe00000000, 0x3e34d19300000000,
6879
+ 0x086553b700000000, 0x8ad2dc4800000000, 0xbc835e6c00000000,
6880
+ 0xe670d80100000000, 0xd0215a2500000000, 0x46336c4b00000000,
6881
+ 0x7062ee6f00000000, 0x2a91680200000000, 0x1cc0ea2600000000,
6882
+ 0x9e7765d900000000, 0xa826e7fd00000000, 0xf2d5619000000000,
6883
+ 0xc484e3b400000000, 0xb7bc0fb400000000, 0x81ed8d9000000000,
6884
+ 0xdb1e0bfd00000000, 0xed4f89d900000000, 0x6ff8062600000000,
6885
+ 0x59a9840200000000, 0x035a026f00000000, 0x350b804b00000000,
6886
+ 0xe52ada6e00000000, 0xd37b584a00000000, 0x8988de2700000000,
6887
+ 0xbfd95c0300000000, 0x3d6ed3fc00000000, 0x0b3f51d800000000,
6888
+ 0x51ccd7b500000000, 0x679d559100000000, 0x14a5b99100000000,
6889
+ 0x22f43bb500000000, 0x7807bdd800000000, 0x4e563ffc00000000,
6890
+ 0xcce1b00300000000, 0xfab0322700000000, 0xa043b44a00000000,
6891
+ 0x9612366e00000000, 0x8c66d89600000000, 0xba375ab200000000,
6892
+ 0xe0c4dcdf00000000, 0xd6955efb00000000, 0x5422d10400000000,
6893
+ 0x6273532000000000, 0x3880d54d00000000, 0x0ed1576900000000,
6894
+ 0x7de9bb6900000000, 0x4bb8394d00000000, 0x114bbf2000000000,
6895
+ 0x271a3d0400000000, 0xa5adb2fb00000000, 0x93fc30df00000000,
6896
+ 0xc90fb6b200000000, 0xff5e349600000000, 0x2f7f6eb300000000,
6897
+ 0x192eec9700000000, 0x43dd6afa00000000, 0x758ce8de00000000,
6898
+ 0xf73b672100000000, 0xc16ae50500000000, 0x9b99636800000000,
6899
+ 0xadc8e14c00000000, 0xdef00d4c00000000, 0xe8a18f6800000000,
6900
+ 0xb252090500000000, 0x84038b2100000000, 0x06b404de00000000,
6901
+ 0x30e586fa00000000, 0x6a16009700000000, 0x5c4782b300000000,
6902
+ 0xca55b4dd00000000, 0xfc0436f900000000, 0xa6f7b09400000000,
6903
+ 0x90a632b000000000, 0x1211bd4f00000000, 0x24403f6b00000000,
6904
+ 0x7eb3b90600000000, 0x48e23b2200000000, 0x3bdad72200000000,
6905
+ 0x0d8b550600000000, 0x5778d36b00000000, 0x6129514f00000000,
6906
+ 0xe39edeb000000000, 0xd5cf5c9400000000, 0x8f3cdaf900000000,
6907
+ 0xb96d58dd00000000, 0x694c02f800000000, 0x5f1d80dc00000000,
6908
+ 0x05ee06b100000000, 0x33bf849500000000, 0xb1080b6a00000000,
6909
+ 0x8759894e00000000, 0xddaa0f2300000000, 0xebfb8d0700000000,
6910
+ 0x98c3610700000000, 0xae92e32300000000, 0xf461654e00000000,
6911
+ 0xc230e76a00000000, 0x4087689500000000, 0x76d6eab100000000,
6912
+ 0x2c256cdc00000000, 0x1a74eef800000000, 0x59cbc1f600000000,
6913
+ 0x6f9a43d200000000, 0x3569c5bf00000000, 0x0338479b00000000,
6914
+ 0x818fc86400000000, 0xb7de4a4000000000, 0xed2dcc2d00000000,
6915
+ 0xdb7c4e0900000000, 0xa844a20900000000, 0x9e15202d00000000,
6916
+ 0xc4e6a64000000000, 0xf2b7246400000000, 0x7000ab9b00000000,
6917
+ 0x465129bf00000000, 0x1ca2afd200000000, 0x2af32df600000000,
6918
+ 0xfad277d300000000, 0xcc83f5f700000000, 0x9670739a00000000,
6919
+ 0xa021f1be00000000, 0x22967e4100000000, 0x14c7fc6500000000,
6920
+ 0x4e347a0800000000, 0x7865f82c00000000, 0x0b5d142c00000000,
6921
+ 0x3d0c960800000000, 0x67ff106500000000, 0x51ae924100000000,
6922
+ 0xd3191dbe00000000, 0xe5489f9a00000000, 0xbfbb19f700000000,
6923
+ 0x89ea9bd300000000, 0x1ff8adbd00000000, 0x29a92f9900000000,
6924
+ 0x735aa9f400000000, 0x450b2bd000000000, 0xc7bca42f00000000,
6925
+ 0xf1ed260b00000000, 0xab1ea06600000000, 0x9d4f224200000000,
6926
+ 0xee77ce4200000000, 0xd8264c6600000000, 0x82d5ca0b00000000,
6927
+ 0xb484482f00000000, 0x3633c7d000000000, 0x006245f400000000,
6928
+ 0x5a91c39900000000, 0x6cc041bd00000000, 0xbce11b9800000000,
6929
+ 0x8ab099bc00000000, 0xd0431fd100000000, 0xe6129df500000000,
6930
+ 0x64a5120a00000000, 0x52f4902e00000000, 0x0807164300000000,
6931
+ 0x3e56946700000000, 0x4d6e786700000000, 0x7b3ffa4300000000,
6932
+ 0x21cc7c2e00000000, 0x179dfe0a00000000, 0x952a71f500000000,
6933
+ 0xa37bf3d100000000, 0xf98875bc00000000, 0xcfd9f79800000000,
6934
+ 0xd5ad196000000000, 0xe3fc9b4400000000, 0xb90f1d2900000000,
6935
+ 0x8f5e9f0d00000000, 0x0de910f200000000, 0x3bb892d600000000,
6936
+ 0x614b14bb00000000, 0x571a969f00000000, 0x24227a9f00000000,
6937
+ 0x1273f8bb00000000, 0x48807ed600000000, 0x7ed1fcf200000000,
6938
+ 0xfc66730d00000000, 0xca37f12900000000, 0x90c4774400000000,
6939
+ 0xa695f56000000000, 0x76b4af4500000000, 0x40e52d6100000000,
6940
+ 0x1a16ab0c00000000, 0x2c47292800000000, 0xaef0a6d700000000,
6941
+ 0x98a124f300000000, 0xc252a29e00000000, 0xf40320ba00000000,
6942
+ 0x873bccba00000000, 0xb16a4e9e00000000, 0xeb99c8f300000000,
6943
+ 0xddc84ad700000000, 0x5f7fc52800000000, 0x692e470c00000000,
6944
+ 0x33ddc16100000000, 0x058c434500000000, 0x939e752b00000000,
6945
+ 0xa5cff70f00000000, 0xff3c716200000000, 0xc96df34600000000,
6946
+ 0x4bda7cb900000000, 0x7d8bfe9d00000000, 0x277878f000000000,
6947
+ 0x1129fad400000000, 0x621116d400000000, 0x544094f000000000,
6948
+ 0x0eb3129d00000000, 0x38e290b900000000, 0xba551f4600000000,
6949
+ 0x8c049d6200000000, 0xd6f71b0f00000000, 0xe0a6992b00000000,
6950
+ 0x3087c30e00000000, 0x06d6412a00000000, 0x5c25c74700000000,
6951
+ 0x6a74456300000000, 0xe8c3ca9c00000000, 0xde9248b800000000,
6952
+ 0x8461ced500000000, 0xb2304cf100000000, 0xc108a0f100000000,
6953
+ 0xf75922d500000000, 0xadaaa4b800000000, 0x9bfb269c00000000,
6954
+ 0x194ca96300000000, 0x2f1d2b4700000000, 0x75eead2a00000000,
6955
+ 0x43bf2f0e00000000},
6956
+ {0x0000000000000000, 0xc8179ecf00000000, 0xd1294d4400000000,
6957
+ 0x193ed38b00000000, 0xa2539a8800000000, 0x6a44044700000000,
6958
+ 0x737ad7cc00000000, 0xbb6d490300000000, 0x05a145ca00000000,
6959
+ 0xcdb6db0500000000, 0xd488088e00000000, 0x1c9f964100000000,
6960
+ 0xa7f2df4200000000, 0x6fe5418d00000000, 0x76db920600000000,
6961
+ 0xbecc0cc900000000, 0x4b44fa4f00000000, 0x8353648000000000,
6962
+ 0x9a6db70b00000000, 0x527a29c400000000, 0xe91760c700000000,
6963
+ 0x2100fe0800000000, 0x383e2d8300000000, 0xf029b34c00000000,
6964
+ 0x4ee5bf8500000000, 0x86f2214a00000000, 0x9fccf2c100000000,
6965
+ 0x57db6c0e00000000, 0xecb6250d00000000, 0x24a1bbc200000000,
6966
+ 0x3d9f684900000000, 0xf588f68600000000, 0x9688f49f00000000,
6967
+ 0x5e9f6a5000000000, 0x47a1b9db00000000, 0x8fb6271400000000,
6968
+ 0x34db6e1700000000, 0xfcccf0d800000000, 0xe5f2235300000000,
6969
+ 0x2de5bd9c00000000, 0x9329b15500000000, 0x5b3e2f9a00000000,
6970
+ 0x4200fc1100000000, 0x8a1762de00000000, 0x317a2bdd00000000,
6971
+ 0xf96db51200000000, 0xe053669900000000, 0x2844f85600000000,
6972
+ 0xddcc0ed000000000, 0x15db901f00000000, 0x0ce5439400000000,
6973
+ 0xc4f2dd5b00000000, 0x7f9f945800000000, 0xb7880a9700000000,
6974
+ 0xaeb6d91c00000000, 0x66a147d300000000, 0xd86d4b1a00000000,
6975
+ 0x107ad5d500000000, 0x0944065e00000000, 0xc153989100000000,
6976
+ 0x7a3ed19200000000, 0xb2294f5d00000000, 0xab179cd600000000,
6977
+ 0x6300021900000000, 0x6d1798e400000000, 0xa500062b00000000,
6978
+ 0xbc3ed5a000000000, 0x74294b6f00000000, 0xcf44026c00000000,
6979
+ 0x07539ca300000000, 0x1e6d4f2800000000, 0xd67ad1e700000000,
6980
+ 0x68b6dd2e00000000, 0xa0a143e100000000, 0xb99f906a00000000,
6981
+ 0x71880ea500000000, 0xcae547a600000000, 0x02f2d96900000000,
6982
+ 0x1bcc0ae200000000, 0xd3db942d00000000, 0x265362ab00000000,
6983
+ 0xee44fc6400000000, 0xf77a2fef00000000, 0x3f6db12000000000,
6984
+ 0x8400f82300000000, 0x4c1766ec00000000, 0x5529b56700000000,
6985
+ 0x9d3e2ba800000000, 0x23f2276100000000, 0xebe5b9ae00000000,
6986
+ 0xf2db6a2500000000, 0x3accf4ea00000000, 0x81a1bde900000000,
6987
+ 0x49b6232600000000, 0x5088f0ad00000000, 0x989f6e6200000000,
6988
+ 0xfb9f6c7b00000000, 0x3388f2b400000000, 0x2ab6213f00000000,
6989
+ 0xe2a1bff000000000, 0x59ccf6f300000000, 0x91db683c00000000,
6990
+ 0x88e5bbb700000000, 0x40f2257800000000, 0xfe3e29b100000000,
6991
+ 0x3629b77e00000000, 0x2f1764f500000000, 0xe700fa3a00000000,
6992
+ 0x5c6db33900000000, 0x947a2df600000000, 0x8d44fe7d00000000,
6993
+ 0x455360b200000000, 0xb0db963400000000, 0x78cc08fb00000000,
6994
+ 0x61f2db7000000000, 0xa9e545bf00000000, 0x12880cbc00000000,
6995
+ 0xda9f927300000000, 0xc3a141f800000000, 0x0bb6df3700000000,
6996
+ 0xb57ad3fe00000000, 0x7d6d4d3100000000, 0x64539eba00000000,
6997
+ 0xac44007500000000, 0x1729497600000000, 0xdf3ed7b900000000,
6998
+ 0xc600043200000000, 0x0e179afd00000000, 0x9b28411200000000,
6999
+ 0x533fdfdd00000000, 0x4a010c5600000000, 0x8216929900000000,
7000
+ 0x397bdb9a00000000, 0xf16c455500000000, 0xe85296de00000000,
7001
+ 0x2045081100000000, 0x9e8904d800000000, 0x569e9a1700000000,
7002
+ 0x4fa0499c00000000, 0x87b7d75300000000, 0x3cda9e5000000000,
7003
+ 0xf4cd009f00000000, 0xedf3d31400000000, 0x25e44ddb00000000,
7004
+ 0xd06cbb5d00000000, 0x187b259200000000, 0x0145f61900000000,
7005
+ 0xc95268d600000000, 0x723f21d500000000, 0xba28bf1a00000000,
7006
+ 0xa3166c9100000000, 0x6b01f25e00000000, 0xd5cdfe9700000000,
7007
+ 0x1dda605800000000, 0x04e4b3d300000000, 0xccf32d1c00000000,
7008
+ 0x779e641f00000000, 0xbf89fad000000000, 0xa6b7295b00000000,
7009
+ 0x6ea0b79400000000, 0x0da0b58d00000000, 0xc5b72b4200000000,
7010
+ 0xdc89f8c900000000, 0x149e660600000000, 0xaff32f0500000000,
7011
+ 0x67e4b1ca00000000, 0x7eda624100000000, 0xb6cdfc8e00000000,
7012
+ 0x0801f04700000000, 0xc0166e8800000000, 0xd928bd0300000000,
7013
+ 0x113f23cc00000000, 0xaa526acf00000000, 0x6245f40000000000,
7014
+ 0x7b7b278b00000000, 0xb36cb94400000000, 0x46e44fc200000000,
7015
+ 0x8ef3d10d00000000, 0x97cd028600000000, 0x5fda9c4900000000,
7016
+ 0xe4b7d54a00000000, 0x2ca04b8500000000, 0x359e980e00000000,
7017
+ 0xfd8906c100000000, 0x43450a0800000000, 0x8b5294c700000000,
7018
+ 0x926c474c00000000, 0x5a7bd98300000000, 0xe116908000000000,
7019
+ 0x29010e4f00000000, 0x303fddc400000000, 0xf828430b00000000,
7020
+ 0xf63fd9f600000000, 0x3e28473900000000, 0x271694b200000000,
7021
+ 0xef010a7d00000000, 0x546c437e00000000, 0x9c7bddb100000000,
7022
+ 0x85450e3a00000000, 0x4d5290f500000000, 0xf39e9c3c00000000,
7023
+ 0x3b8902f300000000, 0x22b7d17800000000, 0xeaa04fb700000000,
7024
+ 0x51cd06b400000000, 0x99da987b00000000, 0x80e44bf000000000,
7025
+ 0x48f3d53f00000000, 0xbd7b23b900000000, 0x756cbd7600000000,
7026
+ 0x6c526efd00000000, 0xa445f03200000000, 0x1f28b93100000000,
7027
+ 0xd73f27fe00000000, 0xce01f47500000000, 0x06166aba00000000,
7028
+ 0xb8da667300000000, 0x70cdf8bc00000000, 0x69f32b3700000000,
7029
+ 0xa1e4b5f800000000, 0x1a89fcfb00000000, 0xd29e623400000000,
7030
+ 0xcba0b1bf00000000, 0x03b72f7000000000, 0x60b72d6900000000,
7031
+ 0xa8a0b3a600000000, 0xb19e602d00000000, 0x7989fee200000000,
7032
+ 0xc2e4b7e100000000, 0x0af3292e00000000, 0x13cdfaa500000000,
7033
+ 0xdbda646a00000000, 0x651668a300000000, 0xad01f66c00000000,
7034
+ 0xb43f25e700000000, 0x7c28bb2800000000, 0xc745f22b00000000,
7035
+ 0x0f526ce400000000, 0x166cbf6f00000000, 0xde7b21a000000000,
7036
+ 0x2bf3d72600000000, 0xe3e449e900000000, 0xfada9a6200000000,
7037
+ 0x32cd04ad00000000, 0x89a04dae00000000, 0x41b7d36100000000,
7038
+ 0x588900ea00000000, 0x909e9e2500000000, 0x2e5292ec00000000,
7039
+ 0xe6450c2300000000, 0xff7bdfa800000000, 0x376c416700000000,
7040
+ 0x8c01086400000000, 0x441696ab00000000, 0x5d28452000000000,
7041
+ 0x953fdbef00000000},
7042
+ {0x0000000000000000, 0x95d4709500000000, 0x6baf90f100000000,
7043
+ 0xfe7be06400000000, 0x9758503800000000, 0x028c20ad00000000,
7044
+ 0xfcf7c0c900000000, 0x6923b05c00000000, 0x2eb1a07000000000,
7045
+ 0xbb65d0e500000000, 0x451e308100000000, 0xd0ca401400000000,
7046
+ 0xb9e9f04800000000, 0x2c3d80dd00000000, 0xd24660b900000000,
7047
+ 0x4792102c00000000, 0x5c6241e100000000, 0xc9b6317400000000,
7048
+ 0x37cdd11000000000, 0xa219a18500000000, 0xcb3a11d900000000,
7049
+ 0x5eee614c00000000, 0xa095812800000000, 0x3541f1bd00000000,
7050
+ 0x72d3e19100000000, 0xe707910400000000, 0x197c716000000000,
7051
+ 0x8ca801f500000000, 0xe58bb1a900000000, 0x705fc13c00000000,
7052
+ 0x8e24215800000000, 0x1bf051cd00000000, 0xf9c2f31900000000,
7053
+ 0x6c16838c00000000, 0x926d63e800000000, 0x07b9137d00000000,
7054
+ 0x6e9aa32100000000, 0xfb4ed3b400000000, 0x053533d000000000,
7055
+ 0x90e1434500000000, 0xd773536900000000, 0x42a723fc00000000,
7056
+ 0xbcdcc39800000000, 0x2908b30d00000000, 0x402b035100000000,
7057
+ 0xd5ff73c400000000, 0x2b8493a000000000, 0xbe50e33500000000,
7058
+ 0xa5a0b2f800000000, 0x3074c26d00000000, 0xce0f220900000000,
7059
+ 0x5bdb529c00000000, 0x32f8e2c000000000, 0xa72c925500000000,
7060
+ 0x5957723100000000, 0xcc8302a400000000, 0x8b11128800000000,
7061
+ 0x1ec5621d00000000, 0xe0be827900000000, 0x756af2ec00000000,
7062
+ 0x1c4942b000000000, 0x899d322500000000, 0x77e6d24100000000,
7063
+ 0xe232a2d400000000, 0xf285e73300000000, 0x675197a600000000,
7064
+ 0x992a77c200000000, 0x0cfe075700000000, 0x65ddb70b00000000,
7065
+ 0xf009c79e00000000, 0x0e7227fa00000000, 0x9ba6576f00000000,
7066
+ 0xdc34474300000000, 0x49e037d600000000, 0xb79bd7b200000000,
7067
+ 0x224fa72700000000, 0x4b6c177b00000000, 0xdeb867ee00000000,
7068
+ 0x20c3878a00000000, 0xb517f71f00000000, 0xaee7a6d200000000,
7069
+ 0x3b33d64700000000, 0xc548362300000000, 0x509c46b600000000,
7070
+ 0x39bff6ea00000000, 0xac6b867f00000000, 0x5210661b00000000,
7071
+ 0xc7c4168e00000000, 0x805606a200000000, 0x1582763700000000,
7072
+ 0xebf9965300000000, 0x7e2de6c600000000, 0x170e569a00000000,
7073
+ 0x82da260f00000000, 0x7ca1c66b00000000, 0xe975b6fe00000000,
7074
+ 0x0b47142a00000000, 0x9e9364bf00000000, 0x60e884db00000000,
7075
+ 0xf53cf44e00000000, 0x9c1f441200000000, 0x09cb348700000000,
7076
+ 0xf7b0d4e300000000, 0x6264a47600000000, 0x25f6b45a00000000,
7077
+ 0xb022c4cf00000000, 0x4e5924ab00000000, 0xdb8d543e00000000,
7078
+ 0xb2aee46200000000, 0x277a94f700000000, 0xd901749300000000,
7079
+ 0x4cd5040600000000, 0x572555cb00000000, 0xc2f1255e00000000,
7080
+ 0x3c8ac53a00000000, 0xa95eb5af00000000, 0xc07d05f300000000,
7081
+ 0x55a9756600000000, 0xabd2950200000000, 0x3e06e59700000000,
7082
+ 0x7994f5bb00000000, 0xec40852e00000000, 0x123b654a00000000,
7083
+ 0x87ef15df00000000, 0xeecca58300000000, 0x7b18d51600000000,
7084
+ 0x8563357200000000, 0x10b745e700000000, 0xe40bcf6700000000,
7085
+ 0x71dfbff200000000, 0x8fa45f9600000000, 0x1a702f0300000000,
7086
+ 0x73539f5f00000000, 0xe687efca00000000, 0x18fc0fae00000000,
7087
+ 0x8d287f3b00000000, 0xcaba6f1700000000, 0x5f6e1f8200000000,
7088
+ 0xa115ffe600000000, 0x34c18f7300000000, 0x5de23f2f00000000,
7089
+ 0xc8364fba00000000, 0x364dafde00000000, 0xa399df4b00000000,
7090
+ 0xb8698e8600000000, 0x2dbdfe1300000000, 0xd3c61e7700000000,
7091
+ 0x46126ee200000000, 0x2f31debe00000000, 0xbae5ae2b00000000,
7092
+ 0x449e4e4f00000000, 0xd14a3eda00000000, 0x96d82ef600000000,
7093
+ 0x030c5e6300000000, 0xfd77be0700000000, 0x68a3ce9200000000,
7094
+ 0x01807ece00000000, 0x94540e5b00000000, 0x6a2fee3f00000000,
7095
+ 0xfffb9eaa00000000, 0x1dc93c7e00000000, 0x881d4ceb00000000,
7096
+ 0x7666ac8f00000000, 0xe3b2dc1a00000000, 0x8a916c4600000000,
7097
+ 0x1f451cd300000000, 0xe13efcb700000000, 0x74ea8c2200000000,
7098
+ 0x33789c0e00000000, 0xa6acec9b00000000, 0x58d70cff00000000,
7099
+ 0xcd037c6a00000000, 0xa420cc3600000000, 0x31f4bca300000000,
7100
+ 0xcf8f5cc700000000, 0x5a5b2c5200000000, 0x41ab7d9f00000000,
7101
+ 0xd47f0d0a00000000, 0x2a04ed6e00000000, 0xbfd09dfb00000000,
7102
+ 0xd6f32da700000000, 0x43275d3200000000, 0xbd5cbd5600000000,
7103
+ 0x2888cdc300000000, 0x6f1addef00000000, 0xfacead7a00000000,
7104
+ 0x04b54d1e00000000, 0x91613d8b00000000, 0xf8428dd700000000,
7105
+ 0x6d96fd4200000000, 0x93ed1d2600000000, 0x06396db300000000,
7106
+ 0x168e285400000000, 0x835a58c100000000, 0x7d21b8a500000000,
7107
+ 0xe8f5c83000000000, 0x81d6786c00000000, 0x140208f900000000,
7108
+ 0xea79e89d00000000, 0x7fad980800000000, 0x383f882400000000,
7109
+ 0xadebf8b100000000, 0x539018d500000000, 0xc644684000000000,
7110
+ 0xaf67d81c00000000, 0x3ab3a88900000000, 0xc4c848ed00000000,
7111
+ 0x511c387800000000, 0x4aec69b500000000, 0xdf38192000000000,
7112
+ 0x2143f94400000000, 0xb49789d100000000, 0xddb4398d00000000,
7113
+ 0x4860491800000000, 0xb61ba97c00000000, 0x23cfd9e900000000,
7114
+ 0x645dc9c500000000, 0xf189b95000000000, 0x0ff2593400000000,
7115
+ 0x9a2629a100000000, 0xf30599fd00000000, 0x66d1e96800000000,
7116
+ 0x98aa090c00000000, 0x0d7e799900000000, 0xef4cdb4d00000000,
7117
+ 0x7a98abd800000000, 0x84e34bbc00000000, 0x11373b2900000000,
7118
+ 0x78148b7500000000, 0xedc0fbe000000000, 0x13bb1b8400000000,
7119
+ 0x866f6b1100000000, 0xc1fd7b3d00000000, 0x54290ba800000000,
7120
+ 0xaa52ebcc00000000, 0x3f869b5900000000, 0x56a52b0500000000,
7121
+ 0xc3715b9000000000, 0x3d0abbf400000000, 0xa8decb6100000000,
7122
+ 0xb32e9aac00000000, 0x26faea3900000000, 0xd8810a5d00000000,
7123
+ 0x4d557ac800000000, 0x2476ca9400000000, 0xb1a2ba0100000000,
7124
+ 0x4fd95a6500000000, 0xda0d2af000000000, 0x9d9f3adc00000000,
7125
+ 0x084b4a4900000000, 0xf630aa2d00000000, 0x63e4dab800000000,
7126
+ 0x0ac76ae400000000, 0x9f131a7100000000, 0x6168fa1500000000,
7127
+ 0xf4bc8a8000000000},
7128
+ {0x0000000000000000, 0x1f17f08000000000, 0x7f2891da00000000,
7129
+ 0x603f615a00000000, 0xbf56536e00000000, 0xa041a3ee00000000,
7130
+ 0xc07ec2b400000000, 0xdf69323400000000, 0x7eada6dc00000000,
7131
+ 0x61ba565c00000000, 0x0185370600000000, 0x1e92c78600000000,
7132
+ 0xc1fbf5b200000000, 0xdeec053200000000, 0xbed3646800000000,
7133
+ 0xa1c494e800000000, 0xbd5c3c6200000000, 0xa24bcce200000000,
7134
+ 0xc274adb800000000, 0xdd635d3800000000, 0x020a6f0c00000000,
7135
+ 0x1d1d9f8c00000000, 0x7d22fed600000000, 0x62350e5600000000,
7136
+ 0xc3f19abe00000000, 0xdce66a3e00000000, 0xbcd90b6400000000,
7137
+ 0xa3cefbe400000000, 0x7ca7c9d000000000, 0x63b0395000000000,
7138
+ 0x038f580a00000000, 0x1c98a88a00000000, 0x7ab978c400000000,
7139
+ 0x65ae884400000000, 0x0591e91e00000000, 0x1a86199e00000000,
7140
+ 0xc5ef2baa00000000, 0xdaf8db2a00000000, 0xbac7ba7000000000,
7141
+ 0xa5d04af000000000, 0x0414de1800000000, 0x1b032e9800000000,
7142
+ 0x7b3c4fc200000000, 0x642bbf4200000000, 0xbb428d7600000000,
7143
+ 0xa4557df600000000, 0xc46a1cac00000000, 0xdb7dec2c00000000,
7144
+ 0xc7e544a600000000, 0xd8f2b42600000000, 0xb8cdd57c00000000,
7145
+ 0xa7da25fc00000000, 0x78b317c800000000, 0x67a4e74800000000,
7146
+ 0x079b861200000000, 0x188c769200000000, 0xb948e27a00000000,
7147
+ 0xa65f12fa00000000, 0xc66073a000000000, 0xd977832000000000,
7148
+ 0x061eb11400000000, 0x1909419400000000, 0x793620ce00000000,
7149
+ 0x6621d04e00000000, 0xb574805300000000, 0xaa6370d300000000,
7150
+ 0xca5c118900000000, 0xd54be10900000000, 0x0a22d33d00000000,
7151
+ 0x153523bd00000000, 0x750a42e700000000, 0x6a1db26700000000,
7152
+ 0xcbd9268f00000000, 0xd4ced60f00000000, 0xb4f1b75500000000,
7153
+ 0xabe647d500000000, 0x748f75e100000000, 0x6b98856100000000,
7154
+ 0x0ba7e43b00000000, 0x14b014bb00000000, 0x0828bc3100000000,
7155
+ 0x173f4cb100000000, 0x77002deb00000000, 0x6817dd6b00000000,
7156
+ 0xb77eef5f00000000, 0xa8691fdf00000000, 0xc8567e8500000000,
7157
+ 0xd7418e0500000000, 0x76851aed00000000, 0x6992ea6d00000000,
7158
+ 0x09ad8b3700000000, 0x16ba7bb700000000, 0xc9d3498300000000,
7159
+ 0xd6c4b90300000000, 0xb6fbd85900000000, 0xa9ec28d900000000,
7160
+ 0xcfcdf89700000000, 0xd0da081700000000, 0xb0e5694d00000000,
7161
+ 0xaff299cd00000000, 0x709babf900000000, 0x6f8c5b7900000000,
7162
+ 0x0fb33a2300000000, 0x10a4caa300000000, 0xb1605e4b00000000,
7163
+ 0xae77aecb00000000, 0xce48cf9100000000, 0xd15f3f1100000000,
7164
+ 0x0e360d2500000000, 0x1121fda500000000, 0x711e9cff00000000,
7165
+ 0x6e096c7f00000000, 0x7291c4f500000000, 0x6d86347500000000,
7166
+ 0x0db9552f00000000, 0x12aea5af00000000, 0xcdc7979b00000000,
7167
+ 0xd2d0671b00000000, 0xb2ef064100000000, 0xadf8f6c100000000,
7168
+ 0x0c3c622900000000, 0x132b92a900000000, 0x7314f3f300000000,
7169
+ 0x6c03037300000000, 0xb36a314700000000, 0xac7dc1c700000000,
7170
+ 0xcc42a09d00000000, 0xd355501d00000000, 0x6ae900a700000000,
7171
+ 0x75fef02700000000, 0x15c1917d00000000, 0x0ad661fd00000000,
7172
+ 0xd5bf53c900000000, 0xcaa8a34900000000, 0xaa97c21300000000,
7173
+ 0xb580329300000000, 0x1444a67b00000000, 0x0b5356fb00000000,
7174
+ 0x6b6c37a100000000, 0x747bc72100000000, 0xab12f51500000000,
7175
+ 0xb405059500000000, 0xd43a64cf00000000, 0xcb2d944f00000000,
7176
+ 0xd7b53cc500000000, 0xc8a2cc4500000000, 0xa89dad1f00000000,
7177
+ 0xb78a5d9f00000000, 0x68e36fab00000000, 0x77f49f2b00000000,
7178
+ 0x17cbfe7100000000, 0x08dc0ef100000000, 0xa9189a1900000000,
7179
+ 0xb60f6a9900000000, 0xd6300bc300000000, 0xc927fb4300000000,
7180
+ 0x164ec97700000000, 0x095939f700000000, 0x696658ad00000000,
7181
+ 0x7671a82d00000000, 0x1050786300000000, 0x0f4788e300000000,
7182
+ 0x6f78e9b900000000, 0x706f193900000000, 0xaf062b0d00000000,
7183
+ 0xb011db8d00000000, 0xd02ebad700000000, 0xcf394a5700000000,
7184
+ 0x6efddebf00000000, 0x71ea2e3f00000000, 0x11d54f6500000000,
7185
+ 0x0ec2bfe500000000, 0xd1ab8dd100000000, 0xcebc7d5100000000,
7186
+ 0xae831c0b00000000, 0xb194ec8b00000000, 0xad0c440100000000,
7187
+ 0xb21bb48100000000, 0xd224d5db00000000, 0xcd33255b00000000,
7188
+ 0x125a176f00000000, 0x0d4de7ef00000000, 0x6d7286b500000000,
7189
+ 0x7265763500000000, 0xd3a1e2dd00000000, 0xccb6125d00000000,
7190
+ 0xac89730700000000, 0xb39e838700000000, 0x6cf7b1b300000000,
7191
+ 0x73e0413300000000, 0x13df206900000000, 0x0cc8d0e900000000,
7192
+ 0xdf9d80f400000000, 0xc08a707400000000, 0xa0b5112e00000000,
7193
+ 0xbfa2e1ae00000000, 0x60cbd39a00000000, 0x7fdc231a00000000,
7194
+ 0x1fe3424000000000, 0x00f4b2c000000000, 0xa130262800000000,
7195
+ 0xbe27d6a800000000, 0xde18b7f200000000, 0xc10f477200000000,
7196
+ 0x1e66754600000000, 0x017185c600000000, 0x614ee49c00000000,
7197
+ 0x7e59141c00000000, 0x62c1bc9600000000, 0x7dd64c1600000000,
7198
+ 0x1de92d4c00000000, 0x02feddcc00000000, 0xdd97eff800000000,
7199
+ 0xc2801f7800000000, 0xa2bf7e2200000000, 0xbda88ea200000000,
7200
+ 0x1c6c1a4a00000000, 0x037beaca00000000, 0x63448b9000000000,
7201
+ 0x7c537b1000000000, 0xa33a492400000000, 0xbc2db9a400000000,
7202
+ 0xdc12d8fe00000000, 0xc305287e00000000, 0xa524f83000000000,
7203
+ 0xba3308b000000000, 0xda0c69ea00000000, 0xc51b996a00000000,
7204
+ 0x1a72ab5e00000000, 0x05655bde00000000, 0x655a3a8400000000,
7205
+ 0x7a4dca0400000000, 0xdb895eec00000000, 0xc49eae6c00000000,
7206
+ 0xa4a1cf3600000000, 0xbbb63fb600000000, 0x64df0d8200000000,
7207
+ 0x7bc8fd0200000000, 0x1bf79c5800000000, 0x04e06cd800000000,
7208
+ 0x1878c45200000000, 0x076f34d200000000, 0x6750558800000000,
7209
+ 0x7847a50800000000, 0xa72e973c00000000, 0xb83967bc00000000,
7210
+ 0xd80606e600000000, 0xc711f66600000000, 0x66d5628e00000000,
7211
+ 0x79c2920e00000000, 0x19fdf35400000000, 0x06ea03d400000000,
7212
+ 0xd98331e000000000, 0xc694c16000000000, 0xa6aba03a00000000,
7213
+ 0xb9bc50ba00000000},
7214
+ {0x0000000000000000, 0xe2fd888d00000000, 0x85fd60c000000000,
7215
+ 0x6700e84d00000000, 0x4bfdb05b00000000, 0xa90038d600000000,
7216
+ 0xce00d09b00000000, 0x2cfd581600000000, 0x96fa61b700000000,
7217
+ 0x7407e93a00000000, 0x1307017700000000, 0xf1fa89fa00000000,
7218
+ 0xdd07d1ec00000000, 0x3ffa596100000000, 0x58fab12c00000000,
7219
+ 0xba0739a100000000, 0x6df3b2b500000000, 0x8f0e3a3800000000,
7220
+ 0xe80ed27500000000, 0x0af35af800000000, 0x260e02ee00000000,
7221
+ 0xc4f38a6300000000, 0xa3f3622e00000000, 0x410eeaa300000000,
7222
+ 0xfb09d30200000000, 0x19f45b8f00000000, 0x7ef4b3c200000000,
7223
+ 0x9c093b4f00000000, 0xb0f4635900000000, 0x5209ebd400000000,
7224
+ 0x3509039900000000, 0xd7f48b1400000000, 0x9be014b000000000,
7225
+ 0x791d9c3d00000000, 0x1e1d747000000000, 0xfce0fcfd00000000,
7226
+ 0xd01da4eb00000000, 0x32e02c6600000000, 0x55e0c42b00000000,
7227
+ 0xb71d4ca600000000, 0x0d1a750700000000, 0xefe7fd8a00000000,
7228
+ 0x88e715c700000000, 0x6a1a9d4a00000000, 0x46e7c55c00000000,
7229
+ 0xa41a4dd100000000, 0xc31aa59c00000000, 0x21e72d1100000000,
7230
+ 0xf613a60500000000, 0x14ee2e8800000000, 0x73eec6c500000000,
7231
+ 0x91134e4800000000, 0xbdee165e00000000, 0x5f139ed300000000,
7232
+ 0x3813769e00000000, 0xdaeefe1300000000, 0x60e9c7b200000000,
7233
+ 0x82144f3f00000000, 0xe514a77200000000, 0x07e92fff00000000,
7234
+ 0x2b1477e900000000, 0xc9e9ff6400000000, 0xaee9172900000000,
7235
+ 0x4c149fa400000000, 0x77c758bb00000000, 0x953ad03600000000,
7236
+ 0xf23a387b00000000, 0x10c7b0f600000000, 0x3c3ae8e000000000,
7237
+ 0xdec7606d00000000, 0xb9c7882000000000, 0x5b3a00ad00000000,
7238
+ 0xe13d390c00000000, 0x03c0b18100000000, 0x64c059cc00000000,
7239
+ 0x863dd14100000000, 0xaac0895700000000, 0x483d01da00000000,
7240
+ 0x2f3de99700000000, 0xcdc0611a00000000, 0x1a34ea0e00000000,
7241
+ 0xf8c9628300000000, 0x9fc98ace00000000, 0x7d34024300000000,
7242
+ 0x51c95a5500000000, 0xb334d2d800000000, 0xd4343a9500000000,
7243
+ 0x36c9b21800000000, 0x8cce8bb900000000, 0x6e33033400000000,
7244
+ 0x0933eb7900000000, 0xebce63f400000000, 0xc7333be200000000,
7245
+ 0x25ceb36f00000000, 0x42ce5b2200000000, 0xa033d3af00000000,
7246
+ 0xec274c0b00000000, 0x0edac48600000000, 0x69da2ccb00000000,
7247
+ 0x8b27a44600000000, 0xa7dafc5000000000, 0x452774dd00000000,
7248
+ 0x22279c9000000000, 0xc0da141d00000000, 0x7add2dbc00000000,
7249
+ 0x9820a53100000000, 0xff204d7c00000000, 0x1dddc5f100000000,
7250
+ 0x31209de700000000, 0xd3dd156a00000000, 0xb4ddfd2700000000,
7251
+ 0x562075aa00000000, 0x81d4febe00000000, 0x6329763300000000,
7252
+ 0x04299e7e00000000, 0xe6d416f300000000, 0xca294ee500000000,
7253
+ 0x28d4c66800000000, 0x4fd42e2500000000, 0xad29a6a800000000,
7254
+ 0x172e9f0900000000, 0xf5d3178400000000, 0x92d3ffc900000000,
7255
+ 0x702e774400000000, 0x5cd32f5200000000, 0xbe2ea7df00000000,
7256
+ 0xd92e4f9200000000, 0x3bd3c71f00000000, 0xaf88c0ad00000000,
7257
+ 0x4d75482000000000, 0x2a75a06d00000000, 0xc88828e000000000,
7258
+ 0xe47570f600000000, 0x0688f87b00000000, 0x6188103600000000,
7259
+ 0x837598bb00000000, 0x3972a11a00000000, 0xdb8f299700000000,
7260
+ 0xbc8fc1da00000000, 0x5e72495700000000, 0x728f114100000000,
7261
+ 0x907299cc00000000, 0xf772718100000000, 0x158ff90c00000000,
7262
+ 0xc27b721800000000, 0x2086fa9500000000, 0x478612d800000000,
7263
+ 0xa57b9a5500000000, 0x8986c24300000000, 0x6b7b4ace00000000,
7264
+ 0x0c7ba28300000000, 0xee862a0e00000000, 0x548113af00000000,
7265
+ 0xb67c9b2200000000, 0xd17c736f00000000, 0x3381fbe200000000,
7266
+ 0x1f7ca3f400000000, 0xfd812b7900000000, 0x9a81c33400000000,
7267
+ 0x787c4bb900000000, 0x3468d41d00000000, 0xd6955c9000000000,
7268
+ 0xb195b4dd00000000, 0x53683c5000000000, 0x7f95644600000000,
7269
+ 0x9d68eccb00000000, 0xfa68048600000000, 0x18958c0b00000000,
7270
+ 0xa292b5aa00000000, 0x406f3d2700000000, 0x276fd56a00000000,
7271
+ 0xc5925de700000000, 0xe96f05f100000000, 0x0b928d7c00000000,
7272
+ 0x6c92653100000000, 0x8e6fedbc00000000, 0x599b66a800000000,
7273
+ 0xbb66ee2500000000, 0xdc66066800000000, 0x3e9b8ee500000000,
7274
+ 0x1266d6f300000000, 0xf09b5e7e00000000, 0x979bb63300000000,
7275
+ 0x75663ebe00000000, 0xcf61071f00000000, 0x2d9c8f9200000000,
7276
+ 0x4a9c67df00000000, 0xa861ef5200000000, 0x849cb74400000000,
7277
+ 0x66613fc900000000, 0x0161d78400000000, 0xe39c5f0900000000,
7278
+ 0xd84f981600000000, 0x3ab2109b00000000, 0x5db2f8d600000000,
7279
+ 0xbf4f705b00000000, 0x93b2284d00000000, 0x714fa0c000000000,
7280
+ 0x164f488d00000000, 0xf4b2c00000000000, 0x4eb5f9a100000000,
7281
+ 0xac48712c00000000, 0xcb48996100000000, 0x29b511ec00000000,
7282
+ 0x054849fa00000000, 0xe7b5c17700000000, 0x80b5293a00000000,
7283
+ 0x6248a1b700000000, 0xb5bc2aa300000000, 0x5741a22e00000000,
7284
+ 0x30414a6300000000, 0xd2bcc2ee00000000, 0xfe419af800000000,
7285
+ 0x1cbc127500000000, 0x7bbcfa3800000000, 0x994172b500000000,
7286
+ 0x23464b1400000000, 0xc1bbc39900000000, 0xa6bb2bd400000000,
7287
+ 0x4446a35900000000, 0x68bbfb4f00000000, 0x8a4673c200000000,
7288
+ 0xed469b8f00000000, 0x0fbb130200000000, 0x43af8ca600000000,
7289
+ 0xa152042b00000000, 0xc652ec6600000000, 0x24af64eb00000000,
7290
+ 0x08523cfd00000000, 0xeaafb47000000000, 0x8daf5c3d00000000,
7291
+ 0x6f52d4b000000000, 0xd555ed1100000000, 0x37a8659c00000000,
7292
+ 0x50a88dd100000000, 0xb255055c00000000, 0x9ea85d4a00000000,
7293
+ 0x7c55d5c700000000, 0x1b553d8a00000000, 0xf9a8b50700000000,
7294
+ 0x2e5c3e1300000000, 0xcca1b69e00000000, 0xaba15ed300000000,
7295
+ 0x495cd65e00000000, 0x65a18e4800000000, 0x875c06c500000000,
7296
+ 0xe05cee8800000000, 0x02a1660500000000, 0xb8a65fa400000000,
7297
+ 0x5a5bd72900000000, 0x3d5b3f6400000000, 0xdfa6b7e900000000,
7298
+ 0xf35befff00000000, 0x11a6677200000000, 0x76a68f3f00000000,
7299
+ 0x945b07b200000000},
7300
+ {0x0000000000000000, 0xa90b894e00000000, 0x5217129d00000000,
7301
+ 0xfb1c9bd300000000, 0xe52855e100000000, 0x4c23dcaf00000000,
7302
+ 0xb73f477c00000000, 0x1e34ce3200000000, 0x8b57db1900000000,
7303
+ 0x225c525700000000, 0xd940c98400000000, 0x704b40ca00000000,
7304
+ 0x6e7f8ef800000000, 0xc77407b600000000, 0x3c689c6500000000,
7305
+ 0x9563152b00000000, 0x16afb63300000000, 0xbfa43f7d00000000,
7306
+ 0x44b8a4ae00000000, 0xedb32de000000000, 0xf387e3d200000000,
7307
+ 0x5a8c6a9c00000000, 0xa190f14f00000000, 0x089b780100000000,
7308
+ 0x9df86d2a00000000, 0x34f3e46400000000, 0xcfef7fb700000000,
7309
+ 0x66e4f6f900000000, 0x78d038cb00000000, 0xd1dbb18500000000,
7310
+ 0x2ac72a5600000000, 0x83cca31800000000, 0x2c5e6d6700000000,
7311
+ 0x8555e42900000000, 0x7e497ffa00000000, 0xd742f6b400000000,
7312
+ 0xc976388600000000, 0x607db1c800000000, 0x9b612a1b00000000,
7313
+ 0x326aa35500000000, 0xa709b67e00000000, 0x0e023f3000000000,
7314
+ 0xf51ea4e300000000, 0x5c152dad00000000, 0x4221e39f00000000,
7315
+ 0xeb2a6ad100000000, 0x1036f10200000000, 0xb93d784c00000000,
7316
+ 0x3af1db5400000000, 0x93fa521a00000000, 0x68e6c9c900000000,
7317
+ 0xc1ed408700000000, 0xdfd98eb500000000, 0x76d207fb00000000,
7318
+ 0x8dce9c2800000000, 0x24c5156600000000, 0xb1a6004d00000000,
7319
+ 0x18ad890300000000, 0xe3b112d000000000, 0x4aba9b9e00000000,
7320
+ 0x548e55ac00000000, 0xfd85dce200000000, 0x0699473100000000,
7321
+ 0xaf92ce7f00000000, 0x58bcdace00000000, 0xf1b7538000000000,
7322
+ 0x0aabc85300000000, 0xa3a0411d00000000, 0xbd948f2f00000000,
7323
+ 0x149f066100000000, 0xef839db200000000, 0x468814fc00000000,
7324
+ 0xd3eb01d700000000, 0x7ae0889900000000, 0x81fc134a00000000,
7325
+ 0x28f79a0400000000, 0x36c3543600000000, 0x9fc8dd7800000000,
7326
+ 0x64d446ab00000000, 0xcddfcfe500000000, 0x4e136cfd00000000,
7327
+ 0xe718e5b300000000, 0x1c047e6000000000, 0xb50ff72e00000000,
7328
+ 0xab3b391c00000000, 0x0230b05200000000, 0xf92c2b8100000000,
7329
+ 0x5027a2cf00000000, 0xc544b7e400000000, 0x6c4f3eaa00000000,
7330
+ 0x9753a57900000000, 0x3e582c3700000000, 0x206ce20500000000,
7331
+ 0x89676b4b00000000, 0x727bf09800000000, 0xdb7079d600000000,
7332
+ 0x74e2b7a900000000, 0xdde93ee700000000, 0x26f5a53400000000,
7333
+ 0x8ffe2c7a00000000, 0x91cae24800000000, 0x38c16b0600000000,
7334
+ 0xc3ddf0d500000000, 0x6ad6799b00000000, 0xffb56cb000000000,
7335
+ 0x56bee5fe00000000, 0xada27e2d00000000, 0x04a9f76300000000,
7336
+ 0x1a9d395100000000, 0xb396b01f00000000, 0x488a2bcc00000000,
7337
+ 0xe181a28200000000, 0x624d019a00000000, 0xcb4688d400000000,
7338
+ 0x305a130700000000, 0x99519a4900000000, 0x8765547b00000000,
7339
+ 0x2e6edd3500000000, 0xd57246e600000000, 0x7c79cfa800000000,
7340
+ 0xe91ada8300000000, 0x401153cd00000000, 0xbb0dc81e00000000,
7341
+ 0x1206415000000000, 0x0c328f6200000000, 0xa539062c00000000,
7342
+ 0x5e259dff00000000, 0xf72e14b100000000, 0xf17ec44600000000,
7343
+ 0x58754d0800000000, 0xa369d6db00000000, 0x0a625f9500000000,
7344
+ 0x145691a700000000, 0xbd5d18e900000000, 0x4641833a00000000,
7345
+ 0xef4a0a7400000000, 0x7a291f5f00000000, 0xd322961100000000,
7346
+ 0x283e0dc200000000, 0x8135848c00000000, 0x9f014abe00000000,
7347
+ 0x360ac3f000000000, 0xcd16582300000000, 0x641dd16d00000000,
7348
+ 0xe7d1727500000000, 0x4edafb3b00000000, 0xb5c660e800000000,
7349
+ 0x1ccde9a600000000, 0x02f9279400000000, 0xabf2aeda00000000,
7350
+ 0x50ee350900000000, 0xf9e5bc4700000000, 0x6c86a96c00000000,
7351
+ 0xc58d202200000000, 0x3e91bbf100000000, 0x979a32bf00000000,
7352
+ 0x89aefc8d00000000, 0x20a575c300000000, 0xdbb9ee1000000000,
7353
+ 0x72b2675e00000000, 0xdd20a92100000000, 0x742b206f00000000,
7354
+ 0x8f37bbbc00000000, 0x263c32f200000000, 0x3808fcc000000000,
7355
+ 0x9103758e00000000, 0x6a1fee5d00000000, 0xc314671300000000,
7356
+ 0x5677723800000000, 0xff7cfb7600000000, 0x046060a500000000,
7357
+ 0xad6be9eb00000000, 0xb35f27d900000000, 0x1a54ae9700000000,
7358
+ 0xe148354400000000, 0x4843bc0a00000000, 0xcb8f1f1200000000,
7359
+ 0x6284965c00000000, 0x99980d8f00000000, 0x309384c100000000,
7360
+ 0x2ea74af300000000, 0x87acc3bd00000000, 0x7cb0586e00000000,
7361
+ 0xd5bbd12000000000, 0x40d8c40b00000000, 0xe9d34d4500000000,
7362
+ 0x12cfd69600000000, 0xbbc45fd800000000, 0xa5f091ea00000000,
7363
+ 0x0cfb18a400000000, 0xf7e7837700000000, 0x5eec0a3900000000,
7364
+ 0xa9c21e8800000000, 0x00c997c600000000, 0xfbd50c1500000000,
7365
+ 0x52de855b00000000, 0x4cea4b6900000000, 0xe5e1c22700000000,
7366
+ 0x1efd59f400000000, 0xb7f6d0ba00000000, 0x2295c59100000000,
7367
+ 0x8b9e4cdf00000000, 0x7082d70c00000000, 0xd9895e4200000000,
7368
+ 0xc7bd907000000000, 0x6eb6193e00000000, 0x95aa82ed00000000,
7369
+ 0x3ca10ba300000000, 0xbf6da8bb00000000, 0x166621f500000000,
7370
+ 0xed7aba2600000000, 0x4471336800000000, 0x5a45fd5a00000000,
7371
+ 0xf34e741400000000, 0x0852efc700000000, 0xa159668900000000,
7372
+ 0x343a73a200000000, 0x9d31faec00000000, 0x662d613f00000000,
7373
+ 0xcf26e87100000000, 0xd112264300000000, 0x7819af0d00000000,
7374
+ 0x830534de00000000, 0x2a0ebd9000000000, 0x859c73ef00000000,
7375
+ 0x2c97faa100000000, 0xd78b617200000000, 0x7e80e83c00000000,
7376
+ 0x60b4260e00000000, 0xc9bfaf4000000000, 0x32a3349300000000,
7377
+ 0x9ba8bddd00000000, 0x0ecba8f600000000, 0xa7c021b800000000,
7378
+ 0x5cdcba6b00000000, 0xf5d7332500000000, 0xebe3fd1700000000,
7379
+ 0x42e8745900000000, 0xb9f4ef8a00000000, 0x10ff66c400000000,
7380
+ 0x9333c5dc00000000, 0x3a384c9200000000, 0xc124d74100000000,
7381
+ 0x682f5e0f00000000, 0x761b903d00000000, 0xdf10197300000000,
7382
+ 0x240c82a000000000, 0x8d070bee00000000, 0x18641ec500000000,
7383
+ 0xb16f978b00000000, 0x4a730c5800000000, 0xe378851600000000,
7384
+ 0xfd4c4b2400000000, 0x5447c26a00000000, 0xaf5b59b900000000,
7385
+ 0x0650d0f700000000},
7386
+ {0x0000000000000000, 0x479244af00000000, 0xcf22f88500000000,
7387
+ 0x88b0bc2a00000000, 0xdf4381d000000000, 0x98d1c57f00000000,
7388
+ 0x1061795500000000, 0x57f33dfa00000000, 0xff81737a00000000,
7389
+ 0xb81337d500000000, 0x30a38bff00000000, 0x7731cf5000000000,
7390
+ 0x20c2f2aa00000000, 0x6750b60500000000, 0xefe00a2f00000000,
7391
+ 0xa8724e8000000000, 0xfe03e7f400000000, 0xb991a35b00000000,
7392
+ 0x31211f7100000000, 0x76b35bde00000000, 0x2140662400000000,
7393
+ 0x66d2228b00000000, 0xee629ea100000000, 0xa9f0da0e00000000,
7394
+ 0x0182948e00000000, 0x4610d02100000000, 0xcea06c0b00000000,
7395
+ 0x893228a400000000, 0xdec1155e00000000, 0x995351f100000000,
7396
+ 0x11e3eddb00000000, 0x5671a97400000000, 0xbd01bf3200000000,
7397
+ 0xfa93fb9d00000000, 0x722347b700000000, 0x35b1031800000000,
7398
+ 0x62423ee200000000, 0x25d07a4d00000000, 0xad60c66700000000,
7399
+ 0xeaf282c800000000, 0x4280cc4800000000, 0x051288e700000000,
7400
+ 0x8da234cd00000000, 0xca30706200000000, 0x9dc34d9800000000,
7401
+ 0xda51093700000000, 0x52e1b51d00000000, 0x1573f1b200000000,
7402
+ 0x430258c600000000, 0x04901c6900000000, 0x8c20a04300000000,
7403
+ 0xcbb2e4ec00000000, 0x9c41d91600000000, 0xdbd39db900000000,
7404
+ 0x5363219300000000, 0x14f1653c00000000, 0xbc832bbc00000000,
7405
+ 0xfb116f1300000000, 0x73a1d33900000000, 0x3433979600000000,
7406
+ 0x63c0aa6c00000000, 0x2452eec300000000, 0xace252e900000000,
7407
+ 0xeb70164600000000, 0x7a037e6500000000, 0x3d913aca00000000,
7408
+ 0xb52186e000000000, 0xf2b3c24f00000000, 0xa540ffb500000000,
7409
+ 0xe2d2bb1a00000000, 0x6a62073000000000, 0x2df0439f00000000,
7410
+ 0x85820d1f00000000, 0xc21049b000000000, 0x4aa0f59a00000000,
7411
+ 0x0d32b13500000000, 0x5ac18ccf00000000, 0x1d53c86000000000,
7412
+ 0x95e3744a00000000, 0xd27130e500000000, 0x8400999100000000,
7413
+ 0xc392dd3e00000000, 0x4b22611400000000, 0x0cb025bb00000000,
7414
+ 0x5b43184100000000, 0x1cd15cee00000000, 0x9461e0c400000000,
7415
+ 0xd3f3a46b00000000, 0x7b81eaeb00000000, 0x3c13ae4400000000,
7416
+ 0xb4a3126e00000000, 0xf33156c100000000, 0xa4c26b3b00000000,
7417
+ 0xe3502f9400000000, 0x6be093be00000000, 0x2c72d71100000000,
7418
+ 0xc702c15700000000, 0x809085f800000000, 0x082039d200000000,
7419
+ 0x4fb27d7d00000000, 0x1841408700000000, 0x5fd3042800000000,
7420
+ 0xd763b80200000000, 0x90f1fcad00000000, 0x3883b22d00000000,
7421
+ 0x7f11f68200000000, 0xf7a14aa800000000, 0xb0330e0700000000,
7422
+ 0xe7c033fd00000000, 0xa052775200000000, 0x28e2cb7800000000,
7423
+ 0x6f708fd700000000, 0x390126a300000000, 0x7e93620c00000000,
7424
+ 0xf623de2600000000, 0xb1b19a8900000000, 0xe642a77300000000,
7425
+ 0xa1d0e3dc00000000, 0x29605ff600000000, 0x6ef21b5900000000,
7426
+ 0xc68055d900000000, 0x8112117600000000, 0x09a2ad5c00000000,
7427
+ 0x4e30e9f300000000, 0x19c3d40900000000, 0x5e5190a600000000,
7428
+ 0xd6e12c8c00000000, 0x9173682300000000, 0xf406fcca00000000,
7429
+ 0xb394b86500000000, 0x3b24044f00000000, 0x7cb640e000000000,
7430
+ 0x2b457d1a00000000, 0x6cd739b500000000, 0xe467859f00000000,
7431
+ 0xa3f5c13000000000, 0x0b878fb000000000, 0x4c15cb1f00000000,
7432
+ 0xc4a5773500000000, 0x8337339a00000000, 0xd4c40e6000000000,
7433
+ 0x93564acf00000000, 0x1be6f6e500000000, 0x5c74b24a00000000,
7434
+ 0x0a051b3e00000000, 0x4d975f9100000000, 0xc527e3bb00000000,
7435
+ 0x82b5a71400000000, 0xd5469aee00000000, 0x92d4de4100000000,
7436
+ 0x1a64626b00000000, 0x5df626c400000000, 0xf584684400000000,
7437
+ 0xb2162ceb00000000, 0x3aa690c100000000, 0x7d34d46e00000000,
7438
+ 0x2ac7e99400000000, 0x6d55ad3b00000000, 0xe5e5111100000000,
7439
+ 0xa27755be00000000, 0x490743f800000000, 0x0e95075700000000,
7440
+ 0x8625bb7d00000000, 0xc1b7ffd200000000, 0x9644c22800000000,
7441
+ 0xd1d6868700000000, 0x59663aad00000000, 0x1ef47e0200000000,
7442
+ 0xb686308200000000, 0xf114742d00000000, 0x79a4c80700000000,
7443
+ 0x3e368ca800000000, 0x69c5b15200000000, 0x2e57f5fd00000000,
7444
+ 0xa6e749d700000000, 0xe1750d7800000000, 0xb704a40c00000000,
7445
+ 0xf096e0a300000000, 0x78265c8900000000, 0x3fb4182600000000,
7446
+ 0x684725dc00000000, 0x2fd5617300000000, 0xa765dd5900000000,
7447
+ 0xe0f799f600000000, 0x4885d77600000000, 0x0f1793d900000000,
7448
+ 0x87a72ff300000000, 0xc0356b5c00000000, 0x97c656a600000000,
7449
+ 0xd054120900000000, 0x58e4ae2300000000, 0x1f76ea8c00000000,
7450
+ 0x8e0582af00000000, 0xc997c60000000000, 0x41277a2a00000000,
7451
+ 0x06b53e8500000000, 0x5146037f00000000, 0x16d447d000000000,
7452
+ 0x9e64fbfa00000000, 0xd9f6bf5500000000, 0x7184f1d500000000,
7453
+ 0x3616b57a00000000, 0xbea6095000000000, 0xf9344dff00000000,
7454
+ 0xaec7700500000000, 0xe95534aa00000000, 0x61e5888000000000,
7455
+ 0x2677cc2f00000000, 0x7006655b00000000, 0x379421f400000000,
7456
+ 0xbf249dde00000000, 0xf8b6d97100000000, 0xaf45e48b00000000,
7457
+ 0xe8d7a02400000000, 0x60671c0e00000000, 0x27f558a100000000,
7458
+ 0x8f87162100000000, 0xc815528e00000000, 0x40a5eea400000000,
7459
+ 0x0737aa0b00000000, 0x50c497f100000000, 0x1756d35e00000000,
7460
+ 0x9fe66f7400000000, 0xd8742bdb00000000, 0x33043d9d00000000,
7461
+ 0x7496793200000000, 0xfc26c51800000000, 0xbbb481b700000000,
7462
+ 0xec47bc4d00000000, 0xabd5f8e200000000, 0x236544c800000000,
7463
+ 0x64f7006700000000, 0xcc854ee700000000, 0x8b170a4800000000,
7464
+ 0x03a7b66200000000, 0x4435f2cd00000000, 0x13c6cf3700000000,
7465
+ 0x54548b9800000000, 0xdce437b200000000, 0x9b76731d00000000,
7466
+ 0xcd07da6900000000, 0x8a959ec600000000, 0x022522ec00000000,
7467
+ 0x45b7664300000000, 0x12445bb900000000, 0x55d61f1600000000,
7468
+ 0xdd66a33c00000000, 0x9af4e79300000000, 0x3286a91300000000,
7469
+ 0x7514edbc00000000, 0xfda4519600000000, 0xba36153900000000,
7470
+ 0xedc528c300000000, 0xaa576c6c00000000, 0x22e7d04600000000,
7471
+ 0x657594e900000000}};
7472
+
7473
+#else /* W == 4 */
7474
+
7475
+local const z_crc_t FAR crc_braid_table[][256] = {
7476
+ {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59,
7477
+ 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4,
7478
+ 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67,
7479
+ 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef,
7480
+ 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97,
7481
+ 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88,
7482
+ 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687,
7483
+ 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698,
7484
+ 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0,
7485
+ 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068,
7486
+ 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb,
7487
+ 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056,
7488
+ 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016,
7489
+ 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009,
7490
+ 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028,
7491
+ 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037,
7492
+ 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a,
7493
+ 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7,
7494
+ 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054,
7495
+ 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7,
7496
+ 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af,
7497
+ 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0,
7498
+ 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4,
7499
+ 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab,
7500
+ 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3,
7501
+ 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a,
7502
+ 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9,
7503
+ 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54,
7504
+ 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09,
7505
+ 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16,
7506
+ 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37,
7507
+ 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28,
7508
+ 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e,
7509
+ 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3,
7510
+ 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40,
7511
+ 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8,
7512
+ 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0,
7513
+ 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf,
7514
+ 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6,
7515
+ 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9,
7516
+ 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1,
7517
+ 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059,
7518
+ 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca,
7519
+ 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067,
7520
+ 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031,
7521
+ 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e,
7522
+ 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f,
7523
+ 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010,
7524
+ 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d,
7525
+ 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0,
7526
+ 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073,
7527
+ 0xd8ac6b35},
7528
+ {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2,
7529
+ 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd,
7530
+ 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696,
7531
+ 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3,
7532
+ 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f,
7533
+ 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35,
7534
+ 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5,
7535
+ 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f,
7536
+ 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673,
7537
+ 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46,
7538
+ 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d,
7539
+ 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632,
7540
+ 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28,
7541
+ 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192,
7542
+ 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c,
7543
+ 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6,
7544
+ 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0,
7545
+ 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff,
7546
+ 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4,
7547
+ 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95,
7548
+ 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9,
7549
+ 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03,
7550
+ 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7,
7551
+ 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d,
7552
+ 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151,
7553
+ 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808,
7554
+ 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343,
7555
+ 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c,
7556
+ 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a,
7557
+ 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0,
7558
+ 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e,
7559
+ 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594,
7560
+ 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6,
7561
+ 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399,
7562
+ 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2,
7563
+ 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7,
7564
+ 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb,
7565
+ 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571,
7566
+ 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289,
7567
+ 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33,
7568
+ 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f,
7569
+ 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a,
7570
+ 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461,
7571
+ 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e,
7572
+ 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c,
7573
+ 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6,
7574
+ 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918,
7575
+ 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2,
7576
+ 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484,
7577
+ 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb,
7578
+ 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0,
7579
+ 0xa140efa8},
7580
+ {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706,
7581
+ 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed,
7582
+ 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289,
7583
+ 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a,
7584
+ 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214,
7585
+ 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3,
7586
+ 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3,
7587
+ 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254,
7588
+ 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a,
7589
+ 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9,
7590
+ 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad,
7591
+ 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746,
7592
+ 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060,
7593
+ 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187,
7594
+ 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef,
7595
+ 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408,
7596
+ 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e,
7597
+ 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495,
7598
+ 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1,
7599
+ 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532,
7600
+ 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c,
7601
+ 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb,
7602
+ 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb,
7603
+ 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c,
7604
+ 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42,
7605
+ 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060,
7606
+ 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04,
7607
+ 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef,
7608
+ 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99,
7609
+ 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e,
7610
+ 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16,
7611
+ 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1,
7612
+ 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7,
7613
+ 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c,
7614
+ 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38,
7615
+ 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb,
7616
+ 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5,
7617
+ 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42,
7618
+ 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62,
7619
+ 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85,
7620
+ 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb,
7621
+ 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18,
7622
+ 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c,
7623
+ 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997,
7624
+ 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1,
7625
+ 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36,
7626
+ 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e,
7627
+ 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9,
7628
+ 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf,
7629
+ 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24,
7630
+ 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040,
7631
+ 0x917cd6a1},
7632
+ {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf,
7633
+ 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd,
7634
+ 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896,
7635
+ 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9,
7636
+ 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3,
7637
+ 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f,
7638
+ 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d,
7639
+ 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1,
7640
+ 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab,
7641
+ 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4,
7642
+ 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f,
7643
+ 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d,
7644
+ 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4,
7645
+ 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978,
7646
+ 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad,
7647
+ 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621,
7648
+ 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46,
7649
+ 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854,
7650
+ 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f,
7651
+ 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a,
7652
+ 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890,
7653
+ 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c,
7654
+ 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4,
7655
+ 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238,
7656
+ 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622,
7657
+ 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab,
7658
+ 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0,
7659
+ 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2,
7660
+ 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295,
7661
+ 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19,
7662
+ 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc,
7663
+ 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140,
7664
+ 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd,
7665
+ 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf,
7666
+ 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184,
7667
+ 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb,
7668
+ 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1,
7669
+ 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d,
7670
+ 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb,
7671
+ 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257,
7672
+ 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d,
7673
+ 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22,
7674
+ 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069,
7675
+ 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b,
7676
+ 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6,
7677
+ 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a,
7678
+ 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf,
7679
+ 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33,
7680
+ 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254,
7681
+ 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146,
7682
+ 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d,
7683
+ 0x18ba364e}};
7684
+
7685
+local const z_word_t FAR crc_braid_big_table[][256] = {
7686
+ {0x00000000, 0x43cba687, 0xc7903cd4, 0x845b9a53, 0xcf270873,
7687
+ 0x8cecaef4, 0x08b734a7, 0x4b7c9220, 0x9e4f10e6, 0xdd84b661,
7688
+ 0x59df2c32, 0x1a148ab5, 0x51681895, 0x12a3be12, 0x96f82441,
7689
+ 0xd53382c6, 0x7d995117, 0x3e52f790, 0xba096dc3, 0xf9c2cb44,
7690
+ 0xb2be5964, 0xf175ffe3, 0x752e65b0, 0x36e5c337, 0xe3d641f1,
7691
+ 0xa01de776, 0x24467d25, 0x678ddba2, 0x2cf14982, 0x6f3aef05,
7692
+ 0xeb617556, 0xa8aad3d1, 0xfa32a32e, 0xb9f905a9, 0x3da29ffa,
7693
+ 0x7e69397d, 0x3515ab5d, 0x76de0dda, 0xf2859789, 0xb14e310e,
7694
+ 0x647db3c8, 0x27b6154f, 0xa3ed8f1c, 0xe026299b, 0xab5abbbb,
7695
+ 0xe8911d3c, 0x6cca876f, 0x2f0121e8, 0x87abf239, 0xc46054be,
7696
+ 0x403bceed, 0x03f0686a, 0x488cfa4a, 0x0b475ccd, 0x8f1cc69e,
7697
+ 0xccd76019, 0x19e4e2df, 0x5a2f4458, 0xde74de0b, 0x9dbf788c,
7698
+ 0xd6c3eaac, 0x95084c2b, 0x1153d678, 0x529870ff, 0xf465465d,
7699
+ 0xb7aee0da, 0x33f57a89, 0x703edc0e, 0x3b424e2e, 0x7889e8a9,
7700
+ 0xfcd272fa, 0xbf19d47d, 0x6a2a56bb, 0x29e1f03c, 0xadba6a6f,
7701
+ 0xee71cce8, 0xa50d5ec8, 0xe6c6f84f, 0x629d621c, 0x2156c49b,
7702
+ 0x89fc174a, 0xca37b1cd, 0x4e6c2b9e, 0x0da78d19, 0x46db1f39,
7703
+ 0x0510b9be, 0x814b23ed, 0xc280856a, 0x17b307ac, 0x5478a12b,
7704
+ 0xd0233b78, 0x93e89dff, 0xd8940fdf, 0x9b5fa958, 0x1f04330b,
7705
+ 0x5ccf958c, 0x0e57e573, 0x4d9c43f4, 0xc9c7d9a7, 0x8a0c7f20,
7706
+ 0xc170ed00, 0x82bb4b87, 0x06e0d1d4, 0x452b7753, 0x9018f595,
7707
+ 0xd3d35312, 0x5788c941, 0x14436fc6, 0x5f3ffde6, 0x1cf45b61,
7708
+ 0x98afc132, 0xdb6467b5, 0x73ceb464, 0x300512e3, 0xb45e88b0,
7709
+ 0xf7952e37, 0xbce9bc17, 0xff221a90, 0x7b7980c3, 0x38b22644,
7710
+ 0xed81a482, 0xae4a0205, 0x2a119856, 0x69da3ed1, 0x22a6acf1,
7711
+ 0x616d0a76, 0xe5369025, 0xa6fd36a2, 0xe8cb8cba, 0xab002a3d,
7712
+ 0x2f5bb06e, 0x6c9016e9, 0x27ec84c9, 0x6427224e, 0xe07cb81d,
7713
+ 0xa3b71e9a, 0x76849c5c, 0x354f3adb, 0xb114a088, 0xf2df060f,
7714
+ 0xb9a3942f, 0xfa6832a8, 0x7e33a8fb, 0x3df80e7c, 0x9552ddad,
7715
+ 0xd6997b2a, 0x52c2e179, 0x110947fe, 0x5a75d5de, 0x19be7359,
7716
+ 0x9de5e90a, 0xde2e4f8d, 0x0b1dcd4b, 0x48d66bcc, 0xcc8df19f,
7717
+ 0x8f465718, 0xc43ac538, 0x87f163bf, 0x03aaf9ec, 0x40615f6b,
7718
+ 0x12f92f94, 0x51328913, 0xd5691340, 0x96a2b5c7, 0xddde27e7,
7719
+ 0x9e158160, 0x1a4e1b33, 0x5985bdb4, 0x8cb63f72, 0xcf7d99f5,
7720
+ 0x4b2603a6, 0x08eda521, 0x43913701, 0x005a9186, 0x84010bd5,
7721
+ 0xc7caad52, 0x6f607e83, 0x2cabd804, 0xa8f04257, 0xeb3be4d0,
7722
+ 0xa04776f0, 0xe38cd077, 0x67d74a24, 0x241ceca3, 0xf12f6e65,
7723
+ 0xb2e4c8e2, 0x36bf52b1, 0x7574f436, 0x3e086616, 0x7dc3c091,
7724
+ 0xf9985ac2, 0xba53fc45, 0x1caecae7, 0x5f656c60, 0xdb3ef633,
7725
+ 0x98f550b4, 0xd389c294, 0x90426413, 0x1419fe40, 0x57d258c7,
7726
+ 0x82e1da01, 0xc12a7c86, 0x4571e6d5, 0x06ba4052, 0x4dc6d272,
7727
+ 0x0e0d74f5, 0x8a56eea6, 0xc99d4821, 0x61379bf0, 0x22fc3d77,
7728
+ 0xa6a7a724, 0xe56c01a3, 0xae109383, 0xeddb3504, 0x6980af57,
7729
+ 0x2a4b09d0, 0xff788b16, 0xbcb32d91, 0x38e8b7c2, 0x7b231145,
7730
+ 0x305f8365, 0x739425e2, 0xf7cfbfb1, 0xb4041936, 0xe69c69c9,
7731
+ 0xa557cf4e, 0x210c551d, 0x62c7f39a, 0x29bb61ba, 0x6a70c73d,
7732
+ 0xee2b5d6e, 0xade0fbe9, 0x78d3792f, 0x3b18dfa8, 0xbf4345fb,
7733
+ 0xfc88e37c, 0xb7f4715c, 0xf43fd7db, 0x70644d88, 0x33afeb0f,
7734
+ 0x9b0538de, 0xd8ce9e59, 0x5c95040a, 0x1f5ea28d, 0x542230ad,
7735
+ 0x17e9962a, 0x93b20c79, 0xd079aafe, 0x054a2838, 0x46818ebf,
7736
+ 0xc2da14ec, 0x8111b26b, 0xca6d204b, 0x89a686cc, 0x0dfd1c9f,
7737
+ 0x4e36ba18},
7738
+ {0x00000000, 0xe1b652ef, 0x836bd405, 0x62dd86ea, 0x06d7a80b,
7739
+ 0xe761fae4, 0x85bc7c0e, 0x640a2ee1, 0x0cae5117, 0xed1803f8,
7740
+ 0x8fc58512, 0x6e73d7fd, 0x0a79f91c, 0xebcfabf3, 0x89122d19,
7741
+ 0x68a47ff6, 0x185ca32e, 0xf9eaf1c1, 0x9b37772b, 0x7a8125c4,
7742
+ 0x1e8b0b25, 0xff3d59ca, 0x9de0df20, 0x7c568dcf, 0x14f2f239,
7743
+ 0xf544a0d6, 0x9799263c, 0x762f74d3, 0x12255a32, 0xf39308dd,
7744
+ 0x914e8e37, 0x70f8dcd8, 0x30b8465d, 0xd10e14b2, 0xb3d39258,
7745
+ 0x5265c0b7, 0x366fee56, 0xd7d9bcb9, 0xb5043a53, 0x54b268bc,
7746
+ 0x3c16174a, 0xdda045a5, 0xbf7dc34f, 0x5ecb91a0, 0x3ac1bf41,
7747
+ 0xdb77edae, 0xb9aa6b44, 0x581c39ab, 0x28e4e573, 0xc952b79c,
7748
+ 0xab8f3176, 0x4a396399, 0x2e334d78, 0xcf851f97, 0xad58997d,
7749
+ 0x4ceecb92, 0x244ab464, 0xc5fce68b, 0xa7216061, 0x4697328e,
7750
+ 0x229d1c6f, 0xc32b4e80, 0xa1f6c86a, 0x40409a85, 0x60708dba,
7751
+ 0x81c6df55, 0xe31b59bf, 0x02ad0b50, 0x66a725b1, 0x8711775e,
7752
+ 0xe5ccf1b4, 0x047aa35b, 0x6cdedcad, 0x8d688e42, 0xefb508a8,
7753
+ 0x0e035a47, 0x6a0974a6, 0x8bbf2649, 0xe962a0a3, 0x08d4f24c,
7754
+ 0x782c2e94, 0x999a7c7b, 0xfb47fa91, 0x1af1a87e, 0x7efb869f,
7755
+ 0x9f4dd470, 0xfd90529a, 0x1c260075, 0x74827f83, 0x95342d6c,
7756
+ 0xf7e9ab86, 0x165ff969, 0x7255d788, 0x93e38567, 0xf13e038d,
7757
+ 0x10885162, 0x50c8cbe7, 0xb17e9908, 0xd3a31fe2, 0x32154d0d,
7758
+ 0x561f63ec, 0xb7a93103, 0xd574b7e9, 0x34c2e506, 0x5c669af0,
7759
+ 0xbdd0c81f, 0xdf0d4ef5, 0x3ebb1c1a, 0x5ab132fb, 0xbb076014,
7760
+ 0xd9dae6fe, 0x386cb411, 0x489468c9, 0xa9223a26, 0xcbffbccc,
7761
+ 0x2a49ee23, 0x4e43c0c2, 0xaff5922d, 0xcd2814c7, 0x2c9e4628,
7762
+ 0x443a39de, 0xa58c6b31, 0xc751eddb, 0x26e7bf34, 0x42ed91d5,
7763
+ 0xa35bc33a, 0xc18645d0, 0x2030173f, 0x81e66bae, 0x60503941,
7764
+ 0x028dbfab, 0xe33bed44, 0x8731c3a5, 0x6687914a, 0x045a17a0,
7765
+ 0xe5ec454f, 0x8d483ab9, 0x6cfe6856, 0x0e23eebc, 0xef95bc53,
7766
+ 0x8b9f92b2, 0x6a29c05d, 0x08f446b7, 0xe9421458, 0x99bac880,
7767
+ 0x780c9a6f, 0x1ad11c85, 0xfb674e6a, 0x9f6d608b, 0x7edb3264,
7768
+ 0x1c06b48e, 0xfdb0e661, 0x95149997, 0x74a2cb78, 0x167f4d92,
7769
+ 0xf7c91f7d, 0x93c3319c, 0x72756373, 0x10a8e599, 0xf11eb776,
7770
+ 0xb15e2df3, 0x50e87f1c, 0x3235f9f6, 0xd383ab19, 0xb78985f8,
7771
+ 0x563fd717, 0x34e251fd, 0xd5540312, 0xbdf07ce4, 0x5c462e0b,
7772
+ 0x3e9ba8e1, 0xdf2dfa0e, 0xbb27d4ef, 0x5a918600, 0x384c00ea,
7773
+ 0xd9fa5205, 0xa9028edd, 0x48b4dc32, 0x2a695ad8, 0xcbdf0837,
7774
+ 0xafd526d6, 0x4e637439, 0x2cbef2d3, 0xcd08a03c, 0xa5acdfca,
7775
+ 0x441a8d25, 0x26c70bcf, 0xc7715920, 0xa37b77c1, 0x42cd252e,
7776
+ 0x2010a3c4, 0xc1a6f12b, 0xe196e614, 0x0020b4fb, 0x62fd3211,
7777
+ 0x834b60fe, 0xe7414e1f, 0x06f71cf0, 0x642a9a1a, 0x859cc8f5,
7778
+ 0xed38b703, 0x0c8ee5ec, 0x6e536306, 0x8fe531e9, 0xebef1f08,
7779
+ 0x0a594de7, 0x6884cb0d, 0x893299e2, 0xf9ca453a, 0x187c17d5,
7780
+ 0x7aa1913f, 0x9b17c3d0, 0xff1ded31, 0x1eabbfde, 0x7c763934,
7781
+ 0x9dc06bdb, 0xf564142d, 0x14d246c2, 0x760fc028, 0x97b992c7,
7782
+ 0xf3b3bc26, 0x1205eec9, 0x70d86823, 0x916e3acc, 0xd12ea049,
7783
+ 0x3098f2a6, 0x5245744c, 0xb3f326a3, 0xd7f90842, 0x364f5aad,
7784
+ 0x5492dc47, 0xb5248ea8, 0xdd80f15e, 0x3c36a3b1, 0x5eeb255b,
7785
+ 0xbf5d77b4, 0xdb575955, 0x3ae10bba, 0x583c8d50, 0xb98adfbf,
7786
+ 0xc9720367, 0x28c45188, 0x4a19d762, 0xabaf858d, 0xcfa5ab6c,
7787
+ 0x2e13f983, 0x4cce7f69, 0xad782d86, 0xc5dc5270, 0x246a009f,
7788
+ 0x46b78675, 0xa701d49a, 0xc30bfa7b, 0x22bda894, 0x40602e7e,
7789
+ 0xa1d67c91},
7790
+ {0x00000000, 0x5880e2d7, 0xf106b474, 0xa98656a3, 0xe20d68e9,
7791
+ 0xba8d8a3e, 0x130bdc9d, 0x4b8b3e4a, 0x851da109, 0xdd9d43de,
7792
+ 0x741b157d, 0x2c9bf7aa, 0x6710c9e0, 0x3f902b37, 0x96167d94,
7793
+ 0xce969f43, 0x0a3b4213, 0x52bba0c4, 0xfb3df667, 0xa3bd14b0,
7794
+ 0xe8362afa, 0xb0b6c82d, 0x19309e8e, 0x41b07c59, 0x8f26e31a,
7795
+ 0xd7a601cd, 0x7e20576e, 0x26a0b5b9, 0x6d2b8bf3, 0x35ab6924,
7796
+ 0x9c2d3f87, 0xc4addd50, 0x14768426, 0x4cf666f1, 0xe5703052,
7797
+ 0xbdf0d285, 0xf67beccf, 0xaefb0e18, 0x077d58bb, 0x5ffdba6c,
7798
+ 0x916b252f, 0xc9ebc7f8, 0x606d915b, 0x38ed738c, 0x73664dc6,
7799
+ 0x2be6af11, 0x8260f9b2, 0xdae01b65, 0x1e4dc635, 0x46cd24e2,
7800
+ 0xef4b7241, 0xb7cb9096, 0xfc40aedc, 0xa4c04c0b, 0x0d461aa8,
7801
+ 0x55c6f87f, 0x9b50673c, 0xc3d085eb, 0x6a56d348, 0x32d6319f,
7802
+ 0x795d0fd5, 0x21dded02, 0x885bbba1, 0xd0db5976, 0x28ec084d,
7803
+ 0x706cea9a, 0xd9eabc39, 0x816a5eee, 0xcae160a4, 0x92618273,
7804
+ 0x3be7d4d0, 0x63673607, 0xadf1a944, 0xf5714b93, 0x5cf71d30,
7805
+ 0x0477ffe7, 0x4ffcc1ad, 0x177c237a, 0xbefa75d9, 0xe67a970e,
7806
+ 0x22d74a5e, 0x7a57a889, 0xd3d1fe2a, 0x8b511cfd, 0xc0da22b7,
7807
+ 0x985ac060, 0x31dc96c3, 0x695c7414, 0xa7caeb57, 0xff4a0980,
7808
+ 0x56cc5f23, 0x0e4cbdf4, 0x45c783be, 0x1d476169, 0xb4c137ca,
7809
+ 0xec41d51d, 0x3c9a8c6b, 0x641a6ebc, 0xcd9c381f, 0x951cdac8,
7810
+ 0xde97e482, 0x86170655, 0x2f9150f6, 0x7711b221, 0xb9872d62,
7811
+ 0xe107cfb5, 0x48819916, 0x10017bc1, 0x5b8a458b, 0x030aa75c,
7812
+ 0xaa8cf1ff, 0xf20c1328, 0x36a1ce78, 0x6e212caf, 0xc7a77a0c,
7813
+ 0x9f2798db, 0xd4aca691, 0x8c2c4446, 0x25aa12e5, 0x7d2af032,
7814
+ 0xb3bc6f71, 0xeb3c8da6, 0x42badb05, 0x1a3a39d2, 0x51b10798,
7815
+ 0x0931e54f, 0xa0b7b3ec, 0xf837513b, 0x50d8119a, 0x0858f34d,
7816
+ 0xa1dea5ee, 0xf95e4739, 0xb2d57973, 0xea559ba4, 0x43d3cd07,
7817
+ 0x1b532fd0, 0xd5c5b093, 0x8d455244, 0x24c304e7, 0x7c43e630,
7818
+ 0x37c8d87a, 0x6f483aad, 0xc6ce6c0e, 0x9e4e8ed9, 0x5ae35389,
7819
+ 0x0263b15e, 0xabe5e7fd, 0xf365052a, 0xb8ee3b60, 0xe06ed9b7,
7820
+ 0x49e88f14, 0x11686dc3, 0xdffef280, 0x877e1057, 0x2ef846f4,
7821
+ 0x7678a423, 0x3df39a69, 0x657378be, 0xccf52e1d, 0x9475ccca,
7822
+ 0x44ae95bc, 0x1c2e776b, 0xb5a821c8, 0xed28c31f, 0xa6a3fd55,
7823
+ 0xfe231f82, 0x57a54921, 0x0f25abf6, 0xc1b334b5, 0x9933d662,
7824
+ 0x30b580c1, 0x68356216, 0x23be5c5c, 0x7b3ebe8b, 0xd2b8e828,
7825
+ 0x8a380aff, 0x4e95d7af, 0x16153578, 0xbf9363db, 0xe713810c,
7826
+ 0xac98bf46, 0xf4185d91, 0x5d9e0b32, 0x051ee9e5, 0xcb8876a6,
7827
+ 0x93089471, 0x3a8ec2d2, 0x620e2005, 0x29851e4f, 0x7105fc98,
7828
+ 0xd883aa3b, 0x800348ec, 0x783419d7, 0x20b4fb00, 0x8932ada3,
7829
+ 0xd1b24f74, 0x9a39713e, 0xc2b993e9, 0x6b3fc54a, 0x33bf279d,
7830
+ 0xfd29b8de, 0xa5a95a09, 0x0c2f0caa, 0x54afee7d, 0x1f24d037,
7831
+ 0x47a432e0, 0xee226443, 0xb6a28694, 0x720f5bc4, 0x2a8fb913,
7832
+ 0x8309efb0, 0xdb890d67, 0x9002332d, 0xc882d1fa, 0x61048759,
7833
+ 0x3984658e, 0xf712facd, 0xaf92181a, 0x06144eb9, 0x5e94ac6e,
7834
+ 0x151f9224, 0x4d9f70f3, 0xe4192650, 0xbc99c487, 0x6c429df1,
7835
+ 0x34c27f26, 0x9d442985, 0xc5c4cb52, 0x8e4ff518, 0xd6cf17cf,
7836
+ 0x7f49416c, 0x27c9a3bb, 0xe95f3cf8, 0xb1dfde2f, 0x1859888c,
7837
+ 0x40d96a5b, 0x0b525411, 0x53d2b6c6, 0xfa54e065, 0xa2d402b2,
7838
+ 0x6679dfe2, 0x3ef93d35, 0x977f6b96, 0xcfff8941, 0x8474b70b,
7839
+ 0xdcf455dc, 0x7572037f, 0x2df2e1a8, 0xe3647eeb, 0xbbe49c3c,
7840
+ 0x1262ca9f, 0x4ae22848, 0x01691602, 0x59e9f4d5, 0xf06fa276,
7841
+ 0xa8ef40a1},
7842
+ {0x00000000, 0x463b6765, 0x8c76ceca, 0xca4da9af, 0x59ebed4e,
7843
+ 0x1fd08a2b, 0xd59d2384, 0x93a644e1, 0xb2d6db9d, 0xf4edbcf8,
7844
+ 0x3ea01557, 0x789b7232, 0xeb3d36d3, 0xad0651b6, 0x674bf819,
7845
+ 0x21709f7c, 0x25abc6e0, 0x6390a185, 0xa9dd082a, 0xefe66f4f,
7846
+ 0x7c402bae, 0x3a7b4ccb, 0xf036e564, 0xb60d8201, 0x977d1d7d,
7847
+ 0xd1467a18, 0x1b0bd3b7, 0x5d30b4d2, 0xce96f033, 0x88ad9756,
7848
+ 0x42e03ef9, 0x04db599c, 0x0b50fc1a, 0x4d6b9b7f, 0x872632d0,
7849
+ 0xc11d55b5, 0x52bb1154, 0x14807631, 0xdecddf9e, 0x98f6b8fb,
7850
+ 0xb9862787, 0xffbd40e2, 0x35f0e94d, 0x73cb8e28, 0xe06dcac9,
7851
+ 0xa656adac, 0x6c1b0403, 0x2a206366, 0x2efb3afa, 0x68c05d9f,
7852
+ 0xa28df430, 0xe4b69355, 0x7710d7b4, 0x312bb0d1, 0xfb66197e,
7853
+ 0xbd5d7e1b, 0x9c2de167, 0xda168602, 0x105b2fad, 0x566048c8,
7854
+ 0xc5c60c29, 0x83fd6b4c, 0x49b0c2e3, 0x0f8ba586, 0x16a0f835,
7855
+ 0x509b9f50, 0x9ad636ff, 0xdced519a, 0x4f4b157b, 0x0970721e,
7856
+ 0xc33ddbb1, 0x8506bcd4, 0xa47623a8, 0xe24d44cd, 0x2800ed62,
7857
+ 0x6e3b8a07, 0xfd9dcee6, 0xbba6a983, 0x71eb002c, 0x37d06749,
7858
+ 0x330b3ed5, 0x753059b0, 0xbf7df01f, 0xf946977a, 0x6ae0d39b,
7859
+ 0x2cdbb4fe, 0xe6961d51, 0xa0ad7a34, 0x81dde548, 0xc7e6822d,
7860
+ 0x0dab2b82, 0x4b904ce7, 0xd8360806, 0x9e0d6f63, 0x5440c6cc,
7861
+ 0x127ba1a9, 0x1df0042f, 0x5bcb634a, 0x9186cae5, 0xd7bdad80,
7862
+ 0x441be961, 0x02208e04, 0xc86d27ab, 0x8e5640ce, 0xaf26dfb2,
7863
+ 0xe91db8d7, 0x23501178, 0x656b761d, 0xf6cd32fc, 0xb0f65599,
7864
+ 0x7abbfc36, 0x3c809b53, 0x385bc2cf, 0x7e60a5aa, 0xb42d0c05,
7865
+ 0xf2166b60, 0x61b02f81, 0x278b48e4, 0xedc6e14b, 0xabfd862e,
7866
+ 0x8a8d1952, 0xccb67e37, 0x06fbd798, 0x40c0b0fd, 0xd366f41c,
7867
+ 0x955d9379, 0x5f103ad6, 0x192b5db3, 0x2c40f16b, 0x6a7b960e,
7868
+ 0xa0363fa1, 0xe60d58c4, 0x75ab1c25, 0x33907b40, 0xf9ddd2ef,
7869
+ 0xbfe6b58a, 0x9e962af6, 0xd8ad4d93, 0x12e0e43c, 0x54db8359,
7870
+ 0xc77dc7b8, 0x8146a0dd, 0x4b0b0972, 0x0d306e17, 0x09eb378b,
7871
+ 0x4fd050ee, 0x859df941, 0xc3a69e24, 0x5000dac5, 0x163bbda0,
7872
+ 0xdc76140f, 0x9a4d736a, 0xbb3dec16, 0xfd068b73, 0x374b22dc,
7873
+ 0x717045b9, 0xe2d60158, 0xa4ed663d, 0x6ea0cf92, 0x289ba8f7,
7874
+ 0x27100d71, 0x612b6a14, 0xab66c3bb, 0xed5da4de, 0x7efbe03f,
7875
+ 0x38c0875a, 0xf28d2ef5, 0xb4b64990, 0x95c6d6ec, 0xd3fdb189,
7876
+ 0x19b01826, 0x5f8b7f43, 0xcc2d3ba2, 0x8a165cc7, 0x405bf568,
7877
+ 0x0660920d, 0x02bbcb91, 0x4480acf4, 0x8ecd055b, 0xc8f6623e,
7878
+ 0x5b5026df, 0x1d6b41ba, 0xd726e815, 0x911d8f70, 0xb06d100c,
7879
+ 0xf6567769, 0x3c1bdec6, 0x7a20b9a3, 0xe986fd42, 0xafbd9a27,
7880
+ 0x65f03388, 0x23cb54ed, 0x3ae0095e, 0x7cdb6e3b, 0xb696c794,
7881
+ 0xf0ada0f1, 0x630be410, 0x25308375, 0xef7d2ada, 0xa9464dbf,
7882
+ 0x8836d2c3, 0xce0db5a6, 0x04401c09, 0x427b7b6c, 0xd1dd3f8d,
7883
+ 0x97e658e8, 0x5dabf147, 0x1b909622, 0x1f4bcfbe, 0x5970a8db,
7884
+ 0x933d0174, 0xd5066611, 0x46a022f0, 0x009b4595, 0xcad6ec3a,
7885
+ 0x8ced8b5f, 0xad9d1423, 0xeba67346, 0x21ebdae9, 0x67d0bd8c,
7886
+ 0xf476f96d, 0xb24d9e08, 0x780037a7, 0x3e3b50c2, 0x31b0f544,
7887
+ 0x778b9221, 0xbdc63b8e, 0xfbfd5ceb, 0x685b180a, 0x2e607f6f,
7888
+ 0xe42dd6c0, 0xa216b1a5, 0x83662ed9, 0xc55d49bc, 0x0f10e013,
7889
+ 0x492b8776, 0xda8dc397, 0x9cb6a4f2, 0x56fb0d5d, 0x10c06a38,
7890
+ 0x141b33a4, 0x522054c1, 0x986dfd6e, 0xde569a0b, 0x4df0deea,
7891
+ 0x0bcbb98f, 0xc1861020, 0x87bd7745, 0xa6cde839, 0xe0f68f5c,
7892
+ 0x2abb26f3, 0x6c804196, 0xff260577, 0xb91d6212, 0x7350cbbd,
7893
+ 0x356bacd8}};
7894
+
7895
+#endif
7896
+
7897
+#endif
7898
+
7899
+#if N == 6
7900
+
7901
+#if W == 8
7902
+
7903
+local const z_crc_t FAR crc_braid_table[][256] = {
7904
+ {0x00000000, 0x3db1ecdc, 0x7b63d9b8, 0x46d23564, 0xf6c7b370,
7905
+ 0xcb765fac, 0x8da46ac8, 0xb0158614, 0x36fe60a1, 0x0b4f8c7d,
7906
+ 0x4d9db919, 0x702c55c5, 0xc039d3d1, 0xfd883f0d, 0xbb5a0a69,
7907
+ 0x86ebe6b5, 0x6dfcc142, 0x504d2d9e, 0x169f18fa, 0x2b2ef426,
7908
+ 0x9b3b7232, 0xa68a9eee, 0xe058ab8a, 0xdde94756, 0x5b02a1e3,
7909
+ 0x66b34d3f, 0x2061785b, 0x1dd09487, 0xadc51293, 0x9074fe4f,
7910
+ 0xd6a6cb2b, 0xeb1727f7, 0xdbf98284, 0xe6486e58, 0xa09a5b3c,
7911
+ 0x9d2bb7e0, 0x2d3e31f4, 0x108fdd28, 0x565de84c, 0x6bec0490,
7912
+ 0xed07e225, 0xd0b60ef9, 0x96643b9d, 0xabd5d741, 0x1bc05155,
7913
+ 0x2671bd89, 0x60a388ed, 0x5d126431, 0xb60543c6, 0x8bb4af1a,
7914
+ 0xcd669a7e, 0xf0d776a2, 0x40c2f0b6, 0x7d731c6a, 0x3ba1290e,
7915
+ 0x0610c5d2, 0x80fb2367, 0xbd4acfbb, 0xfb98fadf, 0xc6291603,
7916
+ 0x763c9017, 0x4b8d7ccb, 0x0d5f49af, 0x30eea573, 0x6c820349,
7917
+ 0x5133ef95, 0x17e1daf1, 0x2a50362d, 0x9a45b039, 0xa7f45ce5,
7918
+ 0xe1266981, 0xdc97855d, 0x5a7c63e8, 0x67cd8f34, 0x211fba50,
7919
+ 0x1cae568c, 0xacbbd098, 0x910a3c44, 0xd7d80920, 0xea69e5fc,
7920
+ 0x017ec20b, 0x3ccf2ed7, 0x7a1d1bb3, 0x47acf76f, 0xf7b9717b,
7921
+ 0xca089da7, 0x8cdaa8c3, 0xb16b441f, 0x3780a2aa, 0x0a314e76,
7922
+ 0x4ce37b12, 0x715297ce, 0xc14711da, 0xfcf6fd06, 0xba24c862,
7923
+ 0x879524be, 0xb77b81cd, 0x8aca6d11, 0xcc185875, 0xf1a9b4a9,
7924
+ 0x41bc32bd, 0x7c0dde61, 0x3adfeb05, 0x076e07d9, 0x8185e16c,
7925
+ 0xbc340db0, 0xfae638d4, 0xc757d408, 0x7742521c, 0x4af3bec0,
7926
+ 0x0c218ba4, 0x31906778, 0xda87408f, 0xe736ac53, 0xa1e49937,
7927
+ 0x9c5575eb, 0x2c40f3ff, 0x11f11f23, 0x57232a47, 0x6a92c69b,
7928
+ 0xec79202e, 0xd1c8ccf2, 0x971af996, 0xaaab154a, 0x1abe935e,
7929
+ 0x270f7f82, 0x61dd4ae6, 0x5c6ca63a, 0xd9040692, 0xe4b5ea4e,
7930
+ 0xa267df2a, 0x9fd633f6, 0x2fc3b5e2, 0x1272593e, 0x54a06c5a,
7931
+ 0x69118086, 0xeffa6633, 0xd24b8aef, 0x9499bf8b, 0xa9285357,
7932
+ 0x193dd543, 0x248c399f, 0x625e0cfb, 0x5fefe027, 0xb4f8c7d0,
7933
+ 0x89492b0c, 0xcf9b1e68, 0xf22af2b4, 0x423f74a0, 0x7f8e987c,
7934
+ 0x395cad18, 0x04ed41c4, 0x8206a771, 0xbfb74bad, 0xf9657ec9,
7935
+ 0xc4d49215, 0x74c11401, 0x4970f8dd, 0x0fa2cdb9, 0x32132165,
7936
+ 0x02fd8416, 0x3f4c68ca, 0x799e5dae, 0x442fb172, 0xf43a3766,
7937
+ 0xc98bdbba, 0x8f59eede, 0xb2e80202, 0x3403e4b7, 0x09b2086b,
7938
+ 0x4f603d0f, 0x72d1d1d3, 0xc2c457c7, 0xff75bb1b, 0xb9a78e7f,
7939
+ 0x841662a3, 0x6f014554, 0x52b0a988, 0x14629cec, 0x29d37030,
7940
+ 0x99c6f624, 0xa4771af8, 0xe2a52f9c, 0xdf14c340, 0x59ff25f5,
7941
+ 0x644ec929, 0x229cfc4d, 0x1f2d1091, 0xaf389685, 0x92897a59,
7942
+ 0xd45b4f3d, 0xe9eaa3e1, 0xb58605db, 0x8837e907, 0xcee5dc63,
7943
+ 0xf35430bf, 0x4341b6ab, 0x7ef05a77, 0x38226f13, 0x059383cf,
7944
+ 0x8378657a, 0xbec989a6, 0xf81bbcc2, 0xc5aa501e, 0x75bfd60a,
7945
+ 0x480e3ad6, 0x0edc0fb2, 0x336de36e, 0xd87ac499, 0xe5cb2845,
7946
+ 0xa3191d21, 0x9ea8f1fd, 0x2ebd77e9, 0x130c9b35, 0x55deae51,
7947
+ 0x686f428d, 0xee84a438, 0xd33548e4, 0x95e77d80, 0xa856915c,
7948
+ 0x18431748, 0x25f2fb94, 0x6320cef0, 0x5e91222c, 0x6e7f875f,
7949
+ 0x53ce6b83, 0x151c5ee7, 0x28adb23b, 0x98b8342f, 0xa509d8f3,
7950
+ 0xe3dbed97, 0xde6a014b, 0x5881e7fe, 0x65300b22, 0x23e23e46,
7951
+ 0x1e53d29a, 0xae46548e, 0x93f7b852, 0xd5258d36, 0xe89461ea,
7952
+ 0x0383461d, 0x3e32aac1, 0x78e09fa5, 0x45517379, 0xf544f56d,
7953
+ 0xc8f519b1, 0x8e272cd5, 0xb396c009, 0x357d26bc, 0x08ccca60,
7954
+ 0x4e1eff04, 0x73af13d8, 0xc3ba95cc, 0xfe0b7910, 0xb8d94c74,
7955
+ 0x8568a0a8},
7956
+ {0x00000000, 0x69790b65, 0xd2f216ca, 0xbb8b1daf, 0x7e952bd5,
7957
+ 0x17ec20b0, 0xac673d1f, 0xc51e367a, 0xfd2a57aa, 0x94535ccf,
7958
+ 0x2fd84160, 0x46a14a05, 0x83bf7c7f, 0xeac6771a, 0x514d6ab5,
7959
+ 0x383461d0, 0x2125a915, 0x485ca270, 0xf3d7bfdf, 0x9aaeb4ba,
7960
+ 0x5fb082c0, 0x36c989a5, 0x8d42940a, 0xe43b9f6f, 0xdc0ffebf,
7961
+ 0xb576f5da, 0x0efde875, 0x6784e310, 0xa29ad56a, 0xcbe3de0f,
7962
+ 0x7068c3a0, 0x1911c8c5, 0x424b522a, 0x2b32594f, 0x90b944e0,
7963
+ 0xf9c04f85, 0x3cde79ff, 0x55a7729a, 0xee2c6f35, 0x87556450,
7964
+ 0xbf610580, 0xd6180ee5, 0x6d93134a, 0x04ea182f, 0xc1f42e55,
7965
+ 0xa88d2530, 0x1306389f, 0x7a7f33fa, 0x636efb3f, 0x0a17f05a,
7966
+ 0xb19cedf5, 0xd8e5e690, 0x1dfbd0ea, 0x7482db8f, 0xcf09c620,
7967
+ 0xa670cd45, 0x9e44ac95, 0xf73da7f0, 0x4cb6ba5f, 0x25cfb13a,
7968
+ 0xe0d18740, 0x89a88c25, 0x3223918a, 0x5b5a9aef, 0x8496a454,
7969
+ 0xedefaf31, 0x5664b29e, 0x3f1db9fb, 0xfa038f81, 0x937a84e4,
7970
+ 0x28f1994b, 0x4188922e, 0x79bcf3fe, 0x10c5f89b, 0xab4ee534,
7971
+ 0xc237ee51, 0x0729d82b, 0x6e50d34e, 0xd5dbcee1, 0xbca2c584,
7972
+ 0xa5b30d41, 0xccca0624, 0x77411b8b, 0x1e3810ee, 0xdb262694,
7973
+ 0xb25f2df1, 0x09d4305e, 0x60ad3b3b, 0x58995aeb, 0x31e0518e,
7974
+ 0x8a6b4c21, 0xe3124744, 0x260c713e, 0x4f757a5b, 0xf4fe67f4,
7975
+ 0x9d876c91, 0xc6ddf67e, 0xafa4fd1b, 0x142fe0b4, 0x7d56ebd1,
7976
+ 0xb848ddab, 0xd131d6ce, 0x6abacb61, 0x03c3c004, 0x3bf7a1d4,
7977
+ 0x528eaab1, 0xe905b71e, 0x807cbc7b, 0x45628a01, 0x2c1b8164,
7978
+ 0x97909ccb, 0xfee997ae, 0xe7f85f6b, 0x8e81540e, 0x350a49a1,
7979
+ 0x5c7342c4, 0x996d74be, 0xf0147fdb, 0x4b9f6274, 0x22e66911,
7980
+ 0x1ad208c1, 0x73ab03a4, 0xc8201e0b, 0xa159156e, 0x64472314,
7981
+ 0x0d3e2871, 0xb6b535de, 0xdfcc3ebb, 0xd25c4ee9, 0xbb25458c,
7982
+ 0x00ae5823, 0x69d75346, 0xacc9653c, 0xc5b06e59, 0x7e3b73f6,
7983
+ 0x17427893, 0x2f761943, 0x460f1226, 0xfd840f89, 0x94fd04ec,
7984
+ 0x51e33296, 0x389a39f3, 0x8311245c, 0xea682f39, 0xf379e7fc,
7985
+ 0x9a00ec99, 0x218bf136, 0x48f2fa53, 0x8deccc29, 0xe495c74c,
7986
+ 0x5f1edae3, 0x3667d186, 0x0e53b056, 0x672abb33, 0xdca1a69c,
7987
+ 0xb5d8adf9, 0x70c69b83, 0x19bf90e6, 0xa2348d49, 0xcb4d862c,
7988
+ 0x90171cc3, 0xf96e17a6, 0x42e50a09, 0x2b9c016c, 0xee823716,
7989
+ 0x87fb3c73, 0x3c7021dc, 0x55092ab9, 0x6d3d4b69, 0x0444400c,
7990
+ 0xbfcf5da3, 0xd6b656c6, 0x13a860bc, 0x7ad16bd9, 0xc15a7676,
7991
+ 0xa8237d13, 0xb132b5d6, 0xd84bbeb3, 0x63c0a31c, 0x0ab9a879,
7992
+ 0xcfa79e03, 0xa6de9566, 0x1d5588c9, 0x742c83ac, 0x4c18e27c,
7993
+ 0x2561e919, 0x9eeaf4b6, 0xf793ffd3, 0x328dc9a9, 0x5bf4c2cc,
7994
+ 0xe07fdf63, 0x8906d406, 0x56caeabd, 0x3fb3e1d8, 0x8438fc77,
7995
+ 0xed41f712, 0x285fc168, 0x4126ca0d, 0xfaadd7a2, 0x93d4dcc7,
7996
+ 0xabe0bd17, 0xc299b672, 0x7912abdd, 0x106ba0b8, 0xd57596c2,
7997
+ 0xbc0c9da7, 0x07878008, 0x6efe8b6d, 0x77ef43a8, 0x1e9648cd,
7998
+ 0xa51d5562, 0xcc645e07, 0x097a687d, 0x60036318, 0xdb887eb7,
7999
+ 0xb2f175d2, 0x8ac51402, 0xe3bc1f67, 0x583702c8, 0x314e09ad,
8000
+ 0xf4503fd7, 0x9d2934b2, 0x26a2291d, 0x4fdb2278, 0x1481b897,
8001
+ 0x7df8b3f2, 0xc673ae5d, 0xaf0aa538, 0x6a149342, 0x036d9827,
8002
+ 0xb8e68588, 0xd19f8eed, 0xe9abef3d, 0x80d2e458, 0x3b59f9f7,
8003
+ 0x5220f292, 0x973ec4e8, 0xfe47cf8d, 0x45ccd222, 0x2cb5d947,
8004
+ 0x35a41182, 0x5cdd1ae7, 0xe7560748, 0x8e2f0c2d, 0x4b313a57,
8005
+ 0x22483132, 0x99c32c9d, 0xf0ba27f8, 0xc88e4628, 0xa1f74d4d,
8006
+ 0x1a7c50e2, 0x73055b87, 0xb61b6dfd, 0xdf626698, 0x64e97b37,
8007
+ 0x0d907052},
8008
+ {0x00000000, 0x7fc99b93, 0xff933726, 0x805aacb5, 0x2457680d,
8009
+ 0x5b9ef39e, 0xdbc45f2b, 0xa40dc4b8, 0x48aed01a, 0x37674b89,
8010
+ 0xb73de73c, 0xc8f47caf, 0x6cf9b817, 0x13302384, 0x936a8f31,
8011
+ 0xeca314a2, 0x915da034, 0xee943ba7, 0x6ece9712, 0x11070c81,
8012
+ 0xb50ac839, 0xcac353aa, 0x4a99ff1f, 0x3550648c, 0xd9f3702e,
8013
+ 0xa63aebbd, 0x26604708, 0x59a9dc9b, 0xfda41823, 0x826d83b0,
8014
+ 0x02372f05, 0x7dfeb496, 0xf9ca4629, 0x8603ddba, 0x0659710f,
8015
+ 0x7990ea9c, 0xdd9d2e24, 0xa254b5b7, 0x220e1902, 0x5dc78291,
8016
+ 0xb1649633, 0xcead0da0, 0x4ef7a115, 0x313e3a86, 0x9533fe3e,
8017
+ 0xeafa65ad, 0x6aa0c918, 0x1569528b, 0x6897e61d, 0x175e7d8e,
8018
+ 0x9704d13b, 0xe8cd4aa8, 0x4cc08e10, 0x33091583, 0xb353b936,
8019
+ 0xcc9a22a5, 0x20393607, 0x5ff0ad94, 0xdfaa0121, 0xa0639ab2,
8020
+ 0x046e5e0a, 0x7ba7c599, 0xfbfd692c, 0x8434f2bf, 0x28e58a13,
8021
+ 0x572c1180, 0xd776bd35, 0xa8bf26a6, 0x0cb2e21e, 0x737b798d,
8022
+ 0xf321d538, 0x8ce84eab, 0x604b5a09, 0x1f82c19a, 0x9fd86d2f,
8023
+ 0xe011f6bc, 0x441c3204, 0x3bd5a997, 0xbb8f0522, 0xc4469eb1,
8024
+ 0xb9b82a27, 0xc671b1b4, 0x462b1d01, 0x39e28692, 0x9def422a,
8025
+ 0xe226d9b9, 0x627c750c, 0x1db5ee9f, 0xf116fa3d, 0x8edf61ae,
8026
+ 0x0e85cd1b, 0x714c5688, 0xd5419230, 0xaa8809a3, 0x2ad2a516,
8027
+ 0x551b3e85, 0xd12fcc3a, 0xaee657a9, 0x2ebcfb1c, 0x5175608f,
8028
+ 0xf578a437, 0x8ab13fa4, 0x0aeb9311, 0x75220882, 0x99811c20,
8029
+ 0xe64887b3, 0x66122b06, 0x19dbb095, 0xbdd6742d, 0xc21fefbe,
8030
+ 0x4245430b, 0x3d8cd898, 0x40726c0e, 0x3fbbf79d, 0xbfe15b28,
8031
+ 0xc028c0bb, 0x64250403, 0x1bec9f90, 0x9bb63325, 0xe47fa8b6,
8032
+ 0x08dcbc14, 0x77152787, 0xf74f8b32, 0x888610a1, 0x2c8bd419,
8033
+ 0x53424f8a, 0xd318e33f, 0xacd178ac, 0x51cb1426, 0x2e028fb5,
8034
+ 0xae582300, 0xd191b893, 0x759c7c2b, 0x0a55e7b8, 0x8a0f4b0d,
8035
+ 0xf5c6d09e, 0x1965c43c, 0x66ac5faf, 0xe6f6f31a, 0x993f6889,
8036
+ 0x3d32ac31, 0x42fb37a2, 0xc2a19b17, 0xbd680084, 0xc096b412,
8037
+ 0xbf5f2f81, 0x3f058334, 0x40cc18a7, 0xe4c1dc1f, 0x9b08478c,
8038
+ 0x1b52eb39, 0x649b70aa, 0x88386408, 0xf7f1ff9b, 0x77ab532e,
8039
+ 0x0862c8bd, 0xac6f0c05, 0xd3a69796, 0x53fc3b23, 0x2c35a0b0,
8040
+ 0xa801520f, 0xd7c8c99c, 0x57926529, 0x285bfeba, 0x8c563a02,
8041
+ 0xf39fa191, 0x73c50d24, 0x0c0c96b7, 0xe0af8215, 0x9f661986,
8042
+ 0x1f3cb533, 0x60f52ea0, 0xc4f8ea18, 0xbb31718b, 0x3b6bdd3e,
8043
+ 0x44a246ad, 0x395cf23b, 0x469569a8, 0xc6cfc51d, 0xb9065e8e,
8044
+ 0x1d0b9a36, 0x62c201a5, 0xe298ad10, 0x9d513683, 0x71f22221,
8045
+ 0x0e3bb9b2, 0x8e611507, 0xf1a88e94, 0x55a54a2c, 0x2a6cd1bf,
8046
+ 0xaa367d0a, 0xd5ffe699, 0x792e9e35, 0x06e705a6, 0x86bda913,
8047
+ 0xf9743280, 0x5d79f638, 0x22b06dab, 0xa2eac11e, 0xdd235a8d,
8048
+ 0x31804e2f, 0x4e49d5bc, 0xce137909, 0xb1dae29a, 0x15d72622,
8049
+ 0x6a1ebdb1, 0xea441104, 0x958d8a97, 0xe8733e01, 0x97baa592,
8050
+ 0x17e00927, 0x682992b4, 0xcc24560c, 0xb3edcd9f, 0x33b7612a,
8051
+ 0x4c7efab9, 0xa0ddee1b, 0xdf147588, 0x5f4ed93d, 0x208742ae,
8052
+ 0x848a8616, 0xfb431d85, 0x7b19b130, 0x04d02aa3, 0x80e4d81c,
8053
+ 0xff2d438f, 0x7f77ef3a, 0x00be74a9, 0xa4b3b011, 0xdb7a2b82,
8054
+ 0x5b208737, 0x24e91ca4, 0xc84a0806, 0xb7839395, 0x37d93f20,
8055
+ 0x4810a4b3, 0xec1d600b, 0x93d4fb98, 0x138e572d, 0x6c47ccbe,
8056
+ 0x11b97828, 0x6e70e3bb, 0xee2a4f0e, 0x91e3d49d, 0x35ee1025,
8057
+ 0x4a278bb6, 0xca7d2703, 0xb5b4bc90, 0x5917a832, 0x26de33a1,
8058
+ 0xa6849f14, 0xd94d0487, 0x7d40c03f, 0x02895bac, 0x82d3f719,
8059
+ 0xfd1a6c8a},
8060
+ {0x00000000, 0xa396284c, 0x9c5d56d9, 0x3fcb7e95, 0xe3cbabf3,
8061
+ 0x405d83bf, 0x7f96fd2a, 0xdc00d566, 0x1ce651a7, 0xbf7079eb,
8062
+ 0x80bb077e, 0x232d2f32, 0xff2dfa54, 0x5cbbd218, 0x6370ac8d,
8063
+ 0xc0e684c1, 0x39cca34e, 0x9a5a8b02, 0xa591f597, 0x0607dddb,
8064
+ 0xda0708bd, 0x799120f1, 0x465a5e64, 0xe5cc7628, 0x252af2e9,
8065
+ 0x86bcdaa5, 0xb977a430, 0x1ae18c7c, 0xc6e1591a, 0x65777156,
8066
+ 0x5abc0fc3, 0xf92a278f, 0x7399469c, 0xd00f6ed0, 0xefc41045,
8067
+ 0x4c523809, 0x9052ed6f, 0x33c4c523, 0x0c0fbbb6, 0xaf9993fa,
8068
+ 0x6f7f173b, 0xcce93f77, 0xf32241e2, 0x50b469ae, 0x8cb4bcc8,
8069
+ 0x2f229484, 0x10e9ea11, 0xb37fc25d, 0x4a55e5d2, 0xe9c3cd9e,
8070
+ 0xd608b30b, 0x759e9b47, 0xa99e4e21, 0x0a08666d, 0x35c318f8,
8071
+ 0x965530b4, 0x56b3b475, 0xf5259c39, 0xcaeee2ac, 0x6978cae0,
8072
+ 0xb5781f86, 0x16ee37ca, 0x2925495f, 0x8ab36113, 0xe7328d38,
8073
+ 0x44a4a574, 0x7b6fdbe1, 0xd8f9f3ad, 0x04f926cb, 0xa76f0e87,
8074
+ 0x98a47012, 0x3b32585e, 0xfbd4dc9f, 0x5842f4d3, 0x67898a46,
8075
+ 0xc41fa20a, 0x181f776c, 0xbb895f20, 0x844221b5, 0x27d409f9,
8076
+ 0xdefe2e76, 0x7d68063a, 0x42a378af, 0xe13550e3, 0x3d358585,
8077
+ 0x9ea3adc9, 0xa168d35c, 0x02fefb10, 0xc2187fd1, 0x618e579d,
8078
+ 0x5e452908, 0xfdd30144, 0x21d3d422, 0x8245fc6e, 0xbd8e82fb,
8079
+ 0x1e18aab7, 0x94abcba4, 0x373de3e8, 0x08f69d7d, 0xab60b531,
8080
+ 0x77606057, 0xd4f6481b, 0xeb3d368e, 0x48ab1ec2, 0x884d9a03,
8081
+ 0x2bdbb24f, 0x1410ccda, 0xb786e496, 0x6b8631f0, 0xc81019bc,
8082
+ 0xf7db6729, 0x544d4f65, 0xad6768ea, 0x0ef140a6, 0x313a3e33,
8083
+ 0x92ac167f, 0x4eacc319, 0xed3aeb55, 0xd2f195c0, 0x7167bd8c,
8084
+ 0xb181394d, 0x12171101, 0x2ddc6f94, 0x8e4a47d8, 0x524a92be,
8085
+ 0xf1dcbaf2, 0xce17c467, 0x6d81ec2b, 0x15141c31, 0xb682347d,
8086
+ 0x89494ae8, 0x2adf62a4, 0xf6dfb7c2, 0x55499f8e, 0x6a82e11b,
8087
+ 0xc914c957, 0x09f24d96, 0xaa6465da, 0x95af1b4f, 0x36393303,
8088
+ 0xea39e665, 0x49afce29, 0x7664b0bc, 0xd5f298f0, 0x2cd8bf7f,
8089
+ 0x8f4e9733, 0xb085e9a6, 0x1313c1ea, 0xcf13148c, 0x6c853cc0,
8090
+ 0x534e4255, 0xf0d86a19, 0x303eeed8, 0x93a8c694, 0xac63b801,
8091
+ 0x0ff5904d, 0xd3f5452b, 0x70636d67, 0x4fa813f2, 0xec3e3bbe,
8092
+ 0x668d5aad, 0xc51b72e1, 0xfad00c74, 0x59462438, 0x8546f15e,
8093
+ 0x26d0d912, 0x191ba787, 0xba8d8fcb, 0x7a6b0b0a, 0xd9fd2346,
8094
+ 0xe6365dd3, 0x45a0759f, 0x99a0a0f9, 0x3a3688b5, 0x05fdf620,
8095
+ 0xa66bde6c, 0x5f41f9e3, 0xfcd7d1af, 0xc31caf3a, 0x608a8776,
8096
+ 0xbc8a5210, 0x1f1c7a5c, 0x20d704c9, 0x83412c85, 0x43a7a844,
8097
+ 0xe0318008, 0xdffafe9d, 0x7c6cd6d1, 0xa06c03b7, 0x03fa2bfb,
8098
+ 0x3c31556e, 0x9fa77d22, 0xf2269109, 0x51b0b945, 0x6e7bc7d0,
8099
+ 0xcdedef9c, 0x11ed3afa, 0xb27b12b6, 0x8db06c23, 0x2e26446f,
8100
+ 0xeec0c0ae, 0x4d56e8e2, 0x729d9677, 0xd10bbe3b, 0x0d0b6b5d,
8101
+ 0xae9d4311, 0x91563d84, 0x32c015c8, 0xcbea3247, 0x687c1a0b,
8102
+ 0x57b7649e, 0xf4214cd2, 0x282199b4, 0x8bb7b1f8, 0xb47ccf6d,
8103
+ 0x17eae721, 0xd70c63e0, 0x749a4bac, 0x4b513539, 0xe8c71d75,
8104
+ 0x34c7c813, 0x9751e05f, 0xa89a9eca, 0x0b0cb686, 0x81bfd795,
8105
+ 0x2229ffd9, 0x1de2814c, 0xbe74a900, 0x62747c66, 0xc1e2542a,
8106
+ 0xfe292abf, 0x5dbf02f3, 0x9d598632, 0x3ecfae7e, 0x0104d0eb,
8107
+ 0xa292f8a7, 0x7e922dc1, 0xdd04058d, 0xe2cf7b18, 0x41595354,
8108
+ 0xb87374db, 0x1be55c97, 0x242e2202, 0x87b80a4e, 0x5bb8df28,
8109
+ 0xf82ef764, 0xc7e589f1, 0x6473a1bd, 0xa495257c, 0x07030d30,
8110
+ 0x38c873a5, 0x9b5e5be9, 0x475e8e8f, 0xe4c8a6c3, 0xdb03d856,
8111
+ 0x7895f01a},
8112
+ {0x00000000, 0x2a283862, 0x545070c4, 0x7e7848a6, 0xa8a0e188,
8113
+ 0x8288d9ea, 0xfcf0914c, 0xd6d8a92e, 0x8a30c551, 0xa018fd33,
8114
+ 0xde60b595, 0xf4488df7, 0x229024d9, 0x08b81cbb, 0x76c0541d,
8115
+ 0x5ce86c7f, 0xcf108ce3, 0xe538b481, 0x9b40fc27, 0xb168c445,
8116
+ 0x67b06d6b, 0x4d985509, 0x33e01daf, 0x19c825cd, 0x452049b2,
8117
+ 0x6f0871d0, 0x11703976, 0x3b580114, 0xed80a83a, 0xc7a89058,
8118
+ 0xb9d0d8fe, 0x93f8e09c, 0x45501f87, 0x6f7827e5, 0x11006f43,
8119
+ 0x3b285721, 0xedf0fe0f, 0xc7d8c66d, 0xb9a08ecb, 0x9388b6a9,
8120
+ 0xcf60dad6, 0xe548e2b4, 0x9b30aa12, 0xb1189270, 0x67c03b5e,
8121
+ 0x4de8033c, 0x33904b9a, 0x19b873f8, 0x8a409364, 0xa068ab06,
8122
+ 0xde10e3a0, 0xf438dbc2, 0x22e072ec, 0x08c84a8e, 0x76b00228,
8123
+ 0x5c983a4a, 0x00705635, 0x2a586e57, 0x542026f1, 0x7e081e93,
8124
+ 0xa8d0b7bd, 0x82f88fdf, 0xfc80c779, 0xd6a8ff1b, 0x8aa03f0e,
8125
+ 0xa088076c, 0xdef04fca, 0xf4d877a8, 0x2200de86, 0x0828e6e4,
8126
+ 0x7650ae42, 0x5c789620, 0x0090fa5f, 0x2ab8c23d, 0x54c08a9b,
8127
+ 0x7ee8b2f9, 0xa8301bd7, 0x821823b5, 0xfc606b13, 0xd6485371,
8128
+ 0x45b0b3ed, 0x6f988b8f, 0x11e0c329, 0x3bc8fb4b, 0xed105265,
8129
+ 0xc7386a07, 0xb94022a1, 0x93681ac3, 0xcf8076bc, 0xe5a84ede,
8130
+ 0x9bd00678, 0xb1f83e1a, 0x67209734, 0x4d08af56, 0x3370e7f0,
8131
+ 0x1958df92, 0xcff02089, 0xe5d818eb, 0x9ba0504d, 0xb188682f,
8132
+ 0x6750c101, 0x4d78f963, 0x3300b1c5, 0x192889a7, 0x45c0e5d8,
8133
+ 0x6fe8ddba, 0x1190951c, 0x3bb8ad7e, 0xed600450, 0xc7483c32,
8134
+ 0xb9307494, 0x93184cf6, 0x00e0ac6a, 0x2ac89408, 0x54b0dcae,
8135
+ 0x7e98e4cc, 0xa8404de2, 0x82687580, 0xfc103d26, 0xd6380544,
8136
+ 0x8ad0693b, 0xa0f85159, 0xde8019ff, 0xf4a8219d, 0x227088b3,
8137
+ 0x0858b0d1, 0x7620f877, 0x5c08c015, 0xce31785d, 0xe419403f,
8138
+ 0x9a610899, 0xb04930fb, 0x669199d5, 0x4cb9a1b7, 0x32c1e911,
8139
+ 0x18e9d173, 0x4401bd0c, 0x6e29856e, 0x1051cdc8, 0x3a79f5aa,
8140
+ 0xeca15c84, 0xc68964e6, 0xb8f12c40, 0x92d91422, 0x0121f4be,
8141
+ 0x2b09ccdc, 0x5571847a, 0x7f59bc18, 0xa9811536, 0x83a92d54,
8142
+ 0xfdd165f2, 0xd7f95d90, 0x8b1131ef, 0xa139098d, 0xdf41412b,
8143
+ 0xf5697949, 0x23b1d067, 0x0999e805, 0x77e1a0a3, 0x5dc998c1,
8144
+ 0x8b6167da, 0xa1495fb8, 0xdf31171e, 0xf5192f7c, 0x23c18652,
8145
+ 0x09e9be30, 0x7791f696, 0x5db9cef4, 0x0151a28b, 0x2b799ae9,
8146
+ 0x5501d24f, 0x7f29ea2d, 0xa9f14303, 0x83d97b61, 0xfda133c7,
8147
+ 0xd7890ba5, 0x4471eb39, 0x6e59d35b, 0x10219bfd, 0x3a09a39f,
8148
+ 0xecd10ab1, 0xc6f932d3, 0xb8817a75, 0x92a94217, 0xce412e68,
8149
+ 0xe469160a, 0x9a115eac, 0xb03966ce, 0x66e1cfe0, 0x4cc9f782,
8150
+ 0x32b1bf24, 0x18998746, 0x44914753, 0x6eb97f31, 0x10c13797,
8151
+ 0x3ae90ff5, 0xec31a6db, 0xc6199eb9, 0xb861d61f, 0x9249ee7d,
8152
+ 0xcea18202, 0xe489ba60, 0x9af1f2c6, 0xb0d9caa4, 0x6601638a,
8153
+ 0x4c295be8, 0x3251134e, 0x18792b2c, 0x8b81cbb0, 0xa1a9f3d2,
8154
+ 0xdfd1bb74, 0xf5f98316, 0x23212a38, 0x0909125a, 0x77715afc,
8155
+ 0x5d59629e, 0x01b10ee1, 0x2b993683, 0x55e17e25, 0x7fc94647,
8156
+ 0xa911ef69, 0x8339d70b, 0xfd419fad, 0xd769a7cf, 0x01c158d4,
8157
+ 0x2be960b6, 0x55912810, 0x7fb91072, 0xa961b95c, 0x8349813e,
8158
+ 0xfd31c998, 0xd719f1fa, 0x8bf19d85, 0xa1d9a5e7, 0xdfa1ed41,
8159
+ 0xf589d523, 0x23517c0d, 0x0979446f, 0x77010cc9, 0x5d2934ab,
8160
+ 0xced1d437, 0xe4f9ec55, 0x9a81a4f3, 0xb0a99c91, 0x667135bf,
8161
+ 0x4c590ddd, 0x3221457b, 0x18097d19, 0x44e11166, 0x6ec92904,
8162
+ 0x10b161a2, 0x3a9959c0, 0xec41f0ee, 0xc669c88c, 0xb811802a,
8163
+ 0x9239b848},
8164
+ {0x00000000, 0x4713f6fb, 0x8e27edf6, 0xc9341b0d, 0xc73eddad,
8165
+ 0x802d2b56, 0x4919305b, 0x0e0ac6a0, 0x550cbd1b, 0x121f4be0,
8166
+ 0xdb2b50ed, 0x9c38a616, 0x923260b6, 0xd521964d, 0x1c158d40,
8167
+ 0x5b067bbb, 0xaa197a36, 0xed0a8ccd, 0x243e97c0, 0x632d613b,
8168
+ 0x6d27a79b, 0x2a345160, 0xe3004a6d, 0xa413bc96, 0xff15c72d,
8169
+ 0xb80631d6, 0x71322adb, 0x3621dc20, 0x382b1a80, 0x7f38ec7b,
8170
+ 0xb60cf776, 0xf11f018d, 0x8f43f22d, 0xc85004d6, 0x01641fdb,
8171
+ 0x4677e920, 0x487d2f80, 0x0f6ed97b, 0xc65ac276, 0x8149348d,
8172
+ 0xda4f4f36, 0x9d5cb9cd, 0x5468a2c0, 0x137b543b, 0x1d71929b,
8173
+ 0x5a626460, 0x93567f6d, 0xd4458996, 0x255a881b, 0x62497ee0,
8174
+ 0xab7d65ed, 0xec6e9316, 0xe26455b6, 0xa577a34d, 0x6c43b840,
8175
+ 0x2b504ebb, 0x70563500, 0x3745c3fb, 0xfe71d8f6, 0xb9622e0d,
8176
+ 0xb768e8ad, 0xf07b1e56, 0x394f055b, 0x7e5cf3a0, 0xc5f6e21b,
8177
+ 0x82e514e0, 0x4bd10fed, 0x0cc2f916, 0x02c83fb6, 0x45dbc94d,
8178
+ 0x8cefd240, 0xcbfc24bb, 0x90fa5f00, 0xd7e9a9fb, 0x1eddb2f6,
8179
+ 0x59ce440d, 0x57c482ad, 0x10d77456, 0xd9e36f5b, 0x9ef099a0,
8180
+ 0x6fef982d, 0x28fc6ed6, 0xe1c875db, 0xa6db8320, 0xa8d14580,
8181
+ 0xefc2b37b, 0x26f6a876, 0x61e55e8d, 0x3ae32536, 0x7df0d3cd,
8182
+ 0xb4c4c8c0, 0xf3d73e3b, 0xfdddf89b, 0xbace0e60, 0x73fa156d,
8183
+ 0x34e9e396, 0x4ab51036, 0x0da6e6cd, 0xc492fdc0, 0x83810b3b,
8184
+ 0x8d8bcd9b, 0xca983b60, 0x03ac206d, 0x44bfd696, 0x1fb9ad2d,
8185
+ 0x58aa5bd6, 0x919e40db, 0xd68db620, 0xd8877080, 0x9f94867b,
8186
+ 0x56a09d76, 0x11b36b8d, 0xe0ac6a00, 0xa7bf9cfb, 0x6e8b87f6,
8187
+ 0x2998710d, 0x2792b7ad, 0x60814156, 0xa9b55a5b, 0xeea6aca0,
8188
+ 0xb5a0d71b, 0xf2b321e0, 0x3b873aed, 0x7c94cc16, 0x729e0ab6,
8189
+ 0x358dfc4d, 0xfcb9e740, 0xbbaa11bb, 0x509cc277, 0x178f348c,
8190
+ 0xdebb2f81, 0x99a8d97a, 0x97a21fda, 0xd0b1e921, 0x1985f22c,
8191
+ 0x5e9604d7, 0x05907f6c, 0x42838997, 0x8bb7929a, 0xcca46461,
8192
+ 0xc2aea2c1, 0x85bd543a, 0x4c894f37, 0x0b9ab9cc, 0xfa85b841,
8193
+ 0xbd964eba, 0x74a255b7, 0x33b1a34c, 0x3dbb65ec, 0x7aa89317,
8194
+ 0xb39c881a, 0xf48f7ee1, 0xaf89055a, 0xe89af3a1, 0x21aee8ac,
8195
+ 0x66bd1e57, 0x68b7d8f7, 0x2fa42e0c, 0xe6903501, 0xa183c3fa,
8196
+ 0xdfdf305a, 0x98ccc6a1, 0x51f8ddac, 0x16eb2b57, 0x18e1edf7,
8197
+ 0x5ff21b0c, 0x96c60001, 0xd1d5f6fa, 0x8ad38d41, 0xcdc07bba,
8198
+ 0x04f460b7, 0x43e7964c, 0x4ded50ec, 0x0afea617, 0xc3cabd1a,
8199
+ 0x84d94be1, 0x75c64a6c, 0x32d5bc97, 0xfbe1a79a, 0xbcf25161,
8200
+ 0xb2f897c1, 0xf5eb613a, 0x3cdf7a37, 0x7bcc8ccc, 0x20caf777,
8201
+ 0x67d9018c, 0xaeed1a81, 0xe9feec7a, 0xe7f42ada, 0xa0e7dc21,
8202
+ 0x69d3c72c, 0x2ec031d7, 0x956a206c, 0xd279d697, 0x1b4dcd9a,
8203
+ 0x5c5e3b61, 0x5254fdc1, 0x15470b3a, 0xdc731037, 0x9b60e6cc,
8204
+ 0xc0669d77, 0x87756b8c, 0x4e417081, 0x0952867a, 0x075840da,
8205
+ 0x404bb621, 0x897fad2c, 0xce6c5bd7, 0x3f735a5a, 0x7860aca1,
8206
+ 0xb154b7ac, 0xf6474157, 0xf84d87f7, 0xbf5e710c, 0x766a6a01,
8207
+ 0x31799cfa, 0x6a7fe741, 0x2d6c11ba, 0xe4580ab7, 0xa34bfc4c,
8208
+ 0xad413aec, 0xea52cc17, 0x2366d71a, 0x647521e1, 0x1a29d241,
8209
+ 0x5d3a24ba, 0x940e3fb7, 0xd31dc94c, 0xdd170fec, 0x9a04f917,
8210
+ 0x5330e21a, 0x142314e1, 0x4f256f5a, 0x083699a1, 0xc10282ac,
8211
+ 0x86117457, 0x881bb2f7, 0xcf08440c, 0x063c5f01, 0x412fa9fa,
8212
+ 0xb030a877, 0xf7235e8c, 0x3e174581, 0x7904b37a, 0x770e75da,
8213
+ 0x301d8321, 0xf929982c, 0xbe3a6ed7, 0xe53c156c, 0xa22fe397,
8214
+ 0x6b1bf89a, 0x2c080e61, 0x2202c8c1, 0x65113e3a, 0xac252537,
8215
+ 0xeb36d3cc},
8216
+ {0x00000000, 0xa13984ee, 0x99020f9d, 0x383b8b73, 0xe975197b,
8217
+ 0x484c9d95, 0x707716e6, 0xd14e9208, 0x099b34b7, 0xa8a2b059,
8218
+ 0x90993b2a, 0x31a0bfc4, 0xe0ee2dcc, 0x41d7a922, 0x79ec2251,
8219
+ 0xd8d5a6bf, 0x1336696e, 0xb20fed80, 0x8a3466f3, 0x2b0de21d,
8220
+ 0xfa437015, 0x5b7af4fb, 0x63417f88, 0xc278fb66, 0x1aad5dd9,
8221
+ 0xbb94d937, 0x83af5244, 0x2296d6aa, 0xf3d844a2, 0x52e1c04c,
8222
+ 0x6ada4b3f, 0xcbe3cfd1, 0x266cd2dc, 0x87555632, 0xbf6edd41,
8223
+ 0x1e5759af, 0xcf19cba7, 0x6e204f49, 0x561bc43a, 0xf72240d4,
8224
+ 0x2ff7e66b, 0x8ece6285, 0xb6f5e9f6, 0x17cc6d18, 0xc682ff10,
8225
+ 0x67bb7bfe, 0x5f80f08d, 0xfeb97463, 0x355abbb2, 0x94633f5c,
8226
+ 0xac58b42f, 0x0d6130c1, 0xdc2fa2c9, 0x7d162627, 0x452dad54,
8227
+ 0xe41429ba, 0x3cc18f05, 0x9df80beb, 0xa5c38098, 0x04fa0476,
8228
+ 0xd5b4967e, 0x748d1290, 0x4cb699e3, 0xed8f1d0d, 0x4cd9a5b8,
8229
+ 0xede02156, 0xd5dbaa25, 0x74e22ecb, 0xa5acbcc3, 0x0495382d,
8230
+ 0x3caeb35e, 0x9d9737b0, 0x4542910f, 0xe47b15e1, 0xdc409e92,
8231
+ 0x7d791a7c, 0xac378874, 0x0d0e0c9a, 0x353587e9, 0x940c0307,
8232
+ 0x5fefccd6, 0xfed64838, 0xc6edc34b, 0x67d447a5, 0xb69ad5ad,
8233
+ 0x17a35143, 0x2f98da30, 0x8ea15ede, 0x5674f861, 0xf74d7c8f,
8234
+ 0xcf76f7fc, 0x6e4f7312, 0xbf01e11a, 0x1e3865f4, 0x2603ee87,
8235
+ 0x873a6a69, 0x6ab57764, 0xcb8cf38a, 0xf3b778f9, 0x528efc17,
8236
+ 0x83c06e1f, 0x22f9eaf1, 0x1ac26182, 0xbbfbe56c, 0x632e43d3,
8237
+ 0xc217c73d, 0xfa2c4c4e, 0x5b15c8a0, 0x8a5b5aa8, 0x2b62de46,
8238
+ 0x13595535, 0xb260d1db, 0x79831e0a, 0xd8ba9ae4, 0xe0811197,
8239
+ 0x41b89579, 0x90f60771, 0x31cf839f, 0x09f408ec, 0xa8cd8c02,
8240
+ 0x70182abd, 0xd121ae53, 0xe91a2520, 0x4823a1ce, 0x996d33c6,
8241
+ 0x3854b728, 0x006f3c5b, 0xa156b8b5, 0x99b34b70, 0x388acf9e,
8242
+ 0x00b144ed, 0xa188c003, 0x70c6520b, 0xd1ffd6e5, 0xe9c45d96,
8243
+ 0x48fdd978, 0x90287fc7, 0x3111fb29, 0x092a705a, 0xa813f4b4,
8244
+ 0x795d66bc, 0xd864e252, 0xe05f6921, 0x4166edcf, 0x8a85221e,
8245
+ 0x2bbca6f0, 0x13872d83, 0xb2bea96d, 0x63f03b65, 0xc2c9bf8b,
8246
+ 0xfaf234f8, 0x5bcbb016, 0x831e16a9, 0x22279247, 0x1a1c1934,
8247
+ 0xbb259dda, 0x6a6b0fd2, 0xcb528b3c, 0xf369004f, 0x525084a1,
8248
+ 0xbfdf99ac, 0x1ee61d42, 0x26dd9631, 0x87e412df, 0x56aa80d7,
8249
+ 0xf7930439, 0xcfa88f4a, 0x6e910ba4, 0xb644ad1b, 0x177d29f5,
8250
+ 0x2f46a286, 0x8e7f2668, 0x5f31b460, 0xfe08308e, 0xc633bbfd,
8251
+ 0x670a3f13, 0xace9f0c2, 0x0dd0742c, 0x35ebff5f, 0x94d27bb1,
8252
+ 0x459ce9b9, 0xe4a56d57, 0xdc9ee624, 0x7da762ca, 0xa572c475,
8253
+ 0x044b409b, 0x3c70cbe8, 0x9d494f06, 0x4c07dd0e, 0xed3e59e0,
8254
+ 0xd505d293, 0x743c567d, 0xd56aeec8, 0x74536a26, 0x4c68e155,
8255
+ 0xed5165bb, 0x3c1ff7b3, 0x9d26735d, 0xa51df82e, 0x04247cc0,
8256
+ 0xdcf1da7f, 0x7dc85e91, 0x45f3d5e2, 0xe4ca510c, 0x3584c304,
8257
+ 0x94bd47ea, 0xac86cc99, 0x0dbf4877, 0xc65c87a6, 0x67650348,
8258
+ 0x5f5e883b, 0xfe670cd5, 0x2f299edd, 0x8e101a33, 0xb62b9140,
8259
+ 0x171215ae, 0xcfc7b311, 0x6efe37ff, 0x56c5bc8c, 0xf7fc3862,
8260
+ 0x26b2aa6a, 0x878b2e84, 0xbfb0a5f7, 0x1e892119, 0xf3063c14,
8261
+ 0x523fb8fa, 0x6a043389, 0xcb3db767, 0x1a73256f, 0xbb4aa181,
8262
+ 0x83712af2, 0x2248ae1c, 0xfa9d08a3, 0x5ba48c4d, 0x639f073e,
8263
+ 0xc2a683d0, 0x13e811d8, 0xb2d19536, 0x8aea1e45, 0x2bd39aab,
8264
+ 0xe030557a, 0x4109d194, 0x79325ae7, 0xd80bde09, 0x09454c01,
8265
+ 0xa87cc8ef, 0x9047439c, 0x317ec772, 0xe9ab61cd, 0x4892e523,
8266
+ 0x70a96e50, 0xd190eabe, 0x00de78b6, 0xa1e7fc58, 0x99dc772b,
8267
+ 0x38e5f3c5},
8268
+ {0x00000000, 0xe81790a1, 0x0b5e2703, 0xe349b7a2, 0x16bc4e06,
8269
+ 0xfeabdea7, 0x1de26905, 0xf5f5f9a4, 0x2d789c0c, 0xc56f0cad,
8270
+ 0x2626bb0f, 0xce312bae, 0x3bc4d20a, 0xd3d342ab, 0x309af509,
8271
+ 0xd88d65a8, 0x5af13818, 0xb2e6a8b9, 0x51af1f1b, 0xb9b88fba,
8272
+ 0x4c4d761e, 0xa45ae6bf, 0x4713511d, 0xaf04c1bc, 0x7789a414,
8273
+ 0x9f9e34b5, 0x7cd78317, 0x94c013b6, 0x6135ea12, 0x89227ab3,
8274
+ 0x6a6bcd11, 0x827c5db0, 0xb5e27030, 0x5df5e091, 0xbebc5733,
8275
+ 0x56abc792, 0xa35e3e36, 0x4b49ae97, 0xa8001935, 0x40178994,
8276
+ 0x989aec3c, 0x708d7c9d, 0x93c4cb3f, 0x7bd35b9e, 0x8e26a23a,
8277
+ 0x6631329b, 0x85788539, 0x6d6f1598, 0xef134828, 0x0704d889,
8278
+ 0xe44d6f2b, 0x0c5aff8a, 0xf9af062e, 0x11b8968f, 0xf2f1212d,
8279
+ 0x1ae6b18c, 0xc26bd424, 0x2a7c4485, 0xc935f327, 0x21226386,
8280
+ 0xd4d79a22, 0x3cc00a83, 0xdf89bd21, 0x379e2d80, 0xb0b5e621,
8281
+ 0x58a27680, 0xbbebc122, 0x53fc5183, 0xa609a827, 0x4e1e3886,
8282
+ 0xad578f24, 0x45401f85, 0x9dcd7a2d, 0x75daea8c, 0x96935d2e,
8283
+ 0x7e84cd8f, 0x8b71342b, 0x6366a48a, 0x802f1328, 0x68388389,
8284
+ 0xea44de39, 0x02534e98, 0xe11af93a, 0x090d699b, 0xfcf8903f,
8285
+ 0x14ef009e, 0xf7a6b73c, 0x1fb1279d, 0xc73c4235, 0x2f2bd294,
8286
+ 0xcc626536, 0x2475f597, 0xd1800c33, 0x39979c92, 0xdade2b30,
8287
+ 0x32c9bb91, 0x05579611, 0xed4006b0, 0x0e09b112, 0xe61e21b3,
8288
+ 0x13ebd817, 0xfbfc48b6, 0x18b5ff14, 0xf0a26fb5, 0x282f0a1d,
8289
+ 0xc0389abc, 0x23712d1e, 0xcb66bdbf, 0x3e93441b, 0xd684d4ba,
8290
+ 0x35cd6318, 0xdddaf3b9, 0x5fa6ae09, 0xb7b13ea8, 0x54f8890a,
8291
+ 0xbcef19ab, 0x491ae00f, 0xa10d70ae, 0x4244c70c, 0xaa5357ad,
8292
+ 0x72de3205, 0x9ac9a2a4, 0x79801506, 0x919785a7, 0x64627c03,
8293
+ 0x8c75eca2, 0x6f3c5b00, 0x872bcba1, 0xba1aca03, 0x520d5aa2,
8294
+ 0xb144ed00, 0x59537da1, 0xaca68405, 0x44b114a4, 0xa7f8a306,
8295
+ 0x4fef33a7, 0x9762560f, 0x7f75c6ae, 0x9c3c710c, 0x742be1ad,
8296
+ 0x81de1809, 0x69c988a8, 0x8a803f0a, 0x6297afab, 0xe0ebf21b,
8297
+ 0x08fc62ba, 0xebb5d518, 0x03a245b9, 0xf657bc1d, 0x1e402cbc,
8298
+ 0xfd099b1e, 0x151e0bbf, 0xcd936e17, 0x2584feb6, 0xc6cd4914,
8299
+ 0x2edad9b5, 0xdb2f2011, 0x3338b0b0, 0xd0710712, 0x386697b3,
8300
+ 0x0ff8ba33, 0xe7ef2a92, 0x04a69d30, 0xecb10d91, 0x1944f435,
8301
+ 0xf1536494, 0x121ad336, 0xfa0d4397, 0x2280263f, 0xca97b69e,
8302
+ 0x29de013c, 0xc1c9919d, 0x343c6839, 0xdc2bf898, 0x3f624f3a,
8303
+ 0xd775df9b, 0x5509822b, 0xbd1e128a, 0x5e57a528, 0xb6403589,
8304
+ 0x43b5cc2d, 0xaba25c8c, 0x48ebeb2e, 0xa0fc7b8f, 0x78711e27,
8305
+ 0x90668e86, 0x732f3924, 0x9b38a985, 0x6ecd5021, 0x86dac080,
8306
+ 0x65937722, 0x8d84e783, 0x0aaf2c22, 0xe2b8bc83, 0x01f10b21,
8307
+ 0xe9e69b80, 0x1c136224, 0xf404f285, 0x174d4527, 0xff5ad586,
8308
+ 0x27d7b02e, 0xcfc0208f, 0x2c89972d, 0xc49e078c, 0x316bfe28,
8309
+ 0xd97c6e89, 0x3a35d92b, 0xd222498a, 0x505e143a, 0xb849849b,
8310
+ 0x5b003339, 0xb317a398, 0x46e25a3c, 0xaef5ca9d, 0x4dbc7d3f,
8311
+ 0xa5abed9e, 0x7d268836, 0x95311897, 0x7678af35, 0x9e6f3f94,
8312
+ 0x6b9ac630, 0x838d5691, 0x60c4e133, 0x88d37192, 0xbf4d5c12,
8313
+ 0x575accb3, 0xb4137b11, 0x5c04ebb0, 0xa9f11214, 0x41e682b5,
8314
+ 0xa2af3517, 0x4ab8a5b6, 0x9235c01e, 0x7a2250bf, 0x996be71d,
8315
+ 0x717c77bc, 0x84898e18, 0x6c9e1eb9, 0x8fd7a91b, 0x67c039ba,
8316
+ 0xe5bc640a, 0x0dabf4ab, 0xeee24309, 0x06f5d3a8, 0xf3002a0c,
8317
+ 0x1b17baad, 0xf85e0d0f, 0x10499dae, 0xc8c4f806, 0x20d368a7,
8318
+ 0xc39adf05, 0x2b8d4fa4, 0xde78b600, 0x366f26a1, 0xd5269103,
8319
+ 0x3d3101a2}};
8320
+
8321
+local const z_word_t FAR crc_braid_big_table[][256] = {
8322
+ {0x0000000000000000, 0xa19017e800000000, 0x03275e0b00000000,
8323
+ 0xa2b749e300000000, 0x064ebc1600000000, 0xa7deabfe00000000,
8324
+ 0x0569e21d00000000, 0xa4f9f5f500000000, 0x0c9c782d00000000,
8325
+ 0xad0c6fc500000000, 0x0fbb262600000000, 0xae2b31ce00000000,
8326
+ 0x0ad2c43b00000000, 0xab42d3d300000000, 0x09f59a3000000000,
8327
+ 0xa8658dd800000000, 0x1838f15a00000000, 0xb9a8e6b200000000,
8328
+ 0x1b1faf5100000000, 0xba8fb8b900000000, 0x1e764d4c00000000,
8329
+ 0xbfe65aa400000000, 0x1d51134700000000, 0xbcc104af00000000,
8330
+ 0x14a4897700000000, 0xb5349e9f00000000, 0x1783d77c00000000,
8331
+ 0xb613c09400000000, 0x12ea356100000000, 0xb37a228900000000,
8332
+ 0x11cd6b6a00000000, 0xb05d7c8200000000, 0x3070e2b500000000,
8333
+ 0x91e0f55d00000000, 0x3357bcbe00000000, 0x92c7ab5600000000,
8334
+ 0x363e5ea300000000, 0x97ae494b00000000, 0x351900a800000000,
8335
+ 0x9489174000000000, 0x3cec9a9800000000, 0x9d7c8d7000000000,
8336
+ 0x3fcbc49300000000, 0x9e5bd37b00000000, 0x3aa2268e00000000,
8337
+ 0x9b32316600000000, 0x3985788500000000, 0x98156f6d00000000,
8338
+ 0x284813ef00000000, 0x89d8040700000000, 0x2b6f4de400000000,
8339
+ 0x8aff5a0c00000000, 0x2e06aff900000000, 0x8f96b81100000000,
8340
+ 0x2d21f1f200000000, 0x8cb1e61a00000000, 0x24d46bc200000000,
8341
+ 0x85447c2a00000000, 0x27f335c900000000, 0x8663222100000000,
8342
+ 0x229ad7d400000000, 0x830ac03c00000000, 0x21bd89df00000000,
8343
+ 0x802d9e3700000000, 0x21e6b5b000000000, 0x8076a25800000000,
8344
+ 0x22c1ebbb00000000, 0x8351fc5300000000, 0x27a809a600000000,
8345
+ 0x86381e4e00000000, 0x248f57ad00000000, 0x851f404500000000,
8346
+ 0x2d7acd9d00000000, 0x8ceada7500000000, 0x2e5d939600000000,
8347
+ 0x8fcd847e00000000, 0x2b34718b00000000, 0x8aa4666300000000,
8348
+ 0x28132f8000000000, 0x8983386800000000, 0x39de44ea00000000,
8349
+ 0x984e530200000000, 0x3af91ae100000000, 0x9b690d0900000000,
8350
+ 0x3f90f8fc00000000, 0x9e00ef1400000000, 0x3cb7a6f700000000,
8351
+ 0x9d27b11f00000000, 0x35423cc700000000, 0x94d22b2f00000000,
8352
+ 0x366562cc00000000, 0x97f5752400000000, 0x330c80d100000000,
8353
+ 0x929c973900000000, 0x302bdeda00000000, 0x91bbc93200000000,
8354
+ 0x1196570500000000, 0xb00640ed00000000, 0x12b1090e00000000,
8355
+ 0xb3211ee600000000, 0x17d8eb1300000000, 0xb648fcfb00000000,
8356
+ 0x14ffb51800000000, 0xb56fa2f000000000, 0x1d0a2f2800000000,
8357
+ 0xbc9a38c000000000, 0x1e2d712300000000, 0xbfbd66cb00000000,
8358
+ 0x1b44933e00000000, 0xbad484d600000000, 0x1863cd3500000000,
8359
+ 0xb9f3dadd00000000, 0x09aea65f00000000, 0xa83eb1b700000000,
8360
+ 0x0a89f85400000000, 0xab19efbc00000000, 0x0fe01a4900000000,
8361
+ 0xae700da100000000, 0x0cc7444200000000, 0xad5753aa00000000,
8362
+ 0x0532de7200000000, 0xa4a2c99a00000000, 0x0615807900000000,
8363
+ 0xa785979100000000, 0x037c626400000000, 0xa2ec758c00000000,
8364
+ 0x005b3c6f00000000, 0xa1cb2b8700000000, 0x03ca1aba00000000,
8365
+ 0xa25a0d5200000000, 0x00ed44b100000000, 0xa17d535900000000,
8366
+ 0x0584a6ac00000000, 0xa414b14400000000, 0x06a3f8a700000000,
8367
+ 0xa733ef4f00000000, 0x0f56629700000000, 0xaec6757f00000000,
8368
+ 0x0c713c9c00000000, 0xade12b7400000000, 0x0918de8100000000,
8369
+ 0xa888c96900000000, 0x0a3f808a00000000, 0xabaf976200000000,
8370
+ 0x1bf2ebe000000000, 0xba62fc0800000000, 0x18d5b5eb00000000,
8371
+ 0xb945a20300000000, 0x1dbc57f600000000, 0xbc2c401e00000000,
8372
+ 0x1e9b09fd00000000, 0xbf0b1e1500000000, 0x176e93cd00000000,
8373
+ 0xb6fe842500000000, 0x1449cdc600000000, 0xb5d9da2e00000000,
8374
+ 0x11202fdb00000000, 0xb0b0383300000000, 0x120771d000000000,
8375
+ 0xb397663800000000, 0x33baf80f00000000, 0x922aefe700000000,
8376
+ 0x309da60400000000, 0x910db1ec00000000, 0x35f4441900000000,
8377
+ 0x946453f100000000, 0x36d31a1200000000, 0x97430dfa00000000,
8378
+ 0x3f26802200000000, 0x9eb697ca00000000, 0x3c01de2900000000,
8379
+ 0x9d91c9c100000000, 0x39683c3400000000, 0x98f82bdc00000000,
8380
+ 0x3a4f623f00000000, 0x9bdf75d700000000, 0x2b82095500000000,
8381
+ 0x8a121ebd00000000, 0x28a5575e00000000, 0x893540b600000000,
8382
+ 0x2dccb54300000000, 0x8c5ca2ab00000000, 0x2eebeb4800000000,
8383
+ 0x8f7bfca000000000, 0x271e717800000000, 0x868e669000000000,
8384
+ 0x24392f7300000000, 0x85a9389b00000000, 0x2150cd6e00000000,
8385
+ 0x80c0da8600000000, 0x2277936500000000, 0x83e7848d00000000,
8386
+ 0x222caf0a00000000, 0x83bcb8e200000000, 0x210bf10100000000,
8387
+ 0x809be6e900000000, 0x2462131c00000000, 0x85f204f400000000,
8388
+ 0x27454d1700000000, 0x86d55aff00000000, 0x2eb0d72700000000,
8389
+ 0x8f20c0cf00000000, 0x2d97892c00000000, 0x8c079ec400000000,
8390
+ 0x28fe6b3100000000, 0x896e7cd900000000, 0x2bd9353a00000000,
8391
+ 0x8a4922d200000000, 0x3a145e5000000000, 0x9b8449b800000000,
8392
+ 0x3933005b00000000, 0x98a317b300000000, 0x3c5ae24600000000,
8393
+ 0x9dcaf5ae00000000, 0x3f7dbc4d00000000, 0x9eedaba500000000,
8394
+ 0x3688267d00000000, 0x9718319500000000, 0x35af787600000000,
8395
+ 0x943f6f9e00000000, 0x30c69a6b00000000, 0x91568d8300000000,
8396
+ 0x33e1c46000000000, 0x9271d38800000000, 0x125c4dbf00000000,
8397
+ 0xb3cc5a5700000000, 0x117b13b400000000, 0xb0eb045c00000000,
8398
+ 0x1412f1a900000000, 0xb582e64100000000, 0x1735afa200000000,
8399
+ 0xb6a5b84a00000000, 0x1ec0359200000000, 0xbf50227a00000000,
8400
+ 0x1de76b9900000000, 0xbc777c7100000000, 0x188e898400000000,
8401
+ 0xb91e9e6c00000000, 0x1ba9d78f00000000, 0xba39c06700000000,
8402
+ 0x0a64bce500000000, 0xabf4ab0d00000000, 0x0943e2ee00000000,
8403
+ 0xa8d3f50600000000, 0x0c2a00f300000000, 0xadba171b00000000,
8404
+ 0x0f0d5ef800000000, 0xae9d491000000000, 0x06f8c4c800000000,
8405
+ 0xa768d32000000000, 0x05df9ac300000000, 0xa44f8d2b00000000,
8406
+ 0x00b678de00000000, 0xa1266f3600000000, 0x039126d500000000,
8407
+ 0xa201313d00000000},
8408
+ {0x0000000000000000, 0xee8439a100000000, 0x9d0f029900000000,
8409
+ 0x738b3b3800000000, 0x7b1975e900000000, 0x959d4c4800000000,
8410
+ 0xe616777000000000, 0x08924ed100000000, 0xb7349b0900000000,
8411
+ 0x59b0a2a800000000, 0x2a3b999000000000, 0xc4bfa03100000000,
8412
+ 0xcc2deee000000000, 0x22a9d74100000000, 0x5122ec7900000000,
8413
+ 0xbfa6d5d800000000, 0x6e69361300000000, 0x80ed0fb200000000,
8414
+ 0xf366348a00000000, 0x1de20d2b00000000, 0x157043fa00000000,
8415
+ 0xfbf47a5b00000000, 0x887f416300000000, 0x66fb78c200000000,
8416
+ 0xd95dad1a00000000, 0x37d994bb00000000, 0x4452af8300000000,
8417
+ 0xaad6962200000000, 0xa244d8f300000000, 0x4cc0e15200000000,
8418
+ 0x3f4bda6a00000000, 0xd1cfe3cb00000000, 0xdcd26c2600000000,
8419
+ 0x3256558700000000, 0x41dd6ebf00000000, 0xaf59571e00000000,
8420
+ 0xa7cb19cf00000000, 0x494f206e00000000, 0x3ac41b5600000000,
8421
+ 0xd44022f700000000, 0x6be6f72f00000000, 0x8562ce8e00000000,
8422
+ 0xf6e9f5b600000000, 0x186dcc1700000000, 0x10ff82c600000000,
8423
+ 0xfe7bbb6700000000, 0x8df0805f00000000, 0x6374b9fe00000000,
8424
+ 0xb2bb5a3500000000, 0x5c3f639400000000, 0x2fb458ac00000000,
8425
+ 0xc130610d00000000, 0xc9a22fdc00000000, 0x2726167d00000000,
8426
+ 0x54ad2d4500000000, 0xba2914e400000000, 0x058fc13c00000000,
8427
+ 0xeb0bf89d00000000, 0x9880c3a500000000, 0x7604fa0400000000,
8428
+ 0x7e96b4d500000000, 0x90128d7400000000, 0xe399b64c00000000,
8429
+ 0x0d1d8fed00000000, 0xb8a5d94c00000000, 0x5621e0ed00000000,
8430
+ 0x25aadbd500000000, 0xcb2ee27400000000, 0xc3bcaca500000000,
8431
+ 0x2d38950400000000, 0x5eb3ae3c00000000, 0xb037979d00000000,
8432
+ 0x0f91424500000000, 0xe1157be400000000, 0x929e40dc00000000,
8433
+ 0x7c1a797d00000000, 0x748837ac00000000, 0x9a0c0e0d00000000,
8434
+ 0xe987353500000000, 0x07030c9400000000, 0xd6ccef5f00000000,
8435
+ 0x3848d6fe00000000, 0x4bc3edc600000000, 0xa547d46700000000,
8436
+ 0xadd59ab600000000, 0x4351a31700000000, 0x30da982f00000000,
8437
+ 0xde5ea18e00000000, 0x61f8745600000000, 0x8f7c4df700000000,
8438
+ 0xfcf776cf00000000, 0x12734f6e00000000, 0x1ae101bf00000000,
8439
+ 0xf465381e00000000, 0x87ee032600000000, 0x696a3a8700000000,
8440
+ 0x6477b56a00000000, 0x8af38ccb00000000, 0xf978b7f300000000,
8441
+ 0x17fc8e5200000000, 0x1f6ec08300000000, 0xf1eaf92200000000,
8442
+ 0x8261c21a00000000, 0x6ce5fbbb00000000, 0xd3432e6300000000,
8443
+ 0x3dc717c200000000, 0x4e4c2cfa00000000, 0xa0c8155b00000000,
8444
+ 0xa85a5b8a00000000, 0x46de622b00000000, 0x3555591300000000,
8445
+ 0xdbd160b200000000, 0x0a1e837900000000, 0xe49abad800000000,
8446
+ 0x971181e000000000, 0x7995b84100000000, 0x7107f69000000000,
8447
+ 0x9f83cf3100000000, 0xec08f40900000000, 0x028ccda800000000,
8448
+ 0xbd2a187000000000, 0x53ae21d100000000, 0x20251ae900000000,
8449
+ 0xcea1234800000000, 0xc6336d9900000000, 0x28b7543800000000,
8450
+ 0x5b3c6f0000000000, 0xb5b856a100000000, 0x704bb39900000000,
8451
+ 0x9ecf8a3800000000, 0xed44b10000000000, 0x03c088a100000000,
8452
+ 0x0b52c67000000000, 0xe5d6ffd100000000, 0x965dc4e900000000,
8453
+ 0x78d9fd4800000000, 0xc77f289000000000, 0x29fb113100000000,
8454
+ 0x5a702a0900000000, 0xb4f413a800000000, 0xbc665d7900000000,
8455
+ 0x52e264d800000000, 0x21695fe000000000, 0xcfed664100000000,
8456
+ 0x1e22858a00000000, 0xf0a6bc2b00000000, 0x832d871300000000,
8457
+ 0x6da9beb200000000, 0x653bf06300000000, 0x8bbfc9c200000000,
8458
+ 0xf834f2fa00000000, 0x16b0cb5b00000000, 0xa9161e8300000000,
8459
+ 0x4792272200000000, 0x34191c1a00000000, 0xda9d25bb00000000,
8460
+ 0xd20f6b6a00000000, 0x3c8b52cb00000000, 0x4f0069f300000000,
8461
+ 0xa184505200000000, 0xac99dfbf00000000, 0x421de61e00000000,
8462
+ 0x3196dd2600000000, 0xdf12e48700000000, 0xd780aa5600000000,
8463
+ 0x390493f700000000, 0x4a8fa8cf00000000, 0xa40b916e00000000,
8464
+ 0x1bad44b600000000, 0xf5297d1700000000, 0x86a2462f00000000,
8465
+ 0x68267f8e00000000, 0x60b4315f00000000, 0x8e3008fe00000000,
8466
+ 0xfdbb33c600000000, 0x133f0a6700000000, 0xc2f0e9ac00000000,
8467
+ 0x2c74d00d00000000, 0x5fffeb3500000000, 0xb17bd29400000000,
8468
+ 0xb9e99c4500000000, 0x576da5e400000000, 0x24e69edc00000000,
8469
+ 0xca62a77d00000000, 0x75c472a500000000, 0x9b404b0400000000,
8470
+ 0xe8cb703c00000000, 0x064f499d00000000, 0x0edd074c00000000,
8471
+ 0xe0593eed00000000, 0x93d205d500000000, 0x7d563c7400000000,
8472
+ 0xc8ee6ad500000000, 0x266a537400000000, 0x55e1684c00000000,
8473
+ 0xbb6551ed00000000, 0xb3f71f3c00000000, 0x5d73269d00000000,
8474
+ 0x2ef81da500000000, 0xc07c240400000000, 0x7fdaf1dc00000000,
8475
+ 0x915ec87d00000000, 0xe2d5f34500000000, 0x0c51cae400000000,
8476
+ 0x04c3843500000000, 0xea47bd9400000000, 0x99cc86ac00000000,
8477
+ 0x7748bf0d00000000, 0xa6875cc600000000, 0x4803656700000000,
8478
+ 0x3b885e5f00000000, 0xd50c67fe00000000, 0xdd9e292f00000000,
8479
+ 0x331a108e00000000, 0x40912bb600000000, 0xae15121700000000,
8480
+ 0x11b3c7cf00000000, 0xff37fe6e00000000, 0x8cbcc55600000000,
8481
+ 0x6238fcf700000000, 0x6aaab22600000000, 0x842e8b8700000000,
8482
+ 0xf7a5b0bf00000000, 0x1921891e00000000, 0x143c06f300000000,
8483
+ 0xfab83f5200000000, 0x8933046a00000000, 0x67b73dcb00000000,
8484
+ 0x6f25731a00000000, 0x81a14abb00000000, 0xf22a718300000000,
8485
+ 0x1cae482200000000, 0xa3089dfa00000000, 0x4d8ca45b00000000,
8486
+ 0x3e079f6300000000, 0xd083a6c200000000, 0xd811e81300000000,
8487
+ 0x3695d1b200000000, 0x451eea8a00000000, 0xab9ad32b00000000,
8488
+ 0x7a5530e000000000, 0x94d1094100000000, 0xe75a327900000000,
8489
+ 0x09de0bd800000000, 0x014c450900000000, 0xefc87ca800000000,
8490
+ 0x9c43479000000000, 0x72c77e3100000000, 0xcd61abe900000000,
8491
+ 0x23e5924800000000, 0x506ea97000000000, 0xbeea90d100000000,
8492
+ 0xb678de0000000000, 0x58fce7a100000000, 0x2b77dc9900000000,
8493
+ 0xc5f3e53800000000},
8494
+ {0x0000000000000000, 0xfbf6134700000000, 0xf6ed278e00000000,
8495
+ 0x0d1b34c900000000, 0xaddd3ec700000000, 0x562b2d8000000000,
8496
+ 0x5b30194900000000, 0xa0c60a0e00000000, 0x1bbd0c5500000000,
8497
+ 0xe04b1f1200000000, 0xed502bdb00000000, 0x16a6389c00000000,
8498
+ 0xb660329200000000, 0x4d9621d500000000, 0x408d151c00000000,
8499
+ 0xbb7b065b00000000, 0x367a19aa00000000, 0xcd8c0aed00000000,
8500
+ 0xc0973e2400000000, 0x3b612d6300000000, 0x9ba7276d00000000,
8501
+ 0x6051342a00000000, 0x6d4a00e300000000, 0x96bc13a400000000,
8502
+ 0x2dc715ff00000000, 0xd63106b800000000, 0xdb2a327100000000,
8503
+ 0x20dc213600000000, 0x801a2b3800000000, 0x7bec387f00000000,
8504
+ 0x76f70cb600000000, 0x8d011ff100000000, 0x2df2438f00000000,
8505
+ 0xd60450c800000000, 0xdb1f640100000000, 0x20e9774600000000,
8506
+ 0x802f7d4800000000, 0x7bd96e0f00000000, 0x76c25ac600000000,
8507
+ 0x8d34498100000000, 0x364f4fda00000000, 0xcdb95c9d00000000,
8508
+ 0xc0a2685400000000, 0x3b547b1300000000, 0x9b92711d00000000,
8509
+ 0x6064625a00000000, 0x6d7f569300000000, 0x968945d400000000,
8510
+ 0x1b885a2500000000, 0xe07e496200000000, 0xed657dab00000000,
8511
+ 0x16936eec00000000, 0xb65564e200000000, 0x4da377a500000000,
8512
+ 0x40b8436c00000000, 0xbb4e502b00000000, 0x0035567000000000,
8513
+ 0xfbc3453700000000, 0xf6d871fe00000000, 0x0d2e62b900000000,
8514
+ 0xade868b700000000, 0x561e7bf000000000, 0x5b054f3900000000,
8515
+ 0xa0f35c7e00000000, 0x1be2f6c500000000, 0xe014e58200000000,
8516
+ 0xed0fd14b00000000, 0x16f9c20c00000000, 0xb63fc80200000000,
8517
+ 0x4dc9db4500000000, 0x40d2ef8c00000000, 0xbb24fccb00000000,
8518
+ 0x005ffa9000000000, 0xfba9e9d700000000, 0xf6b2dd1e00000000,
8519
+ 0x0d44ce5900000000, 0xad82c45700000000, 0x5674d71000000000,
8520
+ 0x5b6fe3d900000000, 0xa099f09e00000000, 0x2d98ef6f00000000,
8521
+ 0xd66efc2800000000, 0xdb75c8e100000000, 0x2083dba600000000,
8522
+ 0x8045d1a800000000, 0x7bb3c2ef00000000, 0x76a8f62600000000,
8523
+ 0x8d5ee56100000000, 0x3625e33a00000000, 0xcdd3f07d00000000,
8524
+ 0xc0c8c4b400000000, 0x3b3ed7f300000000, 0x9bf8ddfd00000000,
8525
+ 0x600eceba00000000, 0x6d15fa7300000000, 0x96e3e93400000000,
8526
+ 0x3610b54a00000000, 0xcde6a60d00000000, 0xc0fd92c400000000,
8527
+ 0x3b0b818300000000, 0x9bcd8b8d00000000, 0x603b98ca00000000,
8528
+ 0x6d20ac0300000000, 0x96d6bf4400000000, 0x2dadb91f00000000,
8529
+ 0xd65baa5800000000, 0xdb409e9100000000, 0x20b68dd600000000,
8530
+ 0x807087d800000000, 0x7b86949f00000000, 0x769da05600000000,
8531
+ 0x8d6bb31100000000, 0x006aace000000000, 0xfb9cbfa700000000,
8532
+ 0xf6878b6e00000000, 0x0d71982900000000, 0xadb7922700000000,
8533
+ 0x5641816000000000, 0x5b5ab5a900000000, 0xa0aca6ee00000000,
8534
+ 0x1bd7a0b500000000, 0xe021b3f200000000, 0xed3a873b00000000,
8535
+ 0x16cc947c00000000, 0xb60a9e7200000000, 0x4dfc8d3500000000,
8536
+ 0x40e7b9fc00000000, 0xbb11aabb00000000, 0x77c29c5000000000,
8537
+ 0x8c348f1700000000, 0x812fbbde00000000, 0x7ad9a89900000000,
8538
+ 0xda1fa29700000000, 0x21e9b1d000000000, 0x2cf2851900000000,
8539
+ 0xd704965e00000000, 0x6c7f900500000000, 0x9789834200000000,
8540
+ 0x9a92b78b00000000, 0x6164a4cc00000000, 0xc1a2aec200000000,
8541
+ 0x3a54bd8500000000, 0x374f894c00000000, 0xccb99a0b00000000,
8542
+ 0x41b885fa00000000, 0xba4e96bd00000000, 0xb755a27400000000,
8543
+ 0x4ca3b13300000000, 0xec65bb3d00000000, 0x1793a87a00000000,
8544
+ 0x1a889cb300000000, 0xe17e8ff400000000, 0x5a0589af00000000,
8545
+ 0xa1f39ae800000000, 0xace8ae2100000000, 0x571ebd6600000000,
8546
+ 0xf7d8b76800000000, 0x0c2ea42f00000000, 0x013590e600000000,
8547
+ 0xfac383a100000000, 0x5a30dfdf00000000, 0xa1c6cc9800000000,
8548
+ 0xacddf85100000000, 0x572beb1600000000, 0xf7ede11800000000,
8549
+ 0x0c1bf25f00000000, 0x0100c69600000000, 0xfaf6d5d100000000,
8550
+ 0x418dd38a00000000, 0xba7bc0cd00000000, 0xb760f40400000000,
8551
+ 0x4c96e74300000000, 0xec50ed4d00000000, 0x17a6fe0a00000000,
8552
+ 0x1abdcac300000000, 0xe14bd98400000000, 0x6c4ac67500000000,
8553
+ 0x97bcd53200000000, 0x9aa7e1fb00000000, 0x6151f2bc00000000,
8554
+ 0xc197f8b200000000, 0x3a61ebf500000000, 0x377adf3c00000000,
8555
+ 0xcc8ccc7b00000000, 0x77f7ca2000000000, 0x8c01d96700000000,
8556
+ 0x811aedae00000000, 0x7aecfee900000000, 0xda2af4e700000000,
8557
+ 0x21dce7a000000000, 0x2cc7d36900000000, 0xd731c02e00000000,
8558
+ 0x6c206a9500000000, 0x97d679d200000000, 0x9acd4d1b00000000,
8559
+ 0x613b5e5c00000000, 0xc1fd545200000000, 0x3a0b471500000000,
8560
+ 0x371073dc00000000, 0xcce6609b00000000, 0x779d66c000000000,
8561
+ 0x8c6b758700000000, 0x8170414e00000000, 0x7a86520900000000,
8562
+ 0xda40580700000000, 0x21b64b4000000000, 0x2cad7f8900000000,
8563
+ 0xd75b6cce00000000, 0x5a5a733f00000000, 0xa1ac607800000000,
8564
+ 0xacb754b100000000, 0x574147f600000000, 0xf7874df800000000,
8565
+ 0x0c715ebf00000000, 0x016a6a7600000000, 0xfa9c793100000000,
8566
+ 0x41e77f6a00000000, 0xba116c2d00000000, 0xb70a58e400000000,
8567
+ 0x4cfc4ba300000000, 0xec3a41ad00000000, 0x17cc52ea00000000,
8568
+ 0x1ad7662300000000, 0xe121756400000000, 0x41d2291a00000000,
8569
+ 0xba243a5d00000000, 0xb73f0e9400000000, 0x4cc91dd300000000,
8570
+ 0xec0f17dd00000000, 0x17f9049a00000000, 0x1ae2305300000000,
8571
+ 0xe114231400000000, 0x5a6f254f00000000, 0xa199360800000000,
8572
+ 0xac8202c100000000, 0x5774118600000000, 0xf7b21b8800000000,
8573
+ 0x0c4408cf00000000, 0x015f3c0600000000, 0xfaa92f4100000000,
8574
+ 0x77a830b000000000, 0x8c5e23f700000000, 0x8145173e00000000,
8575
+ 0x7ab3047900000000, 0xda750e7700000000, 0x21831d3000000000,
8576
+ 0x2c9829f900000000, 0xd76e3abe00000000, 0x6c153ce500000000,
8577
+ 0x97e32fa200000000, 0x9af81b6b00000000, 0x610e082c00000000,
8578
+ 0xc1c8022200000000, 0x3a3e116500000000, 0x372525ac00000000,
8579
+ 0xccd336eb00000000},
8580
+ {0x0000000000000000, 0x6238282a00000000, 0xc470505400000000,
8581
+ 0xa648787e00000000, 0x88e1a0a800000000, 0xead9888200000000,
8582
+ 0x4c91f0fc00000000, 0x2ea9d8d600000000, 0x51c5308a00000000,
8583
+ 0x33fd18a000000000, 0x95b560de00000000, 0xf78d48f400000000,
8584
+ 0xd924902200000000, 0xbb1cb80800000000, 0x1d54c07600000000,
8585
+ 0x7f6ce85c00000000, 0xe38c10cf00000000, 0x81b438e500000000,
8586
+ 0x27fc409b00000000, 0x45c468b100000000, 0x6b6db06700000000,
8587
+ 0x0955984d00000000, 0xaf1de03300000000, 0xcd25c81900000000,
8588
+ 0xb249204500000000, 0xd071086f00000000, 0x7639701100000000,
8589
+ 0x1401583b00000000, 0x3aa880ed00000000, 0x5890a8c700000000,
8590
+ 0xfed8d0b900000000, 0x9ce0f89300000000, 0x871f504500000000,
8591
+ 0xe527786f00000000, 0x436f001100000000, 0x2157283b00000000,
8592
+ 0x0ffef0ed00000000, 0x6dc6d8c700000000, 0xcb8ea0b900000000,
8593
+ 0xa9b6889300000000, 0xd6da60cf00000000, 0xb4e248e500000000,
8594
+ 0x12aa309b00000000, 0x709218b100000000, 0x5e3bc06700000000,
8595
+ 0x3c03e84d00000000, 0x9a4b903300000000, 0xf873b81900000000,
8596
+ 0x6493408a00000000, 0x06ab68a000000000, 0xa0e310de00000000,
8597
+ 0xc2db38f400000000, 0xec72e02200000000, 0x8e4ac80800000000,
8598
+ 0x2802b07600000000, 0x4a3a985c00000000, 0x3556700000000000,
8599
+ 0x576e582a00000000, 0xf126205400000000, 0x931e087e00000000,
8600
+ 0xbdb7d0a800000000, 0xdf8ff88200000000, 0x79c780fc00000000,
8601
+ 0x1bffa8d600000000, 0x0e3fa08a00000000, 0x6c0788a000000000,
8602
+ 0xca4ff0de00000000, 0xa877d8f400000000, 0x86de002200000000,
8603
+ 0xe4e6280800000000, 0x42ae507600000000, 0x2096785c00000000,
8604
+ 0x5ffa900000000000, 0x3dc2b82a00000000, 0x9b8ac05400000000,
8605
+ 0xf9b2e87e00000000, 0xd71b30a800000000, 0xb523188200000000,
8606
+ 0x136b60fc00000000, 0x715348d600000000, 0xedb3b04500000000,
8607
+ 0x8f8b986f00000000, 0x29c3e01100000000, 0x4bfbc83b00000000,
8608
+ 0x655210ed00000000, 0x076a38c700000000, 0xa12240b900000000,
8609
+ 0xc31a689300000000, 0xbc7680cf00000000, 0xde4ea8e500000000,
8610
+ 0x7806d09b00000000, 0x1a3ef8b100000000, 0x3497206700000000,
8611
+ 0x56af084d00000000, 0xf0e7703300000000, 0x92df581900000000,
8612
+ 0x8920f0cf00000000, 0xeb18d8e500000000, 0x4d50a09b00000000,
8613
+ 0x2f6888b100000000, 0x01c1506700000000, 0x63f9784d00000000,
8614
+ 0xc5b1003300000000, 0xa789281900000000, 0xd8e5c04500000000,
8615
+ 0xbadde86f00000000, 0x1c95901100000000, 0x7eadb83b00000000,
8616
+ 0x500460ed00000000, 0x323c48c700000000, 0x947430b900000000,
8617
+ 0xf64c189300000000, 0x6aace00000000000, 0x0894c82a00000000,
8618
+ 0xaedcb05400000000, 0xcce4987e00000000, 0xe24d40a800000000,
8619
+ 0x8075688200000000, 0x263d10fc00000000, 0x440538d600000000,
8620
+ 0x3b69d08a00000000, 0x5951f8a000000000, 0xff1980de00000000,
8621
+ 0x9d21a8f400000000, 0xb388702200000000, 0xd1b0580800000000,
8622
+ 0x77f8207600000000, 0x15c0085c00000000, 0x5d7831ce00000000,
8623
+ 0x3f4019e400000000, 0x9908619a00000000, 0xfb3049b000000000,
8624
+ 0xd599916600000000, 0xb7a1b94c00000000, 0x11e9c13200000000,
8625
+ 0x73d1e91800000000, 0x0cbd014400000000, 0x6e85296e00000000,
8626
+ 0xc8cd511000000000, 0xaaf5793a00000000, 0x845ca1ec00000000,
8627
+ 0xe66489c600000000, 0x402cf1b800000000, 0x2214d99200000000,
8628
+ 0xbef4210100000000, 0xdccc092b00000000, 0x7a84715500000000,
8629
+ 0x18bc597f00000000, 0x361581a900000000, 0x542da98300000000,
8630
+ 0xf265d1fd00000000, 0x905df9d700000000, 0xef31118b00000000,
8631
+ 0x8d0939a100000000, 0x2b4141df00000000, 0x497969f500000000,
8632
+ 0x67d0b12300000000, 0x05e8990900000000, 0xa3a0e17700000000,
8633
+ 0xc198c95d00000000, 0xda67618b00000000, 0xb85f49a100000000,
8634
+ 0x1e1731df00000000, 0x7c2f19f500000000, 0x5286c12300000000,
8635
+ 0x30bee90900000000, 0x96f6917700000000, 0xf4ceb95d00000000,
8636
+ 0x8ba2510100000000, 0xe99a792b00000000, 0x4fd2015500000000,
8637
+ 0x2dea297f00000000, 0x0343f1a900000000, 0x617bd98300000000,
8638
+ 0xc733a1fd00000000, 0xa50b89d700000000, 0x39eb714400000000,
8639
+ 0x5bd3596e00000000, 0xfd9b211000000000, 0x9fa3093a00000000,
8640
+ 0xb10ad1ec00000000, 0xd332f9c600000000, 0x757a81b800000000,
8641
+ 0x1742a99200000000, 0x682e41ce00000000, 0x0a1669e400000000,
8642
+ 0xac5e119a00000000, 0xce6639b000000000, 0xe0cfe16600000000,
8643
+ 0x82f7c94c00000000, 0x24bfb13200000000, 0x4687991800000000,
8644
+ 0x5347914400000000, 0x317fb96e00000000, 0x9737c11000000000,
8645
+ 0xf50fe93a00000000, 0xdba631ec00000000, 0xb99e19c600000000,
8646
+ 0x1fd661b800000000, 0x7dee499200000000, 0x0282a1ce00000000,
8647
+ 0x60ba89e400000000, 0xc6f2f19a00000000, 0xa4cad9b000000000,
8648
+ 0x8a63016600000000, 0xe85b294c00000000, 0x4e13513200000000,
8649
+ 0x2c2b791800000000, 0xb0cb818b00000000, 0xd2f3a9a100000000,
8650
+ 0x74bbd1df00000000, 0x1683f9f500000000, 0x382a212300000000,
8651
+ 0x5a12090900000000, 0xfc5a717700000000, 0x9e62595d00000000,
8652
+ 0xe10eb10100000000, 0x8336992b00000000, 0x257ee15500000000,
8653
+ 0x4746c97f00000000, 0x69ef11a900000000, 0x0bd7398300000000,
8654
+ 0xad9f41fd00000000, 0xcfa769d700000000, 0xd458c10100000000,
8655
+ 0xb660e92b00000000, 0x1028915500000000, 0x7210b97f00000000,
8656
+ 0x5cb961a900000000, 0x3e81498300000000, 0x98c931fd00000000,
8657
+ 0xfaf119d700000000, 0x859df18b00000000, 0xe7a5d9a100000000,
8658
+ 0x41eda1df00000000, 0x23d589f500000000, 0x0d7c512300000000,
8659
+ 0x6f44790900000000, 0xc90c017700000000, 0xab34295d00000000,
8660
+ 0x37d4d1ce00000000, 0x55ecf9e400000000, 0xf3a4819a00000000,
8661
+ 0x919ca9b000000000, 0xbf35716600000000, 0xdd0d594c00000000,
8662
+ 0x7b45213200000000, 0x197d091800000000, 0x6611e14400000000,
8663
+ 0x0429c96e00000000, 0xa261b11000000000, 0xc059993a00000000,
8664
+ 0xeef041ec00000000, 0x8cc869c600000000, 0x2a8011b800000000,
8665
+ 0x48b8399200000000},
8666
+ {0x0000000000000000, 0x4c2896a300000000, 0xd9565d9c00000000,
8667
+ 0x957ecb3f00000000, 0xf3abcbe300000000, 0xbf835d4000000000,
8668
+ 0x2afd967f00000000, 0x66d500dc00000000, 0xa751e61c00000000,
8669
+ 0xeb7970bf00000000, 0x7e07bb8000000000, 0x322f2d2300000000,
8670
+ 0x54fa2dff00000000, 0x18d2bb5c00000000, 0x8dac706300000000,
8671
+ 0xc184e6c000000000, 0x4ea3cc3900000000, 0x028b5a9a00000000,
8672
+ 0x97f591a500000000, 0xdbdd070600000000, 0xbd0807da00000000,
8673
+ 0xf120917900000000, 0x645e5a4600000000, 0x2876cce500000000,
8674
+ 0xe9f22a2500000000, 0xa5dabc8600000000, 0x30a477b900000000,
8675
+ 0x7c8ce11a00000000, 0x1a59e1c600000000, 0x5671776500000000,
8676
+ 0xc30fbc5a00000000, 0x8f272af900000000, 0x9c46997300000000,
8677
+ 0xd06e0fd000000000, 0x4510c4ef00000000, 0x0938524c00000000,
8678
+ 0x6fed529000000000, 0x23c5c43300000000, 0xb6bb0f0c00000000,
8679
+ 0xfa9399af00000000, 0x3b177f6f00000000, 0x773fe9cc00000000,
8680
+ 0xe24122f300000000, 0xae69b45000000000, 0xc8bcb48c00000000,
8681
+ 0x8494222f00000000, 0x11eae91000000000, 0x5dc27fb300000000,
8682
+ 0xd2e5554a00000000, 0x9ecdc3e900000000, 0x0bb308d600000000,
8683
+ 0x479b9e7500000000, 0x214e9ea900000000, 0x6d66080a00000000,
8684
+ 0xf818c33500000000, 0xb430559600000000, 0x75b4b35600000000,
8685
+ 0x399c25f500000000, 0xace2eeca00000000, 0xe0ca786900000000,
8686
+ 0x861f78b500000000, 0xca37ee1600000000, 0x5f49252900000000,
8687
+ 0x1361b38a00000000, 0x388d32e700000000, 0x74a5a44400000000,
8688
+ 0xe1db6f7b00000000, 0xadf3f9d800000000, 0xcb26f90400000000,
8689
+ 0x870e6fa700000000, 0x1270a49800000000, 0x5e58323b00000000,
8690
+ 0x9fdcd4fb00000000, 0xd3f4425800000000, 0x468a896700000000,
8691
+ 0x0aa21fc400000000, 0x6c771f1800000000, 0x205f89bb00000000,
8692
+ 0xb521428400000000, 0xf909d42700000000, 0x762efede00000000,
8693
+ 0x3a06687d00000000, 0xaf78a34200000000, 0xe35035e100000000,
8694
+ 0x8585353d00000000, 0xc9ada39e00000000, 0x5cd368a100000000,
8695
+ 0x10fbfe0200000000, 0xd17f18c200000000, 0x9d578e6100000000,
8696
+ 0x0829455e00000000, 0x4401d3fd00000000, 0x22d4d32100000000,
8697
+ 0x6efc458200000000, 0xfb828ebd00000000, 0xb7aa181e00000000,
8698
+ 0xa4cbab9400000000, 0xe8e33d3700000000, 0x7d9df60800000000,
8699
+ 0x31b560ab00000000, 0x5760607700000000, 0x1b48f6d400000000,
8700
+ 0x8e363deb00000000, 0xc21eab4800000000, 0x039a4d8800000000,
8701
+ 0x4fb2db2b00000000, 0xdacc101400000000, 0x96e486b700000000,
8702
+ 0xf031866b00000000, 0xbc1910c800000000, 0x2967dbf700000000,
8703
+ 0x654f4d5400000000, 0xea6867ad00000000, 0xa640f10e00000000,
8704
+ 0x333e3a3100000000, 0x7f16ac9200000000, 0x19c3ac4e00000000,
8705
+ 0x55eb3aed00000000, 0xc095f1d200000000, 0x8cbd677100000000,
8706
+ 0x4d3981b100000000, 0x0111171200000000, 0x946fdc2d00000000,
8707
+ 0xd8474a8e00000000, 0xbe924a5200000000, 0xf2badcf100000000,
8708
+ 0x67c417ce00000000, 0x2bec816d00000000, 0x311c141500000000,
8709
+ 0x7d3482b600000000, 0xe84a498900000000, 0xa462df2a00000000,
8710
+ 0xc2b7dff600000000, 0x8e9f495500000000, 0x1be1826a00000000,
8711
+ 0x57c914c900000000, 0x964df20900000000, 0xda6564aa00000000,
8712
+ 0x4f1baf9500000000, 0x0333393600000000, 0x65e639ea00000000,
8713
+ 0x29ceaf4900000000, 0xbcb0647600000000, 0xf098f2d500000000,
8714
+ 0x7fbfd82c00000000, 0x33974e8f00000000, 0xa6e985b000000000,
8715
+ 0xeac1131300000000, 0x8c1413cf00000000, 0xc03c856c00000000,
8716
+ 0x55424e5300000000, 0x196ad8f000000000, 0xd8ee3e3000000000,
8717
+ 0x94c6a89300000000, 0x01b863ac00000000, 0x4d90f50f00000000,
8718
+ 0x2b45f5d300000000, 0x676d637000000000, 0xf213a84f00000000,
8719
+ 0xbe3b3eec00000000, 0xad5a8d6600000000, 0xe1721bc500000000,
8720
+ 0x740cd0fa00000000, 0x3824465900000000, 0x5ef1468500000000,
8721
+ 0x12d9d02600000000, 0x87a71b1900000000, 0xcb8f8dba00000000,
8722
+ 0x0a0b6b7a00000000, 0x4623fdd900000000, 0xd35d36e600000000,
8723
+ 0x9f75a04500000000, 0xf9a0a09900000000, 0xb588363a00000000,
8724
+ 0x20f6fd0500000000, 0x6cde6ba600000000, 0xe3f9415f00000000,
8725
+ 0xafd1d7fc00000000, 0x3aaf1cc300000000, 0x76878a6000000000,
8726
+ 0x10528abc00000000, 0x5c7a1c1f00000000, 0xc904d72000000000,
8727
+ 0x852c418300000000, 0x44a8a74300000000, 0x088031e000000000,
8728
+ 0x9dfefadf00000000, 0xd1d66c7c00000000, 0xb7036ca000000000,
8729
+ 0xfb2bfa0300000000, 0x6e55313c00000000, 0x227da79f00000000,
8730
+ 0x099126f200000000, 0x45b9b05100000000, 0xd0c77b6e00000000,
8731
+ 0x9cefedcd00000000, 0xfa3aed1100000000, 0xb6127bb200000000,
8732
+ 0x236cb08d00000000, 0x6f44262e00000000, 0xaec0c0ee00000000,
8733
+ 0xe2e8564d00000000, 0x77969d7200000000, 0x3bbe0bd100000000,
8734
+ 0x5d6b0b0d00000000, 0x11439dae00000000, 0x843d569100000000,
8735
+ 0xc815c03200000000, 0x4732eacb00000000, 0x0b1a7c6800000000,
8736
+ 0x9e64b75700000000, 0xd24c21f400000000, 0xb499212800000000,
8737
+ 0xf8b1b78b00000000, 0x6dcf7cb400000000, 0x21e7ea1700000000,
8738
+ 0xe0630cd700000000, 0xac4b9a7400000000, 0x3935514b00000000,
8739
+ 0x751dc7e800000000, 0x13c8c73400000000, 0x5fe0519700000000,
8740
+ 0xca9e9aa800000000, 0x86b60c0b00000000, 0x95d7bf8100000000,
8741
+ 0xd9ff292200000000, 0x4c81e21d00000000, 0x00a974be00000000,
8742
+ 0x667c746200000000, 0x2a54e2c100000000, 0xbf2a29fe00000000,
8743
+ 0xf302bf5d00000000, 0x3286599d00000000, 0x7eaecf3e00000000,
8744
+ 0xebd0040100000000, 0xa7f892a200000000, 0xc12d927e00000000,
8745
+ 0x8d0504dd00000000, 0x187bcfe200000000, 0x5453594100000000,
8746
+ 0xdb7473b800000000, 0x975ce51b00000000, 0x02222e2400000000,
8747
+ 0x4e0ab88700000000, 0x28dfb85b00000000, 0x64f72ef800000000,
8748
+ 0xf189e5c700000000, 0xbda1736400000000, 0x7c2595a400000000,
8749
+ 0x300d030700000000, 0xa573c83800000000, 0xe95b5e9b00000000,
8750
+ 0x8f8e5e4700000000, 0xc3a6c8e400000000, 0x56d803db00000000,
8751
+ 0x1af0957800000000},
8752
+ {0x0000000000000000, 0x939bc97f00000000, 0x263793ff00000000,
8753
+ 0xb5ac5a8000000000, 0x0d68572400000000, 0x9ef39e5b00000000,
8754
+ 0x2b5fc4db00000000, 0xb8c40da400000000, 0x1ad0ae4800000000,
8755
+ 0x894b673700000000, 0x3ce73db700000000, 0xaf7cf4c800000000,
8756
+ 0x17b8f96c00000000, 0x8423301300000000, 0x318f6a9300000000,
8757
+ 0xa214a3ec00000000, 0x34a05d9100000000, 0xa73b94ee00000000,
8758
+ 0x1297ce6e00000000, 0x810c071100000000, 0x39c80ab500000000,
8759
+ 0xaa53c3ca00000000, 0x1fff994a00000000, 0x8c64503500000000,
8760
+ 0x2e70f3d900000000, 0xbdeb3aa600000000, 0x0847602600000000,
8761
+ 0x9bdca95900000000, 0x2318a4fd00000000, 0xb0836d8200000000,
8762
+ 0x052f370200000000, 0x96b4fe7d00000000, 0x2946caf900000000,
8763
+ 0xbadd038600000000, 0x0f71590600000000, 0x9cea907900000000,
8764
+ 0x242e9ddd00000000, 0xb7b554a200000000, 0x02190e2200000000,
8765
+ 0x9182c75d00000000, 0x339664b100000000, 0xa00dadce00000000,
8766
+ 0x15a1f74e00000000, 0x863a3e3100000000, 0x3efe339500000000,
8767
+ 0xad65faea00000000, 0x18c9a06a00000000, 0x8b52691500000000,
8768
+ 0x1de6976800000000, 0x8e7d5e1700000000, 0x3bd1049700000000,
8769
+ 0xa84acde800000000, 0x108ec04c00000000, 0x8315093300000000,
8770
+ 0x36b953b300000000, 0xa5229acc00000000, 0x0736392000000000,
8771
+ 0x94adf05f00000000, 0x2101aadf00000000, 0xb29a63a000000000,
8772
+ 0x0a5e6e0400000000, 0x99c5a77b00000000, 0x2c69fdfb00000000,
8773
+ 0xbff2348400000000, 0x138ae52800000000, 0x80112c5700000000,
8774
+ 0x35bd76d700000000, 0xa626bfa800000000, 0x1ee2b20c00000000,
8775
+ 0x8d797b7300000000, 0x38d521f300000000, 0xab4ee88c00000000,
8776
+ 0x095a4b6000000000, 0x9ac1821f00000000, 0x2f6dd89f00000000,
8777
+ 0xbcf611e000000000, 0x04321c4400000000, 0x97a9d53b00000000,
8778
+ 0x22058fbb00000000, 0xb19e46c400000000, 0x272ab8b900000000,
8779
+ 0xb4b171c600000000, 0x011d2b4600000000, 0x9286e23900000000,
8780
+ 0x2a42ef9d00000000, 0xb9d926e200000000, 0x0c757c6200000000,
8781
+ 0x9feeb51d00000000, 0x3dfa16f100000000, 0xae61df8e00000000,
8782
+ 0x1bcd850e00000000, 0x88564c7100000000, 0x309241d500000000,
8783
+ 0xa30988aa00000000, 0x16a5d22a00000000, 0x853e1b5500000000,
8784
+ 0x3acc2fd100000000, 0xa957e6ae00000000, 0x1cfbbc2e00000000,
8785
+ 0x8f60755100000000, 0x37a478f500000000, 0xa43fb18a00000000,
8786
+ 0x1193eb0a00000000, 0x8208227500000000, 0x201c819900000000,
8787
+ 0xb38748e600000000, 0x062b126600000000, 0x95b0db1900000000,
8788
+ 0x2d74d6bd00000000, 0xbeef1fc200000000, 0x0b43454200000000,
8789
+ 0x98d88c3d00000000, 0x0e6c724000000000, 0x9df7bb3f00000000,
8790
+ 0x285be1bf00000000, 0xbbc028c000000000, 0x0304256400000000,
8791
+ 0x909fec1b00000000, 0x2533b69b00000000, 0xb6a87fe400000000,
8792
+ 0x14bcdc0800000000, 0x8727157700000000, 0x328b4ff700000000,
8793
+ 0xa110868800000000, 0x19d48b2c00000000, 0x8a4f425300000000,
8794
+ 0x3fe318d300000000, 0xac78d1ac00000000, 0x2614cb5100000000,
8795
+ 0xb58f022e00000000, 0x002358ae00000000, 0x93b891d100000000,
8796
+ 0x2b7c9c7500000000, 0xb8e7550a00000000, 0x0d4b0f8a00000000,
8797
+ 0x9ed0c6f500000000, 0x3cc4651900000000, 0xaf5fac6600000000,
8798
+ 0x1af3f6e600000000, 0x89683f9900000000, 0x31ac323d00000000,
8799
+ 0xa237fb4200000000, 0x179ba1c200000000, 0x840068bd00000000,
8800
+ 0x12b496c000000000, 0x812f5fbf00000000, 0x3483053f00000000,
8801
+ 0xa718cc4000000000, 0x1fdcc1e400000000, 0x8c47089b00000000,
8802
+ 0x39eb521b00000000, 0xaa709b6400000000, 0x0864388800000000,
8803
+ 0x9bfff1f700000000, 0x2e53ab7700000000, 0xbdc8620800000000,
8804
+ 0x050c6fac00000000, 0x9697a6d300000000, 0x233bfc5300000000,
8805
+ 0xb0a0352c00000000, 0x0f5201a800000000, 0x9cc9c8d700000000,
8806
+ 0x2965925700000000, 0xbafe5b2800000000, 0x023a568c00000000,
8807
+ 0x91a19ff300000000, 0x240dc57300000000, 0xb7960c0c00000000,
8808
+ 0x1582afe000000000, 0x8619669f00000000, 0x33b53c1f00000000,
8809
+ 0xa02ef56000000000, 0x18eaf8c400000000, 0x8b7131bb00000000,
8810
+ 0x3edd6b3b00000000, 0xad46a24400000000, 0x3bf25c3900000000,
8811
+ 0xa869954600000000, 0x1dc5cfc600000000, 0x8e5e06b900000000,
8812
+ 0x369a0b1d00000000, 0xa501c26200000000, 0x10ad98e200000000,
8813
+ 0x8336519d00000000, 0x2122f27100000000, 0xb2b93b0e00000000,
8814
+ 0x0715618e00000000, 0x948ea8f100000000, 0x2c4aa55500000000,
8815
+ 0xbfd16c2a00000000, 0x0a7d36aa00000000, 0x99e6ffd500000000,
8816
+ 0x359e2e7900000000, 0xa605e70600000000, 0x13a9bd8600000000,
8817
+ 0x803274f900000000, 0x38f6795d00000000, 0xab6db02200000000,
8818
+ 0x1ec1eaa200000000, 0x8d5a23dd00000000, 0x2f4e803100000000,
8819
+ 0xbcd5494e00000000, 0x097913ce00000000, 0x9ae2dab100000000,
8820
+ 0x2226d71500000000, 0xb1bd1e6a00000000, 0x041144ea00000000,
8821
+ 0x978a8d9500000000, 0x013e73e800000000, 0x92a5ba9700000000,
8822
+ 0x2709e01700000000, 0xb492296800000000, 0x0c5624cc00000000,
8823
+ 0x9fcdedb300000000, 0x2a61b73300000000, 0xb9fa7e4c00000000,
8824
+ 0x1beedda000000000, 0x887514df00000000, 0x3dd94e5f00000000,
8825
+ 0xae42872000000000, 0x16868a8400000000, 0x851d43fb00000000,
8826
+ 0x30b1197b00000000, 0xa32ad00400000000, 0x1cd8e48000000000,
8827
+ 0x8f432dff00000000, 0x3aef777f00000000, 0xa974be0000000000,
8828
+ 0x11b0b3a400000000, 0x822b7adb00000000, 0x3787205b00000000,
8829
+ 0xa41ce92400000000, 0x06084ac800000000, 0x959383b700000000,
8830
+ 0x203fd93700000000, 0xb3a4104800000000, 0x0b601dec00000000,
8831
+ 0x98fbd49300000000, 0x2d578e1300000000, 0xbecc476c00000000,
8832
+ 0x2878b91100000000, 0xbbe3706e00000000, 0x0e4f2aee00000000,
8833
+ 0x9dd4e39100000000, 0x2510ee3500000000, 0xb68b274a00000000,
8834
+ 0x03277dca00000000, 0x90bcb4b500000000, 0x32a8175900000000,
8835
+ 0xa133de2600000000, 0x149f84a600000000, 0x87044dd900000000,
8836
+ 0x3fc0407d00000000, 0xac5b890200000000, 0x19f7d38200000000,
8837
+ 0x8a6c1afd00000000},
8838
+ {0x0000000000000000, 0x650b796900000000, 0xca16f2d200000000,
8839
+ 0xaf1d8bbb00000000, 0xd52b957e00000000, 0xb020ec1700000000,
8840
+ 0x1f3d67ac00000000, 0x7a361ec500000000, 0xaa572afd00000000,
8841
+ 0xcf5c539400000000, 0x6041d82f00000000, 0x054aa14600000000,
8842
+ 0x7f7cbf8300000000, 0x1a77c6ea00000000, 0xb56a4d5100000000,
8843
+ 0xd061343800000000, 0x15a9252100000000, 0x70a25c4800000000,
8844
+ 0xdfbfd7f300000000, 0xbab4ae9a00000000, 0xc082b05f00000000,
8845
+ 0xa589c93600000000, 0x0a94428d00000000, 0x6f9f3be400000000,
8846
+ 0xbffe0fdc00000000, 0xdaf576b500000000, 0x75e8fd0e00000000,
8847
+ 0x10e3846700000000, 0x6ad59aa200000000, 0x0fdee3cb00000000,
8848
+ 0xa0c3687000000000, 0xc5c8111900000000, 0x2a524b4200000000,
8849
+ 0x4f59322b00000000, 0xe044b99000000000, 0x854fc0f900000000,
8850
+ 0xff79de3c00000000, 0x9a72a75500000000, 0x356f2cee00000000,
8851
+ 0x5064558700000000, 0x800561bf00000000, 0xe50e18d600000000,
8852
+ 0x4a13936d00000000, 0x2f18ea0400000000, 0x552ef4c100000000,
8853
+ 0x30258da800000000, 0x9f38061300000000, 0xfa337f7a00000000,
8854
+ 0x3ffb6e6300000000, 0x5af0170a00000000, 0xf5ed9cb100000000,
8855
+ 0x90e6e5d800000000, 0xead0fb1d00000000, 0x8fdb827400000000,
8856
+ 0x20c609cf00000000, 0x45cd70a600000000, 0x95ac449e00000000,
8857
+ 0xf0a73df700000000, 0x5fbab64c00000000, 0x3ab1cf2500000000,
8858
+ 0x4087d1e000000000, 0x258ca88900000000, 0x8a91233200000000,
8859
+ 0xef9a5a5b00000000, 0x54a4968400000000, 0x31afefed00000000,
8860
+ 0x9eb2645600000000, 0xfbb91d3f00000000, 0x818f03fa00000000,
8861
+ 0xe4847a9300000000, 0x4b99f12800000000, 0x2e92884100000000,
8862
+ 0xfef3bc7900000000, 0x9bf8c51000000000, 0x34e54eab00000000,
8863
+ 0x51ee37c200000000, 0x2bd8290700000000, 0x4ed3506e00000000,
8864
+ 0xe1cedbd500000000, 0x84c5a2bc00000000, 0x410db3a500000000,
8865
+ 0x2406cacc00000000, 0x8b1b417700000000, 0xee10381e00000000,
8866
+ 0x942626db00000000, 0xf12d5fb200000000, 0x5e30d40900000000,
8867
+ 0x3b3bad6000000000, 0xeb5a995800000000, 0x8e51e03100000000,
8868
+ 0x214c6b8a00000000, 0x444712e300000000, 0x3e710c2600000000,
8869
+ 0x5b7a754f00000000, 0xf467fef400000000, 0x916c879d00000000,
8870
+ 0x7ef6ddc600000000, 0x1bfda4af00000000, 0xb4e02f1400000000,
8871
+ 0xd1eb567d00000000, 0xabdd48b800000000, 0xced631d100000000,
8872
+ 0x61cbba6a00000000, 0x04c0c30300000000, 0xd4a1f73b00000000,
8873
+ 0xb1aa8e5200000000, 0x1eb705e900000000, 0x7bbc7c8000000000,
8874
+ 0x018a624500000000, 0x64811b2c00000000, 0xcb9c909700000000,
8875
+ 0xae97e9fe00000000, 0x6b5ff8e700000000, 0x0e54818e00000000,
8876
+ 0xa1490a3500000000, 0xc442735c00000000, 0xbe746d9900000000,
8877
+ 0xdb7f14f000000000, 0x74629f4b00000000, 0x1169e62200000000,
8878
+ 0xc108d21a00000000, 0xa403ab7300000000, 0x0b1e20c800000000,
8879
+ 0x6e1559a100000000, 0x1423476400000000, 0x71283e0d00000000,
8880
+ 0xde35b5b600000000, 0xbb3eccdf00000000, 0xe94e5cd200000000,
8881
+ 0x8c4525bb00000000, 0x2358ae0000000000, 0x4653d76900000000,
8882
+ 0x3c65c9ac00000000, 0x596eb0c500000000, 0xf6733b7e00000000,
8883
+ 0x9378421700000000, 0x4319762f00000000, 0x26120f4600000000,
8884
+ 0x890f84fd00000000, 0xec04fd9400000000, 0x9632e35100000000,
8885
+ 0xf3399a3800000000, 0x5c24118300000000, 0x392f68ea00000000,
8886
+ 0xfce779f300000000, 0x99ec009a00000000, 0x36f18b2100000000,
8887
+ 0x53faf24800000000, 0x29ccec8d00000000, 0x4cc795e400000000,
8888
+ 0xe3da1e5f00000000, 0x86d1673600000000, 0x56b0530e00000000,
8889
+ 0x33bb2a6700000000, 0x9ca6a1dc00000000, 0xf9add8b500000000,
8890
+ 0x839bc67000000000, 0xe690bf1900000000, 0x498d34a200000000,
8891
+ 0x2c864dcb00000000, 0xc31c179000000000, 0xa6176ef900000000,
8892
+ 0x090ae54200000000, 0x6c019c2b00000000, 0x163782ee00000000,
8893
+ 0x733cfb8700000000, 0xdc21703c00000000, 0xb92a095500000000,
8894
+ 0x694b3d6d00000000, 0x0c40440400000000, 0xa35dcfbf00000000,
8895
+ 0xc656b6d600000000, 0xbc60a81300000000, 0xd96bd17a00000000,
8896
+ 0x76765ac100000000, 0x137d23a800000000, 0xd6b532b100000000,
8897
+ 0xb3be4bd800000000, 0x1ca3c06300000000, 0x79a8b90a00000000,
8898
+ 0x039ea7cf00000000, 0x6695dea600000000, 0xc988551d00000000,
8899
+ 0xac832c7400000000, 0x7ce2184c00000000, 0x19e9612500000000,
8900
+ 0xb6f4ea9e00000000, 0xd3ff93f700000000, 0xa9c98d3200000000,
8901
+ 0xccc2f45b00000000, 0x63df7fe000000000, 0x06d4068900000000,
8902
+ 0xbdeaca5600000000, 0xd8e1b33f00000000, 0x77fc388400000000,
8903
+ 0x12f741ed00000000, 0x68c15f2800000000, 0x0dca264100000000,
8904
+ 0xa2d7adfa00000000, 0xc7dcd49300000000, 0x17bde0ab00000000,
8905
+ 0x72b699c200000000, 0xddab127900000000, 0xb8a06b1000000000,
8906
+ 0xc29675d500000000, 0xa79d0cbc00000000, 0x0880870700000000,
8907
+ 0x6d8bfe6e00000000, 0xa843ef7700000000, 0xcd48961e00000000,
8908
+ 0x62551da500000000, 0x075e64cc00000000, 0x7d687a0900000000,
8909
+ 0x1863036000000000, 0xb77e88db00000000, 0xd275f1b200000000,
8910
+ 0x0214c58a00000000, 0x671fbce300000000, 0xc802375800000000,
8911
+ 0xad094e3100000000, 0xd73f50f400000000, 0xb234299d00000000,
8912
+ 0x1d29a22600000000, 0x7822db4f00000000, 0x97b8811400000000,
8913
+ 0xf2b3f87d00000000, 0x5dae73c600000000, 0x38a50aaf00000000,
8914
+ 0x4293146a00000000, 0x27986d0300000000, 0x8885e6b800000000,
8915
+ 0xed8e9fd100000000, 0x3defabe900000000, 0x58e4d28000000000,
8916
+ 0xf7f9593b00000000, 0x92f2205200000000, 0xe8c43e9700000000,
8917
+ 0x8dcf47fe00000000, 0x22d2cc4500000000, 0x47d9b52c00000000,
8918
+ 0x8211a43500000000, 0xe71add5c00000000, 0x480756e700000000,
8919
+ 0x2d0c2f8e00000000, 0x573a314b00000000, 0x3231482200000000,
8920
+ 0x9d2cc39900000000, 0xf827baf000000000, 0x28468ec800000000,
8921
+ 0x4d4df7a100000000, 0xe2507c1a00000000, 0x875b057300000000,
8922
+ 0xfd6d1bb600000000, 0x986662df00000000, 0x377be96400000000,
8923
+ 0x5270900d00000000},
8924
+ {0x0000000000000000, 0xdcecb13d00000000, 0xb8d9637b00000000,
8925
+ 0x6435d24600000000, 0x70b3c7f600000000, 0xac5f76cb00000000,
8926
+ 0xc86aa48d00000000, 0x148615b000000000, 0xa160fe3600000000,
8927
+ 0x7d8c4f0b00000000, 0x19b99d4d00000000, 0xc5552c7000000000,
8928
+ 0xd1d339c000000000, 0x0d3f88fd00000000, 0x690a5abb00000000,
8929
+ 0xb5e6eb8600000000, 0x42c1fc6d00000000, 0x9e2d4d5000000000,
8930
+ 0xfa189f1600000000, 0x26f42e2b00000000, 0x32723b9b00000000,
8931
+ 0xee9e8aa600000000, 0x8aab58e000000000, 0x5647e9dd00000000,
8932
+ 0xe3a1025b00000000, 0x3f4db36600000000, 0x5b78612000000000,
8933
+ 0x8794d01d00000000, 0x9312c5ad00000000, 0x4ffe749000000000,
8934
+ 0x2bcba6d600000000, 0xf72717eb00000000, 0x8482f9db00000000,
8935
+ 0x586e48e600000000, 0x3c5b9aa000000000, 0xe0b72b9d00000000,
8936
+ 0xf4313e2d00000000, 0x28dd8f1000000000, 0x4ce85d5600000000,
8937
+ 0x9004ec6b00000000, 0x25e207ed00000000, 0xf90eb6d000000000,
8938
+ 0x9d3b649600000000, 0x41d7d5ab00000000, 0x5551c01b00000000,
8939
+ 0x89bd712600000000, 0xed88a36000000000, 0x3164125d00000000,
8940
+ 0xc64305b600000000, 0x1aafb48b00000000, 0x7e9a66cd00000000,
8941
+ 0xa276d7f000000000, 0xb6f0c24000000000, 0x6a1c737d00000000,
8942
+ 0x0e29a13b00000000, 0xd2c5100600000000, 0x6723fb8000000000,
8943
+ 0xbbcf4abd00000000, 0xdffa98fb00000000, 0x031629c600000000,
8944
+ 0x17903c7600000000, 0xcb7c8d4b00000000, 0xaf495f0d00000000,
8945
+ 0x73a5ee3000000000, 0x4903826c00000000, 0x95ef335100000000,
8946
+ 0xf1dae11700000000, 0x2d36502a00000000, 0x39b0459a00000000,
8947
+ 0xe55cf4a700000000, 0x816926e100000000, 0x5d8597dc00000000,
8948
+ 0xe8637c5a00000000, 0x348fcd6700000000, 0x50ba1f2100000000,
8949
+ 0x8c56ae1c00000000, 0x98d0bbac00000000, 0x443c0a9100000000,
8950
+ 0x2009d8d700000000, 0xfce569ea00000000, 0x0bc27e0100000000,
8951
+ 0xd72ecf3c00000000, 0xb31b1d7a00000000, 0x6ff7ac4700000000,
8952
+ 0x7b71b9f700000000, 0xa79d08ca00000000, 0xc3a8da8c00000000,
8953
+ 0x1f446bb100000000, 0xaaa2803700000000, 0x764e310a00000000,
8954
+ 0x127be34c00000000, 0xce97527100000000, 0xda1147c100000000,
8955
+ 0x06fdf6fc00000000, 0x62c824ba00000000, 0xbe24958700000000,
8956
+ 0xcd817bb700000000, 0x116dca8a00000000, 0x755818cc00000000,
8957
+ 0xa9b4a9f100000000, 0xbd32bc4100000000, 0x61de0d7c00000000,
8958
+ 0x05ebdf3a00000000, 0xd9076e0700000000, 0x6ce1858100000000,
8959
+ 0xb00d34bc00000000, 0xd438e6fa00000000, 0x08d457c700000000,
8960
+ 0x1c52427700000000, 0xc0bef34a00000000, 0xa48b210c00000000,
8961
+ 0x7867903100000000, 0x8f4087da00000000, 0x53ac36e700000000,
8962
+ 0x3799e4a100000000, 0xeb75559c00000000, 0xfff3402c00000000,
8963
+ 0x231ff11100000000, 0x472a235700000000, 0x9bc6926a00000000,
8964
+ 0x2e2079ec00000000, 0xf2ccc8d100000000, 0x96f91a9700000000,
8965
+ 0x4a15abaa00000000, 0x5e93be1a00000000, 0x827f0f2700000000,
8966
+ 0xe64add6100000000, 0x3aa66c5c00000000, 0x920604d900000000,
8967
+ 0x4eeab5e400000000, 0x2adf67a200000000, 0xf633d69f00000000,
8968
+ 0xe2b5c32f00000000, 0x3e59721200000000, 0x5a6ca05400000000,
8969
+ 0x8680116900000000, 0x3366faef00000000, 0xef8a4bd200000000,
8970
+ 0x8bbf999400000000, 0x575328a900000000, 0x43d53d1900000000,
8971
+ 0x9f398c2400000000, 0xfb0c5e6200000000, 0x27e0ef5f00000000,
8972
+ 0xd0c7f8b400000000, 0x0c2b498900000000, 0x681e9bcf00000000,
8973
+ 0xb4f22af200000000, 0xa0743f4200000000, 0x7c988e7f00000000,
8974
+ 0x18ad5c3900000000, 0xc441ed0400000000, 0x71a7068200000000,
8975
+ 0xad4bb7bf00000000, 0xc97e65f900000000, 0x1592d4c400000000,
8976
+ 0x0114c17400000000, 0xddf8704900000000, 0xb9cda20f00000000,
8977
+ 0x6521133200000000, 0x1684fd0200000000, 0xca684c3f00000000,
8978
+ 0xae5d9e7900000000, 0x72b12f4400000000, 0x66373af400000000,
8979
+ 0xbadb8bc900000000, 0xdeee598f00000000, 0x0202e8b200000000,
8980
+ 0xb7e4033400000000, 0x6b08b20900000000, 0x0f3d604f00000000,
8981
+ 0xd3d1d17200000000, 0xc757c4c200000000, 0x1bbb75ff00000000,
8982
+ 0x7f8ea7b900000000, 0xa362168400000000, 0x5445016f00000000,
8983
+ 0x88a9b05200000000, 0xec9c621400000000, 0x3070d32900000000,
8984
+ 0x24f6c69900000000, 0xf81a77a400000000, 0x9c2fa5e200000000,
8985
+ 0x40c314df00000000, 0xf525ff5900000000, 0x29c94e6400000000,
8986
+ 0x4dfc9c2200000000, 0x91102d1f00000000, 0x859638af00000000,
8987
+ 0x597a899200000000, 0x3d4f5bd400000000, 0xe1a3eae900000000,
8988
+ 0xdb0586b500000000, 0x07e9378800000000, 0x63dce5ce00000000,
8989
+ 0xbf3054f300000000, 0xabb6414300000000, 0x775af07e00000000,
8990
+ 0x136f223800000000, 0xcf83930500000000, 0x7a65788300000000,
8991
+ 0xa689c9be00000000, 0xc2bc1bf800000000, 0x1e50aac500000000,
8992
+ 0x0ad6bf7500000000, 0xd63a0e4800000000, 0xb20fdc0e00000000,
8993
+ 0x6ee36d3300000000, 0x99c47ad800000000, 0x4528cbe500000000,
8994
+ 0x211d19a300000000, 0xfdf1a89e00000000, 0xe977bd2e00000000,
8995
+ 0x359b0c1300000000, 0x51aede5500000000, 0x8d426f6800000000,
8996
+ 0x38a484ee00000000, 0xe44835d300000000, 0x807de79500000000,
8997
+ 0x5c9156a800000000, 0x4817431800000000, 0x94fbf22500000000,
8998
+ 0xf0ce206300000000, 0x2c22915e00000000, 0x5f877f6e00000000,
8999
+ 0x836bce5300000000, 0xe75e1c1500000000, 0x3bb2ad2800000000,
9000
+ 0x2f34b89800000000, 0xf3d809a500000000, 0x97eddbe300000000,
9001
+ 0x4b016ade00000000, 0xfee7815800000000, 0x220b306500000000,
9002
+ 0x463ee22300000000, 0x9ad2531e00000000, 0x8e5446ae00000000,
9003
+ 0x52b8f79300000000, 0x368d25d500000000, 0xea6194e800000000,
9004
+ 0x1d46830300000000, 0xc1aa323e00000000, 0xa59fe07800000000,
9005
+ 0x7973514500000000, 0x6df544f500000000, 0xb119f5c800000000,
9006
+ 0xd52c278e00000000, 0x09c096b300000000, 0xbc267d3500000000,
9007
+ 0x60cacc0800000000, 0x04ff1e4e00000000, 0xd813af7300000000,
9008
+ 0xcc95bac300000000, 0x10790bfe00000000, 0x744cd9b800000000,
9009
+ 0xa8a0688500000000}};
9010
+
9011
+#else /* W == 4 */
9012
+
9013
+local const z_crc_t FAR crc_braid_table[][256] = {
9014
+ {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f,
9015
+ 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999,
9016
+ 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee,
9017
+ 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615,
9018
+ 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383,
9019
+ 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb,
9020
+ 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275,
9021
+ 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d,
9022
+ 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b,
9023
+ 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460,
9024
+ 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317,
9025
+ 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1,
9026
+ 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5,
9027
+ 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd,
9028
+ 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04,
9029
+ 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c,
9030
+ 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7,
9031
+ 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11,
9032
+ 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66,
9033
+ 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7,
9034
+ 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871,
9035
+ 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309,
9036
+ 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd,
9037
+ 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85,
9038
+ 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913,
9039
+ 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d,
9040
+ 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a,
9041
+ 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc,
9042
+ 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57,
9043
+ 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f,
9044
+ 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6,
9045
+ 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e,
9046
+ 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f,
9047
+ 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289,
9048
+ 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe,
9049
+ 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05,
9050
+ 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893,
9051
+ 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb,
9052
+ 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0,
9053
+ 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8,
9054
+ 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e,
9055
+ 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5,
9056
+ 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2,
9057
+ 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574,
9058
+ 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5,
9059
+ 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add,
9060
+ 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114,
9061
+ 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c,
9062
+ 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7,
9063
+ 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701,
9064
+ 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076,
9065
+ 0x09cd8551},
9066
+ {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193,
9067
+ 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2,
9068
+ 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c,
9069
+ 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71,
9070
+ 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a,
9071
+ 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d,
9072
+ 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71,
9073
+ 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436,
9074
+ 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d,
9075
+ 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000,
9076
+ 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae,
9077
+ 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf,
9078
+ 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930,
9079
+ 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277,
9080
+ 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff,
9081
+ 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8,
9082
+ 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef,
9083
+ 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e,
9084
+ 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20,
9085
+ 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95,
9086
+ 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e,
9087
+ 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9,
9088
+ 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d,
9089
+ 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a,
9090
+ 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151,
9091
+ 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4,
9092
+ 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a,
9093
+ 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b,
9094
+ 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c,
9095
+ 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b,
9096
+ 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3,
9097
+ 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4,
9098
+ 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b,
9099
+ 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a,
9100
+ 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4,
9101
+ 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189,
9102
+ 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92,
9103
+ 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5,
9104
+ 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9,
9105
+ 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe,
9106
+ 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5,
9107
+ 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8,
9108
+ 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66,
9109
+ 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707,
9110
+ 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8,
9111
+ 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f,
9112
+ 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707,
9113
+ 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40,
9114
+ 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017,
9115
+ 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876,
9116
+ 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8,
9117
+ 0x7bc97a0c},
9118
+ {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300,
9119
+ 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0,
9120
+ 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80,
9121
+ 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701,
9122
+ 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41,
9123
+ 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81,
9124
+ 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43,
9125
+ 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83,
9126
+ 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3,
9127
+ 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42,
9128
+ 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202,
9129
+ 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2,
9130
+ 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7,
9131
+ 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407,
9132
+ 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47,
9133
+ 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87,
9134
+ 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86,
9135
+ 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46,
9136
+ 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506,
9137
+ 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44,
9138
+ 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704,
9139
+ 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4,
9140
+ 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5,
9141
+ 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505,
9142
+ 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45,
9143
+ 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f,
9144
+ 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f,
9145
+ 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f,
9146
+ 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e,
9147
+ 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e,
9148
+ 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e,
9149
+ 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce,
9150
+ 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c,
9151
+ 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc,
9152
+ 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c,
9153
+ 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d,
9154
+ 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d,
9155
+ 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d,
9156
+ 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88,
9157
+ 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48,
9158
+ 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708,
9159
+ 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89,
9160
+ 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9,
9161
+ 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309,
9162
+ 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb,
9163
+ 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b,
9164
+ 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b,
9165
+ 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b,
9166
+ 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a,
9167
+ 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a,
9168
+ 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a,
9169
+ 0x7851a2ca},
9170
+ {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb,
9171
+ 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8,
9172
+ 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0,
9173
+ 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f,
9174
+ 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a,
9175
+ 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf,
9176
+ 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5,
9177
+ 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380,
9178
+ 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815,
9179
+ 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa,
9180
+ 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2,
9181
+ 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1,
9182
+ 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1,
9183
+ 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4,
9184
+ 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa,
9185
+ 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df,
9186
+ 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6,
9187
+ 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5,
9188
+ 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad,
9189
+ 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca,
9190
+ 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f,
9191
+ 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a,
9192
+ 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8,
9193
+ 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d,
9194
+ 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708,
9195
+ 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d,
9196
+ 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865,
9197
+ 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636,
9198
+ 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f,
9199
+ 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a,
9200
+ 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744,
9201
+ 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061,
9202
+ 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0,
9203
+ 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293,
9204
+ 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb,
9205
+ 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874,
9206
+ 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1,
9207
+ 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4,
9208
+ 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f,
9209
+ 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a,
9210
+ 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f,
9211
+ 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120,
9212
+ 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778,
9213
+ 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b,
9214
+ 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a,
9215
+ 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af,
9216
+ 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81,
9217
+ 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4,
9218
+ 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd,
9219
+ 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e,
9220
+ 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6,
9221
+ 0x566b6848}};
9222
+
9223
+local const z_word_t FAR crc_braid_big_table[][256] = {
9224
+ {0x00000000, 0x9e83da9f, 0x7d01c4e4, 0xe3821e7b, 0xbb04f912,
9225
+ 0x2587238d, 0xc6053df6, 0x5886e769, 0x7609f225, 0xe88a28ba,
9226
+ 0x0b0836c1, 0x958bec5e, 0xcd0d0b37, 0x538ed1a8, 0xb00ccfd3,
9227
+ 0x2e8f154c, 0xec12e44b, 0x72913ed4, 0x911320af, 0x0f90fa30,
9228
+ 0x57161d59, 0xc995c7c6, 0x2a17d9bd, 0xb4940322, 0x9a1b166e,
9229
+ 0x0498ccf1, 0xe71ad28a, 0x79990815, 0x211fef7c, 0xbf9c35e3,
9230
+ 0x5c1e2b98, 0xc29df107, 0xd825c897, 0x46a61208, 0xa5240c73,
9231
+ 0x3ba7d6ec, 0x63213185, 0xfda2eb1a, 0x1e20f561, 0x80a32ffe,
9232
+ 0xae2c3ab2, 0x30afe02d, 0xd32dfe56, 0x4dae24c9, 0x1528c3a0,
9233
+ 0x8bab193f, 0x68290744, 0xf6aadddb, 0x34372cdc, 0xaab4f643,
9234
+ 0x4936e838, 0xd7b532a7, 0x8f33d5ce, 0x11b00f51, 0xf232112a,
9235
+ 0x6cb1cbb5, 0x423edef9, 0xdcbd0466, 0x3f3f1a1d, 0xa1bcc082,
9236
+ 0xf93a27eb, 0x67b9fd74, 0x843be30f, 0x1ab83990, 0xf14de1f4,
9237
+ 0x6fce3b6b, 0x8c4c2510, 0x12cfff8f, 0x4a4918e6, 0xd4cac279,
9238
+ 0x3748dc02, 0xa9cb069d, 0x874413d1, 0x19c7c94e, 0xfa45d735,
9239
+ 0x64c60daa, 0x3c40eac3, 0xa2c3305c, 0x41412e27, 0xdfc2f4b8,
9240
+ 0x1d5f05bf, 0x83dcdf20, 0x605ec15b, 0xfedd1bc4, 0xa65bfcad,
9241
+ 0x38d82632, 0xdb5a3849, 0x45d9e2d6, 0x6b56f79a, 0xf5d52d05,
9242
+ 0x1657337e, 0x88d4e9e1, 0xd0520e88, 0x4ed1d417, 0xad53ca6c,
9243
+ 0x33d010f3, 0x29682963, 0xb7ebf3fc, 0x5469ed87, 0xcaea3718,
9244
+ 0x926cd071, 0x0cef0aee, 0xef6d1495, 0x71eece0a, 0x5f61db46,
9245
+ 0xc1e201d9, 0x22601fa2, 0xbce3c53d, 0xe4652254, 0x7ae6f8cb,
9246
+ 0x9964e6b0, 0x07e73c2f, 0xc57acd28, 0x5bf917b7, 0xb87b09cc,
9247
+ 0x26f8d353, 0x7e7e343a, 0xe0fdeea5, 0x037ff0de, 0x9dfc2a41,
9248
+ 0xb3733f0d, 0x2df0e592, 0xce72fbe9, 0x50f12176, 0x0877c61f,
9249
+ 0x96f41c80, 0x757602fb, 0xebf5d864, 0xa39db332, 0x3d1e69ad,
9250
+ 0xde9c77d6, 0x401fad49, 0x18994a20, 0x861a90bf, 0x65988ec4,
9251
+ 0xfb1b545b, 0xd5944117, 0x4b179b88, 0xa89585f3, 0x36165f6c,
9252
+ 0x6e90b805, 0xf013629a, 0x13917ce1, 0x8d12a67e, 0x4f8f5779,
9253
+ 0xd10c8de6, 0x328e939d, 0xac0d4902, 0xf48bae6b, 0x6a0874f4,
9254
+ 0x898a6a8f, 0x1709b010, 0x3986a55c, 0xa7057fc3, 0x448761b8,
9255
+ 0xda04bb27, 0x82825c4e, 0x1c0186d1, 0xff8398aa, 0x61004235,
9256
+ 0x7bb87ba5, 0xe53ba13a, 0x06b9bf41, 0x983a65de, 0xc0bc82b7,
9257
+ 0x5e3f5828, 0xbdbd4653, 0x233e9ccc, 0x0db18980, 0x9332531f,
9258
+ 0x70b04d64, 0xee3397fb, 0xb6b57092, 0x2836aa0d, 0xcbb4b476,
9259
+ 0x55376ee9, 0x97aa9fee, 0x09294571, 0xeaab5b0a, 0x74288195,
9260
+ 0x2cae66fc, 0xb22dbc63, 0x51afa218, 0xcf2c7887, 0xe1a36dcb,
9261
+ 0x7f20b754, 0x9ca2a92f, 0x022173b0, 0x5aa794d9, 0xc4244e46,
9262
+ 0x27a6503d, 0xb9258aa2, 0x52d052c6, 0xcc538859, 0x2fd19622,
9263
+ 0xb1524cbd, 0xe9d4abd4, 0x7757714b, 0x94d56f30, 0x0a56b5af,
9264
+ 0x24d9a0e3, 0xba5a7a7c, 0x59d86407, 0xc75bbe98, 0x9fdd59f1,
9265
+ 0x015e836e, 0xe2dc9d15, 0x7c5f478a, 0xbec2b68d, 0x20416c12,
9266
+ 0xc3c37269, 0x5d40a8f6, 0x05c64f9f, 0x9b459500, 0x78c78b7b,
9267
+ 0xe64451e4, 0xc8cb44a8, 0x56489e37, 0xb5ca804c, 0x2b495ad3,
9268
+ 0x73cfbdba, 0xed4c6725, 0x0ece795e, 0x904da3c1, 0x8af59a51,
9269
+ 0x147640ce, 0xf7f45eb5, 0x6977842a, 0x31f16343, 0xaf72b9dc,
9270
+ 0x4cf0a7a7, 0xd2737d38, 0xfcfc6874, 0x627fb2eb, 0x81fdac90,
9271
+ 0x1f7e760f, 0x47f89166, 0xd97b4bf9, 0x3af95582, 0xa47a8f1d,
9272
+ 0x66e77e1a, 0xf864a485, 0x1be6bafe, 0x85656061, 0xdde38708,
9273
+ 0x43605d97, 0xa0e243ec, 0x3e619973, 0x10ee8c3f, 0x8e6d56a0,
9274
+ 0x6def48db, 0xf36c9244, 0xabea752d, 0x3569afb2, 0xd6ebb1c9,
9275
+ 0x48686b56},
9276
+ {0x00000000, 0xc0642817, 0x80c9502e, 0x40ad7839, 0x0093a15c,
9277
+ 0xc0f7894b, 0x805af172, 0x403ed965, 0x002643b9, 0xc0426bae,
9278
+ 0x80ef1397, 0x408b3b80, 0x00b5e2e5, 0xc0d1caf2, 0x807cb2cb,
9279
+ 0x40189adc, 0x414af7a9, 0x812edfbe, 0xc183a787, 0x01e78f90,
9280
+ 0x41d956f5, 0x81bd7ee2, 0xc11006db, 0x01742ecc, 0x416cb410,
9281
+ 0x81089c07, 0xc1a5e43e, 0x01c1cc29, 0x41ff154c, 0x819b3d5b,
9282
+ 0xc1364562, 0x01526d75, 0xc3929f88, 0x03f6b79f, 0x435bcfa6,
9283
+ 0x833fe7b1, 0xc3013ed4, 0x036516c3, 0x43c86efa, 0x83ac46ed,
9284
+ 0xc3b4dc31, 0x03d0f426, 0x437d8c1f, 0x8319a408, 0xc3277d6d,
9285
+ 0x0343557a, 0x43ee2d43, 0x838a0554, 0x82d86821, 0x42bc4036,
9286
+ 0x0211380f, 0xc2751018, 0x824bc97d, 0x422fe16a, 0x02829953,
9287
+ 0xc2e6b144, 0x82fe2b98, 0x429a038f, 0x02377bb6, 0xc25353a1,
9288
+ 0x826d8ac4, 0x4209a2d3, 0x02a4daea, 0xc2c0f2fd, 0xc7234eca,
9289
+ 0x074766dd, 0x47ea1ee4, 0x878e36f3, 0xc7b0ef96, 0x07d4c781,
9290
+ 0x4779bfb8, 0x871d97af, 0xc7050d73, 0x07612564, 0x47cc5d5d,
9291
+ 0x87a8754a, 0xc796ac2f, 0x07f28438, 0x475ffc01, 0x873bd416,
9292
+ 0x8669b963, 0x460d9174, 0x06a0e94d, 0xc6c4c15a, 0x86fa183f,
9293
+ 0x469e3028, 0x06334811, 0xc6576006, 0x864ffada, 0x462bd2cd,
9294
+ 0x0686aaf4, 0xc6e282e3, 0x86dc5b86, 0x46b87391, 0x06150ba8,
9295
+ 0xc67123bf, 0x04b1d142, 0xc4d5f955, 0x8478816c, 0x441ca97b,
9296
+ 0x0422701e, 0xc4465809, 0x84eb2030, 0x448f0827, 0x049792fb,
9297
+ 0xc4f3baec, 0x845ec2d5, 0x443aeac2, 0x040433a7, 0xc4601bb0,
9298
+ 0x84cd6389, 0x44a94b9e, 0x45fb26eb, 0x859f0efc, 0xc53276c5,
9299
+ 0x05565ed2, 0x456887b7, 0x850cafa0, 0xc5a1d799, 0x05c5ff8e,
9300
+ 0x45dd6552, 0x85b94d45, 0xc514357c, 0x05701d6b, 0x454ec40e,
9301
+ 0x852aec19, 0xc5879420, 0x05e3bc37, 0xcf41ed4f, 0x0f25c558,
9302
+ 0x4f88bd61, 0x8fec9576, 0xcfd24c13, 0x0fb66404, 0x4f1b1c3d,
9303
+ 0x8f7f342a, 0xcf67aef6, 0x0f0386e1, 0x4faefed8, 0x8fcad6cf,
9304
+ 0xcff40faa, 0x0f9027bd, 0x4f3d5f84, 0x8f597793, 0x8e0b1ae6,
9305
+ 0x4e6f32f1, 0x0ec24ac8, 0xcea662df, 0x8e98bbba, 0x4efc93ad,
9306
+ 0x0e51eb94, 0xce35c383, 0x8e2d595f, 0x4e497148, 0x0ee40971,
9307
+ 0xce802166, 0x8ebef803, 0x4edad014, 0x0e77a82d, 0xce13803a,
9308
+ 0x0cd372c7, 0xccb75ad0, 0x8c1a22e9, 0x4c7e0afe, 0x0c40d39b,
9309
+ 0xcc24fb8c, 0x8c8983b5, 0x4cedaba2, 0x0cf5317e, 0xcc911969,
9310
+ 0x8c3c6150, 0x4c584947, 0x0c669022, 0xcc02b835, 0x8cafc00c,
9311
+ 0x4ccbe81b, 0x4d99856e, 0x8dfdad79, 0xcd50d540, 0x0d34fd57,
9312
+ 0x4d0a2432, 0x8d6e0c25, 0xcdc3741c, 0x0da75c0b, 0x4dbfc6d7,
9313
+ 0x8ddbeec0, 0xcd7696f9, 0x0d12beee, 0x4d2c678b, 0x8d484f9c,
9314
+ 0xcde537a5, 0x0d811fb2, 0x0862a385, 0xc8068b92, 0x88abf3ab,
9315
+ 0x48cfdbbc, 0x08f102d9, 0xc8952ace, 0x883852f7, 0x485c7ae0,
9316
+ 0x0844e03c, 0xc820c82b, 0x888db012, 0x48e99805, 0x08d74160,
9317
+ 0xc8b36977, 0x881e114e, 0x487a3959, 0x4928542c, 0x894c7c3b,
9318
+ 0xc9e10402, 0x09852c15, 0x49bbf570, 0x89dfdd67, 0xc972a55e,
9319
+ 0x09168d49, 0x490e1795, 0x896a3f82, 0xc9c747bb, 0x09a36fac,
9320
+ 0x499db6c9, 0x89f99ede, 0xc954e6e7, 0x0930cef0, 0xcbf03c0d,
9321
+ 0x0b94141a, 0x4b396c23, 0x8b5d4434, 0xcb639d51, 0x0b07b546,
9322
+ 0x4baacd7f, 0x8bcee568, 0xcbd67fb4, 0x0bb257a3, 0x4b1f2f9a,
9323
+ 0x8b7b078d, 0xcb45dee8, 0x0b21f6ff, 0x4b8c8ec6, 0x8be8a6d1,
9324
+ 0x8abacba4, 0x4adee3b3, 0x0a739b8a, 0xca17b39d, 0x8a296af8,
9325
+ 0x4a4d42ef, 0x0ae03ad6, 0xca8412c1, 0x8a9c881d, 0x4af8a00a,
9326
+ 0x0a55d833, 0xca31f024, 0x8a0f2941, 0x4a6b0156, 0x0ac6796f,
9327
+ 0xcaa25178},
9328
+ {0x00000000, 0xd4ea739b, 0xe9d396ed, 0x3d39e576, 0x93a15c00,
9329
+ 0x474b2f9b, 0x7a72caed, 0xae98b976, 0x2643b900, 0xf2a9ca9b,
9330
+ 0xcf902fed, 0x1b7a5c76, 0xb5e2e500, 0x6108969b, 0x5c3173ed,
9331
+ 0x88db0076, 0x4c867201, 0x986c019a, 0xa555e4ec, 0x71bf9777,
9332
+ 0xdf272e01, 0x0bcd5d9a, 0x36f4b8ec, 0xe21ecb77, 0x6ac5cb01,
9333
+ 0xbe2fb89a, 0x83165dec, 0x57fc2e77, 0xf9649701, 0x2d8ee49a,
9334
+ 0x10b701ec, 0xc45d7277, 0x980ce502, 0x4ce69699, 0x71df73ef,
9335
+ 0xa5350074, 0x0badb902, 0xdf47ca99, 0xe27e2fef, 0x36945c74,
9336
+ 0xbe4f5c02, 0x6aa52f99, 0x579ccaef, 0x8376b974, 0x2dee0002,
9337
+ 0xf9047399, 0xc43d96ef, 0x10d7e574, 0xd48a9703, 0x0060e498,
9338
+ 0x3d5901ee, 0xe9b37275, 0x472bcb03, 0x93c1b898, 0xaef85dee,
9339
+ 0x7a122e75, 0xf2c92e03, 0x26235d98, 0x1b1ab8ee, 0xcff0cb75,
9340
+ 0x61687203, 0xb5820198, 0x88bbe4ee, 0x5c519775, 0x3019ca05,
9341
+ 0xe4f3b99e, 0xd9ca5ce8, 0x0d202f73, 0xa3b89605, 0x7752e59e,
9342
+ 0x4a6b00e8, 0x9e817373, 0x165a7305, 0xc2b0009e, 0xff89e5e8,
9343
+ 0x2b639673, 0x85fb2f05, 0x51115c9e, 0x6c28b9e8, 0xb8c2ca73,
9344
+ 0x7c9fb804, 0xa875cb9f, 0x954c2ee9, 0x41a65d72, 0xef3ee404,
9345
+ 0x3bd4979f, 0x06ed72e9, 0xd2070172, 0x5adc0104, 0x8e36729f,
9346
+ 0xb30f97e9, 0x67e5e472, 0xc97d5d04, 0x1d972e9f, 0x20aecbe9,
9347
+ 0xf444b872, 0xa8152f07, 0x7cff5c9c, 0x41c6b9ea, 0x952cca71,
9348
+ 0x3bb47307, 0xef5e009c, 0xd267e5ea, 0x068d9671, 0x8e569607,
9349
+ 0x5abce59c, 0x678500ea, 0xb36f7371, 0x1df7ca07, 0xc91db99c,
9350
+ 0xf4245cea, 0x20ce2f71, 0xe4935d06, 0x30792e9d, 0x0d40cbeb,
9351
+ 0xd9aab870, 0x77320106, 0xa3d8729d, 0x9ee197eb, 0x4a0be470,
9352
+ 0xc2d0e406, 0x163a979d, 0x2b0372eb, 0xffe90170, 0x5171b806,
9353
+ 0x859bcb9d, 0xb8a22eeb, 0x6c485d70, 0x6032940b, 0xb4d8e790,
9354
+ 0x89e102e6, 0x5d0b717d, 0xf393c80b, 0x2779bb90, 0x1a405ee6,
9355
+ 0xceaa2d7d, 0x46712d0b, 0x929b5e90, 0xafa2bbe6, 0x7b48c87d,
9356
+ 0xd5d0710b, 0x013a0290, 0x3c03e7e6, 0xe8e9947d, 0x2cb4e60a,
9357
+ 0xf85e9591, 0xc56770e7, 0x118d037c, 0xbf15ba0a, 0x6bffc991,
9358
+ 0x56c62ce7, 0x822c5f7c, 0x0af75f0a, 0xde1d2c91, 0xe324c9e7,
9359
+ 0x37ceba7c, 0x9956030a, 0x4dbc7091, 0x708595e7, 0xa46fe67c,
9360
+ 0xf83e7109, 0x2cd40292, 0x11ede7e4, 0xc507947f, 0x6b9f2d09,
9361
+ 0xbf755e92, 0x824cbbe4, 0x56a6c87f, 0xde7dc809, 0x0a97bb92,
9362
+ 0x37ae5ee4, 0xe3442d7f, 0x4ddc9409, 0x9936e792, 0xa40f02e4,
9363
+ 0x70e5717f, 0xb4b80308, 0x60527093, 0x5d6b95e5, 0x8981e67e,
9364
+ 0x27195f08, 0xf3f32c93, 0xcecac9e5, 0x1a20ba7e, 0x92fbba08,
9365
+ 0x4611c993, 0x7b282ce5, 0xafc25f7e, 0x015ae608, 0xd5b09593,
9366
+ 0xe88970e5, 0x3c63037e, 0x502b5e0e, 0x84c12d95, 0xb9f8c8e3,
9367
+ 0x6d12bb78, 0xc38a020e, 0x17607195, 0x2a5994e3, 0xfeb3e778,
9368
+ 0x7668e70e, 0xa2829495, 0x9fbb71e3, 0x4b510278, 0xe5c9bb0e,
9369
+ 0x3123c895, 0x0c1a2de3, 0xd8f05e78, 0x1cad2c0f, 0xc8475f94,
9370
+ 0xf57ebae2, 0x2194c979, 0x8f0c700f, 0x5be60394, 0x66dfe6e2,
9371
+ 0xb2359579, 0x3aee950f, 0xee04e694, 0xd33d03e2, 0x07d77079,
9372
+ 0xa94fc90f, 0x7da5ba94, 0x409c5fe2, 0x94762c79, 0xc827bb0c,
9373
+ 0x1ccdc897, 0x21f42de1, 0xf51e5e7a, 0x5b86e70c, 0x8f6c9497,
9374
+ 0xb25571e1, 0x66bf027a, 0xee64020c, 0x3a8e7197, 0x07b794e1,
9375
+ 0xd35de77a, 0x7dc55e0c, 0xa92f2d97, 0x9416c8e1, 0x40fcbb7a,
9376
+ 0x84a1c90d, 0x504bba96, 0x6d725fe0, 0xb9982c7b, 0x1700950d,
9377
+ 0xc3eae696, 0xfed303e0, 0x2a39707b, 0xa2e2700d, 0x76080396,
9378
+ 0x4b31e6e0, 0x9fdb957b, 0x31432c0d, 0xe5a95f96, 0xd890bae0,
9379
+ 0x0c7ac97b},
9380
+ {0x00000000, 0x27652581, 0x0fcc3bd9, 0x28a91e58, 0x5f9e0669,
9381
+ 0x78fb23e8, 0x50523db0, 0x77371831, 0xbe3c0dd2, 0x99592853,
9382
+ 0xb1f0360b, 0x9695138a, 0xe1a20bbb, 0xc6c72e3a, 0xee6e3062,
9383
+ 0xc90b15e3, 0x3d7f6b7f, 0x1a1a4efe, 0x32b350a6, 0x15d67527,
9384
+ 0x62e16d16, 0x45844897, 0x6d2d56cf, 0x4a48734e, 0x834366ad,
9385
+ 0xa426432c, 0x8c8f5d74, 0xabea78f5, 0xdcdd60c4, 0xfbb84545,
9386
+ 0xd3115b1d, 0xf4747e9c, 0x7afed6fe, 0x5d9bf37f, 0x7532ed27,
9387
+ 0x5257c8a6, 0x2560d097, 0x0205f516, 0x2aaceb4e, 0x0dc9cecf,
9388
+ 0xc4c2db2c, 0xe3a7fead, 0xcb0ee0f5, 0xec6bc574, 0x9b5cdd45,
9389
+ 0xbc39f8c4, 0x9490e69c, 0xb3f5c31d, 0x4781bd81, 0x60e49800,
9390
+ 0x484d8658, 0x6f28a3d9, 0x181fbbe8, 0x3f7a9e69, 0x17d38031,
9391
+ 0x30b6a5b0, 0xf9bdb053, 0xded895d2, 0xf6718b8a, 0xd114ae0b,
9392
+ 0xa623b63a, 0x814693bb, 0xa9ef8de3, 0x8e8aa862, 0xb5fadc26,
9393
+ 0x929ff9a7, 0xba36e7ff, 0x9d53c27e, 0xea64da4f, 0xcd01ffce,
9394
+ 0xe5a8e196, 0xc2cdc417, 0x0bc6d1f4, 0x2ca3f475, 0x040aea2d,
9395
+ 0x236fcfac, 0x5458d79d, 0x733df21c, 0x5b94ec44, 0x7cf1c9c5,
9396
+ 0x8885b759, 0xafe092d8, 0x87498c80, 0xa02ca901, 0xd71bb130,
9397
+ 0xf07e94b1, 0xd8d78ae9, 0xffb2af68, 0x36b9ba8b, 0x11dc9f0a,
9398
+ 0x39758152, 0x1e10a4d3, 0x6927bce2, 0x4e429963, 0x66eb873b,
9399
+ 0x418ea2ba, 0xcf040ad8, 0xe8612f59, 0xc0c83101, 0xe7ad1480,
9400
+ 0x909a0cb1, 0xb7ff2930, 0x9f563768, 0xb83312e9, 0x7138070a,
9401
+ 0x565d228b, 0x7ef43cd3, 0x59911952, 0x2ea60163, 0x09c324e2,
9402
+ 0x216a3aba, 0x060f1f3b, 0xf27b61a7, 0xd51e4426, 0xfdb75a7e,
9403
+ 0xdad27fff, 0xade567ce, 0x8a80424f, 0xa2295c17, 0x854c7996,
9404
+ 0x4c476c75, 0x6b2249f4, 0x438b57ac, 0x64ee722d, 0x13d96a1c,
9405
+ 0x34bc4f9d, 0x1c1551c5, 0x3b707444, 0x6af5b94d, 0x4d909ccc,
9406
+ 0x65398294, 0x425ca715, 0x356bbf24, 0x120e9aa5, 0x3aa784fd,
9407
+ 0x1dc2a17c, 0xd4c9b49f, 0xf3ac911e, 0xdb058f46, 0xfc60aac7,
9408
+ 0x8b57b2f6, 0xac329777, 0x849b892f, 0xa3feacae, 0x578ad232,
9409
+ 0x70eff7b3, 0x5846e9eb, 0x7f23cc6a, 0x0814d45b, 0x2f71f1da,
9410
+ 0x07d8ef82, 0x20bdca03, 0xe9b6dfe0, 0xced3fa61, 0xe67ae439,
9411
+ 0xc11fc1b8, 0xb628d989, 0x914dfc08, 0xb9e4e250, 0x9e81c7d1,
9412
+ 0x100b6fb3, 0x376e4a32, 0x1fc7546a, 0x38a271eb, 0x4f9569da,
9413
+ 0x68f04c5b, 0x40595203, 0x673c7782, 0xae376261, 0x895247e0,
9414
+ 0xa1fb59b8, 0x869e7c39, 0xf1a96408, 0xd6cc4189, 0xfe655fd1,
9415
+ 0xd9007a50, 0x2d7404cc, 0x0a11214d, 0x22b83f15, 0x05dd1a94,
9416
+ 0x72ea02a5, 0x558f2724, 0x7d26397c, 0x5a431cfd, 0x9348091e,
9417
+ 0xb42d2c9f, 0x9c8432c7, 0xbbe11746, 0xccd60f77, 0xebb32af6,
9418
+ 0xc31a34ae, 0xe47f112f, 0xdf0f656b, 0xf86a40ea, 0xd0c35eb2,
9419
+ 0xf7a67b33, 0x80916302, 0xa7f44683, 0x8f5d58db, 0xa8387d5a,
9420
+ 0x613368b9, 0x46564d38, 0x6eff5360, 0x499a76e1, 0x3ead6ed0,
9421
+ 0x19c84b51, 0x31615509, 0x16047088, 0xe2700e14, 0xc5152b95,
9422
+ 0xedbc35cd, 0xcad9104c, 0xbdee087d, 0x9a8b2dfc, 0xb22233a4,
9423
+ 0x95471625, 0x5c4c03c6, 0x7b292647, 0x5380381f, 0x74e51d9e,
9424
+ 0x03d205af, 0x24b7202e, 0x0c1e3e76, 0x2b7b1bf7, 0xa5f1b395,
9425
+ 0x82949614, 0xaa3d884c, 0x8d58adcd, 0xfa6fb5fc, 0xdd0a907d,
9426
+ 0xf5a38e25, 0xd2c6aba4, 0x1bcdbe47, 0x3ca89bc6, 0x1401859e,
9427
+ 0x3364a01f, 0x4453b82e, 0x63369daf, 0x4b9f83f7, 0x6cfaa676,
9428
+ 0x988ed8ea, 0xbfebfd6b, 0x9742e333, 0xb027c6b2, 0xc710de83,
9429
+ 0xe075fb02, 0xc8dce55a, 0xefb9c0db, 0x26b2d538, 0x01d7f0b9,
9430
+ 0x297eeee1, 0x0e1bcb60, 0x792cd351, 0x5e49f6d0, 0x76e0e888,
9431
+ 0x5185cd09}};
9432
+
9433
+#endif
9434
+
9435
+#endif
9436
+
4399437
#endif
440
- }
441
-};
9438
+
9439
+local const z_crc_t FAR x2n_table[] = {
9440
+ 0x40000000, 0x20000000, 0x08000000, 0x00800000, 0x00008000,
9441
+ 0xedb88320, 0xb1e6b092, 0xa06a2517, 0xed627dae, 0x88d14467,
9442
+ 0xd7bbfe6a, 0xec447f11, 0x8e7ea170, 0x6427800e, 0x4d47bae0,
9443
+ 0x09fe548f, 0x83852d0f, 0x30362f1a, 0x7b5a9cc3, 0x31fec169,
9444
+ 0x9fec022a, 0x6c8dedc4, 0x15d6874d, 0x5fde7a4e, 0xbad90e37,
9445
+ 0x2e4e5eef, 0x4eaba214, 0xa8a472c0, 0x429a969e, 0x148d302a,
9446
+ 0xc40ba6d0, 0xc4e22c3c};
4429447
--- compat/zlib/crc32.h
+++ compat/zlib/crc32.h
@@ -1,441 +1,9446 @@
1 /* crc32.h -- tables for rapid CRC calculation
2 * Generated automatically by crc32.c
3 */
4
5 local const z_crc_t FAR crc_table[TBLS][256] =
6 {
7 {
8 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
9 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,
10 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
11 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,
12 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,
13 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,
14 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,
15 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,
16 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,
17 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,
18 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,
19 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,
20 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,
21 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,
22 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,
23 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,
24 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,
25 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,
26 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,
27 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,
28 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,
29 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,
30 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,
31 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,
32 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,
33 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,
34 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,
35 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,
36 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,
37 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,
38 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,
39 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,
40 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,
41 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,
42 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,
43 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,
44 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,
45 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,
46 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,
47 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,
48 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,
49 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,
50 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,
51 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,
52 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,
53 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,
54 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,
55 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,
56 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,
57 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,
58 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,
59 0x2d02ef8dUL
60 #ifdef BYFOUR
61 },
62 {
63 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,
64 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,
65 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,
66 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,
67 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,
68 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,
69 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,
70 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,
71 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,
72 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,
73 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,
74 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,
75 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,
76 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,
77 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,
78 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,
79 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,
80 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,
81 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,
82 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,
83 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,
84 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,
85 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,
86 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,
87 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,
88 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,
89 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,
90 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,
91 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,
92 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,
93 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,
94 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,
95 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,
96 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,
97 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,
98 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,
99 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,
100 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,
101 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,
102 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,
103 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,
104 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,
105 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,
106 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,
107 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,
108 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,
109 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,
110 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,
111 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,
112 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,
113 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,
114 0x9324fd72UL
115 },
116 {
117 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,
118 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,
119 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,
120 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,
121 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,
122 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,
123 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,
124 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,
125 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,
126 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,
127 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,
128 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,
129 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,
130 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,
131 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,
132 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,
133 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,
134 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,
135 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,
136 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,
137 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,
138 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,
139 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,
140 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,
141 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,
142 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,
143 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,
144 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,
145 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,
146 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,
147 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,
148 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,
149 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,
150 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,
151 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,
152 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,
153 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,
154 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,
155 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,
156 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,
157 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,
158 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,
159 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,
160 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,
161 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,
162 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,
163 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,
164 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,
165 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,
166 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,
167 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,
168 0xbe9834edUL
169 },
170 {
171 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,
172 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,
173 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,
174 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,
175 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,
176 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,
177 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,
178 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,
179 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,
180 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,
181 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,
182 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,
183 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,
184 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,
185 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,
186 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,
187 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,
188 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,
189 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,
190 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,
191 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,
192 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,
193 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,
194 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,
195 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,
196 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,
197 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,
198 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,
199 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,
200 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,
201 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,
202 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,
203 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,
204 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,
205 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,
206 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,
207 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,
208 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,
209 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,
210 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,
211 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,
212 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,
213 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,
214 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,
215 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,
216 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,
217 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,
218 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,
219 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,
220 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
221 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
222 0xde0506f1UL
223 },
224 {
225 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,
226 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,
227 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,
228 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,
229 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,
230 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,
231 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,
232 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,
233 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,
234 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,
235 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,
236 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,
237 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,
238 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,
239 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,
240 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,
241 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,
242 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,
243 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,
244 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,
245 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,
246 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,
247 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,
248 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,
249 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,
250 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,
251 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,
252 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,
253 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,
254 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,
255 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,
256 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,
257 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,
258 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,
259 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,
260 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,
261 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,
262 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,
263 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,
264 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,
265 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,
266 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,
267 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,
268 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,
269 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,
270 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,
271 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,
272 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,
273 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,
274 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,
275 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,
276 0x8def022dUL
277 },
278 {
279 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,
280 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,
281 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,
282 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,
283 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,
284 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,
285 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,
286 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,
287 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,
288 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,
289 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,
290 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,
291 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,
292 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,
293 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,
294 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,
295 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,
296 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,
297 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,
298 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,
299 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,
300 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,
301 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,
302 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,
303 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,
304 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,
305 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,
306 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,
307 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,
308 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,
309 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,
310 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,
311 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,
312 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,
313 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,
314 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,
315 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,
316 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,
317 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,
318 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,
319 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,
320 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,
321 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,
322 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,
323 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,
324 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,
325 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,
326 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,
327 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,
328 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,
329 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,
330 0x72fd2493UL
331 },
332 {
333 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,
334 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,
335 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,
336 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,
337 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,
338 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,
339 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,
340 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,
341 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,
342 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,
343 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,
344 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,
345 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,
346 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,
347 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,
348 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,
349 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,
350 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,
351 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,
352 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,
353 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,
354 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,
355 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,
356 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,
357 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,
358 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,
359 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,
360 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,
361 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,
362 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,
363 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,
364 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,
365 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,
366 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,
367 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,
368 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,
369 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,
370 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,
371 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,
372 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,
373 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,
374 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,
375 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,
376 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,
377 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,
378 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,
379 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,
380 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,
381 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,
382 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,
383 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,
384 0xed3498beUL
385 },
386 {
387 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,
388 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,
389 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,
390 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,
391 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,
392 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,
393 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,
394 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,
395 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,
396 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,
397 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,
398 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,
399 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,
400 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,
401 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,
402 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,
403 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,
404 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,
405 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,
406 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,
407 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,
408 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,
409 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,
410 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,
411 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,
412 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,
413 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,
414 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,
415 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,
416 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,
417 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,
418 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,
419 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,
420 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,
421 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,
422 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,
423 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,
424 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,
425 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,
426 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,
427 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,
428 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,
429 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,
430 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,
431 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,
432 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,
433 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,
434 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,
435 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,
436 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,
437 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,
438 0xf10605deUL
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
439 #endif
440 }
441 };
 
 
 
 
 
 
 
442
--- compat/zlib/crc32.h
+++ compat/zlib/crc32.h
@@ -1,441 +1,9446 @@
1 /* crc32.h -- tables for rapid CRC calculation
2 * Generated automatically by crc32.c
3 */
4
5 local const z_crc_t FAR crc_table[] = {
6 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
7 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
8 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
9 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
10 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
11 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
12 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
13 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
14 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
15 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
16 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
17 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
18 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
19 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
20 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
21 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
22 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
23 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
24 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
25 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
26 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
27 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
28 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
29 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
30 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
31 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
32 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
33 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
34 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
35 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
36 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
37 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
38 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
39 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
40 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
41 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
42 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
43 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
44 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
45 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
46 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
47 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
48 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
49 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
50 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
51 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
52 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
53 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
54 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
55 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
56 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
57 0x2d02ef8d};
58
59 #ifdef W
60
61 #if W == 8
62
63 local const z_word_t FAR crc_big_table[] = {
64 0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000,
65 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000,
66 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000,
67 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000,
68 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000,
69 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000,
70 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000,
71 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000,
72 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000,
73 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000,
74 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000,
75 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000,
76 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000,
77 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000,
78 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000,
79 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000,
80 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000,
81 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000,
82 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000,
83 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000,
84 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000,
85 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000,
86 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000,
87 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000,
88 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000,
89 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000,
90 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000,
91 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000,
92 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000,
93 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000,
94 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000,
95 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000,
96 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000,
97 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000,
98 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000,
99 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000,
100 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000,
101 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000,
102 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000,
103 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000,
104 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000,
105 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000,
106 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000,
107 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000,
108 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000,
109 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000,
110 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000,
111 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000,
112 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000,
113 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000,
114 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000,
115 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000,
116 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000,
117 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000,
118 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000,
119 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000,
120 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000,
121 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000,
122 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000,
123 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000,
124 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000,
125 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000,
126 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000,
127 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000,
128 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000,
129 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000,
130 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000,
131 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000,
132 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000,
133 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000,
134 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000,
135 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000,
136 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000,
137 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000,
138 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000,
139 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000,
140 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000,
141 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000,
142 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000,
143 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000,
144 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000,
145 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000,
146 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000,
147 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000,
148 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000,
149 0x8def022d00000000};
150
151 #else /* W == 4 */
152
153 local const z_word_t FAR crc_big_table[] = {
154 0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07,
155 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79,
156 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7,
157 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84,
158 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13,
159 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663,
160 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5,
161 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5,
162 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832,
163 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51,
164 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf,
165 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1,
166 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76,
167 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606,
168 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996,
169 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6,
170 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c,
171 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712,
172 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c,
173 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4,
174 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943,
175 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333,
176 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe,
177 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce,
178 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359,
179 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a,
180 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04,
181 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a,
182 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0,
183 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580,
184 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10,
185 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060,
186 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1,
187 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf,
188 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31,
189 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852,
190 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5,
191 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5,
192 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75,
193 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005,
194 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292,
195 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1,
196 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f,
197 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111,
198 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0,
199 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0,
200 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40,
201 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530,
202 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba,
203 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4,
204 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a,
205 0x8def022d};
206
207 #endif
208
209 #if N == 1
210
211 #if W == 8
212
213 local const z_crc_t FAR crc_braid_table[][256] = {
214 {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa,
215 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b,
216 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232,
217 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8,
218 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e,
219 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa,
220 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b,
221 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f,
222 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719,
223 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3,
224 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa,
225 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b,
226 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed,
227 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89,
228 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25,
229 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041,
230 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c,
231 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed,
232 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4,
233 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758,
234 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e,
235 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a,
236 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed,
237 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889,
238 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df,
239 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544,
240 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d,
241 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c,
242 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1,
243 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95,
244 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839,
245 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d,
246 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976,
247 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7,
248 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be,
249 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144,
250 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12,
251 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376,
252 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a,
253 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e,
254 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278,
255 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682,
256 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b,
257 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a,
258 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561,
259 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05,
260 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9,
261 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd,
262 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0,
263 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61,
264 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678,
265 0x264b06e6},
266 {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413,
267 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3,
268 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d,
269 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653,
270 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9,
271 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e,
272 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5,
273 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712,
274 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8,
275 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6,
276 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068,
277 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8,
278 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579,
279 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade,
280 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37,
281 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590,
282 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4,
283 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64,
284 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea,
285 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678,
286 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282,
287 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25,
288 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102,
289 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5,
290 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f,
291 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146,
292 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8,
293 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08,
294 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c,
295 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b,
296 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972,
297 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5,
298 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d,
299 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd,
300 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833,
301 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d,
302 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7,
303 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60,
304 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2,
305 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105,
306 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff,
307 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1,
308 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f,
309 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf,
310 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617,
311 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0,
312 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959,
313 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe,
314 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca,
315 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a,
316 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184,
317 0x92364a30},
318 {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216,
319 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8,
320 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170,
321 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035,
322 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6,
323 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145,
324 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d,
325 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e,
326 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d,
327 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408,
328 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0,
329 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e,
330 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c,
331 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf,
332 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a,
333 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9,
334 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1,
335 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f,
336 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987,
337 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4,
338 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37,
339 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84,
340 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca,
341 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79,
342 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba,
343 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d,
344 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5,
345 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b,
346 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643,
347 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0,
348 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525,
349 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496,
350 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8,
351 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026,
352 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e,
353 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db,
354 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118,
355 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab,
356 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf,
357 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c,
358 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf,
359 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a,
360 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32,
361 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec,
362 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82,
363 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31,
364 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4,
365 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957,
366 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f,
367 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1,
368 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869,
369 0xe4c4abcc},
370 {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0,
371 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271,
372 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61,
373 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52,
374 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43,
375 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333,
376 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64,
377 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314,
378 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205,
379 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136,
380 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26,
381 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997,
382 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849,
383 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739,
384 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8,
385 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98,
386 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b,
387 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba,
388 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa,
389 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d,
390 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c,
391 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc,
392 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af,
393 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf,
394 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce,
395 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922,
396 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532,
397 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183,
398 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710,
399 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860,
400 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1,
401 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1,
402 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956,
403 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7,
404 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7,
405 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4,
406 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5,
407 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5,
408 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb,
409 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb,
410 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da,
411 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9,
412 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9,
413 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48,
414 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df,
415 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af,
416 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e,
417 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e,
418 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d,
419 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c,
420 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c,
421 0xca64c78c},
422 {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757,
423 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a,
424 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733,
425 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871,
426 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70,
427 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42,
428 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5,
429 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787,
430 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086,
431 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4,
432 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d,
433 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0,
434 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d,
435 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f,
436 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859,
437 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b,
438 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5,
439 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028,
440 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891,
441 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed,
442 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec,
443 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde,
444 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817,
445 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825,
446 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24,
447 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e,
448 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7,
449 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a,
450 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4,
451 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196,
452 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0,
453 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2,
454 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52,
455 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f,
456 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36,
457 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174,
458 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675,
459 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647,
460 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d,
461 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf,
462 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be,
463 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc,
464 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645,
465 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98,
466 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138,
467 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a,
468 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c,
469 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e,
470 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0,
471 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d,
472 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194,
473 0xde0506f1},
474 {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc,
475 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f,
476 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a,
477 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29,
478 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8,
479 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023,
480 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e,
481 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065,
482 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84,
483 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7,
484 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922,
485 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71,
486 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0,
487 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b,
488 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816,
489 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd,
490 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c,
491 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f,
492 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba,
493 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579,
494 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98,
495 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873,
496 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e,
497 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5,
498 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134,
499 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7,
500 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732,
501 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461,
502 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0,
503 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b,
504 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26,
505 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd,
506 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc,
507 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef,
508 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a,
509 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049,
510 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8,
511 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43,
512 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e,
513 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5,
514 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24,
515 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07,
516 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982,
517 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1,
518 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0,
519 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b,
520 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576,
521 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d,
522 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c,
523 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f,
524 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda,
525 0xbe9834ed},
526 {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504,
527 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49,
528 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e,
529 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192,
530 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859,
531 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c,
532 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620,
533 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265,
534 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae,
535 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2,
536 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175,
537 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38,
538 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05,
539 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40,
540 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f,
541 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca,
542 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850,
543 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d,
544 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da,
545 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864,
546 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af,
547 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea,
548 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74,
549 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31,
550 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa,
551 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a,
552 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd,
553 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180,
554 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a,
555 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f,
556 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290,
557 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5,
558 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed,
559 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0,
560 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167,
561 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b,
562 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0,
563 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5,
564 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc,
565 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189,
566 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842,
567 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e,
568 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299,
569 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4,
570 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec,
571 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9,
572 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66,
573 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23,
574 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9,
575 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4,
576 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33,
577 0x9324fd72},
578 {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
579 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
580 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
581 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
582 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
583 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
584 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
585 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
586 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
587 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
588 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
589 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
590 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
591 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
592 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
593 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
594 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
595 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
596 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
597 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
598 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
599 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
600 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
601 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
602 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
603 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
604 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
605 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
606 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
607 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
608 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
609 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
610 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
611 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
612 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
613 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
614 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
615 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
616 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
617 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
618 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
619 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
620 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
621 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
622 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
623 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
624 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
625 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
626 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
627 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
628 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
629 0x2d02ef8d}};
630
631 local const z_word_t FAR crc_braid_big_table[][256] = {
632 {0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000,
633 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000,
634 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000,
635 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000,
636 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000,
637 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000,
638 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000,
639 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000,
640 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000,
641 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000,
642 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000,
643 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000,
644 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000,
645 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000,
646 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000,
647 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000,
648 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000,
649 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000,
650 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000,
651 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000,
652 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000,
653 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000,
654 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000,
655 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000,
656 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000,
657 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000,
658 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000,
659 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000,
660 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000,
661 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000,
662 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000,
663 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000,
664 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000,
665 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000,
666 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000,
667 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000,
668 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000,
669 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000,
670 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000,
671 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000,
672 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000,
673 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000,
674 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000,
675 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000,
676 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000,
677 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000,
678 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000,
679 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000,
680 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000,
681 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000,
682 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000,
683 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000,
684 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000,
685 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000,
686 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000,
687 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000,
688 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000,
689 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000,
690 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000,
691 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000,
692 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000,
693 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000,
694 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000,
695 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000,
696 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000,
697 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000,
698 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000,
699 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000,
700 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000,
701 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000,
702 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000,
703 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000,
704 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000,
705 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000,
706 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000,
707 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000,
708 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000,
709 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000,
710 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000,
711 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000,
712 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000,
713 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000,
714 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000,
715 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000,
716 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000,
717 0x8def022d00000000},
718 {0x0000000000000000, 0x41311b1900000000, 0x8262363200000000,
719 0xc3532d2b00000000, 0x04c56c6400000000, 0x45f4777d00000000,
720 0x86a75a5600000000, 0xc796414f00000000, 0x088ad9c800000000,
721 0x49bbc2d100000000, 0x8ae8effa00000000, 0xcbd9f4e300000000,
722 0x0c4fb5ac00000000, 0x4d7eaeb500000000, 0x8e2d839e00000000,
723 0xcf1c988700000000, 0x5112c24a00000000, 0x1023d95300000000,
724 0xd370f47800000000, 0x9241ef6100000000, 0x55d7ae2e00000000,
725 0x14e6b53700000000, 0xd7b5981c00000000, 0x9684830500000000,
726 0x59981b8200000000, 0x18a9009b00000000, 0xdbfa2db000000000,
727 0x9acb36a900000000, 0x5d5d77e600000000, 0x1c6c6cff00000000,
728 0xdf3f41d400000000, 0x9e0e5acd00000000, 0xa224849500000000,
729 0xe3159f8c00000000, 0x2046b2a700000000, 0x6177a9be00000000,
730 0xa6e1e8f100000000, 0xe7d0f3e800000000, 0x2483dec300000000,
731 0x65b2c5da00000000, 0xaaae5d5d00000000, 0xeb9f464400000000,
732 0x28cc6b6f00000000, 0x69fd707600000000, 0xae6b313900000000,
733 0xef5a2a2000000000, 0x2c09070b00000000, 0x6d381c1200000000,
734 0xf33646df00000000, 0xb2075dc600000000, 0x715470ed00000000,
735 0x30656bf400000000, 0xf7f32abb00000000, 0xb6c231a200000000,
736 0x75911c8900000000, 0x34a0079000000000, 0xfbbc9f1700000000,
737 0xba8d840e00000000, 0x79dea92500000000, 0x38efb23c00000000,
738 0xff79f37300000000, 0xbe48e86a00000000, 0x7d1bc54100000000,
739 0x3c2ade5800000000, 0x054f79f000000000, 0x447e62e900000000,
740 0x872d4fc200000000, 0xc61c54db00000000, 0x018a159400000000,
741 0x40bb0e8d00000000, 0x83e823a600000000, 0xc2d938bf00000000,
742 0x0dc5a03800000000, 0x4cf4bb2100000000, 0x8fa7960a00000000,
743 0xce968d1300000000, 0x0900cc5c00000000, 0x4831d74500000000,
744 0x8b62fa6e00000000, 0xca53e17700000000, 0x545dbbba00000000,
745 0x156ca0a300000000, 0xd63f8d8800000000, 0x970e969100000000,
746 0x5098d7de00000000, 0x11a9ccc700000000, 0xd2fae1ec00000000,
747 0x93cbfaf500000000, 0x5cd7627200000000, 0x1de6796b00000000,
748 0xdeb5544000000000, 0x9f844f5900000000, 0x58120e1600000000,
749 0x1923150f00000000, 0xda70382400000000, 0x9b41233d00000000,
750 0xa76bfd6500000000, 0xe65ae67c00000000, 0x2509cb5700000000,
751 0x6438d04e00000000, 0xa3ae910100000000, 0xe29f8a1800000000,
752 0x21cca73300000000, 0x60fdbc2a00000000, 0xafe124ad00000000,
753 0xeed03fb400000000, 0x2d83129f00000000, 0x6cb2098600000000,
754 0xab2448c900000000, 0xea1553d000000000, 0x29467efb00000000,
755 0x687765e200000000, 0xf6793f2f00000000, 0xb748243600000000,
756 0x741b091d00000000, 0x352a120400000000, 0xf2bc534b00000000,
757 0xb38d485200000000, 0x70de657900000000, 0x31ef7e6000000000,
758 0xfef3e6e700000000, 0xbfc2fdfe00000000, 0x7c91d0d500000000,
759 0x3da0cbcc00000000, 0xfa368a8300000000, 0xbb07919a00000000,
760 0x7854bcb100000000, 0x3965a7a800000000, 0x4b98833b00000000,
761 0x0aa9982200000000, 0xc9fab50900000000, 0x88cbae1000000000,
762 0x4f5def5f00000000, 0x0e6cf44600000000, 0xcd3fd96d00000000,
763 0x8c0ec27400000000, 0x43125af300000000, 0x022341ea00000000,
764 0xc1706cc100000000, 0x804177d800000000, 0x47d7369700000000,
765 0x06e62d8e00000000, 0xc5b500a500000000, 0x84841bbc00000000,
766 0x1a8a417100000000, 0x5bbb5a6800000000, 0x98e8774300000000,
767 0xd9d96c5a00000000, 0x1e4f2d1500000000, 0x5f7e360c00000000,
768 0x9c2d1b2700000000, 0xdd1c003e00000000, 0x120098b900000000,
769 0x533183a000000000, 0x9062ae8b00000000, 0xd153b59200000000,
770 0x16c5f4dd00000000, 0x57f4efc400000000, 0x94a7c2ef00000000,
771 0xd596d9f600000000, 0xe9bc07ae00000000, 0xa88d1cb700000000,
772 0x6bde319c00000000, 0x2aef2a8500000000, 0xed796bca00000000,
773 0xac4870d300000000, 0x6f1b5df800000000, 0x2e2a46e100000000,
774 0xe136de6600000000, 0xa007c57f00000000, 0x6354e85400000000,
775 0x2265f34d00000000, 0xe5f3b20200000000, 0xa4c2a91b00000000,
776 0x6791843000000000, 0x26a09f2900000000, 0xb8aec5e400000000,
777 0xf99fdefd00000000, 0x3accf3d600000000, 0x7bfde8cf00000000,
778 0xbc6ba98000000000, 0xfd5ab29900000000, 0x3e099fb200000000,
779 0x7f3884ab00000000, 0xb0241c2c00000000, 0xf115073500000000,
780 0x32462a1e00000000, 0x7377310700000000, 0xb4e1704800000000,
781 0xf5d06b5100000000, 0x3683467a00000000, 0x77b25d6300000000,
782 0x4ed7facb00000000, 0x0fe6e1d200000000, 0xccb5ccf900000000,
783 0x8d84d7e000000000, 0x4a1296af00000000, 0x0b238db600000000,
784 0xc870a09d00000000, 0x8941bb8400000000, 0x465d230300000000,
785 0x076c381a00000000, 0xc43f153100000000, 0x850e0e2800000000,
786 0x42984f6700000000, 0x03a9547e00000000, 0xc0fa795500000000,
787 0x81cb624c00000000, 0x1fc5388100000000, 0x5ef4239800000000,
788 0x9da70eb300000000, 0xdc9615aa00000000, 0x1b0054e500000000,
789 0x5a314ffc00000000, 0x996262d700000000, 0xd85379ce00000000,
790 0x174fe14900000000, 0x567efa5000000000, 0x952dd77b00000000,
791 0xd41ccc6200000000, 0x138a8d2d00000000, 0x52bb963400000000,
792 0x91e8bb1f00000000, 0xd0d9a00600000000, 0xecf37e5e00000000,
793 0xadc2654700000000, 0x6e91486c00000000, 0x2fa0537500000000,
794 0xe836123a00000000, 0xa907092300000000, 0x6a54240800000000,
795 0x2b653f1100000000, 0xe479a79600000000, 0xa548bc8f00000000,
796 0x661b91a400000000, 0x272a8abd00000000, 0xe0bccbf200000000,
797 0xa18dd0eb00000000, 0x62defdc000000000, 0x23efe6d900000000,
798 0xbde1bc1400000000, 0xfcd0a70d00000000, 0x3f838a2600000000,
799 0x7eb2913f00000000, 0xb924d07000000000, 0xf815cb6900000000,
800 0x3b46e64200000000, 0x7a77fd5b00000000, 0xb56b65dc00000000,
801 0xf45a7ec500000000, 0x370953ee00000000, 0x763848f700000000,
802 0xb1ae09b800000000, 0xf09f12a100000000, 0x33cc3f8a00000000,
803 0x72fd249300000000},
804 {0x0000000000000000, 0x376ac20100000000, 0x6ed4840300000000,
805 0x59be460200000000, 0xdca8090700000000, 0xebc2cb0600000000,
806 0xb27c8d0400000000, 0x85164f0500000000, 0xb851130e00000000,
807 0x8f3bd10f00000000, 0xd685970d00000000, 0xe1ef550c00000000,
808 0x64f91a0900000000, 0x5393d80800000000, 0x0a2d9e0a00000000,
809 0x3d475c0b00000000, 0x70a3261c00000000, 0x47c9e41d00000000,
810 0x1e77a21f00000000, 0x291d601e00000000, 0xac0b2f1b00000000,
811 0x9b61ed1a00000000, 0xc2dfab1800000000, 0xf5b5691900000000,
812 0xc8f2351200000000, 0xff98f71300000000, 0xa626b11100000000,
813 0x914c731000000000, 0x145a3c1500000000, 0x2330fe1400000000,
814 0x7a8eb81600000000, 0x4de47a1700000000, 0xe0464d3800000000,
815 0xd72c8f3900000000, 0x8e92c93b00000000, 0xb9f80b3a00000000,
816 0x3cee443f00000000, 0x0b84863e00000000, 0x523ac03c00000000,
817 0x6550023d00000000, 0x58175e3600000000, 0x6f7d9c3700000000,
818 0x36c3da3500000000, 0x01a9183400000000, 0x84bf573100000000,
819 0xb3d5953000000000, 0xea6bd33200000000, 0xdd01113300000000,
820 0x90e56b2400000000, 0xa78fa92500000000, 0xfe31ef2700000000,
821 0xc95b2d2600000000, 0x4c4d622300000000, 0x7b27a02200000000,
822 0x2299e62000000000, 0x15f3242100000000, 0x28b4782a00000000,
823 0x1fdeba2b00000000, 0x4660fc2900000000, 0x710a3e2800000000,
824 0xf41c712d00000000, 0xc376b32c00000000, 0x9ac8f52e00000000,
825 0xada2372f00000000, 0xc08d9a7000000000, 0xf7e7587100000000,
826 0xae591e7300000000, 0x9933dc7200000000, 0x1c25937700000000,
827 0x2b4f517600000000, 0x72f1177400000000, 0x459bd57500000000,
828 0x78dc897e00000000, 0x4fb64b7f00000000, 0x16080d7d00000000,
829 0x2162cf7c00000000, 0xa474807900000000, 0x931e427800000000,
830 0xcaa0047a00000000, 0xfdcac67b00000000, 0xb02ebc6c00000000,
831 0x87447e6d00000000, 0xdefa386f00000000, 0xe990fa6e00000000,
832 0x6c86b56b00000000, 0x5bec776a00000000, 0x0252316800000000,
833 0x3538f36900000000, 0x087faf6200000000, 0x3f156d6300000000,
834 0x66ab2b6100000000, 0x51c1e96000000000, 0xd4d7a66500000000,
835 0xe3bd646400000000, 0xba03226600000000, 0x8d69e06700000000,
836 0x20cbd74800000000, 0x17a1154900000000, 0x4e1f534b00000000,
837 0x7975914a00000000, 0xfc63de4f00000000, 0xcb091c4e00000000,
838 0x92b75a4c00000000, 0xa5dd984d00000000, 0x989ac44600000000,
839 0xaff0064700000000, 0xf64e404500000000, 0xc124824400000000,
840 0x4432cd4100000000, 0x73580f4000000000, 0x2ae6494200000000,
841 0x1d8c8b4300000000, 0x5068f15400000000, 0x6702335500000000,
842 0x3ebc755700000000, 0x09d6b75600000000, 0x8cc0f85300000000,
843 0xbbaa3a5200000000, 0xe2147c5000000000, 0xd57ebe5100000000,
844 0xe839e25a00000000, 0xdf53205b00000000, 0x86ed665900000000,
845 0xb187a45800000000, 0x3491eb5d00000000, 0x03fb295c00000000,
846 0x5a456f5e00000000, 0x6d2fad5f00000000, 0x801b35e100000000,
847 0xb771f7e000000000, 0xeecfb1e200000000, 0xd9a573e300000000,
848 0x5cb33ce600000000, 0x6bd9fee700000000, 0x3267b8e500000000,
849 0x050d7ae400000000, 0x384a26ef00000000, 0x0f20e4ee00000000,
850 0x569ea2ec00000000, 0x61f460ed00000000, 0xe4e22fe800000000,
851 0xd388ede900000000, 0x8a36abeb00000000, 0xbd5c69ea00000000,
852 0xf0b813fd00000000, 0xc7d2d1fc00000000, 0x9e6c97fe00000000,
853 0xa90655ff00000000, 0x2c101afa00000000, 0x1b7ad8fb00000000,
854 0x42c49ef900000000, 0x75ae5cf800000000, 0x48e900f300000000,
855 0x7f83c2f200000000, 0x263d84f000000000, 0x115746f100000000,
856 0x944109f400000000, 0xa32bcbf500000000, 0xfa958df700000000,
857 0xcdff4ff600000000, 0x605d78d900000000, 0x5737bad800000000,
858 0x0e89fcda00000000, 0x39e33edb00000000, 0xbcf571de00000000,
859 0x8b9fb3df00000000, 0xd221f5dd00000000, 0xe54b37dc00000000,
860 0xd80c6bd700000000, 0xef66a9d600000000, 0xb6d8efd400000000,
861 0x81b22dd500000000, 0x04a462d000000000, 0x33cea0d100000000,
862 0x6a70e6d300000000, 0x5d1a24d200000000, 0x10fe5ec500000000,
863 0x27949cc400000000, 0x7e2adac600000000, 0x494018c700000000,
864 0xcc5657c200000000, 0xfb3c95c300000000, 0xa282d3c100000000,
865 0x95e811c000000000, 0xa8af4dcb00000000, 0x9fc58fca00000000,
866 0xc67bc9c800000000, 0xf1110bc900000000, 0x740744cc00000000,
867 0x436d86cd00000000, 0x1ad3c0cf00000000, 0x2db902ce00000000,
868 0x4096af9100000000, 0x77fc6d9000000000, 0x2e422b9200000000,
869 0x1928e99300000000, 0x9c3ea69600000000, 0xab54649700000000,
870 0xf2ea229500000000, 0xc580e09400000000, 0xf8c7bc9f00000000,
871 0xcfad7e9e00000000, 0x9613389c00000000, 0xa179fa9d00000000,
872 0x246fb59800000000, 0x1305779900000000, 0x4abb319b00000000,
873 0x7dd1f39a00000000, 0x3035898d00000000, 0x075f4b8c00000000,
874 0x5ee10d8e00000000, 0x698bcf8f00000000, 0xec9d808a00000000,
875 0xdbf7428b00000000, 0x8249048900000000, 0xb523c68800000000,
876 0x88649a8300000000, 0xbf0e588200000000, 0xe6b01e8000000000,
877 0xd1dadc8100000000, 0x54cc938400000000, 0x63a6518500000000,
878 0x3a18178700000000, 0x0d72d58600000000, 0xa0d0e2a900000000,
879 0x97ba20a800000000, 0xce0466aa00000000, 0xf96ea4ab00000000,
880 0x7c78ebae00000000, 0x4b1229af00000000, 0x12ac6fad00000000,
881 0x25c6adac00000000, 0x1881f1a700000000, 0x2feb33a600000000,
882 0x765575a400000000, 0x413fb7a500000000, 0xc429f8a000000000,
883 0xf3433aa100000000, 0xaafd7ca300000000, 0x9d97bea200000000,
884 0xd073c4b500000000, 0xe71906b400000000, 0xbea740b600000000,
885 0x89cd82b700000000, 0x0cdbcdb200000000, 0x3bb10fb300000000,
886 0x620f49b100000000, 0x55658bb000000000, 0x6822d7bb00000000,
887 0x5f4815ba00000000, 0x06f653b800000000, 0x319c91b900000000,
888 0xb48adebc00000000, 0x83e01cbd00000000, 0xda5e5abf00000000,
889 0xed3498be00000000},
890 {0x0000000000000000, 0x6567bcb800000000, 0x8bc809aa00000000,
891 0xeeafb51200000000, 0x5797628f00000000, 0x32f0de3700000000,
892 0xdc5f6b2500000000, 0xb938d79d00000000, 0xef28b4c500000000,
893 0x8a4f087d00000000, 0x64e0bd6f00000000, 0x018701d700000000,
894 0xb8bfd64a00000000, 0xddd86af200000000, 0x3377dfe000000000,
895 0x5610635800000000, 0x9f57195000000000, 0xfa30a5e800000000,
896 0x149f10fa00000000, 0x71f8ac4200000000, 0xc8c07bdf00000000,
897 0xada7c76700000000, 0x4308727500000000, 0x266fcecd00000000,
898 0x707fad9500000000, 0x1518112d00000000, 0xfbb7a43f00000000,
899 0x9ed0188700000000, 0x27e8cf1a00000000, 0x428f73a200000000,
900 0xac20c6b000000000, 0xc9477a0800000000, 0x3eaf32a000000000,
901 0x5bc88e1800000000, 0xb5673b0a00000000, 0xd00087b200000000,
902 0x6938502f00000000, 0x0c5fec9700000000, 0xe2f0598500000000,
903 0x8797e53d00000000, 0xd187866500000000, 0xb4e03add00000000,
904 0x5a4f8fcf00000000, 0x3f28337700000000, 0x8610e4ea00000000,
905 0xe377585200000000, 0x0dd8ed4000000000, 0x68bf51f800000000,
906 0xa1f82bf000000000, 0xc49f974800000000, 0x2a30225a00000000,
907 0x4f579ee200000000, 0xf66f497f00000000, 0x9308f5c700000000,
908 0x7da740d500000000, 0x18c0fc6d00000000, 0x4ed09f3500000000,
909 0x2bb7238d00000000, 0xc518969f00000000, 0xa07f2a2700000000,
910 0x1947fdba00000000, 0x7c20410200000000, 0x928ff41000000000,
911 0xf7e848a800000000, 0x3d58149b00000000, 0x583fa82300000000,
912 0xb6901d3100000000, 0xd3f7a18900000000, 0x6acf761400000000,
913 0x0fa8caac00000000, 0xe1077fbe00000000, 0x8460c30600000000,
914 0xd270a05e00000000, 0xb7171ce600000000, 0x59b8a9f400000000,
915 0x3cdf154c00000000, 0x85e7c2d100000000, 0xe0807e6900000000,
916 0x0e2fcb7b00000000, 0x6b4877c300000000, 0xa20f0dcb00000000,
917 0xc768b17300000000, 0x29c7046100000000, 0x4ca0b8d900000000,
918 0xf5986f4400000000, 0x90ffd3fc00000000, 0x7e5066ee00000000,
919 0x1b37da5600000000, 0x4d27b90e00000000, 0x284005b600000000,
920 0xc6efb0a400000000, 0xa3880c1c00000000, 0x1ab0db8100000000,
921 0x7fd7673900000000, 0x9178d22b00000000, 0xf41f6e9300000000,
922 0x03f7263b00000000, 0x66909a8300000000, 0x883f2f9100000000,
923 0xed58932900000000, 0x546044b400000000, 0x3107f80c00000000,
924 0xdfa84d1e00000000, 0xbacff1a600000000, 0xecdf92fe00000000,
925 0x89b82e4600000000, 0x67179b5400000000, 0x027027ec00000000,
926 0xbb48f07100000000, 0xde2f4cc900000000, 0x3080f9db00000000,
927 0x55e7456300000000, 0x9ca03f6b00000000, 0xf9c783d300000000,
928 0x176836c100000000, 0x720f8a7900000000, 0xcb375de400000000,
929 0xae50e15c00000000, 0x40ff544e00000000, 0x2598e8f600000000,
930 0x73888bae00000000, 0x16ef371600000000, 0xf840820400000000,
931 0x9d273ebc00000000, 0x241fe92100000000, 0x4178559900000000,
932 0xafd7e08b00000000, 0xcab05c3300000000, 0x3bb659ed00000000,
933 0x5ed1e55500000000, 0xb07e504700000000, 0xd519ecff00000000,
934 0x6c213b6200000000, 0x094687da00000000, 0xe7e932c800000000,
935 0x828e8e7000000000, 0xd49eed2800000000, 0xb1f9519000000000,
936 0x5f56e48200000000, 0x3a31583a00000000, 0x83098fa700000000,
937 0xe66e331f00000000, 0x08c1860d00000000, 0x6da63ab500000000,
938 0xa4e140bd00000000, 0xc186fc0500000000, 0x2f29491700000000,
939 0x4a4ef5af00000000, 0xf376223200000000, 0x96119e8a00000000,
940 0x78be2b9800000000, 0x1dd9972000000000, 0x4bc9f47800000000,
941 0x2eae48c000000000, 0xc001fdd200000000, 0xa566416a00000000,
942 0x1c5e96f700000000, 0x79392a4f00000000, 0x97969f5d00000000,
943 0xf2f123e500000000, 0x05196b4d00000000, 0x607ed7f500000000,
944 0x8ed162e700000000, 0xebb6de5f00000000, 0x528e09c200000000,
945 0x37e9b57a00000000, 0xd946006800000000, 0xbc21bcd000000000,
946 0xea31df8800000000, 0x8f56633000000000, 0x61f9d62200000000,
947 0x049e6a9a00000000, 0xbda6bd0700000000, 0xd8c101bf00000000,
948 0x366eb4ad00000000, 0x5309081500000000, 0x9a4e721d00000000,
949 0xff29cea500000000, 0x11867bb700000000, 0x74e1c70f00000000,
950 0xcdd9109200000000, 0xa8beac2a00000000, 0x4611193800000000,
951 0x2376a58000000000, 0x7566c6d800000000, 0x10017a6000000000,
952 0xfeaecf7200000000, 0x9bc973ca00000000, 0x22f1a45700000000,
953 0x479618ef00000000, 0xa939adfd00000000, 0xcc5e114500000000,
954 0x06ee4d7600000000, 0x6389f1ce00000000, 0x8d2644dc00000000,
955 0xe841f86400000000, 0x51792ff900000000, 0x341e934100000000,
956 0xdab1265300000000, 0xbfd69aeb00000000, 0xe9c6f9b300000000,
957 0x8ca1450b00000000, 0x620ef01900000000, 0x07694ca100000000,
958 0xbe519b3c00000000, 0xdb36278400000000, 0x3599929600000000,
959 0x50fe2e2e00000000, 0x99b9542600000000, 0xfcdee89e00000000,
960 0x12715d8c00000000, 0x7716e13400000000, 0xce2e36a900000000,
961 0xab498a1100000000, 0x45e63f0300000000, 0x208183bb00000000,
962 0x7691e0e300000000, 0x13f65c5b00000000, 0xfd59e94900000000,
963 0x983e55f100000000, 0x2106826c00000000, 0x44613ed400000000,
964 0xaace8bc600000000, 0xcfa9377e00000000, 0x38417fd600000000,
965 0x5d26c36e00000000, 0xb389767c00000000, 0xd6eecac400000000,
966 0x6fd61d5900000000, 0x0ab1a1e100000000, 0xe41e14f300000000,
967 0x8179a84b00000000, 0xd769cb1300000000, 0xb20e77ab00000000,
968 0x5ca1c2b900000000, 0x39c67e0100000000, 0x80fea99c00000000,
969 0xe599152400000000, 0x0b36a03600000000, 0x6e511c8e00000000,
970 0xa716668600000000, 0xc271da3e00000000, 0x2cde6f2c00000000,
971 0x49b9d39400000000, 0xf081040900000000, 0x95e6b8b100000000,
972 0x7b490da300000000, 0x1e2eb11b00000000, 0x483ed24300000000,
973 0x2d596efb00000000, 0xc3f6dbe900000000, 0xa691675100000000,
974 0x1fa9b0cc00000000, 0x7ace0c7400000000, 0x9461b96600000000,
975 0xf10605de00000000},
976 {0x0000000000000000, 0xb029603d00000000, 0x6053c07a00000000,
977 0xd07aa04700000000, 0xc0a680f500000000, 0x708fe0c800000000,
978 0xa0f5408f00000000, 0x10dc20b200000000, 0xc14b703000000000,
979 0x7162100d00000000, 0xa118b04a00000000, 0x1131d07700000000,
980 0x01edf0c500000000, 0xb1c490f800000000, 0x61be30bf00000000,
981 0xd197508200000000, 0x8297e06000000000, 0x32be805d00000000,
982 0xe2c4201a00000000, 0x52ed402700000000, 0x4231609500000000,
983 0xf21800a800000000, 0x2262a0ef00000000, 0x924bc0d200000000,
984 0x43dc905000000000, 0xf3f5f06d00000000, 0x238f502a00000000,
985 0x93a6301700000000, 0x837a10a500000000, 0x3353709800000000,
986 0xe329d0df00000000, 0x5300b0e200000000, 0x042fc1c100000000,
987 0xb406a1fc00000000, 0x647c01bb00000000, 0xd455618600000000,
988 0xc489413400000000, 0x74a0210900000000, 0xa4da814e00000000,
989 0x14f3e17300000000, 0xc564b1f100000000, 0x754dd1cc00000000,
990 0xa537718b00000000, 0x151e11b600000000, 0x05c2310400000000,
991 0xb5eb513900000000, 0x6591f17e00000000, 0xd5b8914300000000,
992 0x86b821a100000000, 0x3691419c00000000, 0xe6ebe1db00000000,
993 0x56c281e600000000, 0x461ea15400000000, 0xf637c16900000000,
994 0x264d612e00000000, 0x9664011300000000, 0x47f3519100000000,
995 0xf7da31ac00000000, 0x27a091eb00000000, 0x9789f1d600000000,
996 0x8755d16400000000, 0x377cb15900000000, 0xe706111e00000000,
997 0x572f712300000000, 0x4958f35800000000, 0xf971936500000000,
998 0x290b332200000000, 0x9922531f00000000, 0x89fe73ad00000000,
999 0x39d7139000000000, 0xe9adb3d700000000, 0x5984d3ea00000000,
1000 0x8813836800000000, 0x383ae35500000000, 0xe840431200000000,
1001 0x5869232f00000000, 0x48b5039d00000000, 0xf89c63a000000000,
1002 0x28e6c3e700000000, 0x98cfa3da00000000, 0xcbcf133800000000,
1003 0x7be6730500000000, 0xab9cd34200000000, 0x1bb5b37f00000000,
1004 0x0b6993cd00000000, 0xbb40f3f000000000, 0x6b3a53b700000000,
1005 0xdb13338a00000000, 0x0a84630800000000, 0xbaad033500000000,
1006 0x6ad7a37200000000, 0xdafec34f00000000, 0xca22e3fd00000000,
1007 0x7a0b83c000000000, 0xaa71238700000000, 0x1a5843ba00000000,
1008 0x4d77329900000000, 0xfd5e52a400000000, 0x2d24f2e300000000,
1009 0x9d0d92de00000000, 0x8dd1b26c00000000, 0x3df8d25100000000,
1010 0xed82721600000000, 0x5dab122b00000000, 0x8c3c42a900000000,
1011 0x3c15229400000000, 0xec6f82d300000000, 0x5c46e2ee00000000,
1012 0x4c9ac25c00000000, 0xfcb3a26100000000, 0x2cc9022600000000,
1013 0x9ce0621b00000000, 0xcfe0d2f900000000, 0x7fc9b2c400000000,
1014 0xafb3128300000000, 0x1f9a72be00000000, 0x0f46520c00000000,
1015 0xbf6f323100000000, 0x6f15927600000000, 0xdf3cf24b00000000,
1016 0x0eaba2c900000000, 0xbe82c2f400000000, 0x6ef862b300000000,
1017 0xded1028e00000000, 0xce0d223c00000000, 0x7e24420100000000,
1018 0xae5ee24600000000, 0x1e77827b00000000, 0x92b0e6b100000000,
1019 0x2299868c00000000, 0xf2e326cb00000000, 0x42ca46f600000000,
1020 0x5216664400000000, 0xe23f067900000000, 0x3245a63e00000000,
1021 0x826cc60300000000, 0x53fb968100000000, 0xe3d2f6bc00000000,
1022 0x33a856fb00000000, 0x838136c600000000, 0x935d167400000000,
1023 0x2374764900000000, 0xf30ed60e00000000, 0x4327b63300000000,
1024 0x102706d100000000, 0xa00e66ec00000000, 0x7074c6ab00000000,
1025 0xc05da69600000000, 0xd081862400000000, 0x60a8e61900000000,
1026 0xb0d2465e00000000, 0x00fb266300000000, 0xd16c76e100000000,
1027 0x614516dc00000000, 0xb13fb69b00000000, 0x0116d6a600000000,
1028 0x11caf61400000000, 0xa1e3962900000000, 0x7199366e00000000,
1029 0xc1b0565300000000, 0x969f277000000000, 0x26b6474d00000000,
1030 0xf6cce70a00000000, 0x46e5873700000000, 0x5639a78500000000,
1031 0xe610c7b800000000, 0x366a67ff00000000, 0x864307c200000000,
1032 0x57d4574000000000, 0xe7fd377d00000000, 0x3787973a00000000,
1033 0x87aef70700000000, 0x9772d7b500000000, 0x275bb78800000000,
1034 0xf72117cf00000000, 0x470877f200000000, 0x1408c71000000000,
1035 0xa421a72d00000000, 0x745b076a00000000, 0xc472675700000000,
1036 0xd4ae47e500000000, 0x648727d800000000, 0xb4fd879f00000000,
1037 0x04d4e7a200000000, 0xd543b72000000000, 0x656ad71d00000000,
1038 0xb510775a00000000, 0x0539176700000000, 0x15e537d500000000,
1039 0xa5cc57e800000000, 0x75b6f7af00000000, 0xc59f979200000000,
1040 0xdbe815e900000000, 0x6bc175d400000000, 0xbbbbd59300000000,
1041 0x0b92b5ae00000000, 0x1b4e951c00000000, 0xab67f52100000000,
1042 0x7b1d556600000000, 0xcb34355b00000000, 0x1aa365d900000000,
1043 0xaa8a05e400000000, 0x7af0a5a300000000, 0xcad9c59e00000000,
1044 0xda05e52c00000000, 0x6a2c851100000000, 0xba56255600000000,
1045 0x0a7f456b00000000, 0x597ff58900000000, 0xe95695b400000000,
1046 0x392c35f300000000, 0x890555ce00000000, 0x99d9757c00000000,
1047 0x29f0154100000000, 0xf98ab50600000000, 0x49a3d53b00000000,
1048 0x983485b900000000, 0x281de58400000000, 0xf86745c300000000,
1049 0x484e25fe00000000, 0x5892054c00000000, 0xe8bb657100000000,
1050 0x38c1c53600000000, 0x88e8a50b00000000, 0xdfc7d42800000000,
1051 0x6feeb41500000000, 0xbf94145200000000, 0x0fbd746f00000000,
1052 0x1f6154dd00000000, 0xaf4834e000000000, 0x7f3294a700000000,
1053 0xcf1bf49a00000000, 0x1e8ca41800000000, 0xaea5c42500000000,
1054 0x7edf646200000000, 0xcef6045f00000000, 0xde2a24ed00000000,
1055 0x6e0344d000000000, 0xbe79e49700000000, 0x0e5084aa00000000,
1056 0x5d50344800000000, 0xed79547500000000, 0x3d03f43200000000,
1057 0x8d2a940f00000000, 0x9df6b4bd00000000, 0x2ddfd48000000000,
1058 0xfda574c700000000, 0x4d8c14fa00000000, 0x9c1b447800000000,
1059 0x2c32244500000000, 0xfc48840200000000, 0x4c61e43f00000000,
1060 0x5cbdc48d00000000, 0xec94a4b000000000, 0x3cee04f700000000,
1061 0x8cc764ca00000000},
1062 {0x0000000000000000, 0xa5d35ccb00000000, 0x0ba1c84d00000000,
1063 0xae72948600000000, 0x1642919b00000000, 0xb391cd5000000000,
1064 0x1de359d600000000, 0xb830051d00000000, 0x6d8253ec00000000,
1065 0xc8510f2700000000, 0x66239ba100000000, 0xc3f0c76a00000000,
1066 0x7bc0c27700000000, 0xde139ebc00000000, 0x70610a3a00000000,
1067 0xd5b256f100000000, 0x9b02d60300000000, 0x3ed18ac800000000,
1068 0x90a31e4e00000000, 0x3570428500000000, 0x8d40479800000000,
1069 0x28931b5300000000, 0x86e18fd500000000, 0x2332d31e00000000,
1070 0xf68085ef00000000, 0x5353d92400000000, 0xfd214da200000000,
1071 0x58f2116900000000, 0xe0c2147400000000, 0x451148bf00000000,
1072 0xeb63dc3900000000, 0x4eb080f200000000, 0x3605ac0700000000,
1073 0x93d6f0cc00000000, 0x3da4644a00000000, 0x9877388100000000,
1074 0x20473d9c00000000, 0x8594615700000000, 0x2be6f5d100000000,
1075 0x8e35a91a00000000, 0x5b87ffeb00000000, 0xfe54a32000000000,
1076 0x502637a600000000, 0xf5f56b6d00000000, 0x4dc56e7000000000,
1077 0xe81632bb00000000, 0x4664a63d00000000, 0xe3b7faf600000000,
1078 0xad077a0400000000, 0x08d426cf00000000, 0xa6a6b24900000000,
1079 0x0375ee8200000000, 0xbb45eb9f00000000, 0x1e96b75400000000,
1080 0xb0e423d200000000, 0x15377f1900000000, 0xc08529e800000000,
1081 0x6556752300000000, 0xcb24e1a500000000, 0x6ef7bd6e00000000,
1082 0xd6c7b87300000000, 0x7314e4b800000000, 0xdd66703e00000000,
1083 0x78b52cf500000000, 0x6c0a580f00000000, 0xc9d904c400000000,
1084 0x67ab904200000000, 0xc278cc8900000000, 0x7a48c99400000000,
1085 0xdf9b955f00000000, 0x71e901d900000000, 0xd43a5d1200000000,
1086 0x01880be300000000, 0xa45b572800000000, 0x0a29c3ae00000000,
1087 0xaffa9f6500000000, 0x17ca9a7800000000, 0xb219c6b300000000,
1088 0x1c6b523500000000, 0xb9b80efe00000000, 0xf7088e0c00000000,
1089 0x52dbd2c700000000, 0xfca9464100000000, 0x597a1a8a00000000,
1090 0xe14a1f9700000000, 0x4499435c00000000, 0xeaebd7da00000000,
1091 0x4f388b1100000000, 0x9a8adde000000000, 0x3f59812b00000000,
1092 0x912b15ad00000000, 0x34f8496600000000, 0x8cc84c7b00000000,
1093 0x291b10b000000000, 0x8769843600000000, 0x22bad8fd00000000,
1094 0x5a0ff40800000000, 0xffdca8c300000000, 0x51ae3c4500000000,
1095 0xf47d608e00000000, 0x4c4d659300000000, 0xe99e395800000000,
1096 0x47ecadde00000000, 0xe23ff11500000000, 0x378da7e400000000,
1097 0x925efb2f00000000, 0x3c2c6fa900000000, 0x99ff336200000000,
1098 0x21cf367f00000000, 0x841c6ab400000000, 0x2a6efe3200000000,
1099 0x8fbda2f900000000, 0xc10d220b00000000, 0x64de7ec000000000,
1100 0xcaacea4600000000, 0x6f7fb68d00000000, 0xd74fb39000000000,
1101 0x729cef5b00000000, 0xdcee7bdd00000000, 0x793d271600000000,
1102 0xac8f71e700000000, 0x095c2d2c00000000, 0xa72eb9aa00000000,
1103 0x02fde56100000000, 0xbacde07c00000000, 0x1f1ebcb700000000,
1104 0xb16c283100000000, 0x14bf74fa00000000, 0xd814b01e00000000,
1105 0x7dc7ecd500000000, 0xd3b5785300000000, 0x7666249800000000,
1106 0xce56218500000000, 0x6b857d4e00000000, 0xc5f7e9c800000000,
1107 0x6024b50300000000, 0xb596e3f200000000, 0x1045bf3900000000,
1108 0xbe372bbf00000000, 0x1be4777400000000, 0xa3d4726900000000,
1109 0x06072ea200000000, 0xa875ba2400000000, 0x0da6e6ef00000000,
1110 0x4316661d00000000, 0xe6c53ad600000000, 0x48b7ae5000000000,
1111 0xed64f29b00000000, 0x5554f78600000000, 0xf087ab4d00000000,
1112 0x5ef53fcb00000000, 0xfb26630000000000, 0x2e9435f100000000,
1113 0x8b47693a00000000, 0x2535fdbc00000000, 0x80e6a17700000000,
1114 0x38d6a46a00000000, 0x9d05f8a100000000, 0x33776c2700000000,
1115 0x96a430ec00000000, 0xee111c1900000000, 0x4bc240d200000000,
1116 0xe5b0d45400000000, 0x4063889f00000000, 0xf8538d8200000000,
1117 0x5d80d14900000000, 0xf3f245cf00000000, 0x5621190400000000,
1118 0x83934ff500000000, 0x2640133e00000000, 0x883287b800000000,
1119 0x2de1db7300000000, 0x95d1de6e00000000, 0x300282a500000000,
1120 0x9e70162300000000, 0x3ba34ae800000000, 0x7513ca1a00000000,
1121 0xd0c096d100000000, 0x7eb2025700000000, 0xdb615e9c00000000,
1122 0x63515b8100000000, 0xc682074a00000000, 0x68f093cc00000000,
1123 0xcd23cf0700000000, 0x189199f600000000, 0xbd42c53d00000000,
1124 0x133051bb00000000, 0xb6e30d7000000000, 0x0ed3086d00000000,
1125 0xab0054a600000000, 0x0572c02000000000, 0xa0a19ceb00000000,
1126 0xb41ee81100000000, 0x11cdb4da00000000, 0xbfbf205c00000000,
1127 0x1a6c7c9700000000, 0xa25c798a00000000, 0x078f254100000000,
1128 0xa9fdb1c700000000, 0x0c2eed0c00000000, 0xd99cbbfd00000000,
1129 0x7c4fe73600000000, 0xd23d73b000000000, 0x77ee2f7b00000000,
1130 0xcfde2a6600000000, 0x6a0d76ad00000000, 0xc47fe22b00000000,
1131 0x61acbee000000000, 0x2f1c3e1200000000, 0x8acf62d900000000,
1132 0x24bdf65f00000000, 0x816eaa9400000000, 0x395eaf8900000000,
1133 0x9c8df34200000000, 0x32ff67c400000000, 0x972c3b0f00000000,
1134 0x429e6dfe00000000, 0xe74d313500000000, 0x493fa5b300000000,
1135 0xececf97800000000, 0x54dcfc6500000000, 0xf10fa0ae00000000,
1136 0x5f7d342800000000, 0xfaae68e300000000, 0x821b441600000000,
1137 0x27c818dd00000000, 0x89ba8c5b00000000, 0x2c69d09000000000,
1138 0x9459d58d00000000, 0x318a894600000000, 0x9ff81dc000000000,
1139 0x3a2b410b00000000, 0xef9917fa00000000, 0x4a4a4b3100000000,
1140 0xe438dfb700000000, 0x41eb837c00000000, 0xf9db866100000000,
1141 0x5c08daaa00000000, 0xf27a4e2c00000000, 0x57a912e700000000,
1142 0x1919921500000000, 0xbccacede00000000, 0x12b85a5800000000,
1143 0xb76b069300000000, 0x0f5b038e00000000, 0xaa885f4500000000,
1144 0x04facbc300000000, 0xa129970800000000, 0x749bc1f900000000,
1145 0xd1489d3200000000, 0x7f3a09b400000000, 0xdae9557f00000000,
1146 0x62d9506200000000, 0xc70a0ca900000000, 0x6978982f00000000,
1147 0xccabc4e400000000},
1148 {0x0000000000000000, 0xb40b77a600000000, 0x29119f9700000000,
1149 0x9d1ae83100000000, 0x13244ff400000000, 0xa72f385200000000,
1150 0x3a35d06300000000, 0x8e3ea7c500000000, 0x674eef3300000000,
1151 0xd345989500000000, 0x4e5f70a400000000, 0xfa54070200000000,
1152 0x746aa0c700000000, 0xc061d76100000000, 0x5d7b3f5000000000,
1153 0xe97048f600000000, 0xce9cde6700000000, 0x7a97a9c100000000,
1154 0xe78d41f000000000, 0x5386365600000000, 0xddb8919300000000,
1155 0x69b3e63500000000, 0xf4a90e0400000000, 0x40a279a200000000,
1156 0xa9d2315400000000, 0x1dd946f200000000, 0x80c3aec300000000,
1157 0x34c8d96500000000, 0xbaf67ea000000000, 0x0efd090600000000,
1158 0x93e7e13700000000, 0x27ec969100000000, 0x9c39bdcf00000000,
1159 0x2832ca6900000000, 0xb528225800000000, 0x012355fe00000000,
1160 0x8f1df23b00000000, 0x3b16859d00000000, 0xa60c6dac00000000,
1161 0x12071a0a00000000, 0xfb7752fc00000000, 0x4f7c255a00000000,
1162 0xd266cd6b00000000, 0x666dbacd00000000, 0xe8531d0800000000,
1163 0x5c586aae00000000, 0xc142829f00000000, 0x7549f53900000000,
1164 0x52a563a800000000, 0xe6ae140e00000000, 0x7bb4fc3f00000000,
1165 0xcfbf8b9900000000, 0x41812c5c00000000, 0xf58a5bfa00000000,
1166 0x6890b3cb00000000, 0xdc9bc46d00000000, 0x35eb8c9b00000000,
1167 0x81e0fb3d00000000, 0x1cfa130c00000000, 0xa8f164aa00000000,
1168 0x26cfc36f00000000, 0x92c4b4c900000000, 0x0fde5cf800000000,
1169 0xbbd52b5e00000000, 0x79750b4400000000, 0xcd7e7ce200000000,
1170 0x506494d300000000, 0xe46fe37500000000, 0x6a5144b000000000,
1171 0xde5a331600000000, 0x4340db2700000000, 0xf74bac8100000000,
1172 0x1e3be47700000000, 0xaa3093d100000000, 0x372a7be000000000,
1173 0x83210c4600000000, 0x0d1fab8300000000, 0xb914dc2500000000,
1174 0x240e341400000000, 0x900543b200000000, 0xb7e9d52300000000,
1175 0x03e2a28500000000, 0x9ef84ab400000000, 0x2af33d1200000000,
1176 0xa4cd9ad700000000, 0x10c6ed7100000000, 0x8ddc054000000000,
1177 0x39d772e600000000, 0xd0a73a1000000000, 0x64ac4db600000000,
1178 0xf9b6a58700000000, 0x4dbdd22100000000, 0xc38375e400000000,
1179 0x7788024200000000, 0xea92ea7300000000, 0x5e999dd500000000,
1180 0xe54cb68b00000000, 0x5147c12d00000000, 0xcc5d291c00000000,
1181 0x78565eba00000000, 0xf668f97f00000000, 0x42638ed900000000,
1182 0xdf7966e800000000, 0x6b72114e00000000, 0x820259b800000000,
1183 0x36092e1e00000000, 0xab13c62f00000000, 0x1f18b18900000000,
1184 0x9126164c00000000, 0x252d61ea00000000, 0xb83789db00000000,
1185 0x0c3cfe7d00000000, 0x2bd068ec00000000, 0x9fdb1f4a00000000,
1186 0x02c1f77b00000000, 0xb6ca80dd00000000, 0x38f4271800000000,
1187 0x8cff50be00000000, 0x11e5b88f00000000, 0xa5eecf2900000000,
1188 0x4c9e87df00000000, 0xf895f07900000000, 0x658f184800000000,
1189 0xd1846fee00000000, 0x5fbac82b00000000, 0xebb1bf8d00000000,
1190 0x76ab57bc00000000, 0xc2a0201a00000000, 0xf2ea168800000000,
1191 0x46e1612e00000000, 0xdbfb891f00000000, 0x6ff0feb900000000,
1192 0xe1ce597c00000000, 0x55c52eda00000000, 0xc8dfc6eb00000000,
1193 0x7cd4b14d00000000, 0x95a4f9bb00000000, 0x21af8e1d00000000,
1194 0xbcb5662c00000000, 0x08be118a00000000, 0x8680b64f00000000,
1195 0x328bc1e900000000, 0xaf9129d800000000, 0x1b9a5e7e00000000,
1196 0x3c76c8ef00000000, 0x887dbf4900000000, 0x1567577800000000,
1197 0xa16c20de00000000, 0x2f52871b00000000, 0x9b59f0bd00000000,
1198 0x0643188c00000000, 0xb2486f2a00000000, 0x5b3827dc00000000,
1199 0xef33507a00000000, 0x7229b84b00000000, 0xc622cfed00000000,
1200 0x481c682800000000, 0xfc171f8e00000000, 0x610df7bf00000000,
1201 0xd506801900000000, 0x6ed3ab4700000000, 0xdad8dce100000000,
1202 0x47c234d000000000, 0xf3c9437600000000, 0x7df7e4b300000000,
1203 0xc9fc931500000000, 0x54e67b2400000000, 0xe0ed0c8200000000,
1204 0x099d447400000000, 0xbd9633d200000000, 0x208cdbe300000000,
1205 0x9487ac4500000000, 0x1ab90b8000000000, 0xaeb27c2600000000,
1206 0x33a8941700000000, 0x87a3e3b100000000, 0xa04f752000000000,
1207 0x1444028600000000, 0x895eeab700000000, 0x3d559d1100000000,
1208 0xb36b3ad400000000, 0x07604d7200000000, 0x9a7aa54300000000,
1209 0x2e71d2e500000000, 0xc7019a1300000000, 0x730aedb500000000,
1210 0xee10058400000000, 0x5a1b722200000000, 0xd425d5e700000000,
1211 0x602ea24100000000, 0xfd344a7000000000, 0x493f3dd600000000,
1212 0x8b9f1dcc00000000, 0x3f946a6a00000000, 0xa28e825b00000000,
1213 0x1685f5fd00000000, 0x98bb523800000000, 0x2cb0259e00000000,
1214 0xb1aacdaf00000000, 0x05a1ba0900000000, 0xecd1f2ff00000000,
1215 0x58da855900000000, 0xc5c06d6800000000, 0x71cb1ace00000000,
1216 0xfff5bd0b00000000, 0x4bfecaad00000000, 0xd6e4229c00000000,
1217 0x62ef553a00000000, 0x4503c3ab00000000, 0xf108b40d00000000,
1218 0x6c125c3c00000000, 0xd8192b9a00000000, 0x56278c5f00000000,
1219 0xe22cfbf900000000, 0x7f3613c800000000, 0xcb3d646e00000000,
1220 0x224d2c9800000000, 0x96465b3e00000000, 0x0b5cb30f00000000,
1221 0xbf57c4a900000000, 0x3169636c00000000, 0x856214ca00000000,
1222 0x1878fcfb00000000, 0xac738b5d00000000, 0x17a6a00300000000,
1223 0xa3add7a500000000, 0x3eb73f9400000000, 0x8abc483200000000,
1224 0x0482eff700000000, 0xb089985100000000, 0x2d93706000000000,
1225 0x999807c600000000, 0x70e84f3000000000, 0xc4e3389600000000,
1226 0x59f9d0a700000000, 0xedf2a70100000000, 0x63cc00c400000000,
1227 0xd7c7776200000000, 0x4add9f5300000000, 0xfed6e8f500000000,
1228 0xd93a7e6400000000, 0x6d3109c200000000, 0xf02be1f300000000,
1229 0x4420965500000000, 0xca1e319000000000, 0x7e15463600000000,
1230 0xe30fae0700000000, 0x5704d9a100000000, 0xbe74915700000000,
1231 0x0a7fe6f100000000, 0x97650ec000000000, 0x236e796600000000,
1232 0xad50dea300000000, 0x195ba90500000000, 0x8441413400000000,
1233 0x304a369200000000},
1234 {0x0000000000000000, 0x9e00aacc00000000, 0x7d07254200000000,
1235 0xe3078f8e00000000, 0xfa0e4a8400000000, 0x640ee04800000000,
1236 0x87096fc600000000, 0x1909c50a00000000, 0xb51be5d300000000,
1237 0x2b1b4f1f00000000, 0xc81cc09100000000, 0x561c6a5d00000000,
1238 0x4f15af5700000000, 0xd115059b00000000, 0x32128a1500000000,
1239 0xac1220d900000000, 0x2b31bb7c00000000, 0xb53111b000000000,
1240 0x56369e3e00000000, 0xc83634f200000000, 0xd13ff1f800000000,
1241 0x4f3f5b3400000000, 0xac38d4ba00000000, 0x32387e7600000000,
1242 0x9e2a5eaf00000000, 0x002af46300000000, 0xe32d7bed00000000,
1243 0x7d2dd12100000000, 0x6424142b00000000, 0xfa24bee700000000,
1244 0x1923316900000000, 0x87239ba500000000, 0x566276f900000000,
1245 0xc862dc3500000000, 0x2b6553bb00000000, 0xb565f97700000000,
1246 0xac6c3c7d00000000, 0x326c96b100000000, 0xd16b193f00000000,
1247 0x4f6bb3f300000000, 0xe379932a00000000, 0x7d7939e600000000,
1248 0x9e7eb66800000000, 0x007e1ca400000000, 0x1977d9ae00000000,
1249 0x8777736200000000, 0x6470fcec00000000, 0xfa70562000000000,
1250 0x7d53cd8500000000, 0xe353674900000000, 0x0054e8c700000000,
1251 0x9e54420b00000000, 0x875d870100000000, 0x195d2dcd00000000,
1252 0xfa5aa24300000000, 0x645a088f00000000, 0xc848285600000000,
1253 0x5648829a00000000, 0xb54f0d1400000000, 0x2b4fa7d800000000,
1254 0x324662d200000000, 0xac46c81e00000000, 0x4f41479000000000,
1255 0xd141ed5c00000000, 0xedc29d2900000000, 0x73c237e500000000,
1256 0x90c5b86b00000000, 0x0ec512a700000000, 0x17ccd7ad00000000,
1257 0x89cc7d6100000000, 0x6acbf2ef00000000, 0xf4cb582300000000,
1258 0x58d978fa00000000, 0xc6d9d23600000000, 0x25de5db800000000,
1259 0xbbdef77400000000, 0xa2d7327e00000000, 0x3cd798b200000000,
1260 0xdfd0173c00000000, 0x41d0bdf000000000, 0xc6f3265500000000,
1261 0x58f38c9900000000, 0xbbf4031700000000, 0x25f4a9db00000000,
1262 0x3cfd6cd100000000, 0xa2fdc61d00000000, 0x41fa499300000000,
1263 0xdffae35f00000000, 0x73e8c38600000000, 0xede8694a00000000,
1264 0x0eefe6c400000000, 0x90ef4c0800000000, 0x89e6890200000000,
1265 0x17e623ce00000000, 0xf4e1ac4000000000, 0x6ae1068c00000000,
1266 0xbba0ebd000000000, 0x25a0411c00000000, 0xc6a7ce9200000000,
1267 0x58a7645e00000000, 0x41aea15400000000, 0xdfae0b9800000000,
1268 0x3ca9841600000000, 0xa2a92eda00000000, 0x0ebb0e0300000000,
1269 0x90bba4cf00000000, 0x73bc2b4100000000, 0xedbc818d00000000,
1270 0xf4b5448700000000, 0x6ab5ee4b00000000, 0x89b261c500000000,
1271 0x17b2cb0900000000, 0x909150ac00000000, 0x0e91fa6000000000,
1272 0xed9675ee00000000, 0x7396df2200000000, 0x6a9f1a2800000000,
1273 0xf49fb0e400000000, 0x17983f6a00000000, 0x899895a600000000,
1274 0x258ab57f00000000, 0xbb8a1fb300000000, 0x588d903d00000000,
1275 0xc68d3af100000000, 0xdf84fffb00000000, 0x4184553700000000,
1276 0xa283dab900000000, 0x3c83707500000000, 0xda853b5300000000,
1277 0x4485919f00000000, 0xa7821e1100000000, 0x3982b4dd00000000,
1278 0x208b71d700000000, 0xbe8bdb1b00000000, 0x5d8c549500000000,
1279 0xc38cfe5900000000, 0x6f9ede8000000000, 0xf19e744c00000000,
1280 0x1299fbc200000000, 0x8c99510e00000000, 0x9590940400000000,
1281 0x0b903ec800000000, 0xe897b14600000000, 0x76971b8a00000000,
1282 0xf1b4802f00000000, 0x6fb42ae300000000, 0x8cb3a56d00000000,
1283 0x12b30fa100000000, 0x0bbacaab00000000, 0x95ba606700000000,
1284 0x76bdefe900000000, 0xe8bd452500000000, 0x44af65fc00000000,
1285 0xdaafcf3000000000, 0x39a840be00000000, 0xa7a8ea7200000000,
1286 0xbea12f7800000000, 0x20a185b400000000, 0xc3a60a3a00000000,
1287 0x5da6a0f600000000, 0x8ce74daa00000000, 0x12e7e76600000000,
1288 0xf1e068e800000000, 0x6fe0c22400000000, 0x76e9072e00000000,
1289 0xe8e9ade200000000, 0x0bee226c00000000, 0x95ee88a000000000,
1290 0x39fca87900000000, 0xa7fc02b500000000, 0x44fb8d3b00000000,
1291 0xdafb27f700000000, 0xc3f2e2fd00000000, 0x5df2483100000000,
1292 0xbef5c7bf00000000, 0x20f56d7300000000, 0xa7d6f6d600000000,
1293 0x39d65c1a00000000, 0xdad1d39400000000, 0x44d1795800000000,
1294 0x5dd8bc5200000000, 0xc3d8169e00000000, 0x20df991000000000,
1295 0xbedf33dc00000000, 0x12cd130500000000, 0x8ccdb9c900000000,
1296 0x6fca364700000000, 0xf1ca9c8b00000000, 0xe8c3598100000000,
1297 0x76c3f34d00000000, 0x95c47cc300000000, 0x0bc4d60f00000000,
1298 0x3747a67a00000000, 0xa9470cb600000000, 0x4a40833800000000,
1299 0xd44029f400000000, 0xcd49ecfe00000000, 0x5349463200000000,
1300 0xb04ec9bc00000000, 0x2e4e637000000000, 0x825c43a900000000,
1301 0x1c5ce96500000000, 0xff5b66eb00000000, 0x615bcc2700000000,
1302 0x7852092d00000000, 0xe652a3e100000000, 0x05552c6f00000000,
1303 0x9b5586a300000000, 0x1c761d0600000000, 0x8276b7ca00000000,
1304 0x6171384400000000, 0xff71928800000000, 0xe678578200000000,
1305 0x7878fd4e00000000, 0x9b7f72c000000000, 0x057fd80c00000000,
1306 0xa96df8d500000000, 0x376d521900000000, 0xd46add9700000000,
1307 0x4a6a775b00000000, 0x5363b25100000000, 0xcd63189d00000000,
1308 0x2e64971300000000, 0xb0643ddf00000000, 0x6125d08300000000,
1309 0xff257a4f00000000, 0x1c22f5c100000000, 0x82225f0d00000000,
1310 0x9b2b9a0700000000, 0x052b30cb00000000, 0xe62cbf4500000000,
1311 0x782c158900000000, 0xd43e355000000000, 0x4a3e9f9c00000000,
1312 0xa939101200000000, 0x3739bade00000000, 0x2e307fd400000000,
1313 0xb030d51800000000, 0x53375a9600000000, 0xcd37f05a00000000,
1314 0x4a146bff00000000, 0xd414c13300000000, 0x37134ebd00000000,
1315 0xa913e47100000000, 0xb01a217b00000000, 0x2e1a8bb700000000,
1316 0xcd1d043900000000, 0x531daef500000000, 0xff0f8e2c00000000,
1317 0x610f24e000000000, 0x8208ab6e00000000, 0x1c0801a200000000,
1318 0x0501c4a800000000, 0x9b016e6400000000, 0x7806e1ea00000000,
1319 0xe6064b2600000000}};
1320
1321 #else /* W == 4 */
1322
1323 local const z_crc_t FAR crc_braid_table[][256] = {
1324 {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757,
1325 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a,
1326 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733,
1327 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871,
1328 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70,
1329 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42,
1330 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5,
1331 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787,
1332 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086,
1333 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4,
1334 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d,
1335 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0,
1336 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d,
1337 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f,
1338 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859,
1339 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b,
1340 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5,
1341 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028,
1342 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891,
1343 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed,
1344 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec,
1345 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde,
1346 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817,
1347 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825,
1348 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24,
1349 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e,
1350 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7,
1351 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a,
1352 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4,
1353 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196,
1354 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0,
1355 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2,
1356 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52,
1357 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f,
1358 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36,
1359 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174,
1360 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675,
1361 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647,
1362 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d,
1363 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf,
1364 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be,
1365 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc,
1366 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645,
1367 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98,
1368 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138,
1369 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a,
1370 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c,
1371 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e,
1372 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0,
1373 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d,
1374 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194,
1375 0xde0506f1},
1376 {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc,
1377 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f,
1378 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a,
1379 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29,
1380 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8,
1381 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023,
1382 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e,
1383 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065,
1384 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84,
1385 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7,
1386 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922,
1387 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71,
1388 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0,
1389 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b,
1390 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816,
1391 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd,
1392 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c,
1393 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f,
1394 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba,
1395 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579,
1396 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98,
1397 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873,
1398 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e,
1399 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5,
1400 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134,
1401 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7,
1402 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732,
1403 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461,
1404 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0,
1405 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b,
1406 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26,
1407 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd,
1408 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc,
1409 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef,
1410 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a,
1411 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049,
1412 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8,
1413 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43,
1414 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e,
1415 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5,
1416 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24,
1417 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07,
1418 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982,
1419 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1,
1420 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0,
1421 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b,
1422 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576,
1423 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d,
1424 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c,
1425 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f,
1426 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda,
1427 0xbe9834ed},
1428 {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504,
1429 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49,
1430 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e,
1431 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192,
1432 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859,
1433 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c,
1434 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620,
1435 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265,
1436 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae,
1437 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2,
1438 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175,
1439 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38,
1440 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05,
1441 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40,
1442 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f,
1443 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca,
1444 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850,
1445 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d,
1446 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da,
1447 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864,
1448 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af,
1449 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea,
1450 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74,
1451 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31,
1452 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa,
1453 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a,
1454 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd,
1455 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180,
1456 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a,
1457 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f,
1458 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290,
1459 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5,
1460 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed,
1461 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0,
1462 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167,
1463 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b,
1464 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0,
1465 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5,
1466 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc,
1467 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189,
1468 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842,
1469 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e,
1470 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299,
1471 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4,
1472 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec,
1473 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9,
1474 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66,
1475 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23,
1476 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9,
1477 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4,
1478 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33,
1479 0x9324fd72},
1480 {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
1481 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
1482 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
1483 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
1484 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
1485 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
1486 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
1487 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
1488 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
1489 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
1490 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
1491 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
1492 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
1493 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
1494 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
1495 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
1496 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
1497 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
1498 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
1499 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
1500 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
1501 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
1502 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
1503 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
1504 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
1505 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
1506 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
1507 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
1508 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
1509 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
1510 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
1511 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
1512 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
1513 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
1514 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
1515 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
1516 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
1517 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
1518 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
1519 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
1520 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
1521 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
1522 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
1523 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
1524 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
1525 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
1526 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
1527 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
1528 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
1529 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
1530 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
1531 0x2d02ef8d}};
1532
1533 local const z_word_t FAR crc_braid_big_table[][256] = {
1534 {0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07,
1535 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79,
1536 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7,
1537 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84,
1538 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13,
1539 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663,
1540 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5,
1541 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5,
1542 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832,
1543 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51,
1544 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf,
1545 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1,
1546 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76,
1547 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606,
1548 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996,
1549 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6,
1550 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c,
1551 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712,
1552 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c,
1553 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4,
1554 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943,
1555 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333,
1556 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe,
1557 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce,
1558 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359,
1559 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a,
1560 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04,
1561 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a,
1562 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0,
1563 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580,
1564 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10,
1565 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060,
1566 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1,
1567 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf,
1568 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31,
1569 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852,
1570 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5,
1571 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5,
1572 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75,
1573 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005,
1574 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292,
1575 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1,
1576 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f,
1577 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111,
1578 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0,
1579 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0,
1580 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40,
1581 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530,
1582 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba,
1583 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4,
1584 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a,
1585 0x8def022d},
1586 {0x00000000, 0x41311b19, 0x82623632, 0xc3532d2b, 0x04c56c64,
1587 0x45f4777d, 0x86a75a56, 0xc796414f, 0x088ad9c8, 0x49bbc2d1,
1588 0x8ae8effa, 0xcbd9f4e3, 0x0c4fb5ac, 0x4d7eaeb5, 0x8e2d839e,
1589 0xcf1c9887, 0x5112c24a, 0x1023d953, 0xd370f478, 0x9241ef61,
1590 0x55d7ae2e, 0x14e6b537, 0xd7b5981c, 0x96848305, 0x59981b82,
1591 0x18a9009b, 0xdbfa2db0, 0x9acb36a9, 0x5d5d77e6, 0x1c6c6cff,
1592 0xdf3f41d4, 0x9e0e5acd, 0xa2248495, 0xe3159f8c, 0x2046b2a7,
1593 0x6177a9be, 0xa6e1e8f1, 0xe7d0f3e8, 0x2483dec3, 0x65b2c5da,
1594 0xaaae5d5d, 0xeb9f4644, 0x28cc6b6f, 0x69fd7076, 0xae6b3139,
1595 0xef5a2a20, 0x2c09070b, 0x6d381c12, 0xf33646df, 0xb2075dc6,
1596 0x715470ed, 0x30656bf4, 0xf7f32abb, 0xb6c231a2, 0x75911c89,
1597 0x34a00790, 0xfbbc9f17, 0xba8d840e, 0x79dea925, 0x38efb23c,
1598 0xff79f373, 0xbe48e86a, 0x7d1bc541, 0x3c2ade58, 0x054f79f0,
1599 0x447e62e9, 0x872d4fc2, 0xc61c54db, 0x018a1594, 0x40bb0e8d,
1600 0x83e823a6, 0xc2d938bf, 0x0dc5a038, 0x4cf4bb21, 0x8fa7960a,
1601 0xce968d13, 0x0900cc5c, 0x4831d745, 0x8b62fa6e, 0xca53e177,
1602 0x545dbbba, 0x156ca0a3, 0xd63f8d88, 0x970e9691, 0x5098d7de,
1603 0x11a9ccc7, 0xd2fae1ec, 0x93cbfaf5, 0x5cd76272, 0x1de6796b,
1604 0xdeb55440, 0x9f844f59, 0x58120e16, 0x1923150f, 0xda703824,
1605 0x9b41233d, 0xa76bfd65, 0xe65ae67c, 0x2509cb57, 0x6438d04e,
1606 0xa3ae9101, 0xe29f8a18, 0x21cca733, 0x60fdbc2a, 0xafe124ad,
1607 0xeed03fb4, 0x2d83129f, 0x6cb20986, 0xab2448c9, 0xea1553d0,
1608 0x29467efb, 0x687765e2, 0xf6793f2f, 0xb7482436, 0x741b091d,
1609 0x352a1204, 0xf2bc534b, 0xb38d4852, 0x70de6579, 0x31ef7e60,
1610 0xfef3e6e7, 0xbfc2fdfe, 0x7c91d0d5, 0x3da0cbcc, 0xfa368a83,
1611 0xbb07919a, 0x7854bcb1, 0x3965a7a8, 0x4b98833b, 0x0aa99822,
1612 0xc9fab509, 0x88cbae10, 0x4f5def5f, 0x0e6cf446, 0xcd3fd96d,
1613 0x8c0ec274, 0x43125af3, 0x022341ea, 0xc1706cc1, 0x804177d8,
1614 0x47d73697, 0x06e62d8e, 0xc5b500a5, 0x84841bbc, 0x1a8a4171,
1615 0x5bbb5a68, 0x98e87743, 0xd9d96c5a, 0x1e4f2d15, 0x5f7e360c,
1616 0x9c2d1b27, 0xdd1c003e, 0x120098b9, 0x533183a0, 0x9062ae8b,
1617 0xd153b592, 0x16c5f4dd, 0x57f4efc4, 0x94a7c2ef, 0xd596d9f6,
1618 0xe9bc07ae, 0xa88d1cb7, 0x6bde319c, 0x2aef2a85, 0xed796bca,
1619 0xac4870d3, 0x6f1b5df8, 0x2e2a46e1, 0xe136de66, 0xa007c57f,
1620 0x6354e854, 0x2265f34d, 0xe5f3b202, 0xa4c2a91b, 0x67918430,
1621 0x26a09f29, 0xb8aec5e4, 0xf99fdefd, 0x3accf3d6, 0x7bfde8cf,
1622 0xbc6ba980, 0xfd5ab299, 0x3e099fb2, 0x7f3884ab, 0xb0241c2c,
1623 0xf1150735, 0x32462a1e, 0x73773107, 0xb4e17048, 0xf5d06b51,
1624 0x3683467a, 0x77b25d63, 0x4ed7facb, 0x0fe6e1d2, 0xccb5ccf9,
1625 0x8d84d7e0, 0x4a1296af, 0x0b238db6, 0xc870a09d, 0x8941bb84,
1626 0x465d2303, 0x076c381a, 0xc43f1531, 0x850e0e28, 0x42984f67,
1627 0x03a9547e, 0xc0fa7955, 0x81cb624c, 0x1fc53881, 0x5ef42398,
1628 0x9da70eb3, 0xdc9615aa, 0x1b0054e5, 0x5a314ffc, 0x996262d7,
1629 0xd85379ce, 0x174fe149, 0x567efa50, 0x952dd77b, 0xd41ccc62,
1630 0x138a8d2d, 0x52bb9634, 0x91e8bb1f, 0xd0d9a006, 0xecf37e5e,
1631 0xadc26547, 0x6e91486c, 0x2fa05375, 0xe836123a, 0xa9070923,
1632 0x6a542408, 0x2b653f11, 0xe479a796, 0xa548bc8f, 0x661b91a4,
1633 0x272a8abd, 0xe0bccbf2, 0xa18dd0eb, 0x62defdc0, 0x23efe6d9,
1634 0xbde1bc14, 0xfcd0a70d, 0x3f838a26, 0x7eb2913f, 0xb924d070,
1635 0xf815cb69, 0x3b46e642, 0x7a77fd5b, 0xb56b65dc, 0xf45a7ec5,
1636 0x370953ee, 0x763848f7, 0xb1ae09b8, 0xf09f12a1, 0x33cc3f8a,
1637 0x72fd2493},
1638 {0x00000000, 0x376ac201, 0x6ed48403, 0x59be4602, 0xdca80907,
1639 0xebc2cb06, 0xb27c8d04, 0x85164f05, 0xb851130e, 0x8f3bd10f,
1640 0xd685970d, 0xe1ef550c, 0x64f91a09, 0x5393d808, 0x0a2d9e0a,
1641 0x3d475c0b, 0x70a3261c, 0x47c9e41d, 0x1e77a21f, 0x291d601e,
1642 0xac0b2f1b, 0x9b61ed1a, 0xc2dfab18, 0xf5b56919, 0xc8f23512,
1643 0xff98f713, 0xa626b111, 0x914c7310, 0x145a3c15, 0x2330fe14,
1644 0x7a8eb816, 0x4de47a17, 0xe0464d38, 0xd72c8f39, 0x8e92c93b,
1645 0xb9f80b3a, 0x3cee443f, 0x0b84863e, 0x523ac03c, 0x6550023d,
1646 0x58175e36, 0x6f7d9c37, 0x36c3da35, 0x01a91834, 0x84bf5731,
1647 0xb3d59530, 0xea6bd332, 0xdd011133, 0x90e56b24, 0xa78fa925,
1648 0xfe31ef27, 0xc95b2d26, 0x4c4d6223, 0x7b27a022, 0x2299e620,
1649 0x15f32421, 0x28b4782a, 0x1fdeba2b, 0x4660fc29, 0x710a3e28,
1650 0xf41c712d, 0xc376b32c, 0x9ac8f52e, 0xada2372f, 0xc08d9a70,
1651 0xf7e75871, 0xae591e73, 0x9933dc72, 0x1c259377, 0x2b4f5176,
1652 0x72f11774, 0x459bd575, 0x78dc897e, 0x4fb64b7f, 0x16080d7d,
1653 0x2162cf7c, 0xa4748079, 0x931e4278, 0xcaa0047a, 0xfdcac67b,
1654 0xb02ebc6c, 0x87447e6d, 0xdefa386f, 0xe990fa6e, 0x6c86b56b,
1655 0x5bec776a, 0x02523168, 0x3538f369, 0x087faf62, 0x3f156d63,
1656 0x66ab2b61, 0x51c1e960, 0xd4d7a665, 0xe3bd6464, 0xba032266,
1657 0x8d69e067, 0x20cbd748, 0x17a11549, 0x4e1f534b, 0x7975914a,
1658 0xfc63de4f, 0xcb091c4e, 0x92b75a4c, 0xa5dd984d, 0x989ac446,
1659 0xaff00647, 0xf64e4045, 0xc1248244, 0x4432cd41, 0x73580f40,
1660 0x2ae64942, 0x1d8c8b43, 0x5068f154, 0x67023355, 0x3ebc7557,
1661 0x09d6b756, 0x8cc0f853, 0xbbaa3a52, 0xe2147c50, 0xd57ebe51,
1662 0xe839e25a, 0xdf53205b, 0x86ed6659, 0xb187a458, 0x3491eb5d,
1663 0x03fb295c, 0x5a456f5e, 0x6d2fad5f, 0x801b35e1, 0xb771f7e0,
1664 0xeecfb1e2, 0xd9a573e3, 0x5cb33ce6, 0x6bd9fee7, 0x3267b8e5,
1665 0x050d7ae4, 0x384a26ef, 0x0f20e4ee, 0x569ea2ec, 0x61f460ed,
1666 0xe4e22fe8, 0xd388ede9, 0x8a36abeb, 0xbd5c69ea, 0xf0b813fd,
1667 0xc7d2d1fc, 0x9e6c97fe, 0xa90655ff, 0x2c101afa, 0x1b7ad8fb,
1668 0x42c49ef9, 0x75ae5cf8, 0x48e900f3, 0x7f83c2f2, 0x263d84f0,
1669 0x115746f1, 0x944109f4, 0xa32bcbf5, 0xfa958df7, 0xcdff4ff6,
1670 0x605d78d9, 0x5737bad8, 0x0e89fcda, 0x39e33edb, 0xbcf571de,
1671 0x8b9fb3df, 0xd221f5dd, 0xe54b37dc, 0xd80c6bd7, 0xef66a9d6,
1672 0xb6d8efd4, 0x81b22dd5, 0x04a462d0, 0x33cea0d1, 0x6a70e6d3,
1673 0x5d1a24d2, 0x10fe5ec5, 0x27949cc4, 0x7e2adac6, 0x494018c7,
1674 0xcc5657c2, 0xfb3c95c3, 0xa282d3c1, 0x95e811c0, 0xa8af4dcb,
1675 0x9fc58fca, 0xc67bc9c8, 0xf1110bc9, 0x740744cc, 0x436d86cd,
1676 0x1ad3c0cf, 0x2db902ce, 0x4096af91, 0x77fc6d90, 0x2e422b92,
1677 0x1928e993, 0x9c3ea696, 0xab546497, 0xf2ea2295, 0xc580e094,
1678 0xf8c7bc9f, 0xcfad7e9e, 0x9613389c, 0xa179fa9d, 0x246fb598,
1679 0x13057799, 0x4abb319b, 0x7dd1f39a, 0x3035898d, 0x075f4b8c,
1680 0x5ee10d8e, 0x698bcf8f, 0xec9d808a, 0xdbf7428b, 0x82490489,
1681 0xb523c688, 0x88649a83, 0xbf0e5882, 0xe6b01e80, 0xd1dadc81,
1682 0x54cc9384, 0x63a65185, 0x3a181787, 0x0d72d586, 0xa0d0e2a9,
1683 0x97ba20a8, 0xce0466aa, 0xf96ea4ab, 0x7c78ebae, 0x4b1229af,
1684 0x12ac6fad, 0x25c6adac, 0x1881f1a7, 0x2feb33a6, 0x765575a4,
1685 0x413fb7a5, 0xc429f8a0, 0xf3433aa1, 0xaafd7ca3, 0x9d97bea2,
1686 0xd073c4b5, 0xe71906b4, 0xbea740b6, 0x89cd82b7, 0x0cdbcdb2,
1687 0x3bb10fb3, 0x620f49b1, 0x55658bb0, 0x6822d7bb, 0x5f4815ba,
1688 0x06f653b8, 0x319c91b9, 0xb48adebc, 0x83e01cbd, 0xda5e5abf,
1689 0xed3498be},
1690 {0x00000000, 0x6567bcb8, 0x8bc809aa, 0xeeafb512, 0x5797628f,
1691 0x32f0de37, 0xdc5f6b25, 0xb938d79d, 0xef28b4c5, 0x8a4f087d,
1692 0x64e0bd6f, 0x018701d7, 0xb8bfd64a, 0xddd86af2, 0x3377dfe0,
1693 0x56106358, 0x9f571950, 0xfa30a5e8, 0x149f10fa, 0x71f8ac42,
1694 0xc8c07bdf, 0xada7c767, 0x43087275, 0x266fcecd, 0x707fad95,
1695 0x1518112d, 0xfbb7a43f, 0x9ed01887, 0x27e8cf1a, 0x428f73a2,
1696 0xac20c6b0, 0xc9477a08, 0x3eaf32a0, 0x5bc88e18, 0xb5673b0a,
1697 0xd00087b2, 0x6938502f, 0x0c5fec97, 0xe2f05985, 0x8797e53d,
1698 0xd1878665, 0xb4e03add, 0x5a4f8fcf, 0x3f283377, 0x8610e4ea,
1699 0xe3775852, 0x0dd8ed40, 0x68bf51f8, 0xa1f82bf0, 0xc49f9748,
1700 0x2a30225a, 0x4f579ee2, 0xf66f497f, 0x9308f5c7, 0x7da740d5,
1701 0x18c0fc6d, 0x4ed09f35, 0x2bb7238d, 0xc518969f, 0xa07f2a27,
1702 0x1947fdba, 0x7c204102, 0x928ff410, 0xf7e848a8, 0x3d58149b,
1703 0x583fa823, 0xb6901d31, 0xd3f7a189, 0x6acf7614, 0x0fa8caac,
1704 0xe1077fbe, 0x8460c306, 0xd270a05e, 0xb7171ce6, 0x59b8a9f4,
1705 0x3cdf154c, 0x85e7c2d1, 0xe0807e69, 0x0e2fcb7b, 0x6b4877c3,
1706 0xa20f0dcb, 0xc768b173, 0x29c70461, 0x4ca0b8d9, 0xf5986f44,
1707 0x90ffd3fc, 0x7e5066ee, 0x1b37da56, 0x4d27b90e, 0x284005b6,
1708 0xc6efb0a4, 0xa3880c1c, 0x1ab0db81, 0x7fd76739, 0x9178d22b,
1709 0xf41f6e93, 0x03f7263b, 0x66909a83, 0x883f2f91, 0xed589329,
1710 0x546044b4, 0x3107f80c, 0xdfa84d1e, 0xbacff1a6, 0xecdf92fe,
1711 0x89b82e46, 0x67179b54, 0x027027ec, 0xbb48f071, 0xde2f4cc9,
1712 0x3080f9db, 0x55e74563, 0x9ca03f6b, 0xf9c783d3, 0x176836c1,
1713 0x720f8a79, 0xcb375de4, 0xae50e15c, 0x40ff544e, 0x2598e8f6,
1714 0x73888bae, 0x16ef3716, 0xf8408204, 0x9d273ebc, 0x241fe921,
1715 0x41785599, 0xafd7e08b, 0xcab05c33, 0x3bb659ed, 0x5ed1e555,
1716 0xb07e5047, 0xd519ecff, 0x6c213b62, 0x094687da, 0xe7e932c8,
1717 0x828e8e70, 0xd49eed28, 0xb1f95190, 0x5f56e482, 0x3a31583a,
1718 0x83098fa7, 0xe66e331f, 0x08c1860d, 0x6da63ab5, 0xa4e140bd,
1719 0xc186fc05, 0x2f294917, 0x4a4ef5af, 0xf3762232, 0x96119e8a,
1720 0x78be2b98, 0x1dd99720, 0x4bc9f478, 0x2eae48c0, 0xc001fdd2,
1721 0xa566416a, 0x1c5e96f7, 0x79392a4f, 0x97969f5d, 0xf2f123e5,
1722 0x05196b4d, 0x607ed7f5, 0x8ed162e7, 0xebb6de5f, 0x528e09c2,
1723 0x37e9b57a, 0xd9460068, 0xbc21bcd0, 0xea31df88, 0x8f566330,
1724 0x61f9d622, 0x049e6a9a, 0xbda6bd07, 0xd8c101bf, 0x366eb4ad,
1725 0x53090815, 0x9a4e721d, 0xff29cea5, 0x11867bb7, 0x74e1c70f,
1726 0xcdd91092, 0xa8beac2a, 0x46111938, 0x2376a580, 0x7566c6d8,
1727 0x10017a60, 0xfeaecf72, 0x9bc973ca, 0x22f1a457, 0x479618ef,
1728 0xa939adfd, 0xcc5e1145, 0x06ee4d76, 0x6389f1ce, 0x8d2644dc,
1729 0xe841f864, 0x51792ff9, 0x341e9341, 0xdab12653, 0xbfd69aeb,
1730 0xe9c6f9b3, 0x8ca1450b, 0x620ef019, 0x07694ca1, 0xbe519b3c,
1731 0xdb362784, 0x35999296, 0x50fe2e2e, 0x99b95426, 0xfcdee89e,
1732 0x12715d8c, 0x7716e134, 0xce2e36a9, 0xab498a11, 0x45e63f03,
1733 0x208183bb, 0x7691e0e3, 0x13f65c5b, 0xfd59e949, 0x983e55f1,
1734 0x2106826c, 0x44613ed4, 0xaace8bc6, 0xcfa9377e, 0x38417fd6,
1735 0x5d26c36e, 0xb389767c, 0xd6eecac4, 0x6fd61d59, 0x0ab1a1e1,
1736 0xe41e14f3, 0x8179a84b, 0xd769cb13, 0xb20e77ab, 0x5ca1c2b9,
1737 0x39c67e01, 0x80fea99c, 0xe5991524, 0x0b36a036, 0x6e511c8e,
1738 0xa7166686, 0xc271da3e, 0x2cde6f2c, 0x49b9d394, 0xf0810409,
1739 0x95e6b8b1, 0x7b490da3, 0x1e2eb11b, 0x483ed243, 0x2d596efb,
1740 0xc3f6dbe9, 0xa6916751, 0x1fa9b0cc, 0x7ace0c74, 0x9461b966,
1741 0xf10605de}};
1742
1743 #endif
1744
1745 #endif
1746
1747 #if N == 2
1748
1749 #if W == 8
1750
1751 local const z_crc_t FAR crc_braid_table[][256] = {
1752 {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87,
1753 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede,
1754 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab,
1755 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c,
1756 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1,
1757 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7,
1758 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e,
1759 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308,
1760 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5,
1761 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472,
1762 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07,
1763 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e,
1764 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa,
1765 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec,
1766 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6,
1767 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0,
1768 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3,
1769 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba,
1770 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf,
1771 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975,
1772 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8,
1773 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde,
1774 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a,
1775 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c,
1776 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1,
1777 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65,
1778 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410,
1779 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649,
1780 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a,
1781 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c,
1782 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946,
1783 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450,
1784 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e,
1785 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857,
1786 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022,
1787 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5,
1788 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758,
1789 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e,
1790 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d,
1791 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b,
1792 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6,
1793 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401,
1794 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74,
1795 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d,
1796 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073,
1797 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65,
1798 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f,
1799 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749,
1800 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a,
1801 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033,
1802 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846,
1803 0x0d7139d7},
1804 {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563,
1805 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f,
1806 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875,
1807 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536,
1808 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8,
1809 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43,
1810 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f,
1811 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184,
1812 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a,
1813 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39,
1814 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523,
1815 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f,
1816 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d,
1817 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6,
1818 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b,
1819 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0,
1820 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151,
1821 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d,
1822 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47,
1823 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a,
1824 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964,
1825 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef,
1826 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d,
1827 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6,
1828 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348,
1829 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53,
1830 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449,
1831 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645,
1832 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4,
1833 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f,
1834 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2,
1835 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69,
1836 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46,
1837 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a,
1838 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650,
1839 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13,
1840 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded,
1841 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366,
1842 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57,
1843 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc,
1844 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222,
1845 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61,
1846 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b,
1847 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277,
1848 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558,
1849 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3,
1850 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e,
1851 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5,
1852 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74,
1853 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78,
1854 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262,
1855 0x1c53e98a},
1856 {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b,
1857 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40,
1858 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580,
1859 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7,
1860 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a,
1861 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37,
1862 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75,
1863 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218,
1864 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5,
1865 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2,
1866 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02,
1867 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59,
1868 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1,
1869 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c,
1870 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a,
1871 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307,
1872 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486,
1873 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd,
1874 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d,
1875 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2,
1876 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f,
1877 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72,
1878 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8,
1879 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985,
1880 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268,
1881 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94,
1882 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454,
1883 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f,
1884 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e,
1885 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3,
1886 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915,
1887 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778,
1888 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821,
1889 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a,
1890 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba,
1891 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d,
1892 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560,
1893 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d,
1894 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe,
1895 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3,
1896 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e,
1897 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509,
1898 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9,
1899 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92,
1900 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb,
1901 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6,
1902 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50,
1903 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d,
1904 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc,
1905 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7,
1906 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927,
1907 0x3f88e851},
1908 {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96,
1909 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8,
1910 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0,
1911 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14,
1912 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7,
1913 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4,
1914 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe,
1915 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad,
1916 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e,
1917 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa,
1918 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2,
1919 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c,
1920 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab,
1921 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8,
1922 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d,
1923 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e,
1924 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7,
1925 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99,
1926 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1,
1927 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690,
1928 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933,
1929 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20,
1930 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf,
1931 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc,
1932 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f,
1933 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92,
1934 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca,
1935 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4,
1936 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd,
1937 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de,
1938 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb,
1939 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8,
1940 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474,
1941 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a,
1942 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252,
1943 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6,
1944 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55,
1945 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846,
1946 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7,
1947 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4,
1948 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47,
1949 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3,
1950 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb,
1951 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5,
1952 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49,
1953 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a,
1954 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f,
1955 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c,
1956 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305,
1957 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b,
1958 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523,
1959 0x3dee8ca6},
1960 {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f,
1961 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91,
1962 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e,
1963 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c,
1964 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02,
1965 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12,
1966 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567,
1967 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277,
1968 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679,
1969 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b,
1970 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4,
1971 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a,
1972 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0,
1973 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0,
1974 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91,
1975 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881,
1976 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173,
1977 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d,
1978 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912,
1979 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8,
1980 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6,
1981 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6,
1982 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b,
1983 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b,
1984 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75,
1985 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f,
1986 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00,
1987 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee,
1988 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c,
1989 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c,
1990 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d,
1991 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d,
1992 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67,
1993 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89,
1994 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706,
1995 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14,
1996 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a,
1997 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a,
1998 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f,
1999 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f,
2000 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591,
2001 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983,
2002 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c,
2003 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2,
2004 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8,
2005 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8,
2006 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89,
2007 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99,
2008 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b,
2009 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485,
2010 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a,
2011 0x36197165},
2012 {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382,
2013 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85,
2014 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06,
2015 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca,
2016 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e,
2017 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc,
2018 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616,
2019 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54,
2020 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10,
2021 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc,
2022 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f,
2023 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58,
2024 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef,
2025 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad,
2026 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b,
2027 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29,
2028 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6,
2029 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1,
2030 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622,
2031 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039,
2032 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d,
2033 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f,
2034 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32,
2035 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770,
2036 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034,
2037 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f,
2038 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc,
2039 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db,
2040 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154,
2041 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16,
2042 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0,
2043 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592,
2044 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca,
2045 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd,
2046 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e,
2047 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882,
2048 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6,
2049 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384,
2050 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1,
2051 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3,
2052 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7,
2053 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b,
2054 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8,
2055 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff,
2056 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7,
2057 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5,
2058 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23,
2059 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761,
2060 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee,
2061 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9,
2062 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a,
2063 0x1a3b93aa},
2064 {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a,
2065 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca,
2066 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3,
2067 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb,
2068 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c,
2069 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58,
2070 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed,
2071 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9,
2072 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e,
2073 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906,
2074 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f,
2075 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf,
2076 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0,
2077 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4,
2078 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769,
2079 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d,
2080 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632,
2081 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82,
2082 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb,
2083 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73,
2084 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484,
2085 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0,
2086 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5,
2087 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1,
2088 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516,
2089 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f,
2090 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946,
2091 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6,
2092 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9,
2093 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad,
2094 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820,
2095 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364,
2096 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab,
2097 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b,
2098 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62,
2099 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a,
2100 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd,
2101 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089,
2102 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c,
2103 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8,
2104 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f,
2105 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477,
2106 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e,
2107 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be,
2108 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71,
2109 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635,
2110 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8,
2111 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc,
2112 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3,
2113 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753,
2114 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a,
2115 0xe147d714},
2116 {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c,
2117 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b,
2118 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92,
2119 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4,
2120 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069,
2121 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526,
2122 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25,
2123 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a,
2124 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7,
2125 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491,
2126 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958,
2127 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f,
2128 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307,
2129 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648,
2130 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999,
2131 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6,
2132 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a,
2133 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d,
2134 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4,
2135 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61,
2136 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc,
2137 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3,
2138 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53,
2139 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c,
2140 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1,
2141 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c,
2142 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5,
2143 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92,
2144 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e,
2145 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771,
2146 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0,
2147 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def,
2148 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0,
2149 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7,
2150 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e,
2151 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58,
2152 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285,
2153 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca,
2154 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce,
2155 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81,
2156 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c,
2157 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a,
2158 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3,
2159 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4,
2160 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb,
2161 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4,
2162 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75,
2163 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a,
2164 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296,
2165 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1,
2166 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808,
2167 0x494f0c4b}};
2168
2169 local const z_word_t FAR crc_braid_big_table[][256] = {
2170 {0x0000000000000000, 0x43147b1700000000, 0x8628f62e00000000,
2171 0xc53c8d3900000000, 0x0c51ec5d00000000, 0x4f45974a00000000,
2172 0x8a791a7300000000, 0xc96d616400000000, 0x18a2d8bb00000000,
2173 0x5bb6a3ac00000000, 0x9e8a2e9500000000, 0xdd9e558200000000,
2174 0x14f334e600000000, 0x57e74ff100000000, 0x92dbc2c800000000,
2175 0xd1cfb9df00000000, 0x7142c0ac00000000, 0x3256bbbb00000000,
2176 0xf76a368200000000, 0xb47e4d9500000000, 0x7d132cf100000000,
2177 0x3e0757e600000000, 0xfb3bdadf00000000, 0xb82fa1c800000000,
2178 0x69e0181700000000, 0x2af4630000000000, 0xefc8ee3900000000,
2179 0xacdc952e00000000, 0x65b1f44a00000000, 0x26a58f5d00000000,
2180 0xe399026400000000, 0xa08d797300000000, 0xa382f18200000000,
2181 0xe0968a9500000000, 0x25aa07ac00000000, 0x66be7cbb00000000,
2182 0xafd31ddf00000000, 0xecc766c800000000, 0x29fbebf100000000,
2183 0x6aef90e600000000, 0xbb20293900000000, 0xf834522e00000000,
2184 0x3d08df1700000000, 0x7e1ca40000000000, 0xb771c56400000000,
2185 0xf465be7300000000, 0x3159334a00000000, 0x724d485d00000000,
2186 0xd2c0312e00000000, 0x91d44a3900000000, 0x54e8c70000000000,
2187 0x17fcbc1700000000, 0xde91dd7300000000, 0x9d85a66400000000,
2188 0x58b92b5d00000000, 0x1bad504a00000000, 0xca62e99500000000,
2189 0x8976928200000000, 0x4c4a1fbb00000000, 0x0f5e64ac00000000,
2190 0xc63305c800000000, 0x85277edf00000000, 0x401bf3e600000000,
2191 0x030f88f100000000, 0x070392de00000000, 0x4417e9c900000000,
2192 0x812b64f000000000, 0xc23f1fe700000000, 0x0b527e8300000000,
2193 0x4846059400000000, 0x8d7a88ad00000000, 0xce6ef3ba00000000,
2194 0x1fa14a6500000000, 0x5cb5317200000000, 0x9989bc4b00000000,
2195 0xda9dc75c00000000, 0x13f0a63800000000, 0x50e4dd2f00000000,
2196 0x95d8501600000000, 0xd6cc2b0100000000, 0x7641527200000000,
2197 0x3555296500000000, 0xf069a45c00000000, 0xb37ddf4b00000000,
2198 0x7a10be2f00000000, 0x3904c53800000000, 0xfc38480100000000,
2199 0xbf2c331600000000, 0x6ee38ac900000000, 0x2df7f1de00000000,
2200 0xe8cb7ce700000000, 0xabdf07f000000000, 0x62b2669400000000,
2201 0x21a61d8300000000, 0xe49a90ba00000000, 0xa78eebad00000000,
2202 0xa481635c00000000, 0xe795184b00000000, 0x22a9957200000000,
2203 0x61bdee6500000000, 0xa8d08f0100000000, 0xebc4f41600000000,
2204 0x2ef8792f00000000, 0x6dec023800000000, 0xbc23bbe700000000,
2205 0xff37c0f000000000, 0x3a0b4dc900000000, 0x791f36de00000000,
2206 0xb07257ba00000000, 0xf3662cad00000000, 0x365aa19400000000,
2207 0x754eda8300000000, 0xd5c3a3f000000000, 0x96d7d8e700000000,
2208 0x53eb55de00000000, 0x10ff2ec900000000, 0xd9924fad00000000,
2209 0x9a8634ba00000000, 0x5fbab98300000000, 0x1caec29400000000,
2210 0xcd617b4b00000000, 0x8e75005c00000000, 0x4b498d6500000000,
2211 0x085df67200000000, 0xc130971600000000, 0x8224ec0100000000,
2212 0x4718613800000000, 0x040c1a2f00000000, 0x4f00556600000000,
2213 0x0c142e7100000000, 0xc928a34800000000, 0x8a3cd85f00000000,
2214 0x4351b93b00000000, 0x0045c22c00000000, 0xc5794f1500000000,
2215 0x866d340200000000, 0x57a28ddd00000000, 0x14b6f6ca00000000,
2216 0xd18a7bf300000000, 0x929e00e400000000, 0x5bf3618000000000,
2217 0x18e71a9700000000, 0xdddb97ae00000000, 0x9ecfecb900000000,
2218 0x3e4295ca00000000, 0x7d56eedd00000000, 0xb86a63e400000000,
2219 0xfb7e18f300000000, 0x3213799700000000, 0x7107028000000000,
2220 0xb43b8fb900000000, 0xf72ff4ae00000000, 0x26e04d7100000000,
2221 0x65f4366600000000, 0xa0c8bb5f00000000, 0xe3dcc04800000000,
2222 0x2ab1a12c00000000, 0x69a5da3b00000000, 0xac99570200000000,
2223 0xef8d2c1500000000, 0xec82a4e400000000, 0xaf96dff300000000,
2224 0x6aaa52ca00000000, 0x29be29dd00000000, 0xe0d348b900000000,
2225 0xa3c733ae00000000, 0x66fbbe9700000000, 0x25efc58000000000,
2226 0xf4207c5f00000000, 0xb734074800000000, 0x72088a7100000000,
2227 0x311cf16600000000, 0xf871900200000000, 0xbb65eb1500000000,
2228 0x7e59662c00000000, 0x3d4d1d3b00000000, 0x9dc0644800000000,
2229 0xded41f5f00000000, 0x1be8926600000000, 0x58fce97100000000,
2230 0x9191881500000000, 0xd285f30200000000, 0x17b97e3b00000000,
2231 0x54ad052c00000000, 0x8562bcf300000000, 0xc676c7e400000000,
2232 0x034a4add00000000, 0x405e31ca00000000, 0x893350ae00000000,
2233 0xca272bb900000000, 0x0f1ba68000000000, 0x4c0fdd9700000000,
2234 0x4803c7b800000000, 0x0b17bcaf00000000, 0xce2b319600000000,
2235 0x8d3f4a8100000000, 0x44522be500000000, 0x074650f200000000,
2236 0xc27addcb00000000, 0x816ea6dc00000000, 0x50a11f0300000000,
2237 0x13b5641400000000, 0xd689e92d00000000, 0x959d923a00000000,
2238 0x5cf0f35e00000000, 0x1fe4884900000000, 0xdad8057000000000,
2239 0x99cc7e6700000000, 0x3941071400000000, 0x7a557c0300000000,
2240 0xbf69f13a00000000, 0xfc7d8a2d00000000, 0x3510eb4900000000,
2241 0x7604905e00000000, 0xb3381d6700000000, 0xf02c667000000000,
2242 0x21e3dfaf00000000, 0x62f7a4b800000000, 0xa7cb298100000000,
2243 0xe4df529600000000, 0x2db233f200000000, 0x6ea648e500000000,
2244 0xab9ac5dc00000000, 0xe88ebecb00000000, 0xeb81363a00000000,
2245 0xa8954d2d00000000, 0x6da9c01400000000, 0x2ebdbb0300000000,
2246 0xe7d0da6700000000, 0xa4c4a17000000000, 0x61f82c4900000000,
2247 0x22ec575e00000000, 0xf323ee8100000000, 0xb037959600000000,
2248 0x750b18af00000000, 0x361f63b800000000, 0xff7202dc00000000,
2249 0xbc6679cb00000000, 0x795af4f200000000, 0x3a4e8fe500000000,
2250 0x9ac3f69600000000, 0xd9d78d8100000000, 0x1ceb00b800000000,
2251 0x5fff7baf00000000, 0x96921acb00000000, 0xd58661dc00000000,
2252 0x10baece500000000, 0x53ae97f200000000, 0x82612e2d00000000,
2253 0xc175553a00000000, 0x0449d80300000000, 0x475da31400000000,
2254 0x8e30c27000000000, 0xcd24b96700000000, 0x0818345e00000000,
2255 0x4b0c4f4900000000},
2256 {0x0000000000000000, 0x3e6bc2ef00000000, 0x3dd0f50400000000,
2257 0x03bb37eb00000000, 0x7aa0eb0900000000, 0x44cb29e600000000,
2258 0x47701e0d00000000, 0x791bdce200000000, 0xf440d71300000000,
2259 0xca2b15fc00000000, 0xc990221700000000, 0xf7fbe0f800000000,
2260 0x8ee03c1a00000000, 0xb08bfef500000000, 0xb330c91e00000000,
2261 0x8d5b0bf100000000, 0xe881ae2700000000, 0xd6ea6cc800000000,
2262 0xd5515b2300000000, 0xeb3a99cc00000000, 0x9221452e00000000,
2263 0xac4a87c100000000, 0xaff1b02a00000000, 0x919a72c500000000,
2264 0x1cc1793400000000, 0x22aabbdb00000000, 0x21118c3000000000,
2265 0x1f7a4edf00000000, 0x6661923d00000000, 0x580a50d200000000,
2266 0x5bb1673900000000, 0x65daa5d600000000, 0xd0035d4f00000000,
2267 0xee689fa000000000, 0xedd3a84b00000000, 0xd3b86aa400000000,
2268 0xaaa3b64600000000, 0x94c874a900000000, 0x9773434200000000,
2269 0xa91881ad00000000, 0x24438a5c00000000, 0x1a2848b300000000,
2270 0x19937f5800000000, 0x27f8bdb700000000, 0x5ee3615500000000,
2271 0x6088a3ba00000000, 0x6333945100000000, 0x5d5856be00000000,
2272 0x3882f36800000000, 0x06e9318700000000, 0x0552066c00000000,
2273 0x3b39c48300000000, 0x4222186100000000, 0x7c49da8e00000000,
2274 0x7ff2ed6500000000, 0x41992f8a00000000, 0xccc2247b00000000,
2275 0xf2a9e69400000000, 0xf112d17f00000000, 0xcf79139000000000,
2276 0xb662cf7200000000, 0x88090d9d00000000, 0x8bb23a7600000000,
2277 0xb5d9f89900000000, 0xa007ba9e00000000, 0x9e6c787100000000,
2278 0x9dd74f9a00000000, 0xa3bc8d7500000000, 0xdaa7519700000000,
2279 0xe4cc937800000000, 0xe777a49300000000, 0xd91c667c00000000,
2280 0x54476d8d00000000, 0x6a2caf6200000000, 0x6997988900000000,
2281 0x57fc5a6600000000, 0x2ee7868400000000, 0x108c446b00000000,
2282 0x1337738000000000, 0x2d5cb16f00000000, 0x488614b900000000,
2283 0x76edd65600000000, 0x7556e1bd00000000, 0x4b3d235200000000,
2284 0x3226ffb000000000, 0x0c4d3d5f00000000, 0x0ff60ab400000000,
2285 0x319dc85b00000000, 0xbcc6c3aa00000000, 0x82ad014500000000,
2286 0x811636ae00000000, 0xbf7df44100000000, 0xc66628a300000000,
2287 0xf80dea4c00000000, 0xfbb6dda700000000, 0xc5dd1f4800000000,
2288 0x7004e7d100000000, 0x4e6f253e00000000, 0x4dd412d500000000,
2289 0x73bfd03a00000000, 0x0aa40cd800000000, 0x34cfce3700000000,
2290 0x3774f9dc00000000, 0x091f3b3300000000, 0x844430c200000000,
2291 0xba2ff22d00000000, 0xb994c5c600000000, 0x87ff072900000000,
2292 0xfee4dbcb00000000, 0xc08f192400000000, 0xc3342ecf00000000,
2293 0xfd5fec2000000000, 0x988549f600000000, 0xa6ee8b1900000000,
2294 0xa555bcf200000000, 0x9b3e7e1d00000000, 0xe225a2ff00000000,
2295 0xdc4e601000000000, 0xdff557fb00000000, 0xe19e951400000000,
2296 0x6cc59ee500000000, 0x52ae5c0a00000000, 0x51156be100000000,
2297 0x6f7ea90e00000000, 0x166575ec00000000, 0x280eb70300000000,
2298 0x2bb580e800000000, 0x15de420700000000, 0x010905e600000000,
2299 0x3f62c70900000000, 0x3cd9f0e200000000, 0x02b2320d00000000,
2300 0x7ba9eeef00000000, 0x45c22c0000000000, 0x46791beb00000000,
2301 0x7812d90400000000, 0xf549d2f500000000, 0xcb22101a00000000,
2302 0xc89927f100000000, 0xf6f2e51e00000000, 0x8fe939fc00000000,
2303 0xb182fb1300000000, 0xb239ccf800000000, 0x8c520e1700000000,
2304 0xe988abc100000000, 0xd7e3692e00000000, 0xd4585ec500000000,
2305 0xea339c2a00000000, 0x932840c800000000, 0xad43822700000000,
2306 0xaef8b5cc00000000, 0x9093772300000000, 0x1dc87cd200000000,
2307 0x23a3be3d00000000, 0x201889d600000000, 0x1e734b3900000000,
2308 0x676897db00000000, 0x5903553400000000, 0x5ab862df00000000,
2309 0x64d3a03000000000, 0xd10a58a900000000, 0xef619a4600000000,
2310 0xecdaadad00000000, 0xd2b16f4200000000, 0xabaab3a000000000,
2311 0x95c1714f00000000, 0x967a46a400000000, 0xa811844b00000000,
2312 0x254a8fba00000000, 0x1b214d5500000000, 0x189a7abe00000000,
2313 0x26f1b85100000000, 0x5fea64b300000000, 0x6181a65c00000000,
2314 0x623a91b700000000, 0x5c51535800000000, 0x398bf68e00000000,
2315 0x07e0346100000000, 0x045b038a00000000, 0x3a30c16500000000,
2316 0x432b1d8700000000, 0x7d40df6800000000, 0x7efbe88300000000,
2317 0x40902a6c00000000, 0xcdcb219d00000000, 0xf3a0e37200000000,
2318 0xf01bd49900000000, 0xce70167600000000, 0xb76bca9400000000,
2319 0x8900087b00000000, 0x8abb3f9000000000, 0xb4d0fd7f00000000,
2320 0xa10ebf7800000000, 0x9f657d9700000000, 0x9cde4a7c00000000,
2321 0xa2b5889300000000, 0xdbae547100000000, 0xe5c5969e00000000,
2322 0xe67ea17500000000, 0xd815639a00000000, 0x554e686b00000000,
2323 0x6b25aa8400000000, 0x689e9d6f00000000, 0x56f55f8000000000,
2324 0x2fee836200000000, 0x1185418d00000000, 0x123e766600000000,
2325 0x2c55b48900000000, 0x498f115f00000000, 0x77e4d3b000000000,
2326 0x745fe45b00000000, 0x4a3426b400000000, 0x332ffa5600000000,
2327 0x0d4438b900000000, 0x0eff0f5200000000, 0x3094cdbd00000000,
2328 0xbdcfc64c00000000, 0x83a404a300000000, 0x801f334800000000,
2329 0xbe74f1a700000000, 0xc76f2d4500000000, 0xf904efaa00000000,
2330 0xfabfd84100000000, 0xc4d41aae00000000, 0x710de23700000000,
2331 0x4f6620d800000000, 0x4cdd173300000000, 0x72b6d5dc00000000,
2332 0x0bad093e00000000, 0x35c6cbd100000000, 0x367dfc3a00000000,
2333 0x08163ed500000000, 0x854d352400000000, 0xbb26f7cb00000000,
2334 0xb89dc02000000000, 0x86f602cf00000000, 0xffedde2d00000000,
2335 0xc1861cc200000000, 0xc23d2b2900000000, 0xfc56e9c600000000,
2336 0x998c4c1000000000, 0xa7e78eff00000000, 0xa45cb91400000000,
2337 0x9a377bfb00000000, 0xe32ca71900000000, 0xdd4765f600000000,
2338 0xdefc521d00000000, 0xe09790f200000000, 0x6dcc9b0300000000,
2339 0x53a759ec00000000, 0x501c6e0700000000, 0x6e77ace800000000,
2340 0x176c700a00000000, 0x2907b2e500000000, 0x2abc850e00000000,
2341 0x14d747e100000000},
2342 {0x0000000000000000, 0xc0df8ec100000000, 0xc1b96c5800000000,
2343 0x0166e29900000000, 0x8273d9b000000000, 0x42ac577100000000,
2344 0x43cab5e800000000, 0x83153b2900000000, 0x45e1c3ba00000000,
2345 0x853e4d7b00000000, 0x8458afe200000000, 0x4487212300000000,
2346 0xc7921a0a00000000, 0x074d94cb00000000, 0x062b765200000000,
2347 0xc6f4f89300000000, 0xcbc4f6ae00000000, 0x0b1b786f00000000,
2348 0x0a7d9af600000000, 0xcaa2143700000000, 0x49b72f1e00000000,
2349 0x8968a1df00000000, 0x880e434600000000, 0x48d1cd8700000000,
2350 0x8e25351400000000, 0x4efabbd500000000, 0x4f9c594c00000000,
2351 0x8f43d78d00000000, 0x0c56eca400000000, 0xcc89626500000000,
2352 0xcdef80fc00000000, 0x0d300e3d00000000, 0xd78f9c8600000000,
2353 0x1750124700000000, 0x1636f0de00000000, 0xd6e97e1f00000000,
2354 0x55fc453600000000, 0x9523cbf700000000, 0x9445296e00000000,
2355 0x549aa7af00000000, 0x926e5f3c00000000, 0x52b1d1fd00000000,
2356 0x53d7336400000000, 0x9308bda500000000, 0x101d868c00000000,
2357 0xd0c2084d00000000, 0xd1a4ead400000000, 0x117b641500000000,
2358 0x1c4b6a2800000000, 0xdc94e4e900000000, 0xddf2067000000000,
2359 0x1d2d88b100000000, 0x9e38b39800000000, 0x5ee73d5900000000,
2360 0x5f81dfc000000000, 0x9f5e510100000000, 0x59aaa99200000000,
2361 0x9975275300000000, 0x9813c5ca00000000, 0x58cc4b0b00000000,
2362 0xdbd9702200000000, 0x1b06fee300000000, 0x1a601c7a00000000,
2363 0xdabf92bb00000000, 0xef1948d600000000, 0x2fc6c61700000000,
2364 0x2ea0248e00000000, 0xee7faa4f00000000, 0x6d6a916600000000,
2365 0xadb51fa700000000, 0xacd3fd3e00000000, 0x6c0c73ff00000000,
2366 0xaaf88b6c00000000, 0x6a2705ad00000000, 0x6b41e73400000000,
2367 0xab9e69f500000000, 0x288b52dc00000000, 0xe854dc1d00000000,
2368 0xe9323e8400000000, 0x29edb04500000000, 0x24ddbe7800000000,
2369 0xe40230b900000000, 0xe564d22000000000, 0x25bb5ce100000000,
2370 0xa6ae67c800000000, 0x6671e90900000000, 0x67170b9000000000,
2371 0xa7c8855100000000, 0x613c7dc200000000, 0xa1e3f30300000000,
2372 0xa085119a00000000, 0x605a9f5b00000000, 0xe34fa47200000000,
2373 0x23902ab300000000, 0x22f6c82a00000000, 0xe22946eb00000000,
2374 0x3896d45000000000, 0xf8495a9100000000, 0xf92fb80800000000,
2375 0x39f036c900000000, 0xbae50de000000000, 0x7a3a832100000000,
2376 0x7b5c61b800000000, 0xbb83ef7900000000, 0x7d7717ea00000000,
2377 0xbda8992b00000000, 0xbcce7bb200000000, 0x7c11f57300000000,
2378 0xff04ce5a00000000, 0x3fdb409b00000000, 0x3ebda20200000000,
2379 0xfe622cc300000000, 0xf35222fe00000000, 0x338dac3f00000000,
2380 0x32eb4ea600000000, 0xf234c06700000000, 0x7121fb4e00000000,
2381 0xb1fe758f00000000, 0xb098971600000000, 0x704719d700000000,
2382 0xb6b3e14400000000, 0x766c6f8500000000, 0x770a8d1c00000000,
2383 0xb7d503dd00000000, 0x34c038f400000000, 0xf41fb63500000000,
2384 0xf57954ac00000000, 0x35a6da6d00000000, 0x9f35e17700000000,
2385 0x5fea6fb600000000, 0x5e8c8d2f00000000, 0x9e5303ee00000000,
2386 0x1d4638c700000000, 0xdd99b60600000000, 0xdcff549f00000000,
2387 0x1c20da5e00000000, 0xdad422cd00000000, 0x1a0bac0c00000000,
2388 0x1b6d4e9500000000, 0xdbb2c05400000000, 0x58a7fb7d00000000,
2389 0x987875bc00000000, 0x991e972500000000, 0x59c119e400000000,
2390 0x54f117d900000000, 0x942e991800000000, 0x95487b8100000000,
2391 0x5597f54000000000, 0xd682ce6900000000, 0x165d40a800000000,
2392 0x173ba23100000000, 0xd7e42cf000000000, 0x1110d46300000000,
2393 0xd1cf5aa200000000, 0xd0a9b83b00000000, 0x107636fa00000000,
2394 0x93630dd300000000, 0x53bc831200000000, 0x52da618b00000000,
2395 0x9205ef4a00000000, 0x48ba7df100000000, 0x8865f33000000000,
2396 0x890311a900000000, 0x49dc9f6800000000, 0xcac9a44100000000,
2397 0x0a162a8000000000, 0x0b70c81900000000, 0xcbaf46d800000000,
2398 0x0d5bbe4b00000000, 0xcd84308a00000000, 0xcce2d21300000000,
2399 0x0c3d5cd200000000, 0x8f2867fb00000000, 0x4ff7e93a00000000,
2400 0x4e910ba300000000, 0x8e4e856200000000, 0x837e8b5f00000000,
2401 0x43a1059e00000000, 0x42c7e70700000000, 0x821869c600000000,
2402 0x010d52ef00000000, 0xc1d2dc2e00000000, 0xc0b43eb700000000,
2403 0x006bb07600000000, 0xc69f48e500000000, 0x0640c62400000000,
2404 0x072624bd00000000, 0xc7f9aa7c00000000, 0x44ec915500000000,
2405 0x84331f9400000000, 0x8555fd0d00000000, 0x458a73cc00000000,
2406 0x702ca9a100000000, 0xb0f3276000000000, 0xb195c5f900000000,
2407 0x714a4b3800000000, 0xf25f701100000000, 0x3280fed000000000,
2408 0x33e61c4900000000, 0xf339928800000000, 0x35cd6a1b00000000,
2409 0xf512e4da00000000, 0xf474064300000000, 0x34ab888200000000,
2410 0xb7beb3ab00000000, 0x77613d6a00000000, 0x7607dff300000000,
2411 0xb6d8513200000000, 0xbbe85f0f00000000, 0x7b37d1ce00000000,
2412 0x7a51335700000000, 0xba8ebd9600000000, 0x399b86bf00000000,
2413 0xf944087e00000000, 0xf822eae700000000, 0x38fd642600000000,
2414 0xfe099cb500000000, 0x3ed6127400000000, 0x3fb0f0ed00000000,
2415 0xff6f7e2c00000000, 0x7c7a450500000000, 0xbca5cbc400000000,
2416 0xbdc3295d00000000, 0x7d1ca79c00000000, 0xa7a3352700000000,
2417 0x677cbbe600000000, 0x661a597f00000000, 0xa6c5d7be00000000,
2418 0x25d0ec9700000000, 0xe50f625600000000, 0xe46980cf00000000,
2419 0x24b60e0e00000000, 0xe242f69d00000000, 0x229d785c00000000,
2420 0x23fb9ac500000000, 0xe324140400000000, 0x60312f2d00000000,
2421 0xa0eea1ec00000000, 0xa188437500000000, 0x6157cdb400000000,
2422 0x6c67c38900000000, 0xacb84d4800000000, 0xaddeafd100000000,
2423 0x6d01211000000000, 0xee141a3900000000, 0x2ecb94f800000000,
2424 0x2fad766100000000, 0xef72f8a000000000, 0x2986003300000000,
2425 0xe9598ef200000000, 0xe83f6c6b00000000, 0x28e0e2aa00000000,
2426 0xabf5d98300000000, 0x6b2a574200000000, 0x6a4cb5db00000000,
2427 0xaa933b1a00000000},
2428 {0x0000000000000000, 0x6f4ca59b00000000, 0x9f9e3bec00000000,
2429 0xf0d29e7700000000, 0x7f3b060300000000, 0x1077a39800000000,
2430 0xe0a53def00000000, 0x8fe9987400000000, 0xfe760c0600000000,
2431 0x913aa99d00000000, 0x61e837ea00000000, 0x0ea4927100000000,
2432 0x814d0a0500000000, 0xee01af9e00000000, 0x1ed331e900000000,
2433 0x719f947200000000, 0xfced180c00000000, 0x93a1bd9700000000,
2434 0x637323e000000000, 0x0c3f867b00000000, 0x83d61e0f00000000,
2435 0xec9abb9400000000, 0x1c4825e300000000, 0x7304807800000000,
2436 0x029b140a00000000, 0x6dd7b19100000000, 0x9d052fe600000000,
2437 0xf2498a7d00000000, 0x7da0120900000000, 0x12ecb79200000000,
2438 0xe23e29e500000000, 0x8d728c7e00000000, 0xf8db311800000000,
2439 0x9797948300000000, 0x67450af400000000, 0x0809af6f00000000,
2440 0x87e0371b00000000, 0xe8ac928000000000, 0x187e0cf700000000,
2441 0x7732a96c00000000, 0x06ad3d1e00000000, 0x69e1988500000000,
2442 0x993306f200000000, 0xf67fa36900000000, 0x79963b1d00000000,
2443 0x16da9e8600000000, 0xe60800f100000000, 0x8944a56a00000000,
2444 0x0436291400000000, 0x6b7a8c8f00000000, 0x9ba812f800000000,
2445 0xf4e4b76300000000, 0x7b0d2f1700000000, 0x14418a8c00000000,
2446 0xe49314fb00000000, 0x8bdfb16000000000, 0xfa40251200000000,
2447 0x950c808900000000, 0x65de1efe00000000, 0x0a92bb6500000000,
2448 0x857b231100000000, 0xea37868a00000000, 0x1ae518fd00000000,
2449 0x75a9bd6600000000, 0xf0b7633000000000, 0x9ffbc6ab00000000,
2450 0x6f2958dc00000000, 0x0065fd4700000000, 0x8f8c653300000000,
2451 0xe0c0c0a800000000, 0x10125edf00000000, 0x7f5efb4400000000,
2452 0x0ec16f3600000000, 0x618dcaad00000000, 0x915f54da00000000,
2453 0xfe13f14100000000, 0x71fa693500000000, 0x1eb6ccae00000000,
2454 0xee6452d900000000, 0x8128f74200000000, 0x0c5a7b3c00000000,
2455 0x6316dea700000000, 0x93c440d000000000, 0xfc88e54b00000000,
2456 0x73617d3f00000000, 0x1c2dd8a400000000, 0xecff46d300000000,
2457 0x83b3e34800000000, 0xf22c773a00000000, 0x9d60d2a100000000,
2458 0x6db24cd600000000, 0x02fee94d00000000, 0x8d17713900000000,
2459 0xe25bd4a200000000, 0x12894ad500000000, 0x7dc5ef4e00000000,
2460 0x086c522800000000, 0x6720f7b300000000, 0x97f269c400000000,
2461 0xf8becc5f00000000, 0x7757542b00000000, 0x181bf1b000000000,
2462 0xe8c96fc700000000, 0x8785ca5c00000000, 0xf61a5e2e00000000,
2463 0x9956fbb500000000, 0x698465c200000000, 0x06c8c05900000000,
2464 0x8921582d00000000, 0xe66dfdb600000000, 0x16bf63c100000000,
2465 0x79f3c65a00000000, 0xf4814a2400000000, 0x9bcdefbf00000000,
2466 0x6b1f71c800000000, 0x0453d45300000000, 0x8bba4c2700000000,
2467 0xe4f6e9bc00000000, 0x142477cb00000000, 0x7b68d25000000000,
2468 0x0af7462200000000, 0x65bbe3b900000000, 0x95697dce00000000,
2469 0xfa25d85500000000, 0x75cc402100000000, 0x1a80e5ba00000000,
2470 0xea527bcd00000000, 0x851ede5600000000, 0xe06fc76000000000,
2471 0x8f2362fb00000000, 0x7ff1fc8c00000000, 0x10bd591700000000,
2472 0x9f54c16300000000, 0xf01864f800000000, 0x00cafa8f00000000,
2473 0x6f865f1400000000, 0x1e19cb6600000000, 0x71556efd00000000,
2474 0x8187f08a00000000, 0xeecb551100000000, 0x6122cd6500000000,
2475 0x0e6e68fe00000000, 0xfebcf68900000000, 0x91f0531200000000,
2476 0x1c82df6c00000000, 0x73ce7af700000000, 0x831ce48000000000,
2477 0xec50411b00000000, 0x63b9d96f00000000, 0x0cf57cf400000000,
2478 0xfc27e28300000000, 0x936b471800000000, 0xe2f4d36a00000000,
2479 0x8db876f100000000, 0x7d6ae88600000000, 0x12264d1d00000000,
2480 0x9dcfd56900000000, 0xf28370f200000000, 0x0251ee8500000000,
2481 0x6d1d4b1e00000000, 0x18b4f67800000000, 0x77f853e300000000,
2482 0x872acd9400000000, 0xe866680f00000000, 0x678ff07b00000000,
2483 0x08c355e000000000, 0xf811cb9700000000, 0x975d6e0c00000000,
2484 0xe6c2fa7e00000000, 0x898e5fe500000000, 0x795cc19200000000,
2485 0x1610640900000000, 0x99f9fc7d00000000, 0xf6b559e600000000,
2486 0x0667c79100000000, 0x692b620a00000000, 0xe459ee7400000000,
2487 0x8b154bef00000000, 0x7bc7d59800000000, 0x148b700300000000,
2488 0x9b62e87700000000, 0xf42e4dec00000000, 0x04fcd39b00000000,
2489 0x6bb0760000000000, 0x1a2fe27200000000, 0x756347e900000000,
2490 0x85b1d99e00000000, 0xeafd7c0500000000, 0x6514e47100000000,
2491 0x0a5841ea00000000, 0xfa8adf9d00000000, 0x95c67a0600000000,
2492 0x10d8a45000000000, 0x7f9401cb00000000, 0x8f469fbc00000000,
2493 0xe00a3a2700000000, 0x6fe3a25300000000, 0x00af07c800000000,
2494 0xf07d99bf00000000, 0x9f313c2400000000, 0xeeaea85600000000,
2495 0x81e20dcd00000000, 0x713093ba00000000, 0x1e7c362100000000,
2496 0x9195ae5500000000, 0xfed90bce00000000, 0x0e0b95b900000000,
2497 0x6147302200000000, 0xec35bc5c00000000, 0x837919c700000000,
2498 0x73ab87b000000000, 0x1ce7222b00000000, 0x930eba5f00000000,
2499 0xfc421fc400000000, 0x0c9081b300000000, 0x63dc242800000000,
2500 0x1243b05a00000000, 0x7d0f15c100000000, 0x8ddd8bb600000000,
2501 0xe2912e2d00000000, 0x6d78b65900000000, 0x023413c200000000,
2502 0xf2e68db500000000, 0x9daa282e00000000, 0xe803954800000000,
2503 0x874f30d300000000, 0x779daea400000000, 0x18d10b3f00000000,
2504 0x9738934b00000000, 0xf87436d000000000, 0x08a6a8a700000000,
2505 0x67ea0d3c00000000, 0x1675994e00000000, 0x79393cd500000000,
2506 0x89eba2a200000000, 0xe6a7073900000000, 0x694e9f4d00000000,
2507 0x06023ad600000000, 0xf6d0a4a100000000, 0x999c013a00000000,
2508 0x14ee8d4400000000, 0x7ba228df00000000, 0x8b70b6a800000000,
2509 0xe43c133300000000, 0x6bd58b4700000000, 0x04992edc00000000,
2510 0xf44bb0ab00000000, 0x9b07153000000000, 0xea98814200000000,
2511 0x85d424d900000000, 0x7506baae00000000, 0x1a4a1f3500000000,
2512 0x95a3874100000000, 0xfaef22da00000000, 0x0a3dbcad00000000,
2513 0x6571193600000000},
2514 {0x0000000000000000, 0x85d996dd00000000, 0x4bb55c6000000000,
2515 0xce6ccabd00000000, 0x966ab9c000000000, 0x13b32f1d00000000,
2516 0xdddfe5a000000000, 0x5806737d00000000, 0x6dd3035a00000000,
2517 0xe80a958700000000, 0x26665f3a00000000, 0xa3bfc9e700000000,
2518 0xfbb9ba9a00000000, 0x7e602c4700000000, 0xb00ce6fa00000000,
2519 0x35d5702700000000, 0xdaa607b400000000, 0x5f7f916900000000,
2520 0x91135bd400000000, 0x14cacd0900000000, 0x4cccbe7400000000,
2521 0xc91528a900000000, 0x0779e21400000000, 0x82a074c900000000,
2522 0xb77504ee00000000, 0x32ac923300000000, 0xfcc0588e00000000,
2523 0x7919ce5300000000, 0x211fbd2e00000000, 0xa4c62bf300000000,
2524 0x6aaae14e00000000, 0xef73779300000000, 0xf54b7eb300000000,
2525 0x7092e86e00000000, 0xbefe22d300000000, 0x3b27b40e00000000,
2526 0x6321c77300000000, 0xe6f851ae00000000, 0x28949b1300000000,
2527 0xad4d0dce00000000, 0x98987de900000000, 0x1d41eb3400000000,
2528 0xd32d218900000000, 0x56f4b75400000000, 0x0ef2c42900000000,
2529 0x8b2b52f400000000, 0x4547984900000000, 0xc09e0e9400000000,
2530 0x2fed790700000000, 0xaa34efda00000000, 0x6458256700000000,
2531 0xe181b3ba00000000, 0xb987c0c700000000, 0x3c5e561a00000000,
2532 0xf2329ca700000000, 0x77eb0a7a00000000, 0x423e7a5d00000000,
2533 0xc7e7ec8000000000, 0x098b263d00000000, 0x8c52b0e000000000,
2534 0xd454c39d00000000, 0x518d554000000000, 0x9fe19ffd00000000,
2535 0x1a38092000000000, 0xab918dbd00000000, 0x2e481b6000000000,
2536 0xe024d1dd00000000, 0x65fd470000000000, 0x3dfb347d00000000,
2537 0xb822a2a000000000, 0x764e681d00000000, 0xf397fec000000000,
2538 0xc6428ee700000000, 0x439b183a00000000, 0x8df7d28700000000,
2539 0x082e445a00000000, 0x5028372700000000, 0xd5f1a1fa00000000,
2540 0x1b9d6b4700000000, 0x9e44fd9a00000000, 0x71378a0900000000,
2541 0xf4ee1cd400000000, 0x3a82d66900000000, 0xbf5b40b400000000,
2542 0xe75d33c900000000, 0x6284a51400000000, 0xace86fa900000000,
2543 0x2931f97400000000, 0x1ce4895300000000, 0x993d1f8e00000000,
2544 0x5751d53300000000, 0xd28843ee00000000, 0x8a8e309300000000,
2545 0x0f57a64e00000000, 0xc13b6cf300000000, 0x44e2fa2e00000000,
2546 0x5edaf30e00000000, 0xdb0365d300000000, 0x156faf6e00000000,
2547 0x90b639b300000000, 0xc8b04ace00000000, 0x4d69dc1300000000,
2548 0x830516ae00000000, 0x06dc807300000000, 0x3309f05400000000,
2549 0xb6d0668900000000, 0x78bcac3400000000, 0xfd653ae900000000,
2550 0xa563499400000000, 0x20badf4900000000, 0xeed615f400000000,
2551 0x6b0f832900000000, 0x847cf4ba00000000, 0x01a5626700000000,
2552 0xcfc9a8da00000000, 0x4a103e0700000000, 0x12164d7a00000000,
2553 0x97cfdba700000000, 0x59a3111a00000000, 0xdc7a87c700000000,
2554 0xe9aff7e000000000, 0x6c76613d00000000, 0xa21aab8000000000,
2555 0x27c33d5d00000000, 0x7fc54e2000000000, 0xfa1cd8fd00000000,
2556 0x3470124000000000, 0xb1a9849d00000000, 0x17256aa000000000,
2557 0x92fcfc7d00000000, 0x5c9036c000000000, 0xd949a01d00000000,
2558 0x814fd36000000000, 0x049645bd00000000, 0xcafa8f0000000000,
2559 0x4f2319dd00000000, 0x7af669fa00000000, 0xff2fff2700000000,
2560 0x3143359a00000000, 0xb49aa34700000000, 0xec9cd03a00000000,
2561 0x694546e700000000, 0xa7298c5a00000000, 0x22f01a8700000000,
2562 0xcd836d1400000000, 0x485afbc900000000, 0x8636317400000000,
2563 0x03efa7a900000000, 0x5be9d4d400000000, 0xde30420900000000,
2564 0x105c88b400000000, 0x95851e6900000000, 0xa0506e4e00000000,
2565 0x2589f89300000000, 0xebe5322e00000000, 0x6e3ca4f300000000,
2566 0x363ad78e00000000, 0xb3e3415300000000, 0x7d8f8bee00000000,
2567 0xf8561d3300000000, 0xe26e141300000000, 0x67b782ce00000000,
2568 0xa9db487300000000, 0x2c02deae00000000, 0x7404add300000000,
2569 0xf1dd3b0e00000000, 0x3fb1f1b300000000, 0xba68676e00000000,
2570 0x8fbd174900000000, 0x0a64819400000000, 0xc4084b2900000000,
2571 0x41d1ddf400000000, 0x19d7ae8900000000, 0x9c0e385400000000,
2572 0x5262f2e900000000, 0xd7bb643400000000, 0x38c813a700000000,
2573 0xbd11857a00000000, 0x737d4fc700000000, 0xf6a4d91a00000000,
2574 0xaea2aa6700000000, 0x2b7b3cba00000000, 0xe517f60700000000,
2575 0x60ce60da00000000, 0x551b10fd00000000, 0xd0c2862000000000,
2576 0x1eae4c9d00000000, 0x9b77da4000000000, 0xc371a93d00000000,
2577 0x46a83fe000000000, 0x88c4f55d00000000, 0x0d1d638000000000,
2578 0xbcb4e71d00000000, 0x396d71c000000000, 0xf701bb7d00000000,
2579 0x72d82da000000000, 0x2ade5edd00000000, 0xaf07c80000000000,
2580 0x616b02bd00000000, 0xe4b2946000000000, 0xd167e44700000000,
2581 0x54be729a00000000, 0x9ad2b82700000000, 0x1f0b2efa00000000,
2582 0x470d5d8700000000, 0xc2d4cb5a00000000, 0x0cb801e700000000,
2583 0x8961973a00000000, 0x6612e0a900000000, 0xe3cb767400000000,
2584 0x2da7bcc900000000, 0xa87e2a1400000000, 0xf078596900000000,
2585 0x75a1cfb400000000, 0xbbcd050900000000, 0x3e1493d400000000,
2586 0x0bc1e3f300000000, 0x8e18752e00000000, 0x4074bf9300000000,
2587 0xc5ad294e00000000, 0x9dab5a3300000000, 0x1872ccee00000000,
2588 0xd61e065300000000, 0x53c7908e00000000, 0x49ff99ae00000000,
2589 0xcc260f7300000000, 0x024ac5ce00000000, 0x8793531300000000,
2590 0xdf95206e00000000, 0x5a4cb6b300000000, 0x94207c0e00000000,
2591 0x11f9ead300000000, 0x242c9af400000000, 0xa1f50c2900000000,
2592 0x6f99c69400000000, 0xea40504900000000, 0xb246233400000000,
2593 0x379fb5e900000000, 0xf9f37f5400000000, 0x7c2ae98900000000,
2594 0x93599e1a00000000, 0x168008c700000000, 0xd8ecc27a00000000,
2595 0x5d3554a700000000, 0x053327da00000000, 0x80eab10700000000,
2596 0x4e867bba00000000, 0xcb5fed6700000000, 0xfe8a9d4000000000,
2597 0x7b530b9d00000000, 0xb53fc12000000000, 0x30e657fd00000000,
2598 0x68e0248000000000, 0xed39b25d00000000, 0x235578e000000000,
2599 0xa68cee3d00000000},
2600 {0x0000000000000000, 0x76e10f9d00000000, 0xadc46ee100000000,
2601 0xdb25617c00000000, 0x1b8fac1900000000, 0x6d6ea38400000000,
2602 0xb64bc2f800000000, 0xc0aacd6500000000, 0x361e593300000000,
2603 0x40ff56ae00000000, 0x9bda37d200000000, 0xed3b384f00000000,
2604 0x2d91f52a00000000, 0x5b70fab700000000, 0x80559bcb00000000,
2605 0xf6b4945600000000, 0x6c3cb26600000000, 0x1addbdfb00000000,
2606 0xc1f8dc8700000000, 0xb719d31a00000000, 0x77b31e7f00000000,
2607 0x015211e200000000, 0xda77709e00000000, 0xac967f0300000000,
2608 0x5a22eb5500000000, 0x2cc3e4c800000000, 0xf7e685b400000000,
2609 0x81078a2900000000, 0x41ad474c00000000, 0x374c48d100000000,
2610 0xec6929ad00000000, 0x9a88263000000000, 0xd87864cd00000000,
2611 0xae996b5000000000, 0x75bc0a2c00000000, 0x035d05b100000000,
2612 0xc3f7c8d400000000, 0xb516c74900000000, 0x6e33a63500000000,
2613 0x18d2a9a800000000, 0xee663dfe00000000, 0x9887326300000000,
2614 0x43a2531f00000000, 0x35435c8200000000, 0xf5e991e700000000,
2615 0x83089e7a00000000, 0x582dff0600000000, 0x2eccf09b00000000,
2616 0xb444d6ab00000000, 0xc2a5d93600000000, 0x1980b84a00000000,
2617 0x6f61b7d700000000, 0xafcb7ab200000000, 0xd92a752f00000000,
2618 0x020f145300000000, 0x74ee1bce00000000, 0x825a8f9800000000,
2619 0xf4bb800500000000, 0x2f9ee17900000000, 0x597feee400000000,
2620 0x99d5238100000000, 0xef342c1c00000000, 0x34114d6000000000,
2621 0x42f042fd00000000, 0xf1f7b94100000000, 0x8716b6dc00000000,
2622 0x5c33d7a000000000, 0x2ad2d83d00000000, 0xea78155800000000,
2623 0x9c991ac500000000, 0x47bc7bb900000000, 0x315d742400000000,
2624 0xc7e9e07200000000, 0xb108efef00000000, 0x6a2d8e9300000000,
2625 0x1ccc810e00000000, 0xdc664c6b00000000, 0xaa8743f600000000,
2626 0x71a2228a00000000, 0x07432d1700000000, 0x9dcb0b2700000000,
2627 0xeb2a04ba00000000, 0x300f65c600000000, 0x46ee6a5b00000000,
2628 0x8644a73e00000000, 0xf0a5a8a300000000, 0x2b80c9df00000000,
2629 0x5d61c64200000000, 0xabd5521400000000, 0xdd345d8900000000,
2630 0x06113cf500000000, 0x70f0336800000000, 0xb05afe0d00000000,
2631 0xc6bbf19000000000, 0x1d9e90ec00000000, 0x6b7f9f7100000000,
2632 0x298fdd8c00000000, 0x5f6ed21100000000, 0x844bb36d00000000,
2633 0xf2aabcf000000000, 0x3200719500000000, 0x44e17e0800000000,
2634 0x9fc41f7400000000, 0xe92510e900000000, 0x1f9184bf00000000,
2635 0x69708b2200000000, 0xb255ea5e00000000, 0xc4b4e5c300000000,
2636 0x041e28a600000000, 0x72ff273b00000000, 0xa9da464700000000,
2637 0xdf3b49da00000000, 0x45b36fea00000000, 0x3352607700000000,
2638 0xe877010b00000000, 0x9e960e9600000000, 0x5e3cc3f300000000,
2639 0x28ddcc6e00000000, 0xf3f8ad1200000000, 0x8519a28f00000000,
2640 0x73ad36d900000000, 0x054c394400000000, 0xde69583800000000,
2641 0xa88857a500000000, 0x68229ac000000000, 0x1ec3955d00000000,
2642 0xc5e6f42100000000, 0xb307fbbc00000000, 0xe2ef738300000000,
2643 0x940e7c1e00000000, 0x4f2b1d6200000000, 0x39ca12ff00000000,
2644 0xf960df9a00000000, 0x8f81d00700000000, 0x54a4b17b00000000,
2645 0x2245bee600000000, 0xd4f12ab000000000, 0xa210252d00000000,
2646 0x7935445100000000, 0x0fd44bcc00000000, 0xcf7e86a900000000,
2647 0xb99f893400000000, 0x62bae84800000000, 0x145be7d500000000,
2648 0x8ed3c1e500000000, 0xf832ce7800000000, 0x2317af0400000000,
2649 0x55f6a09900000000, 0x955c6dfc00000000, 0xe3bd626100000000,
2650 0x3898031d00000000, 0x4e790c8000000000, 0xb8cd98d600000000,
2651 0xce2c974b00000000, 0x1509f63700000000, 0x63e8f9aa00000000,
2652 0xa34234cf00000000, 0xd5a33b5200000000, 0x0e865a2e00000000,
2653 0x786755b300000000, 0x3a97174e00000000, 0x4c7618d300000000,
2654 0x975379af00000000, 0xe1b2763200000000, 0x2118bb5700000000,
2655 0x57f9b4ca00000000, 0x8cdcd5b600000000, 0xfa3dda2b00000000,
2656 0x0c894e7d00000000, 0x7a6841e000000000, 0xa14d209c00000000,
2657 0xd7ac2f0100000000, 0x1706e26400000000, 0x61e7edf900000000,
2658 0xbac28c8500000000, 0xcc23831800000000, 0x56aba52800000000,
2659 0x204aaab500000000, 0xfb6fcbc900000000, 0x8d8ec45400000000,
2660 0x4d24093100000000, 0x3bc506ac00000000, 0xe0e067d000000000,
2661 0x9601684d00000000, 0x60b5fc1b00000000, 0x1654f38600000000,
2662 0xcd7192fa00000000, 0xbb909d6700000000, 0x7b3a500200000000,
2663 0x0ddb5f9f00000000, 0xd6fe3ee300000000, 0xa01f317e00000000,
2664 0x1318cac200000000, 0x65f9c55f00000000, 0xbedca42300000000,
2665 0xc83dabbe00000000, 0x089766db00000000, 0x7e76694600000000,
2666 0xa553083a00000000, 0xd3b207a700000000, 0x250693f100000000,
2667 0x53e79c6c00000000, 0x88c2fd1000000000, 0xfe23f28d00000000,
2668 0x3e893fe800000000, 0x4868307500000000, 0x934d510900000000,
2669 0xe5ac5e9400000000, 0x7f2478a400000000, 0x09c5773900000000,
2670 0xd2e0164500000000, 0xa40119d800000000, 0x64abd4bd00000000,
2671 0x124adb2000000000, 0xc96fba5c00000000, 0xbf8eb5c100000000,
2672 0x493a219700000000, 0x3fdb2e0a00000000, 0xe4fe4f7600000000,
2673 0x921f40eb00000000, 0x52b58d8e00000000, 0x2454821300000000,
2674 0xff71e36f00000000, 0x8990ecf200000000, 0xcb60ae0f00000000,
2675 0xbd81a19200000000, 0x66a4c0ee00000000, 0x1045cf7300000000,
2676 0xd0ef021600000000, 0xa60e0d8b00000000, 0x7d2b6cf700000000,
2677 0x0bca636a00000000, 0xfd7ef73c00000000, 0x8b9ff8a100000000,
2678 0x50ba99dd00000000, 0x265b964000000000, 0xe6f15b2500000000,
2679 0x901054b800000000, 0x4b3535c400000000, 0x3dd43a5900000000,
2680 0xa75c1c6900000000, 0xd1bd13f400000000, 0x0a98728800000000,
2681 0x7c797d1500000000, 0xbcd3b07000000000, 0xca32bfed00000000,
2682 0x1117de9100000000, 0x67f6d10c00000000, 0x9142455a00000000,
2683 0xe7a34ac700000000, 0x3c862bbb00000000, 0x4a67242600000000,
2684 0x8acde94300000000, 0xfc2ce6de00000000, 0x270987a200000000,
2685 0x51e8883f00000000},
2686 {0x0000000000000000, 0xe8dbfbb900000000, 0x91b186a800000000,
2687 0x796a7d1100000000, 0x63657c8a00000000, 0x8bbe873300000000,
2688 0xf2d4fa2200000000, 0x1a0f019b00000000, 0x87cc89cf00000000,
2689 0x6f17727600000000, 0x167d0f6700000000, 0xfea6f4de00000000,
2690 0xe4a9f54500000000, 0x0c720efc00000000, 0x751873ed00000000,
2691 0x9dc3885400000000, 0x4f9f624400000000, 0xa74499fd00000000,
2692 0xde2ee4ec00000000, 0x36f51f5500000000, 0x2cfa1ece00000000,
2693 0xc421e57700000000, 0xbd4b986600000000, 0x559063df00000000,
2694 0xc853eb8b00000000, 0x2088103200000000, 0x59e26d2300000000,
2695 0xb139969a00000000, 0xab36970100000000, 0x43ed6cb800000000,
2696 0x3a8711a900000000, 0xd25cea1000000000, 0x9e3ec58800000000,
2697 0x76e53e3100000000, 0x0f8f432000000000, 0xe754b89900000000,
2698 0xfd5bb90200000000, 0x158042bb00000000, 0x6cea3faa00000000,
2699 0x8431c41300000000, 0x19f24c4700000000, 0xf129b7fe00000000,
2700 0x8843caef00000000, 0x6098315600000000, 0x7a9730cd00000000,
2701 0x924ccb7400000000, 0xeb26b66500000000, 0x03fd4ddc00000000,
2702 0xd1a1a7cc00000000, 0x397a5c7500000000, 0x4010216400000000,
2703 0xa8cbdadd00000000, 0xb2c4db4600000000, 0x5a1f20ff00000000,
2704 0x23755dee00000000, 0xcbaea65700000000, 0x566d2e0300000000,
2705 0xbeb6d5ba00000000, 0xc7dca8ab00000000, 0x2f07531200000000,
2706 0x3508528900000000, 0xddd3a93000000000, 0xa4b9d42100000000,
2707 0x4c622f9800000000, 0x7d7bfbca00000000, 0x95a0007300000000,
2708 0xecca7d6200000000, 0x041186db00000000, 0x1e1e874000000000,
2709 0xf6c57cf900000000, 0x8faf01e800000000, 0x6774fa5100000000,
2710 0xfab7720500000000, 0x126c89bc00000000, 0x6b06f4ad00000000,
2711 0x83dd0f1400000000, 0x99d20e8f00000000, 0x7109f53600000000,
2712 0x0863882700000000, 0xe0b8739e00000000, 0x32e4998e00000000,
2713 0xda3f623700000000, 0xa3551f2600000000, 0x4b8ee49f00000000,
2714 0x5181e50400000000, 0xb95a1ebd00000000, 0xc03063ac00000000,
2715 0x28eb981500000000, 0xb528104100000000, 0x5df3ebf800000000,
2716 0x249996e900000000, 0xcc426d5000000000, 0xd64d6ccb00000000,
2717 0x3e96977200000000, 0x47fcea6300000000, 0xaf2711da00000000,
2718 0xe3453e4200000000, 0x0b9ec5fb00000000, 0x72f4b8ea00000000,
2719 0x9a2f435300000000, 0x802042c800000000, 0x68fbb97100000000,
2720 0x1191c46000000000, 0xf94a3fd900000000, 0x6489b78d00000000,
2721 0x8c524c3400000000, 0xf538312500000000, 0x1de3ca9c00000000,
2722 0x07eccb0700000000, 0xef3730be00000000, 0x965d4daf00000000,
2723 0x7e86b61600000000, 0xacda5c0600000000, 0x4401a7bf00000000,
2724 0x3d6bdaae00000000, 0xd5b0211700000000, 0xcfbf208c00000000,
2725 0x2764db3500000000, 0x5e0ea62400000000, 0xb6d55d9d00000000,
2726 0x2b16d5c900000000, 0xc3cd2e7000000000, 0xbaa7536100000000,
2727 0x527ca8d800000000, 0x4873a94300000000, 0xa0a852fa00000000,
2728 0xd9c22feb00000000, 0x3119d45200000000, 0xbbf0874e00000000,
2729 0x532b7cf700000000, 0x2a4101e600000000, 0xc29afa5f00000000,
2730 0xd895fbc400000000, 0x304e007d00000000, 0x49247d6c00000000,
2731 0xa1ff86d500000000, 0x3c3c0e8100000000, 0xd4e7f53800000000,
2732 0xad8d882900000000, 0x4556739000000000, 0x5f59720b00000000,
2733 0xb78289b200000000, 0xcee8f4a300000000, 0x26330f1a00000000,
2734 0xf46fe50a00000000, 0x1cb41eb300000000, 0x65de63a200000000,
2735 0x8d05981b00000000, 0x970a998000000000, 0x7fd1623900000000,
2736 0x06bb1f2800000000, 0xee60e49100000000, 0x73a36cc500000000,
2737 0x9b78977c00000000, 0xe212ea6d00000000, 0x0ac911d400000000,
2738 0x10c6104f00000000, 0xf81debf600000000, 0x817796e700000000,
2739 0x69ac6d5e00000000, 0x25ce42c600000000, 0xcd15b97f00000000,
2740 0xb47fc46e00000000, 0x5ca43fd700000000, 0x46ab3e4c00000000,
2741 0xae70c5f500000000, 0xd71ab8e400000000, 0x3fc1435d00000000,
2742 0xa202cb0900000000, 0x4ad930b000000000, 0x33b34da100000000,
2743 0xdb68b61800000000, 0xc167b78300000000, 0x29bc4c3a00000000,
2744 0x50d6312b00000000, 0xb80dca9200000000, 0x6a51208200000000,
2745 0x828adb3b00000000, 0xfbe0a62a00000000, 0x133b5d9300000000,
2746 0x09345c0800000000, 0xe1efa7b100000000, 0x9885daa000000000,
2747 0x705e211900000000, 0xed9da94d00000000, 0x054652f400000000,
2748 0x7c2c2fe500000000, 0x94f7d45c00000000, 0x8ef8d5c700000000,
2749 0x66232e7e00000000, 0x1f49536f00000000, 0xf792a8d600000000,
2750 0xc68b7c8400000000, 0x2e50873d00000000, 0x573afa2c00000000,
2751 0xbfe1019500000000, 0xa5ee000e00000000, 0x4d35fbb700000000,
2752 0x345f86a600000000, 0xdc847d1f00000000, 0x4147f54b00000000,
2753 0xa99c0ef200000000, 0xd0f673e300000000, 0x382d885a00000000,
2754 0x222289c100000000, 0xcaf9727800000000, 0xb3930f6900000000,
2755 0x5b48f4d000000000, 0x89141ec000000000, 0x61cfe57900000000,
2756 0x18a5986800000000, 0xf07e63d100000000, 0xea71624a00000000,
2757 0x02aa99f300000000, 0x7bc0e4e200000000, 0x931b1f5b00000000,
2758 0x0ed8970f00000000, 0xe6036cb600000000, 0x9f6911a700000000,
2759 0x77b2ea1e00000000, 0x6dbdeb8500000000, 0x8566103c00000000,
2760 0xfc0c6d2d00000000, 0x14d7969400000000, 0x58b5b90c00000000,
2761 0xb06e42b500000000, 0xc9043fa400000000, 0x21dfc41d00000000,
2762 0x3bd0c58600000000, 0xd30b3e3f00000000, 0xaa61432e00000000,
2763 0x42bab89700000000, 0xdf7930c300000000, 0x37a2cb7a00000000,
2764 0x4ec8b66b00000000, 0xa6134dd200000000, 0xbc1c4c4900000000,
2765 0x54c7b7f000000000, 0x2dadcae100000000, 0xc576315800000000,
2766 0x172adb4800000000, 0xfff120f100000000, 0x869b5de000000000,
2767 0x6e40a65900000000, 0x744fa7c200000000, 0x9c945c7b00000000,
2768 0xe5fe216a00000000, 0x0d25dad300000000, 0x90e6528700000000,
2769 0x783da93e00000000, 0x0157d42f00000000, 0xe98c2f9600000000,
2770 0xf3832e0d00000000, 0x1b58d5b400000000, 0x6232a8a500000000,
2771 0x8ae9531c00000000},
2772 {0x0000000000000000, 0x919168ae00000000, 0x6325a08700000000,
2773 0xf2b4c82900000000, 0x874c31d400000000, 0x16dd597a00000000,
2774 0xe469915300000000, 0x75f8f9fd00000000, 0x4f9f137300000000,
2775 0xde0e7bdd00000000, 0x2cbab3f400000000, 0xbd2bdb5a00000000,
2776 0xc8d322a700000000, 0x59424a0900000000, 0xabf6822000000000,
2777 0x3a67ea8e00000000, 0x9e3e27e600000000, 0x0faf4f4800000000,
2778 0xfd1b876100000000, 0x6c8aefcf00000000, 0x1972163200000000,
2779 0x88e37e9c00000000, 0x7a57b6b500000000, 0xebc6de1b00000000,
2780 0xd1a1349500000000, 0x40305c3b00000000, 0xb284941200000000,
2781 0x2315fcbc00000000, 0x56ed054100000000, 0xc77c6def00000000,
2782 0x35c8a5c600000000, 0xa459cd6800000000, 0x7d7b3f1700000000,
2783 0xecea57b900000000, 0x1e5e9f9000000000, 0x8fcff73e00000000,
2784 0xfa370ec300000000, 0x6ba6666d00000000, 0x9912ae4400000000,
2785 0x0883c6ea00000000, 0x32e42c6400000000, 0xa37544ca00000000,
2786 0x51c18ce300000000, 0xc050e44d00000000, 0xb5a81db000000000,
2787 0x2439751e00000000, 0xd68dbd3700000000, 0x471cd59900000000,
2788 0xe34518f100000000, 0x72d4705f00000000, 0x8060b87600000000,
2789 0x11f1d0d800000000, 0x6409292500000000, 0xf598418b00000000,
2790 0x072c89a200000000, 0x96bde10c00000000, 0xacda0b8200000000,
2791 0x3d4b632c00000000, 0xcfffab0500000000, 0x5e6ec3ab00000000,
2792 0x2b963a5600000000, 0xba0752f800000000, 0x48b39ad100000000,
2793 0xd922f27f00000000, 0xfaf67e2e00000000, 0x6b67168000000000,
2794 0x99d3dea900000000, 0x0842b60700000000, 0x7dba4ffa00000000,
2795 0xec2b275400000000, 0x1e9fef7d00000000, 0x8f0e87d300000000,
2796 0xb5696d5d00000000, 0x24f805f300000000, 0xd64ccdda00000000,
2797 0x47dda57400000000, 0x32255c8900000000, 0xa3b4342700000000,
2798 0x5100fc0e00000000, 0xc09194a000000000, 0x64c859c800000000,
2799 0xf559316600000000, 0x07edf94f00000000, 0x967c91e100000000,
2800 0xe384681c00000000, 0x721500b200000000, 0x80a1c89b00000000,
2801 0x1130a03500000000, 0x2b574abb00000000, 0xbac6221500000000,
2802 0x4872ea3c00000000, 0xd9e3829200000000, 0xac1b7b6f00000000,
2803 0x3d8a13c100000000, 0xcf3edbe800000000, 0x5eafb34600000000,
2804 0x878d413900000000, 0x161c299700000000, 0xe4a8e1be00000000,
2805 0x7539891000000000, 0x00c170ed00000000, 0x9150184300000000,
2806 0x63e4d06a00000000, 0xf275b8c400000000, 0xc812524a00000000,
2807 0x59833ae400000000, 0xab37f2cd00000000, 0x3aa69a6300000000,
2808 0x4f5e639e00000000, 0xdecf0b3000000000, 0x2c7bc31900000000,
2809 0xbdeaabb700000000, 0x19b366df00000000, 0x88220e7100000000,
2810 0x7a96c65800000000, 0xeb07aef600000000, 0x9eff570b00000000,
2811 0x0f6e3fa500000000, 0xfddaf78c00000000, 0x6c4b9f2200000000,
2812 0x562c75ac00000000, 0xc7bd1d0200000000, 0x3509d52b00000000,
2813 0xa498bd8500000000, 0xd160447800000000, 0x40f12cd600000000,
2814 0xb245e4ff00000000, 0x23d48c5100000000, 0xf4edfd5c00000000,
2815 0x657c95f200000000, 0x97c85ddb00000000, 0x0659357500000000,
2816 0x73a1cc8800000000, 0xe230a42600000000, 0x10846c0f00000000,
2817 0x811504a100000000, 0xbb72ee2f00000000, 0x2ae3868100000000,
2818 0xd8574ea800000000, 0x49c6260600000000, 0x3c3edffb00000000,
2819 0xadafb75500000000, 0x5f1b7f7c00000000, 0xce8a17d200000000,
2820 0x6ad3daba00000000, 0xfb42b21400000000, 0x09f67a3d00000000,
2821 0x9867129300000000, 0xed9feb6e00000000, 0x7c0e83c000000000,
2822 0x8eba4be900000000, 0x1f2b234700000000, 0x254cc9c900000000,
2823 0xb4dda16700000000, 0x4669694e00000000, 0xd7f801e000000000,
2824 0xa200f81d00000000, 0x339190b300000000, 0xc125589a00000000,
2825 0x50b4303400000000, 0x8996c24b00000000, 0x1807aae500000000,
2826 0xeab362cc00000000, 0x7b220a6200000000, 0x0edaf39f00000000,
2827 0x9f4b9b3100000000, 0x6dff531800000000, 0xfc6e3bb600000000,
2828 0xc609d13800000000, 0x5798b99600000000, 0xa52c71bf00000000,
2829 0x34bd191100000000, 0x4145e0ec00000000, 0xd0d4884200000000,
2830 0x2260406b00000000, 0xb3f128c500000000, 0x17a8e5ad00000000,
2831 0x86398d0300000000, 0x748d452a00000000, 0xe51c2d8400000000,
2832 0x90e4d47900000000, 0x0175bcd700000000, 0xf3c174fe00000000,
2833 0x62501c5000000000, 0x5837f6de00000000, 0xc9a69e7000000000,
2834 0x3b12565900000000, 0xaa833ef700000000, 0xdf7bc70a00000000,
2835 0x4eeaafa400000000, 0xbc5e678d00000000, 0x2dcf0f2300000000,
2836 0x0e1b837200000000, 0x9f8aebdc00000000, 0x6d3e23f500000000,
2837 0xfcaf4b5b00000000, 0x8957b2a600000000, 0x18c6da0800000000,
2838 0xea72122100000000, 0x7be37a8f00000000, 0x4184900100000000,
2839 0xd015f8af00000000, 0x22a1308600000000, 0xb330582800000000,
2840 0xc6c8a1d500000000, 0x5759c97b00000000, 0xa5ed015200000000,
2841 0x347c69fc00000000, 0x9025a49400000000, 0x01b4cc3a00000000,
2842 0xf300041300000000, 0x62916cbd00000000, 0x1769954000000000,
2843 0x86f8fdee00000000, 0x744c35c700000000, 0xe5dd5d6900000000,
2844 0xdfbab7e700000000, 0x4e2bdf4900000000, 0xbc9f176000000000,
2845 0x2d0e7fce00000000, 0x58f6863300000000, 0xc967ee9d00000000,
2846 0x3bd326b400000000, 0xaa424e1a00000000, 0x7360bc6500000000,
2847 0xe2f1d4cb00000000, 0x10451ce200000000, 0x81d4744c00000000,
2848 0xf42c8db100000000, 0x65bde51f00000000, 0x97092d3600000000,
2849 0x0698459800000000, 0x3cffaf1600000000, 0xad6ec7b800000000,
2850 0x5fda0f9100000000, 0xce4b673f00000000, 0xbbb39ec200000000,
2851 0x2a22f66c00000000, 0xd8963e4500000000, 0x490756eb00000000,
2852 0xed5e9b8300000000, 0x7ccff32d00000000, 0x8e7b3b0400000000,
2853 0x1fea53aa00000000, 0x6a12aa5700000000, 0xfb83c2f900000000,
2854 0x09370ad000000000, 0x98a6627e00000000, 0xa2c188f000000000,
2855 0x3350e05e00000000, 0xc1e4287700000000, 0x507540d900000000,
2856 0x258db92400000000, 0xb41cd18a00000000, 0x46a819a300000000,
2857 0xd739710d00000000}};
2858
2859 #else /* W == 4 */
2860
2861 local const z_crc_t FAR crc_braid_table[][256] = {
2862 {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa,
2863 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b,
2864 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232,
2865 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8,
2866 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e,
2867 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa,
2868 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b,
2869 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f,
2870 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719,
2871 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3,
2872 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa,
2873 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b,
2874 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed,
2875 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89,
2876 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25,
2877 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041,
2878 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c,
2879 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed,
2880 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4,
2881 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758,
2882 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e,
2883 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a,
2884 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed,
2885 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889,
2886 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df,
2887 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544,
2888 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d,
2889 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c,
2890 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1,
2891 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95,
2892 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839,
2893 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d,
2894 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976,
2895 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7,
2896 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be,
2897 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144,
2898 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12,
2899 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376,
2900 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a,
2901 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e,
2902 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278,
2903 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682,
2904 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b,
2905 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a,
2906 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561,
2907 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05,
2908 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9,
2909 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd,
2910 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0,
2911 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61,
2912 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678,
2913 0x264b06e6},
2914 {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413,
2915 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3,
2916 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d,
2917 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653,
2918 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9,
2919 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e,
2920 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5,
2921 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712,
2922 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8,
2923 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6,
2924 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068,
2925 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8,
2926 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579,
2927 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade,
2928 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37,
2929 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590,
2930 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4,
2931 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64,
2932 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea,
2933 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678,
2934 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282,
2935 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25,
2936 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102,
2937 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5,
2938 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f,
2939 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146,
2940 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8,
2941 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08,
2942 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c,
2943 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b,
2944 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972,
2945 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5,
2946 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d,
2947 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd,
2948 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833,
2949 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d,
2950 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7,
2951 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60,
2952 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2,
2953 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105,
2954 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff,
2955 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1,
2956 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f,
2957 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf,
2958 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617,
2959 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0,
2960 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959,
2961 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe,
2962 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca,
2963 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a,
2964 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184,
2965 0x92364a30},
2966 {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216,
2967 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8,
2968 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170,
2969 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035,
2970 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6,
2971 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145,
2972 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d,
2973 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e,
2974 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d,
2975 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408,
2976 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0,
2977 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e,
2978 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c,
2979 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf,
2980 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a,
2981 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9,
2982 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1,
2983 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f,
2984 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987,
2985 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4,
2986 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37,
2987 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84,
2988 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca,
2989 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79,
2990 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba,
2991 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d,
2992 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5,
2993 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b,
2994 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643,
2995 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0,
2996 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525,
2997 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496,
2998 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8,
2999 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026,
3000 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e,
3001 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db,
3002 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118,
3003 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab,
3004 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf,
3005 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c,
3006 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf,
3007 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a,
3008 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32,
3009 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec,
3010 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82,
3011 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31,
3012 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4,
3013 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957,
3014 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f,
3015 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1,
3016 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869,
3017 0xe4c4abcc},
3018 {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0,
3019 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271,
3020 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61,
3021 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52,
3022 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43,
3023 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333,
3024 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64,
3025 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314,
3026 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205,
3027 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136,
3028 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26,
3029 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997,
3030 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849,
3031 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739,
3032 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8,
3033 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98,
3034 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b,
3035 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba,
3036 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa,
3037 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d,
3038 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c,
3039 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc,
3040 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af,
3041 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf,
3042 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce,
3043 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922,
3044 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532,
3045 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183,
3046 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710,
3047 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860,
3048 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1,
3049 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1,
3050 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956,
3051 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7,
3052 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7,
3053 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4,
3054 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5,
3055 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5,
3056 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb,
3057 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb,
3058 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da,
3059 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9,
3060 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9,
3061 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48,
3062 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df,
3063 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af,
3064 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e,
3065 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e,
3066 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d,
3067 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c,
3068 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c,
3069 0xca64c78c}};
3070
3071 local const z_word_t FAR crc_braid_big_table[][256] = {
3072 {0x00000000, 0xb029603d, 0x6053c07a, 0xd07aa047, 0xc0a680f5,
3073 0x708fe0c8, 0xa0f5408f, 0x10dc20b2, 0xc14b7030, 0x7162100d,
3074 0xa118b04a, 0x1131d077, 0x01edf0c5, 0xb1c490f8, 0x61be30bf,
3075 0xd1975082, 0x8297e060, 0x32be805d, 0xe2c4201a, 0x52ed4027,
3076 0x42316095, 0xf21800a8, 0x2262a0ef, 0x924bc0d2, 0x43dc9050,
3077 0xf3f5f06d, 0x238f502a, 0x93a63017, 0x837a10a5, 0x33537098,
3078 0xe329d0df, 0x5300b0e2, 0x042fc1c1, 0xb406a1fc, 0x647c01bb,
3079 0xd4556186, 0xc4894134, 0x74a02109, 0xa4da814e, 0x14f3e173,
3080 0xc564b1f1, 0x754dd1cc, 0xa537718b, 0x151e11b6, 0x05c23104,
3081 0xb5eb5139, 0x6591f17e, 0xd5b89143, 0x86b821a1, 0x3691419c,
3082 0xe6ebe1db, 0x56c281e6, 0x461ea154, 0xf637c169, 0x264d612e,
3083 0x96640113, 0x47f35191, 0xf7da31ac, 0x27a091eb, 0x9789f1d6,
3084 0x8755d164, 0x377cb159, 0xe706111e, 0x572f7123, 0x4958f358,
3085 0xf9719365, 0x290b3322, 0x9922531f, 0x89fe73ad, 0x39d71390,
3086 0xe9adb3d7, 0x5984d3ea, 0x88138368, 0x383ae355, 0xe8404312,
3087 0x5869232f, 0x48b5039d, 0xf89c63a0, 0x28e6c3e7, 0x98cfa3da,
3088 0xcbcf1338, 0x7be67305, 0xab9cd342, 0x1bb5b37f, 0x0b6993cd,
3089 0xbb40f3f0, 0x6b3a53b7, 0xdb13338a, 0x0a846308, 0xbaad0335,
3090 0x6ad7a372, 0xdafec34f, 0xca22e3fd, 0x7a0b83c0, 0xaa712387,
3091 0x1a5843ba, 0x4d773299, 0xfd5e52a4, 0x2d24f2e3, 0x9d0d92de,
3092 0x8dd1b26c, 0x3df8d251, 0xed827216, 0x5dab122b, 0x8c3c42a9,
3093 0x3c152294, 0xec6f82d3, 0x5c46e2ee, 0x4c9ac25c, 0xfcb3a261,
3094 0x2cc90226, 0x9ce0621b, 0xcfe0d2f9, 0x7fc9b2c4, 0xafb31283,
3095 0x1f9a72be, 0x0f46520c, 0xbf6f3231, 0x6f159276, 0xdf3cf24b,
3096 0x0eaba2c9, 0xbe82c2f4, 0x6ef862b3, 0xded1028e, 0xce0d223c,
3097 0x7e244201, 0xae5ee246, 0x1e77827b, 0x92b0e6b1, 0x2299868c,
3098 0xf2e326cb, 0x42ca46f6, 0x52166644, 0xe23f0679, 0x3245a63e,
3099 0x826cc603, 0x53fb9681, 0xe3d2f6bc, 0x33a856fb, 0x838136c6,
3100 0x935d1674, 0x23747649, 0xf30ed60e, 0x4327b633, 0x102706d1,
3101 0xa00e66ec, 0x7074c6ab, 0xc05da696, 0xd0818624, 0x60a8e619,
3102 0xb0d2465e, 0x00fb2663, 0xd16c76e1, 0x614516dc, 0xb13fb69b,
3103 0x0116d6a6, 0x11caf614, 0xa1e39629, 0x7199366e, 0xc1b05653,
3104 0x969f2770, 0x26b6474d, 0xf6cce70a, 0x46e58737, 0x5639a785,
3105 0xe610c7b8, 0x366a67ff, 0x864307c2, 0x57d45740, 0xe7fd377d,
3106 0x3787973a, 0x87aef707, 0x9772d7b5, 0x275bb788, 0xf72117cf,
3107 0x470877f2, 0x1408c710, 0xa421a72d, 0x745b076a, 0xc4726757,
3108 0xd4ae47e5, 0x648727d8, 0xb4fd879f, 0x04d4e7a2, 0xd543b720,
3109 0x656ad71d, 0xb510775a, 0x05391767, 0x15e537d5, 0xa5cc57e8,
3110 0x75b6f7af, 0xc59f9792, 0xdbe815e9, 0x6bc175d4, 0xbbbbd593,
3111 0x0b92b5ae, 0x1b4e951c, 0xab67f521, 0x7b1d5566, 0xcb34355b,
3112 0x1aa365d9, 0xaa8a05e4, 0x7af0a5a3, 0xcad9c59e, 0xda05e52c,
3113 0x6a2c8511, 0xba562556, 0x0a7f456b, 0x597ff589, 0xe95695b4,
3114 0x392c35f3, 0x890555ce, 0x99d9757c, 0x29f01541, 0xf98ab506,
3115 0x49a3d53b, 0x983485b9, 0x281de584, 0xf86745c3, 0x484e25fe,
3116 0x5892054c, 0xe8bb6571, 0x38c1c536, 0x88e8a50b, 0xdfc7d428,
3117 0x6feeb415, 0xbf941452, 0x0fbd746f, 0x1f6154dd, 0xaf4834e0,
3118 0x7f3294a7, 0xcf1bf49a, 0x1e8ca418, 0xaea5c425, 0x7edf6462,
3119 0xcef6045f, 0xde2a24ed, 0x6e0344d0, 0xbe79e497, 0x0e5084aa,
3120 0x5d503448, 0xed795475, 0x3d03f432, 0x8d2a940f, 0x9df6b4bd,
3121 0x2ddfd480, 0xfda574c7, 0x4d8c14fa, 0x9c1b4478, 0x2c322445,
3122 0xfc488402, 0x4c61e43f, 0x5cbdc48d, 0xec94a4b0, 0x3cee04f7,
3123 0x8cc764ca},
3124 {0x00000000, 0xa5d35ccb, 0x0ba1c84d, 0xae729486, 0x1642919b,
3125 0xb391cd50, 0x1de359d6, 0xb830051d, 0x6d8253ec, 0xc8510f27,
3126 0x66239ba1, 0xc3f0c76a, 0x7bc0c277, 0xde139ebc, 0x70610a3a,
3127 0xd5b256f1, 0x9b02d603, 0x3ed18ac8, 0x90a31e4e, 0x35704285,
3128 0x8d404798, 0x28931b53, 0x86e18fd5, 0x2332d31e, 0xf68085ef,
3129 0x5353d924, 0xfd214da2, 0x58f21169, 0xe0c21474, 0x451148bf,
3130 0xeb63dc39, 0x4eb080f2, 0x3605ac07, 0x93d6f0cc, 0x3da4644a,
3131 0x98773881, 0x20473d9c, 0x85946157, 0x2be6f5d1, 0x8e35a91a,
3132 0x5b87ffeb, 0xfe54a320, 0x502637a6, 0xf5f56b6d, 0x4dc56e70,
3133 0xe81632bb, 0x4664a63d, 0xe3b7faf6, 0xad077a04, 0x08d426cf,
3134 0xa6a6b249, 0x0375ee82, 0xbb45eb9f, 0x1e96b754, 0xb0e423d2,
3135 0x15377f19, 0xc08529e8, 0x65567523, 0xcb24e1a5, 0x6ef7bd6e,
3136 0xd6c7b873, 0x7314e4b8, 0xdd66703e, 0x78b52cf5, 0x6c0a580f,
3137 0xc9d904c4, 0x67ab9042, 0xc278cc89, 0x7a48c994, 0xdf9b955f,
3138 0x71e901d9, 0xd43a5d12, 0x01880be3, 0xa45b5728, 0x0a29c3ae,
3139 0xaffa9f65, 0x17ca9a78, 0xb219c6b3, 0x1c6b5235, 0xb9b80efe,
3140 0xf7088e0c, 0x52dbd2c7, 0xfca94641, 0x597a1a8a, 0xe14a1f97,
3141 0x4499435c, 0xeaebd7da, 0x4f388b11, 0x9a8adde0, 0x3f59812b,
3142 0x912b15ad, 0x34f84966, 0x8cc84c7b, 0x291b10b0, 0x87698436,
3143 0x22bad8fd, 0x5a0ff408, 0xffdca8c3, 0x51ae3c45, 0xf47d608e,
3144 0x4c4d6593, 0xe99e3958, 0x47ecadde, 0xe23ff115, 0x378da7e4,
3145 0x925efb2f, 0x3c2c6fa9, 0x99ff3362, 0x21cf367f, 0x841c6ab4,
3146 0x2a6efe32, 0x8fbda2f9, 0xc10d220b, 0x64de7ec0, 0xcaacea46,
3147 0x6f7fb68d, 0xd74fb390, 0x729cef5b, 0xdcee7bdd, 0x793d2716,
3148 0xac8f71e7, 0x095c2d2c, 0xa72eb9aa, 0x02fde561, 0xbacde07c,
3149 0x1f1ebcb7, 0xb16c2831, 0x14bf74fa, 0xd814b01e, 0x7dc7ecd5,
3150 0xd3b57853, 0x76662498, 0xce562185, 0x6b857d4e, 0xc5f7e9c8,
3151 0x6024b503, 0xb596e3f2, 0x1045bf39, 0xbe372bbf, 0x1be47774,
3152 0xa3d47269, 0x06072ea2, 0xa875ba24, 0x0da6e6ef, 0x4316661d,
3153 0xe6c53ad6, 0x48b7ae50, 0xed64f29b, 0x5554f786, 0xf087ab4d,
3154 0x5ef53fcb, 0xfb266300, 0x2e9435f1, 0x8b47693a, 0x2535fdbc,
3155 0x80e6a177, 0x38d6a46a, 0x9d05f8a1, 0x33776c27, 0x96a430ec,
3156 0xee111c19, 0x4bc240d2, 0xe5b0d454, 0x4063889f, 0xf8538d82,
3157 0x5d80d149, 0xf3f245cf, 0x56211904, 0x83934ff5, 0x2640133e,
3158 0x883287b8, 0x2de1db73, 0x95d1de6e, 0x300282a5, 0x9e701623,
3159 0x3ba34ae8, 0x7513ca1a, 0xd0c096d1, 0x7eb20257, 0xdb615e9c,
3160 0x63515b81, 0xc682074a, 0x68f093cc, 0xcd23cf07, 0x189199f6,
3161 0xbd42c53d, 0x133051bb, 0xb6e30d70, 0x0ed3086d, 0xab0054a6,
3162 0x0572c020, 0xa0a19ceb, 0xb41ee811, 0x11cdb4da, 0xbfbf205c,
3163 0x1a6c7c97, 0xa25c798a, 0x078f2541, 0xa9fdb1c7, 0x0c2eed0c,
3164 0xd99cbbfd, 0x7c4fe736, 0xd23d73b0, 0x77ee2f7b, 0xcfde2a66,
3165 0x6a0d76ad, 0xc47fe22b, 0x61acbee0, 0x2f1c3e12, 0x8acf62d9,
3166 0x24bdf65f, 0x816eaa94, 0x395eaf89, 0x9c8df342, 0x32ff67c4,
3167 0x972c3b0f, 0x429e6dfe, 0xe74d3135, 0x493fa5b3, 0xececf978,
3168 0x54dcfc65, 0xf10fa0ae, 0x5f7d3428, 0xfaae68e3, 0x821b4416,
3169 0x27c818dd, 0x89ba8c5b, 0x2c69d090, 0x9459d58d, 0x318a8946,
3170 0x9ff81dc0, 0x3a2b410b, 0xef9917fa, 0x4a4a4b31, 0xe438dfb7,
3171 0x41eb837c, 0xf9db8661, 0x5c08daaa, 0xf27a4e2c, 0x57a912e7,
3172 0x19199215, 0xbccacede, 0x12b85a58, 0xb76b0693, 0x0f5b038e,
3173 0xaa885f45, 0x04facbc3, 0xa1299708, 0x749bc1f9, 0xd1489d32,
3174 0x7f3a09b4, 0xdae9557f, 0x62d95062, 0xc70a0ca9, 0x6978982f,
3175 0xccabc4e4},
3176 {0x00000000, 0xb40b77a6, 0x29119f97, 0x9d1ae831, 0x13244ff4,
3177 0xa72f3852, 0x3a35d063, 0x8e3ea7c5, 0x674eef33, 0xd3459895,
3178 0x4e5f70a4, 0xfa540702, 0x746aa0c7, 0xc061d761, 0x5d7b3f50,
3179 0xe97048f6, 0xce9cde67, 0x7a97a9c1, 0xe78d41f0, 0x53863656,
3180 0xddb89193, 0x69b3e635, 0xf4a90e04, 0x40a279a2, 0xa9d23154,
3181 0x1dd946f2, 0x80c3aec3, 0x34c8d965, 0xbaf67ea0, 0x0efd0906,
3182 0x93e7e137, 0x27ec9691, 0x9c39bdcf, 0x2832ca69, 0xb5282258,
3183 0x012355fe, 0x8f1df23b, 0x3b16859d, 0xa60c6dac, 0x12071a0a,
3184 0xfb7752fc, 0x4f7c255a, 0xd266cd6b, 0x666dbacd, 0xe8531d08,
3185 0x5c586aae, 0xc142829f, 0x7549f539, 0x52a563a8, 0xe6ae140e,
3186 0x7bb4fc3f, 0xcfbf8b99, 0x41812c5c, 0xf58a5bfa, 0x6890b3cb,
3187 0xdc9bc46d, 0x35eb8c9b, 0x81e0fb3d, 0x1cfa130c, 0xa8f164aa,
3188 0x26cfc36f, 0x92c4b4c9, 0x0fde5cf8, 0xbbd52b5e, 0x79750b44,
3189 0xcd7e7ce2, 0x506494d3, 0xe46fe375, 0x6a5144b0, 0xde5a3316,
3190 0x4340db27, 0xf74bac81, 0x1e3be477, 0xaa3093d1, 0x372a7be0,
3191 0x83210c46, 0x0d1fab83, 0xb914dc25, 0x240e3414, 0x900543b2,
3192 0xb7e9d523, 0x03e2a285, 0x9ef84ab4, 0x2af33d12, 0xa4cd9ad7,
3193 0x10c6ed71, 0x8ddc0540, 0x39d772e6, 0xd0a73a10, 0x64ac4db6,
3194 0xf9b6a587, 0x4dbdd221, 0xc38375e4, 0x77880242, 0xea92ea73,
3195 0x5e999dd5, 0xe54cb68b, 0x5147c12d, 0xcc5d291c, 0x78565eba,
3196 0xf668f97f, 0x42638ed9, 0xdf7966e8, 0x6b72114e, 0x820259b8,
3197 0x36092e1e, 0xab13c62f, 0x1f18b189, 0x9126164c, 0x252d61ea,
3198 0xb83789db, 0x0c3cfe7d, 0x2bd068ec, 0x9fdb1f4a, 0x02c1f77b,
3199 0xb6ca80dd, 0x38f42718, 0x8cff50be, 0x11e5b88f, 0xa5eecf29,
3200 0x4c9e87df, 0xf895f079, 0x658f1848, 0xd1846fee, 0x5fbac82b,
3201 0xebb1bf8d, 0x76ab57bc, 0xc2a0201a, 0xf2ea1688, 0x46e1612e,
3202 0xdbfb891f, 0x6ff0feb9, 0xe1ce597c, 0x55c52eda, 0xc8dfc6eb,
3203 0x7cd4b14d, 0x95a4f9bb, 0x21af8e1d, 0xbcb5662c, 0x08be118a,
3204 0x8680b64f, 0x328bc1e9, 0xaf9129d8, 0x1b9a5e7e, 0x3c76c8ef,
3205 0x887dbf49, 0x15675778, 0xa16c20de, 0x2f52871b, 0x9b59f0bd,
3206 0x0643188c, 0xb2486f2a, 0x5b3827dc, 0xef33507a, 0x7229b84b,
3207 0xc622cfed, 0x481c6828, 0xfc171f8e, 0x610df7bf, 0xd5068019,
3208 0x6ed3ab47, 0xdad8dce1, 0x47c234d0, 0xf3c94376, 0x7df7e4b3,
3209 0xc9fc9315, 0x54e67b24, 0xe0ed0c82, 0x099d4474, 0xbd9633d2,
3210 0x208cdbe3, 0x9487ac45, 0x1ab90b80, 0xaeb27c26, 0x33a89417,
3211 0x87a3e3b1, 0xa04f7520, 0x14440286, 0x895eeab7, 0x3d559d11,
3212 0xb36b3ad4, 0x07604d72, 0x9a7aa543, 0x2e71d2e5, 0xc7019a13,
3213 0x730aedb5, 0xee100584, 0x5a1b7222, 0xd425d5e7, 0x602ea241,
3214 0xfd344a70, 0x493f3dd6, 0x8b9f1dcc, 0x3f946a6a, 0xa28e825b,
3215 0x1685f5fd, 0x98bb5238, 0x2cb0259e, 0xb1aacdaf, 0x05a1ba09,
3216 0xecd1f2ff, 0x58da8559, 0xc5c06d68, 0x71cb1ace, 0xfff5bd0b,
3217 0x4bfecaad, 0xd6e4229c, 0x62ef553a, 0x4503c3ab, 0xf108b40d,
3218 0x6c125c3c, 0xd8192b9a, 0x56278c5f, 0xe22cfbf9, 0x7f3613c8,
3219 0xcb3d646e, 0x224d2c98, 0x96465b3e, 0x0b5cb30f, 0xbf57c4a9,
3220 0x3169636c, 0x856214ca, 0x1878fcfb, 0xac738b5d, 0x17a6a003,
3221 0xa3add7a5, 0x3eb73f94, 0x8abc4832, 0x0482eff7, 0xb0899851,
3222 0x2d937060, 0x999807c6, 0x70e84f30, 0xc4e33896, 0x59f9d0a7,
3223 0xedf2a701, 0x63cc00c4, 0xd7c77762, 0x4add9f53, 0xfed6e8f5,
3224 0xd93a7e64, 0x6d3109c2, 0xf02be1f3, 0x44209655, 0xca1e3190,
3225 0x7e154636, 0xe30fae07, 0x5704d9a1, 0xbe749157, 0x0a7fe6f1,
3226 0x97650ec0, 0x236e7966, 0xad50dea3, 0x195ba905, 0x84414134,
3227 0x304a3692},
3228 {0x00000000, 0x9e00aacc, 0x7d072542, 0xe3078f8e, 0xfa0e4a84,
3229 0x640ee048, 0x87096fc6, 0x1909c50a, 0xb51be5d3, 0x2b1b4f1f,
3230 0xc81cc091, 0x561c6a5d, 0x4f15af57, 0xd115059b, 0x32128a15,
3231 0xac1220d9, 0x2b31bb7c, 0xb53111b0, 0x56369e3e, 0xc83634f2,
3232 0xd13ff1f8, 0x4f3f5b34, 0xac38d4ba, 0x32387e76, 0x9e2a5eaf,
3233 0x002af463, 0xe32d7bed, 0x7d2dd121, 0x6424142b, 0xfa24bee7,
3234 0x19233169, 0x87239ba5, 0x566276f9, 0xc862dc35, 0x2b6553bb,
3235 0xb565f977, 0xac6c3c7d, 0x326c96b1, 0xd16b193f, 0x4f6bb3f3,
3236 0xe379932a, 0x7d7939e6, 0x9e7eb668, 0x007e1ca4, 0x1977d9ae,
3237 0x87777362, 0x6470fcec, 0xfa705620, 0x7d53cd85, 0xe3536749,
3238 0x0054e8c7, 0x9e54420b, 0x875d8701, 0x195d2dcd, 0xfa5aa243,
3239 0x645a088f, 0xc8482856, 0x5648829a, 0xb54f0d14, 0x2b4fa7d8,
3240 0x324662d2, 0xac46c81e, 0x4f414790, 0xd141ed5c, 0xedc29d29,
3241 0x73c237e5, 0x90c5b86b, 0x0ec512a7, 0x17ccd7ad, 0x89cc7d61,
3242 0x6acbf2ef, 0xf4cb5823, 0x58d978fa, 0xc6d9d236, 0x25de5db8,
3243 0xbbdef774, 0xa2d7327e, 0x3cd798b2, 0xdfd0173c, 0x41d0bdf0,
3244 0xc6f32655, 0x58f38c99, 0xbbf40317, 0x25f4a9db, 0x3cfd6cd1,
3245 0xa2fdc61d, 0x41fa4993, 0xdffae35f, 0x73e8c386, 0xede8694a,
3246 0x0eefe6c4, 0x90ef4c08, 0x89e68902, 0x17e623ce, 0xf4e1ac40,
3247 0x6ae1068c, 0xbba0ebd0, 0x25a0411c, 0xc6a7ce92, 0x58a7645e,
3248 0x41aea154, 0xdfae0b98, 0x3ca98416, 0xa2a92eda, 0x0ebb0e03,
3249 0x90bba4cf, 0x73bc2b41, 0xedbc818d, 0xf4b54487, 0x6ab5ee4b,
3250 0x89b261c5, 0x17b2cb09, 0x909150ac, 0x0e91fa60, 0xed9675ee,
3251 0x7396df22, 0x6a9f1a28, 0xf49fb0e4, 0x17983f6a, 0x899895a6,
3252 0x258ab57f, 0xbb8a1fb3, 0x588d903d, 0xc68d3af1, 0xdf84fffb,
3253 0x41845537, 0xa283dab9, 0x3c837075, 0xda853b53, 0x4485919f,
3254 0xa7821e11, 0x3982b4dd, 0x208b71d7, 0xbe8bdb1b, 0x5d8c5495,
3255 0xc38cfe59, 0x6f9ede80, 0xf19e744c, 0x1299fbc2, 0x8c99510e,
3256 0x95909404, 0x0b903ec8, 0xe897b146, 0x76971b8a, 0xf1b4802f,
3257 0x6fb42ae3, 0x8cb3a56d, 0x12b30fa1, 0x0bbacaab, 0x95ba6067,
3258 0x76bdefe9, 0xe8bd4525, 0x44af65fc, 0xdaafcf30, 0x39a840be,
3259 0xa7a8ea72, 0xbea12f78, 0x20a185b4, 0xc3a60a3a, 0x5da6a0f6,
3260 0x8ce74daa, 0x12e7e766, 0xf1e068e8, 0x6fe0c224, 0x76e9072e,
3261 0xe8e9ade2, 0x0bee226c, 0x95ee88a0, 0x39fca879, 0xa7fc02b5,
3262 0x44fb8d3b, 0xdafb27f7, 0xc3f2e2fd, 0x5df24831, 0xbef5c7bf,
3263 0x20f56d73, 0xa7d6f6d6, 0x39d65c1a, 0xdad1d394, 0x44d17958,
3264 0x5dd8bc52, 0xc3d8169e, 0x20df9910, 0xbedf33dc, 0x12cd1305,
3265 0x8ccdb9c9, 0x6fca3647, 0xf1ca9c8b, 0xe8c35981, 0x76c3f34d,
3266 0x95c47cc3, 0x0bc4d60f, 0x3747a67a, 0xa9470cb6, 0x4a408338,
3267 0xd44029f4, 0xcd49ecfe, 0x53494632, 0xb04ec9bc, 0x2e4e6370,
3268 0x825c43a9, 0x1c5ce965, 0xff5b66eb, 0x615bcc27, 0x7852092d,
3269 0xe652a3e1, 0x05552c6f, 0x9b5586a3, 0x1c761d06, 0x8276b7ca,
3270 0x61713844, 0xff719288, 0xe6785782, 0x7878fd4e, 0x9b7f72c0,
3271 0x057fd80c, 0xa96df8d5, 0x376d5219, 0xd46add97, 0x4a6a775b,
3272 0x5363b251, 0xcd63189d, 0x2e649713, 0xb0643ddf, 0x6125d083,
3273 0xff257a4f, 0x1c22f5c1, 0x82225f0d, 0x9b2b9a07, 0x052b30cb,
3274 0xe62cbf45, 0x782c1589, 0xd43e3550, 0x4a3e9f9c, 0xa9391012,
3275 0x3739bade, 0x2e307fd4, 0xb030d518, 0x53375a96, 0xcd37f05a,
3276 0x4a146bff, 0xd414c133, 0x37134ebd, 0xa913e471, 0xb01a217b,
3277 0x2e1a8bb7, 0xcd1d0439, 0x531daef5, 0xff0f8e2c, 0x610f24e0,
3278 0x8208ab6e, 0x1c0801a2, 0x0501c4a8, 0x9b016e64, 0x7806e1ea,
3279 0xe6064b26}};
3280
3281 #endif
3282
3283 #endif
3284
3285 #if N == 3
3286
3287 #if W == 8
3288
3289 local const z_crc_t FAR crc_braid_table[][256] = {
3290 {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f,
3291 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999,
3292 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee,
3293 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615,
3294 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383,
3295 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb,
3296 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275,
3297 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d,
3298 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b,
3299 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460,
3300 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317,
3301 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1,
3302 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5,
3303 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd,
3304 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04,
3305 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c,
3306 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7,
3307 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11,
3308 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66,
3309 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7,
3310 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871,
3311 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309,
3312 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd,
3313 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85,
3314 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913,
3315 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d,
3316 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a,
3317 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc,
3318 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57,
3319 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f,
3320 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6,
3321 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e,
3322 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f,
3323 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289,
3324 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe,
3325 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05,
3326 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893,
3327 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb,
3328 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0,
3329 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8,
3330 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e,
3331 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5,
3332 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2,
3333 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574,
3334 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5,
3335 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add,
3336 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114,
3337 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c,
3338 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7,
3339 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701,
3340 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076,
3341 0x09cd8551},
3342 {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193,
3343 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2,
3344 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c,
3345 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71,
3346 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a,
3347 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d,
3348 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71,
3349 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436,
3350 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d,
3351 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000,
3352 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae,
3353 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf,
3354 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930,
3355 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277,
3356 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff,
3357 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8,
3358 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef,
3359 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e,
3360 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20,
3361 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95,
3362 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e,
3363 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9,
3364 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d,
3365 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a,
3366 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151,
3367 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4,
3368 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a,
3369 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b,
3370 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c,
3371 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b,
3372 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3,
3373 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4,
3374 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b,
3375 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a,
3376 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4,
3377 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189,
3378 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92,
3379 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5,
3380 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9,
3381 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe,
3382 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5,
3383 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8,
3384 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66,
3385 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707,
3386 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8,
3387 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f,
3388 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707,
3389 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40,
3390 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017,
3391 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876,
3392 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8,
3393 0x7bc97a0c},
3394 {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300,
3395 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0,
3396 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80,
3397 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701,
3398 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41,
3399 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81,
3400 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43,
3401 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83,
3402 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3,
3403 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42,
3404 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202,
3405 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2,
3406 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7,
3407 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407,
3408 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47,
3409 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87,
3410 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86,
3411 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46,
3412 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506,
3413 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44,
3414 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704,
3415 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4,
3416 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5,
3417 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505,
3418 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45,
3419 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f,
3420 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f,
3421 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f,
3422 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e,
3423 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e,
3424 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e,
3425 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce,
3426 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c,
3427 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc,
3428 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c,
3429 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d,
3430 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d,
3431 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d,
3432 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88,
3433 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48,
3434 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708,
3435 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89,
3436 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9,
3437 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309,
3438 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb,
3439 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b,
3440 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b,
3441 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b,
3442 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a,
3443 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a,
3444 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a,
3445 0x7851a2ca},
3446 {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb,
3447 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8,
3448 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0,
3449 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f,
3450 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a,
3451 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf,
3452 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5,
3453 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380,
3454 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815,
3455 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa,
3456 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2,
3457 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1,
3458 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1,
3459 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4,
3460 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa,
3461 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df,
3462 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6,
3463 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5,
3464 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad,
3465 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca,
3466 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f,
3467 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a,
3468 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8,
3469 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d,
3470 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708,
3471 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d,
3472 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865,
3473 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636,
3474 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f,
3475 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a,
3476 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744,
3477 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061,
3478 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0,
3479 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293,
3480 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb,
3481 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874,
3482 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1,
3483 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4,
3484 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f,
3485 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a,
3486 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f,
3487 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120,
3488 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778,
3489 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b,
3490 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a,
3491 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af,
3492 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81,
3493 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4,
3494 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd,
3495 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e,
3496 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6,
3497 0x566b6848},
3498 {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59,
3499 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4,
3500 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67,
3501 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef,
3502 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97,
3503 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88,
3504 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687,
3505 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698,
3506 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0,
3507 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068,
3508 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb,
3509 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056,
3510 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016,
3511 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009,
3512 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028,
3513 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037,
3514 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a,
3515 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7,
3516 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054,
3517 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7,
3518 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af,
3519 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0,
3520 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4,
3521 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab,
3522 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3,
3523 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a,
3524 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9,
3525 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54,
3526 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09,
3527 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16,
3528 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37,
3529 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28,
3530 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e,
3531 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3,
3532 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40,
3533 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8,
3534 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0,
3535 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf,
3536 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6,
3537 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9,
3538 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1,
3539 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059,
3540 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca,
3541 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067,
3542 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031,
3543 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e,
3544 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f,
3545 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010,
3546 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d,
3547 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0,
3548 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073,
3549 0xd8ac6b35},
3550 {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2,
3551 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd,
3552 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696,
3553 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3,
3554 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f,
3555 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35,
3556 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5,
3557 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f,
3558 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673,
3559 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46,
3560 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d,
3561 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632,
3562 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28,
3563 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192,
3564 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c,
3565 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6,
3566 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0,
3567 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff,
3568 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4,
3569 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95,
3570 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9,
3571 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03,
3572 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7,
3573 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d,
3574 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151,
3575 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808,
3576 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343,
3577 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c,
3578 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a,
3579 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0,
3580 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e,
3581 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594,
3582 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6,
3583 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399,
3584 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2,
3585 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7,
3586 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb,
3587 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571,
3588 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289,
3589 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33,
3590 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f,
3591 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a,
3592 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461,
3593 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e,
3594 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c,
3595 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6,
3596 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918,
3597 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2,
3598 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484,
3599 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb,
3600 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0,
3601 0xa140efa8},
3602 {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706,
3603 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed,
3604 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289,
3605 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a,
3606 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214,
3607 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3,
3608 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3,
3609 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254,
3610 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a,
3611 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9,
3612 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad,
3613 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746,
3614 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060,
3615 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187,
3616 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef,
3617 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408,
3618 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e,
3619 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495,
3620 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1,
3621 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532,
3622 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c,
3623 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb,
3624 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb,
3625 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c,
3626 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42,
3627 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060,
3628 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04,
3629 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef,
3630 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99,
3631 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e,
3632 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16,
3633 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1,
3634 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7,
3635 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c,
3636 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38,
3637 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb,
3638 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5,
3639 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42,
3640 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62,
3641 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85,
3642 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb,
3643 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18,
3644 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c,
3645 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997,
3646 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1,
3647 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36,
3648 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e,
3649 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9,
3650 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf,
3651 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24,
3652 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040,
3653 0x917cd6a1},
3654 {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf,
3655 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd,
3656 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896,
3657 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9,
3658 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3,
3659 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f,
3660 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d,
3661 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1,
3662 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab,
3663 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4,
3664 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f,
3665 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d,
3666 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4,
3667 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978,
3668 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad,
3669 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621,
3670 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46,
3671 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854,
3672 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f,
3673 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a,
3674 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890,
3675 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c,
3676 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4,
3677 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238,
3678 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622,
3679 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab,
3680 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0,
3681 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2,
3682 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295,
3683 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19,
3684 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc,
3685 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140,
3686 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd,
3687 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf,
3688 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184,
3689 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb,
3690 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1,
3691 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d,
3692 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb,
3693 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257,
3694 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d,
3695 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22,
3696 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069,
3697 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b,
3698 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6,
3699 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a,
3700 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf,
3701 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33,
3702 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254,
3703 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146,
3704 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d,
3705 0x18ba364e}};
3706
3707 local const z_word_t FAR crc_braid_big_table[][256] = {
3708 {0x0000000000000000, 0x43cba68700000000, 0xc7903cd400000000,
3709 0x845b9a5300000000, 0xcf27087300000000, 0x8cecaef400000000,
3710 0x08b734a700000000, 0x4b7c922000000000, 0x9e4f10e600000000,
3711 0xdd84b66100000000, 0x59df2c3200000000, 0x1a148ab500000000,
3712 0x5168189500000000, 0x12a3be1200000000, 0x96f8244100000000,
3713 0xd53382c600000000, 0x7d99511700000000, 0x3e52f79000000000,
3714 0xba096dc300000000, 0xf9c2cb4400000000, 0xb2be596400000000,
3715 0xf175ffe300000000, 0x752e65b000000000, 0x36e5c33700000000,
3716 0xe3d641f100000000, 0xa01de77600000000, 0x24467d2500000000,
3717 0x678ddba200000000, 0x2cf1498200000000, 0x6f3aef0500000000,
3718 0xeb61755600000000, 0xa8aad3d100000000, 0xfa32a32e00000000,
3719 0xb9f905a900000000, 0x3da29ffa00000000, 0x7e69397d00000000,
3720 0x3515ab5d00000000, 0x76de0dda00000000, 0xf285978900000000,
3721 0xb14e310e00000000, 0x647db3c800000000, 0x27b6154f00000000,
3722 0xa3ed8f1c00000000, 0xe026299b00000000, 0xab5abbbb00000000,
3723 0xe8911d3c00000000, 0x6cca876f00000000, 0x2f0121e800000000,
3724 0x87abf23900000000, 0xc46054be00000000, 0x403bceed00000000,
3725 0x03f0686a00000000, 0x488cfa4a00000000, 0x0b475ccd00000000,
3726 0x8f1cc69e00000000, 0xccd7601900000000, 0x19e4e2df00000000,
3727 0x5a2f445800000000, 0xde74de0b00000000, 0x9dbf788c00000000,
3728 0xd6c3eaac00000000, 0x95084c2b00000000, 0x1153d67800000000,
3729 0x529870ff00000000, 0xf465465d00000000, 0xb7aee0da00000000,
3730 0x33f57a8900000000, 0x703edc0e00000000, 0x3b424e2e00000000,
3731 0x7889e8a900000000, 0xfcd272fa00000000, 0xbf19d47d00000000,
3732 0x6a2a56bb00000000, 0x29e1f03c00000000, 0xadba6a6f00000000,
3733 0xee71cce800000000, 0xa50d5ec800000000, 0xe6c6f84f00000000,
3734 0x629d621c00000000, 0x2156c49b00000000, 0x89fc174a00000000,
3735 0xca37b1cd00000000, 0x4e6c2b9e00000000, 0x0da78d1900000000,
3736 0x46db1f3900000000, 0x0510b9be00000000, 0x814b23ed00000000,
3737 0xc280856a00000000, 0x17b307ac00000000, 0x5478a12b00000000,
3738 0xd0233b7800000000, 0x93e89dff00000000, 0xd8940fdf00000000,
3739 0x9b5fa95800000000, 0x1f04330b00000000, 0x5ccf958c00000000,
3740 0x0e57e57300000000, 0x4d9c43f400000000, 0xc9c7d9a700000000,
3741 0x8a0c7f2000000000, 0xc170ed0000000000, 0x82bb4b8700000000,
3742 0x06e0d1d400000000, 0x452b775300000000, 0x9018f59500000000,
3743 0xd3d3531200000000, 0x5788c94100000000, 0x14436fc600000000,
3744 0x5f3ffde600000000, 0x1cf45b6100000000, 0x98afc13200000000,
3745 0xdb6467b500000000, 0x73ceb46400000000, 0x300512e300000000,
3746 0xb45e88b000000000, 0xf7952e3700000000, 0xbce9bc1700000000,
3747 0xff221a9000000000, 0x7b7980c300000000, 0x38b2264400000000,
3748 0xed81a48200000000, 0xae4a020500000000, 0x2a11985600000000,
3749 0x69da3ed100000000, 0x22a6acf100000000, 0x616d0a7600000000,
3750 0xe536902500000000, 0xa6fd36a200000000, 0xe8cb8cba00000000,
3751 0xab002a3d00000000, 0x2f5bb06e00000000, 0x6c9016e900000000,
3752 0x27ec84c900000000, 0x6427224e00000000, 0xe07cb81d00000000,
3753 0xa3b71e9a00000000, 0x76849c5c00000000, 0x354f3adb00000000,
3754 0xb114a08800000000, 0xf2df060f00000000, 0xb9a3942f00000000,
3755 0xfa6832a800000000, 0x7e33a8fb00000000, 0x3df80e7c00000000,
3756 0x9552ddad00000000, 0xd6997b2a00000000, 0x52c2e17900000000,
3757 0x110947fe00000000, 0x5a75d5de00000000, 0x19be735900000000,
3758 0x9de5e90a00000000, 0xde2e4f8d00000000, 0x0b1dcd4b00000000,
3759 0x48d66bcc00000000, 0xcc8df19f00000000, 0x8f46571800000000,
3760 0xc43ac53800000000, 0x87f163bf00000000, 0x03aaf9ec00000000,
3761 0x40615f6b00000000, 0x12f92f9400000000, 0x5132891300000000,
3762 0xd569134000000000, 0x96a2b5c700000000, 0xddde27e700000000,
3763 0x9e15816000000000, 0x1a4e1b3300000000, 0x5985bdb400000000,
3764 0x8cb63f7200000000, 0xcf7d99f500000000, 0x4b2603a600000000,
3765 0x08eda52100000000, 0x4391370100000000, 0x005a918600000000,
3766 0x84010bd500000000, 0xc7caad5200000000, 0x6f607e8300000000,
3767 0x2cabd80400000000, 0xa8f0425700000000, 0xeb3be4d000000000,
3768 0xa04776f000000000, 0xe38cd07700000000, 0x67d74a2400000000,
3769 0x241ceca300000000, 0xf12f6e6500000000, 0xb2e4c8e200000000,
3770 0x36bf52b100000000, 0x7574f43600000000, 0x3e08661600000000,
3771 0x7dc3c09100000000, 0xf9985ac200000000, 0xba53fc4500000000,
3772 0x1caecae700000000, 0x5f656c6000000000, 0xdb3ef63300000000,
3773 0x98f550b400000000, 0xd389c29400000000, 0x9042641300000000,
3774 0x1419fe4000000000, 0x57d258c700000000, 0x82e1da0100000000,
3775 0xc12a7c8600000000, 0x4571e6d500000000, 0x06ba405200000000,
3776 0x4dc6d27200000000, 0x0e0d74f500000000, 0x8a56eea600000000,
3777 0xc99d482100000000, 0x61379bf000000000, 0x22fc3d7700000000,
3778 0xa6a7a72400000000, 0xe56c01a300000000, 0xae10938300000000,
3779 0xeddb350400000000, 0x6980af5700000000, 0x2a4b09d000000000,
3780 0xff788b1600000000, 0xbcb32d9100000000, 0x38e8b7c200000000,
3781 0x7b23114500000000, 0x305f836500000000, 0x739425e200000000,
3782 0xf7cfbfb100000000, 0xb404193600000000, 0xe69c69c900000000,
3783 0xa557cf4e00000000, 0x210c551d00000000, 0x62c7f39a00000000,
3784 0x29bb61ba00000000, 0x6a70c73d00000000, 0xee2b5d6e00000000,
3785 0xade0fbe900000000, 0x78d3792f00000000, 0x3b18dfa800000000,
3786 0xbf4345fb00000000, 0xfc88e37c00000000, 0xb7f4715c00000000,
3787 0xf43fd7db00000000, 0x70644d8800000000, 0x33afeb0f00000000,
3788 0x9b0538de00000000, 0xd8ce9e5900000000, 0x5c95040a00000000,
3789 0x1f5ea28d00000000, 0x542230ad00000000, 0x17e9962a00000000,
3790 0x93b20c7900000000, 0xd079aafe00000000, 0x054a283800000000,
3791 0x46818ebf00000000, 0xc2da14ec00000000, 0x8111b26b00000000,
3792 0xca6d204b00000000, 0x89a686cc00000000, 0x0dfd1c9f00000000,
3793 0x4e36ba1800000000},
3794 {0x0000000000000000, 0xe1b652ef00000000, 0x836bd40500000000,
3795 0x62dd86ea00000000, 0x06d7a80b00000000, 0xe761fae400000000,
3796 0x85bc7c0e00000000, 0x640a2ee100000000, 0x0cae511700000000,
3797 0xed1803f800000000, 0x8fc5851200000000, 0x6e73d7fd00000000,
3798 0x0a79f91c00000000, 0xebcfabf300000000, 0x89122d1900000000,
3799 0x68a47ff600000000, 0x185ca32e00000000, 0xf9eaf1c100000000,
3800 0x9b37772b00000000, 0x7a8125c400000000, 0x1e8b0b2500000000,
3801 0xff3d59ca00000000, 0x9de0df2000000000, 0x7c568dcf00000000,
3802 0x14f2f23900000000, 0xf544a0d600000000, 0x9799263c00000000,
3803 0x762f74d300000000, 0x12255a3200000000, 0xf39308dd00000000,
3804 0x914e8e3700000000, 0x70f8dcd800000000, 0x30b8465d00000000,
3805 0xd10e14b200000000, 0xb3d3925800000000, 0x5265c0b700000000,
3806 0x366fee5600000000, 0xd7d9bcb900000000, 0xb5043a5300000000,
3807 0x54b268bc00000000, 0x3c16174a00000000, 0xdda045a500000000,
3808 0xbf7dc34f00000000, 0x5ecb91a000000000, 0x3ac1bf4100000000,
3809 0xdb77edae00000000, 0xb9aa6b4400000000, 0x581c39ab00000000,
3810 0x28e4e57300000000, 0xc952b79c00000000, 0xab8f317600000000,
3811 0x4a39639900000000, 0x2e334d7800000000, 0xcf851f9700000000,
3812 0xad58997d00000000, 0x4ceecb9200000000, 0x244ab46400000000,
3813 0xc5fce68b00000000, 0xa721606100000000, 0x4697328e00000000,
3814 0x229d1c6f00000000, 0xc32b4e8000000000, 0xa1f6c86a00000000,
3815 0x40409a8500000000, 0x60708dba00000000, 0x81c6df5500000000,
3816 0xe31b59bf00000000, 0x02ad0b5000000000, 0x66a725b100000000,
3817 0x8711775e00000000, 0xe5ccf1b400000000, 0x047aa35b00000000,
3818 0x6cdedcad00000000, 0x8d688e4200000000, 0xefb508a800000000,
3819 0x0e035a4700000000, 0x6a0974a600000000, 0x8bbf264900000000,
3820 0xe962a0a300000000, 0x08d4f24c00000000, 0x782c2e9400000000,
3821 0x999a7c7b00000000, 0xfb47fa9100000000, 0x1af1a87e00000000,
3822 0x7efb869f00000000, 0x9f4dd47000000000, 0xfd90529a00000000,
3823 0x1c26007500000000, 0x74827f8300000000, 0x95342d6c00000000,
3824 0xf7e9ab8600000000, 0x165ff96900000000, 0x7255d78800000000,
3825 0x93e3856700000000, 0xf13e038d00000000, 0x1088516200000000,
3826 0x50c8cbe700000000, 0xb17e990800000000, 0xd3a31fe200000000,
3827 0x32154d0d00000000, 0x561f63ec00000000, 0xb7a9310300000000,
3828 0xd574b7e900000000, 0x34c2e50600000000, 0x5c669af000000000,
3829 0xbdd0c81f00000000, 0xdf0d4ef500000000, 0x3ebb1c1a00000000,
3830 0x5ab132fb00000000, 0xbb07601400000000, 0xd9dae6fe00000000,
3831 0x386cb41100000000, 0x489468c900000000, 0xa9223a2600000000,
3832 0xcbffbccc00000000, 0x2a49ee2300000000, 0x4e43c0c200000000,
3833 0xaff5922d00000000, 0xcd2814c700000000, 0x2c9e462800000000,
3834 0x443a39de00000000, 0xa58c6b3100000000, 0xc751eddb00000000,
3835 0x26e7bf3400000000, 0x42ed91d500000000, 0xa35bc33a00000000,
3836 0xc18645d000000000, 0x2030173f00000000, 0x81e66bae00000000,
3837 0x6050394100000000, 0x028dbfab00000000, 0xe33bed4400000000,
3838 0x8731c3a500000000, 0x6687914a00000000, 0x045a17a000000000,
3839 0xe5ec454f00000000, 0x8d483ab900000000, 0x6cfe685600000000,
3840 0x0e23eebc00000000, 0xef95bc5300000000, 0x8b9f92b200000000,
3841 0x6a29c05d00000000, 0x08f446b700000000, 0xe942145800000000,
3842 0x99bac88000000000, 0x780c9a6f00000000, 0x1ad11c8500000000,
3843 0xfb674e6a00000000, 0x9f6d608b00000000, 0x7edb326400000000,
3844 0x1c06b48e00000000, 0xfdb0e66100000000, 0x9514999700000000,
3845 0x74a2cb7800000000, 0x167f4d9200000000, 0xf7c91f7d00000000,
3846 0x93c3319c00000000, 0x7275637300000000, 0x10a8e59900000000,
3847 0xf11eb77600000000, 0xb15e2df300000000, 0x50e87f1c00000000,
3848 0x3235f9f600000000, 0xd383ab1900000000, 0xb78985f800000000,
3849 0x563fd71700000000, 0x34e251fd00000000, 0xd554031200000000,
3850 0xbdf07ce400000000, 0x5c462e0b00000000, 0x3e9ba8e100000000,
3851 0xdf2dfa0e00000000, 0xbb27d4ef00000000, 0x5a91860000000000,
3852 0x384c00ea00000000, 0xd9fa520500000000, 0xa9028edd00000000,
3853 0x48b4dc3200000000, 0x2a695ad800000000, 0xcbdf083700000000,
3854 0xafd526d600000000, 0x4e63743900000000, 0x2cbef2d300000000,
3855 0xcd08a03c00000000, 0xa5acdfca00000000, 0x441a8d2500000000,
3856 0x26c70bcf00000000, 0xc771592000000000, 0xa37b77c100000000,
3857 0x42cd252e00000000, 0x2010a3c400000000, 0xc1a6f12b00000000,
3858 0xe196e61400000000, 0x0020b4fb00000000, 0x62fd321100000000,
3859 0x834b60fe00000000, 0xe7414e1f00000000, 0x06f71cf000000000,
3860 0x642a9a1a00000000, 0x859cc8f500000000, 0xed38b70300000000,
3861 0x0c8ee5ec00000000, 0x6e53630600000000, 0x8fe531e900000000,
3862 0xebef1f0800000000, 0x0a594de700000000, 0x6884cb0d00000000,
3863 0x893299e200000000, 0xf9ca453a00000000, 0x187c17d500000000,
3864 0x7aa1913f00000000, 0x9b17c3d000000000, 0xff1ded3100000000,
3865 0x1eabbfde00000000, 0x7c76393400000000, 0x9dc06bdb00000000,
3866 0xf564142d00000000, 0x14d246c200000000, 0x760fc02800000000,
3867 0x97b992c700000000, 0xf3b3bc2600000000, 0x1205eec900000000,
3868 0x70d8682300000000, 0x916e3acc00000000, 0xd12ea04900000000,
3869 0x3098f2a600000000, 0x5245744c00000000, 0xb3f326a300000000,
3870 0xd7f9084200000000, 0x364f5aad00000000, 0x5492dc4700000000,
3871 0xb5248ea800000000, 0xdd80f15e00000000, 0x3c36a3b100000000,
3872 0x5eeb255b00000000, 0xbf5d77b400000000, 0xdb57595500000000,
3873 0x3ae10bba00000000, 0x583c8d5000000000, 0xb98adfbf00000000,
3874 0xc972036700000000, 0x28c4518800000000, 0x4a19d76200000000,
3875 0xabaf858d00000000, 0xcfa5ab6c00000000, 0x2e13f98300000000,
3876 0x4cce7f6900000000, 0xad782d8600000000, 0xc5dc527000000000,
3877 0x246a009f00000000, 0x46b7867500000000, 0xa701d49a00000000,
3878 0xc30bfa7b00000000, 0x22bda89400000000, 0x40602e7e00000000,
3879 0xa1d67c9100000000},
3880 {0x0000000000000000, 0x5880e2d700000000, 0xf106b47400000000,
3881 0xa98656a300000000, 0xe20d68e900000000, 0xba8d8a3e00000000,
3882 0x130bdc9d00000000, 0x4b8b3e4a00000000, 0x851da10900000000,
3883 0xdd9d43de00000000, 0x741b157d00000000, 0x2c9bf7aa00000000,
3884 0x6710c9e000000000, 0x3f902b3700000000, 0x96167d9400000000,
3885 0xce969f4300000000, 0x0a3b421300000000, 0x52bba0c400000000,
3886 0xfb3df66700000000, 0xa3bd14b000000000, 0xe8362afa00000000,
3887 0xb0b6c82d00000000, 0x19309e8e00000000, 0x41b07c5900000000,
3888 0x8f26e31a00000000, 0xd7a601cd00000000, 0x7e20576e00000000,
3889 0x26a0b5b900000000, 0x6d2b8bf300000000, 0x35ab692400000000,
3890 0x9c2d3f8700000000, 0xc4addd5000000000, 0x1476842600000000,
3891 0x4cf666f100000000, 0xe570305200000000, 0xbdf0d28500000000,
3892 0xf67beccf00000000, 0xaefb0e1800000000, 0x077d58bb00000000,
3893 0x5ffdba6c00000000, 0x916b252f00000000, 0xc9ebc7f800000000,
3894 0x606d915b00000000, 0x38ed738c00000000, 0x73664dc600000000,
3895 0x2be6af1100000000, 0x8260f9b200000000, 0xdae01b6500000000,
3896 0x1e4dc63500000000, 0x46cd24e200000000, 0xef4b724100000000,
3897 0xb7cb909600000000, 0xfc40aedc00000000, 0xa4c04c0b00000000,
3898 0x0d461aa800000000, 0x55c6f87f00000000, 0x9b50673c00000000,
3899 0xc3d085eb00000000, 0x6a56d34800000000, 0x32d6319f00000000,
3900 0x795d0fd500000000, 0x21dded0200000000, 0x885bbba100000000,
3901 0xd0db597600000000, 0x28ec084d00000000, 0x706cea9a00000000,
3902 0xd9eabc3900000000, 0x816a5eee00000000, 0xcae160a400000000,
3903 0x9261827300000000, 0x3be7d4d000000000, 0x6367360700000000,
3904 0xadf1a94400000000, 0xf5714b9300000000, 0x5cf71d3000000000,
3905 0x0477ffe700000000, 0x4ffcc1ad00000000, 0x177c237a00000000,
3906 0xbefa75d900000000, 0xe67a970e00000000, 0x22d74a5e00000000,
3907 0x7a57a88900000000, 0xd3d1fe2a00000000, 0x8b511cfd00000000,
3908 0xc0da22b700000000, 0x985ac06000000000, 0x31dc96c300000000,
3909 0x695c741400000000, 0xa7caeb5700000000, 0xff4a098000000000,
3910 0x56cc5f2300000000, 0x0e4cbdf400000000, 0x45c783be00000000,
3911 0x1d47616900000000, 0xb4c137ca00000000, 0xec41d51d00000000,
3912 0x3c9a8c6b00000000, 0x641a6ebc00000000, 0xcd9c381f00000000,
3913 0x951cdac800000000, 0xde97e48200000000, 0x8617065500000000,
3914 0x2f9150f600000000, 0x7711b22100000000, 0xb9872d6200000000,
3915 0xe107cfb500000000, 0x4881991600000000, 0x10017bc100000000,
3916 0x5b8a458b00000000, 0x030aa75c00000000, 0xaa8cf1ff00000000,
3917 0xf20c132800000000, 0x36a1ce7800000000, 0x6e212caf00000000,
3918 0xc7a77a0c00000000, 0x9f2798db00000000, 0xd4aca69100000000,
3919 0x8c2c444600000000, 0x25aa12e500000000, 0x7d2af03200000000,
3920 0xb3bc6f7100000000, 0xeb3c8da600000000, 0x42badb0500000000,
3921 0x1a3a39d200000000, 0x51b1079800000000, 0x0931e54f00000000,
3922 0xa0b7b3ec00000000, 0xf837513b00000000, 0x50d8119a00000000,
3923 0x0858f34d00000000, 0xa1dea5ee00000000, 0xf95e473900000000,
3924 0xb2d5797300000000, 0xea559ba400000000, 0x43d3cd0700000000,
3925 0x1b532fd000000000, 0xd5c5b09300000000, 0x8d45524400000000,
3926 0x24c304e700000000, 0x7c43e63000000000, 0x37c8d87a00000000,
3927 0x6f483aad00000000, 0xc6ce6c0e00000000, 0x9e4e8ed900000000,
3928 0x5ae3538900000000, 0x0263b15e00000000, 0xabe5e7fd00000000,
3929 0xf365052a00000000, 0xb8ee3b6000000000, 0xe06ed9b700000000,
3930 0x49e88f1400000000, 0x11686dc300000000, 0xdffef28000000000,
3931 0x877e105700000000, 0x2ef846f400000000, 0x7678a42300000000,
3932 0x3df39a6900000000, 0x657378be00000000, 0xccf52e1d00000000,
3933 0x9475ccca00000000, 0x44ae95bc00000000, 0x1c2e776b00000000,
3934 0xb5a821c800000000, 0xed28c31f00000000, 0xa6a3fd5500000000,
3935 0xfe231f8200000000, 0x57a5492100000000, 0x0f25abf600000000,
3936 0xc1b334b500000000, 0x9933d66200000000, 0x30b580c100000000,
3937 0x6835621600000000, 0x23be5c5c00000000, 0x7b3ebe8b00000000,
3938 0xd2b8e82800000000, 0x8a380aff00000000, 0x4e95d7af00000000,
3939 0x1615357800000000, 0xbf9363db00000000, 0xe713810c00000000,
3940 0xac98bf4600000000, 0xf4185d9100000000, 0x5d9e0b3200000000,
3941 0x051ee9e500000000, 0xcb8876a600000000, 0x9308947100000000,
3942 0x3a8ec2d200000000, 0x620e200500000000, 0x29851e4f00000000,
3943 0x7105fc9800000000, 0xd883aa3b00000000, 0x800348ec00000000,
3944 0x783419d700000000, 0x20b4fb0000000000, 0x8932ada300000000,
3945 0xd1b24f7400000000, 0x9a39713e00000000, 0xc2b993e900000000,
3946 0x6b3fc54a00000000, 0x33bf279d00000000, 0xfd29b8de00000000,
3947 0xa5a95a0900000000, 0x0c2f0caa00000000, 0x54afee7d00000000,
3948 0x1f24d03700000000, 0x47a432e000000000, 0xee22644300000000,
3949 0xb6a2869400000000, 0x720f5bc400000000, 0x2a8fb91300000000,
3950 0x8309efb000000000, 0xdb890d6700000000, 0x9002332d00000000,
3951 0xc882d1fa00000000, 0x6104875900000000, 0x3984658e00000000,
3952 0xf712facd00000000, 0xaf92181a00000000, 0x06144eb900000000,
3953 0x5e94ac6e00000000, 0x151f922400000000, 0x4d9f70f300000000,
3954 0xe419265000000000, 0xbc99c48700000000, 0x6c429df100000000,
3955 0x34c27f2600000000, 0x9d44298500000000, 0xc5c4cb5200000000,
3956 0x8e4ff51800000000, 0xd6cf17cf00000000, 0x7f49416c00000000,
3957 0x27c9a3bb00000000, 0xe95f3cf800000000, 0xb1dfde2f00000000,
3958 0x1859888c00000000, 0x40d96a5b00000000, 0x0b52541100000000,
3959 0x53d2b6c600000000, 0xfa54e06500000000, 0xa2d402b200000000,
3960 0x6679dfe200000000, 0x3ef93d3500000000, 0x977f6b9600000000,
3961 0xcfff894100000000, 0x8474b70b00000000, 0xdcf455dc00000000,
3962 0x7572037f00000000, 0x2df2e1a800000000, 0xe3647eeb00000000,
3963 0xbbe49c3c00000000, 0x1262ca9f00000000, 0x4ae2284800000000,
3964 0x0169160200000000, 0x59e9f4d500000000, 0xf06fa27600000000,
3965 0xa8ef40a100000000},
3966 {0x0000000000000000, 0x463b676500000000, 0x8c76ceca00000000,
3967 0xca4da9af00000000, 0x59ebed4e00000000, 0x1fd08a2b00000000,
3968 0xd59d238400000000, 0x93a644e100000000, 0xb2d6db9d00000000,
3969 0xf4edbcf800000000, 0x3ea0155700000000, 0x789b723200000000,
3970 0xeb3d36d300000000, 0xad0651b600000000, 0x674bf81900000000,
3971 0x21709f7c00000000, 0x25abc6e000000000, 0x6390a18500000000,
3972 0xa9dd082a00000000, 0xefe66f4f00000000, 0x7c402bae00000000,
3973 0x3a7b4ccb00000000, 0xf036e56400000000, 0xb60d820100000000,
3974 0x977d1d7d00000000, 0xd1467a1800000000, 0x1b0bd3b700000000,
3975 0x5d30b4d200000000, 0xce96f03300000000, 0x88ad975600000000,
3976 0x42e03ef900000000, 0x04db599c00000000, 0x0b50fc1a00000000,
3977 0x4d6b9b7f00000000, 0x872632d000000000, 0xc11d55b500000000,
3978 0x52bb115400000000, 0x1480763100000000, 0xdecddf9e00000000,
3979 0x98f6b8fb00000000, 0xb986278700000000, 0xffbd40e200000000,
3980 0x35f0e94d00000000, 0x73cb8e2800000000, 0xe06dcac900000000,
3981 0xa656adac00000000, 0x6c1b040300000000, 0x2a20636600000000,
3982 0x2efb3afa00000000, 0x68c05d9f00000000, 0xa28df43000000000,
3983 0xe4b6935500000000, 0x7710d7b400000000, 0x312bb0d100000000,
3984 0xfb66197e00000000, 0xbd5d7e1b00000000, 0x9c2de16700000000,
3985 0xda16860200000000, 0x105b2fad00000000, 0x566048c800000000,
3986 0xc5c60c2900000000, 0x83fd6b4c00000000, 0x49b0c2e300000000,
3987 0x0f8ba58600000000, 0x16a0f83500000000, 0x509b9f5000000000,
3988 0x9ad636ff00000000, 0xdced519a00000000, 0x4f4b157b00000000,
3989 0x0970721e00000000, 0xc33ddbb100000000, 0x8506bcd400000000,
3990 0xa47623a800000000, 0xe24d44cd00000000, 0x2800ed6200000000,
3991 0x6e3b8a0700000000, 0xfd9dcee600000000, 0xbba6a98300000000,
3992 0x71eb002c00000000, 0x37d0674900000000, 0x330b3ed500000000,
3993 0x753059b000000000, 0xbf7df01f00000000, 0xf946977a00000000,
3994 0x6ae0d39b00000000, 0x2cdbb4fe00000000, 0xe6961d5100000000,
3995 0xa0ad7a3400000000, 0x81dde54800000000, 0xc7e6822d00000000,
3996 0x0dab2b8200000000, 0x4b904ce700000000, 0xd836080600000000,
3997 0x9e0d6f6300000000, 0x5440c6cc00000000, 0x127ba1a900000000,
3998 0x1df0042f00000000, 0x5bcb634a00000000, 0x9186cae500000000,
3999 0xd7bdad8000000000, 0x441be96100000000, 0x02208e0400000000,
4000 0xc86d27ab00000000, 0x8e5640ce00000000, 0xaf26dfb200000000,
4001 0xe91db8d700000000, 0x2350117800000000, 0x656b761d00000000,
4002 0xf6cd32fc00000000, 0xb0f6559900000000, 0x7abbfc3600000000,
4003 0x3c809b5300000000, 0x385bc2cf00000000, 0x7e60a5aa00000000,
4004 0xb42d0c0500000000, 0xf2166b6000000000, 0x61b02f8100000000,
4005 0x278b48e400000000, 0xedc6e14b00000000, 0xabfd862e00000000,
4006 0x8a8d195200000000, 0xccb67e3700000000, 0x06fbd79800000000,
4007 0x40c0b0fd00000000, 0xd366f41c00000000, 0x955d937900000000,
4008 0x5f103ad600000000, 0x192b5db300000000, 0x2c40f16b00000000,
4009 0x6a7b960e00000000, 0xa0363fa100000000, 0xe60d58c400000000,
4010 0x75ab1c2500000000, 0x33907b4000000000, 0xf9ddd2ef00000000,
4011 0xbfe6b58a00000000, 0x9e962af600000000, 0xd8ad4d9300000000,
4012 0x12e0e43c00000000, 0x54db835900000000, 0xc77dc7b800000000,
4013 0x8146a0dd00000000, 0x4b0b097200000000, 0x0d306e1700000000,
4014 0x09eb378b00000000, 0x4fd050ee00000000, 0x859df94100000000,
4015 0xc3a69e2400000000, 0x5000dac500000000, 0x163bbda000000000,
4016 0xdc76140f00000000, 0x9a4d736a00000000, 0xbb3dec1600000000,
4017 0xfd068b7300000000, 0x374b22dc00000000, 0x717045b900000000,
4018 0xe2d6015800000000, 0xa4ed663d00000000, 0x6ea0cf9200000000,
4019 0x289ba8f700000000, 0x27100d7100000000, 0x612b6a1400000000,
4020 0xab66c3bb00000000, 0xed5da4de00000000, 0x7efbe03f00000000,
4021 0x38c0875a00000000, 0xf28d2ef500000000, 0xb4b6499000000000,
4022 0x95c6d6ec00000000, 0xd3fdb18900000000, 0x19b0182600000000,
4023 0x5f8b7f4300000000, 0xcc2d3ba200000000, 0x8a165cc700000000,
4024 0x405bf56800000000, 0x0660920d00000000, 0x02bbcb9100000000,
4025 0x4480acf400000000, 0x8ecd055b00000000, 0xc8f6623e00000000,
4026 0x5b5026df00000000, 0x1d6b41ba00000000, 0xd726e81500000000,
4027 0x911d8f7000000000, 0xb06d100c00000000, 0xf656776900000000,
4028 0x3c1bdec600000000, 0x7a20b9a300000000, 0xe986fd4200000000,
4029 0xafbd9a2700000000, 0x65f0338800000000, 0x23cb54ed00000000,
4030 0x3ae0095e00000000, 0x7cdb6e3b00000000, 0xb696c79400000000,
4031 0xf0ada0f100000000, 0x630be41000000000, 0x2530837500000000,
4032 0xef7d2ada00000000, 0xa9464dbf00000000, 0x8836d2c300000000,
4033 0xce0db5a600000000, 0x04401c0900000000, 0x427b7b6c00000000,
4034 0xd1dd3f8d00000000, 0x97e658e800000000, 0x5dabf14700000000,
4035 0x1b90962200000000, 0x1f4bcfbe00000000, 0x5970a8db00000000,
4036 0x933d017400000000, 0xd506661100000000, 0x46a022f000000000,
4037 0x009b459500000000, 0xcad6ec3a00000000, 0x8ced8b5f00000000,
4038 0xad9d142300000000, 0xeba6734600000000, 0x21ebdae900000000,
4039 0x67d0bd8c00000000, 0xf476f96d00000000, 0xb24d9e0800000000,
4040 0x780037a700000000, 0x3e3b50c200000000, 0x31b0f54400000000,
4041 0x778b922100000000, 0xbdc63b8e00000000, 0xfbfd5ceb00000000,
4042 0x685b180a00000000, 0x2e607f6f00000000, 0xe42dd6c000000000,
4043 0xa216b1a500000000, 0x83662ed900000000, 0xc55d49bc00000000,
4044 0x0f10e01300000000, 0x492b877600000000, 0xda8dc39700000000,
4045 0x9cb6a4f200000000, 0x56fb0d5d00000000, 0x10c06a3800000000,
4046 0x141b33a400000000, 0x522054c100000000, 0x986dfd6e00000000,
4047 0xde569a0b00000000, 0x4df0deea00000000, 0x0bcbb98f00000000,
4048 0xc186102000000000, 0x87bd774500000000, 0xa6cde83900000000,
4049 0xe0f68f5c00000000, 0x2abb26f300000000, 0x6c80419600000000,
4050 0xff26057700000000, 0xb91d621200000000, 0x7350cbbd00000000,
4051 0x356bacd800000000},
4052 {0x0000000000000000, 0x9e83da9f00000000, 0x7d01c4e400000000,
4053 0xe3821e7b00000000, 0xbb04f91200000000, 0x2587238d00000000,
4054 0xc6053df600000000, 0x5886e76900000000, 0x7609f22500000000,
4055 0xe88a28ba00000000, 0x0b0836c100000000, 0x958bec5e00000000,
4056 0xcd0d0b3700000000, 0x538ed1a800000000, 0xb00ccfd300000000,
4057 0x2e8f154c00000000, 0xec12e44b00000000, 0x72913ed400000000,
4058 0x911320af00000000, 0x0f90fa3000000000, 0x57161d5900000000,
4059 0xc995c7c600000000, 0x2a17d9bd00000000, 0xb494032200000000,
4060 0x9a1b166e00000000, 0x0498ccf100000000, 0xe71ad28a00000000,
4061 0x7999081500000000, 0x211fef7c00000000, 0xbf9c35e300000000,
4062 0x5c1e2b9800000000, 0xc29df10700000000, 0xd825c89700000000,
4063 0x46a6120800000000, 0xa5240c7300000000, 0x3ba7d6ec00000000,
4064 0x6321318500000000, 0xfda2eb1a00000000, 0x1e20f56100000000,
4065 0x80a32ffe00000000, 0xae2c3ab200000000, 0x30afe02d00000000,
4066 0xd32dfe5600000000, 0x4dae24c900000000, 0x1528c3a000000000,
4067 0x8bab193f00000000, 0x6829074400000000, 0xf6aadddb00000000,
4068 0x34372cdc00000000, 0xaab4f64300000000, 0x4936e83800000000,
4069 0xd7b532a700000000, 0x8f33d5ce00000000, 0x11b00f5100000000,
4070 0xf232112a00000000, 0x6cb1cbb500000000, 0x423edef900000000,
4071 0xdcbd046600000000, 0x3f3f1a1d00000000, 0xa1bcc08200000000,
4072 0xf93a27eb00000000, 0x67b9fd7400000000, 0x843be30f00000000,
4073 0x1ab8399000000000, 0xf14de1f400000000, 0x6fce3b6b00000000,
4074 0x8c4c251000000000, 0x12cfff8f00000000, 0x4a4918e600000000,
4075 0xd4cac27900000000, 0x3748dc0200000000, 0xa9cb069d00000000,
4076 0x874413d100000000, 0x19c7c94e00000000, 0xfa45d73500000000,
4077 0x64c60daa00000000, 0x3c40eac300000000, 0xa2c3305c00000000,
4078 0x41412e2700000000, 0xdfc2f4b800000000, 0x1d5f05bf00000000,
4079 0x83dcdf2000000000, 0x605ec15b00000000, 0xfedd1bc400000000,
4080 0xa65bfcad00000000, 0x38d8263200000000, 0xdb5a384900000000,
4081 0x45d9e2d600000000, 0x6b56f79a00000000, 0xf5d52d0500000000,
4082 0x1657337e00000000, 0x88d4e9e100000000, 0xd0520e8800000000,
4083 0x4ed1d41700000000, 0xad53ca6c00000000, 0x33d010f300000000,
4084 0x2968296300000000, 0xb7ebf3fc00000000, 0x5469ed8700000000,
4085 0xcaea371800000000, 0x926cd07100000000, 0x0cef0aee00000000,
4086 0xef6d149500000000, 0x71eece0a00000000, 0x5f61db4600000000,
4087 0xc1e201d900000000, 0x22601fa200000000, 0xbce3c53d00000000,
4088 0xe465225400000000, 0x7ae6f8cb00000000, 0x9964e6b000000000,
4089 0x07e73c2f00000000, 0xc57acd2800000000, 0x5bf917b700000000,
4090 0xb87b09cc00000000, 0x26f8d35300000000, 0x7e7e343a00000000,
4091 0xe0fdeea500000000, 0x037ff0de00000000, 0x9dfc2a4100000000,
4092 0xb3733f0d00000000, 0x2df0e59200000000, 0xce72fbe900000000,
4093 0x50f1217600000000, 0x0877c61f00000000, 0x96f41c8000000000,
4094 0x757602fb00000000, 0xebf5d86400000000, 0xa39db33200000000,
4095 0x3d1e69ad00000000, 0xde9c77d600000000, 0x401fad4900000000,
4096 0x18994a2000000000, 0x861a90bf00000000, 0x65988ec400000000,
4097 0xfb1b545b00000000, 0xd594411700000000, 0x4b179b8800000000,
4098 0xa89585f300000000, 0x36165f6c00000000, 0x6e90b80500000000,
4099 0xf013629a00000000, 0x13917ce100000000, 0x8d12a67e00000000,
4100 0x4f8f577900000000, 0xd10c8de600000000, 0x328e939d00000000,
4101 0xac0d490200000000, 0xf48bae6b00000000, 0x6a0874f400000000,
4102 0x898a6a8f00000000, 0x1709b01000000000, 0x3986a55c00000000,
4103 0xa7057fc300000000, 0x448761b800000000, 0xda04bb2700000000,
4104 0x82825c4e00000000, 0x1c0186d100000000, 0xff8398aa00000000,
4105 0x6100423500000000, 0x7bb87ba500000000, 0xe53ba13a00000000,
4106 0x06b9bf4100000000, 0x983a65de00000000, 0xc0bc82b700000000,
4107 0x5e3f582800000000, 0xbdbd465300000000, 0x233e9ccc00000000,
4108 0x0db1898000000000, 0x9332531f00000000, 0x70b04d6400000000,
4109 0xee3397fb00000000, 0xb6b5709200000000, 0x2836aa0d00000000,
4110 0xcbb4b47600000000, 0x55376ee900000000, 0x97aa9fee00000000,
4111 0x0929457100000000, 0xeaab5b0a00000000, 0x7428819500000000,
4112 0x2cae66fc00000000, 0xb22dbc6300000000, 0x51afa21800000000,
4113 0xcf2c788700000000, 0xe1a36dcb00000000, 0x7f20b75400000000,
4114 0x9ca2a92f00000000, 0x022173b000000000, 0x5aa794d900000000,
4115 0xc4244e4600000000, 0x27a6503d00000000, 0xb9258aa200000000,
4116 0x52d052c600000000, 0xcc53885900000000, 0x2fd1962200000000,
4117 0xb1524cbd00000000, 0xe9d4abd400000000, 0x7757714b00000000,
4118 0x94d56f3000000000, 0x0a56b5af00000000, 0x24d9a0e300000000,
4119 0xba5a7a7c00000000, 0x59d8640700000000, 0xc75bbe9800000000,
4120 0x9fdd59f100000000, 0x015e836e00000000, 0xe2dc9d1500000000,
4121 0x7c5f478a00000000, 0xbec2b68d00000000, 0x20416c1200000000,
4122 0xc3c3726900000000, 0x5d40a8f600000000, 0x05c64f9f00000000,
4123 0x9b45950000000000, 0x78c78b7b00000000, 0xe64451e400000000,
4124 0xc8cb44a800000000, 0x56489e3700000000, 0xb5ca804c00000000,
4125 0x2b495ad300000000, 0x73cfbdba00000000, 0xed4c672500000000,
4126 0x0ece795e00000000, 0x904da3c100000000, 0x8af59a5100000000,
4127 0x147640ce00000000, 0xf7f45eb500000000, 0x6977842a00000000,
4128 0x31f1634300000000, 0xaf72b9dc00000000, 0x4cf0a7a700000000,
4129 0xd2737d3800000000, 0xfcfc687400000000, 0x627fb2eb00000000,
4130 0x81fdac9000000000, 0x1f7e760f00000000, 0x47f8916600000000,
4131 0xd97b4bf900000000, 0x3af9558200000000, 0xa47a8f1d00000000,
4132 0x66e77e1a00000000, 0xf864a48500000000, 0x1be6bafe00000000,
4133 0x8565606100000000, 0xdde3870800000000, 0x43605d9700000000,
4134 0xa0e243ec00000000, 0x3e61997300000000, 0x10ee8c3f00000000,
4135 0x8e6d56a000000000, 0x6def48db00000000, 0xf36c924400000000,
4136 0xabea752d00000000, 0x3569afb200000000, 0xd6ebb1c900000000,
4137 0x48686b5600000000},
4138 {0x0000000000000000, 0xc064281700000000, 0x80c9502e00000000,
4139 0x40ad783900000000, 0x0093a15c00000000, 0xc0f7894b00000000,
4140 0x805af17200000000, 0x403ed96500000000, 0x002643b900000000,
4141 0xc0426bae00000000, 0x80ef139700000000, 0x408b3b8000000000,
4142 0x00b5e2e500000000, 0xc0d1caf200000000, 0x807cb2cb00000000,
4143 0x40189adc00000000, 0x414af7a900000000, 0x812edfbe00000000,
4144 0xc183a78700000000, 0x01e78f9000000000, 0x41d956f500000000,
4145 0x81bd7ee200000000, 0xc11006db00000000, 0x01742ecc00000000,
4146 0x416cb41000000000, 0x81089c0700000000, 0xc1a5e43e00000000,
4147 0x01c1cc2900000000, 0x41ff154c00000000, 0x819b3d5b00000000,
4148 0xc136456200000000, 0x01526d7500000000, 0xc3929f8800000000,
4149 0x03f6b79f00000000, 0x435bcfa600000000, 0x833fe7b100000000,
4150 0xc3013ed400000000, 0x036516c300000000, 0x43c86efa00000000,
4151 0x83ac46ed00000000, 0xc3b4dc3100000000, 0x03d0f42600000000,
4152 0x437d8c1f00000000, 0x8319a40800000000, 0xc3277d6d00000000,
4153 0x0343557a00000000, 0x43ee2d4300000000, 0x838a055400000000,
4154 0x82d8682100000000, 0x42bc403600000000, 0x0211380f00000000,
4155 0xc275101800000000, 0x824bc97d00000000, 0x422fe16a00000000,
4156 0x0282995300000000, 0xc2e6b14400000000, 0x82fe2b9800000000,
4157 0x429a038f00000000, 0x02377bb600000000, 0xc25353a100000000,
4158 0x826d8ac400000000, 0x4209a2d300000000, 0x02a4daea00000000,
4159 0xc2c0f2fd00000000, 0xc7234eca00000000, 0x074766dd00000000,
4160 0x47ea1ee400000000, 0x878e36f300000000, 0xc7b0ef9600000000,
4161 0x07d4c78100000000, 0x4779bfb800000000, 0x871d97af00000000,
4162 0xc7050d7300000000, 0x0761256400000000, 0x47cc5d5d00000000,
4163 0x87a8754a00000000, 0xc796ac2f00000000, 0x07f2843800000000,
4164 0x475ffc0100000000, 0x873bd41600000000, 0x8669b96300000000,
4165 0x460d917400000000, 0x06a0e94d00000000, 0xc6c4c15a00000000,
4166 0x86fa183f00000000, 0x469e302800000000, 0x0633481100000000,
4167 0xc657600600000000, 0x864ffada00000000, 0x462bd2cd00000000,
4168 0x0686aaf400000000, 0xc6e282e300000000, 0x86dc5b8600000000,
4169 0x46b8739100000000, 0x06150ba800000000, 0xc67123bf00000000,
4170 0x04b1d14200000000, 0xc4d5f95500000000, 0x8478816c00000000,
4171 0x441ca97b00000000, 0x0422701e00000000, 0xc446580900000000,
4172 0x84eb203000000000, 0x448f082700000000, 0x049792fb00000000,
4173 0xc4f3baec00000000, 0x845ec2d500000000, 0x443aeac200000000,
4174 0x040433a700000000, 0xc4601bb000000000, 0x84cd638900000000,
4175 0x44a94b9e00000000, 0x45fb26eb00000000, 0x859f0efc00000000,
4176 0xc53276c500000000, 0x05565ed200000000, 0x456887b700000000,
4177 0x850cafa000000000, 0xc5a1d79900000000, 0x05c5ff8e00000000,
4178 0x45dd655200000000, 0x85b94d4500000000, 0xc514357c00000000,
4179 0x05701d6b00000000, 0x454ec40e00000000, 0x852aec1900000000,
4180 0xc587942000000000, 0x05e3bc3700000000, 0xcf41ed4f00000000,
4181 0x0f25c55800000000, 0x4f88bd6100000000, 0x8fec957600000000,
4182 0xcfd24c1300000000, 0x0fb6640400000000, 0x4f1b1c3d00000000,
4183 0x8f7f342a00000000, 0xcf67aef600000000, 0x0f0386e100000000,
4184 0x4faefed800000000, 0x8fcad6cf00000000, 0xcff40faa00000000,
4185 0x0f9027bd00000000, 0x4f3d5f8400000000, 0x8f59779300000000,
4186 0x8e0b1ae600000000, 0x4e6f32f100000000, 0x0ec24ac800000000,
4187 0xcea662df00000000, 0x8e98bbba00000000, 0x4efc93ad00000000,
4188 0x0e51eb9400000000, 0xce35c38300000000, 0x8e2d595f00000000,
4189 0x4e49714800000000, 0x0ee4097100000000, 0xce80216600000000,
4190 0x8ebef80300000000, 0x4edad01400000000, 0x0e77a82d00000000,
4191 0xce13803a00000000, 0x0cd372c700000000, 0xccb75ad000000000,
4192 0x8c1a22e900000000, 0x4c7e0afe00000000, 0x0c40d39b00000000,
4193 0xcc24fb8c00000000, 0x8c8983b500000000, 0x4cedaba200000000,
4194 0x0cf5317e00000000, 0xcc91196900000000, 0x8c3c615000000000,
4195 0x4c58494700000000, 0x0c66902200000000, 0xcc02b83500000000,
4196 0x8cafc00c00000000, 0x4ccbe81b00000000, 0x4d99856e00000000,
4197 0x8dfdad7900000000, 0xcd50d54000000000, 0x0d34fd5700000000,
4198 0x4d0a243200000000, 0x8d6e0c2500000000, 0xcdc3741c00000000,
4199 0x0da75c0b00000000, 0x4dbfc6d700000000, 0x8ddbeec000000000,
4200 0xcd7696f900000000, 0x0d12beee00000000, 0x4d2c678b00000000,
4201 0x8d484f9c00000000, 0xcde537a500000000, 0x0d811fb200000000,
4202 0x0862a38500000000, 0xc8068b9200000000, 0x88abf3ab00000000,
4203 0x48cfdbbc00000000, 0x08f102d900000000, 0xc8952ace00000000,
4204 0x883852f700000000, 0x485c7ae000000000, 0x0844e03c00000000,
4205 0xc820c82b00000000, 0x888db01200000000, 0x48e9980500000000,
4206 0x08d7416000000000, 0xc8b3697700000000, 0x881e114e00000000,
4207 0x487a395900000000, 0x4928542c00000000, 0x894c7c3b00000000,
4208 0xc9e1040200000000, 0x09852c1500000000, 0x49bbf57000000000,
4209 0x89dfdd6700000000, 0xc972a55e00000000, 0x09168d4900000000,
4210 0x490e179500000000, 0x896a3f8200000000, 0xc9c747bb00000000,
4211 0x09a36fac00000000, 0x499db6c900000000, 0x89f99ede00000000,
4212 0xc954e6e700000000, 0x0930cef000000000, 0xcbf03c0d00000000,
4213 0x0b94141a00000000, 0x4b396c2300000000, 0x8b5d443400000000,
4214 0xcb639d5100000000, 0x0b07b54600000000, 0x4baacd7f00000000,
4215 0x8bcee56800000000, 0xcbd67fb400000000, 0x0bb257a300000000,
4216 0x4b1f2f9a00000000, 0x8b7b078d00000000, 0xcb45dee800000000,
4217 0x0b21f6ff00000000, 0x4b8c8ec600000000, 0x8be8a6d100000000,
4218 0x8abacba400000000, 0x4adee3b300000000, 0x0a739b8a00000000,
4219 0xca17b39d00000000, 0x8a296af800000000, 0x4a4d42ef00000000,
4220 0x0ae03ad600000000, 0xca8412c100000000, 0x8a9c881d00000000,
4221 0x4af8a00a00000000, 0x0a55d83300000000, 0xca31f02400000000,
4222 0x8a0f294100000000, 0x4a6b015600000000, 0x0ac6796f00000000,
4223 0xcaa2517800000000},
4224 {0x0000000000000000, 0xd4ea739b00000000, 0xe9d396ed00000000,
4225 0x3d39e57600000000, 0x93a15c0000000000, 0x474b2f9b00000000,
4226 0x7a72caed00000000, 0xae98b97600000000, 0x2643b90000000000,
4227 0xf2a9ca9b00000000, 0xcf902fed00000000, 0x1b7a5c7600000000,
4228 0xb5e2e50000000000, 0x6108969b00000000, 0x5c3173ed00000000,
4229 0x88db007600000000, 0x4c86720100000000, 0x986c019a00000000,
4230 0xa555e4ec00000000, 0x71bf977700000000, 0xdf272e0100000000,
4231 0x0bcd5d9a00000000, 0x36f4b8ec00000000, 0xe21ecb7700000000,
4232 0x6ac5cb0100000000, 0xbe2fb89a00000000, 0x83165dec00000000,
4233 0x57fc2e7700000000, 0xf964970100000000, 0x2d8ee49a00000000,
4234 0x10b701ec00000000, 0xc45d727700000000, 0x980ce50200000000,
4235 0x4ce6969900000000, 0x71df73ef00000000, 0xa535007400000000,
4236 0x0badb90200000000, 0xdf47ca9900000000, 0xe27e2fef00000000,
4237 0x36945c7400000000, 0xbe4f5c0200000000, 0x6aa52f9900000000,
4238 0x579ccaef00000000, 0x8376b97400000000, 0x2dee000200000000,
4239 0xf904739900000000, 0xc43d96ef00000000, 0x10d7e57400000000,
4240 0xd48a970300000000, 0x0060e49800000000, 0x3d5901ee00000000,
4241 0xe9b3727500000000, 0x472bcb0300000000, 0x93c1b89800000000,
4242 0xaef85dee00000000, 0x7a122e7500000000, 0xf2c92e0300000000,
4243 0x26235d9800000000, 0x1b1ab8ee00000000, 0xcff0cb7500000000,
4244 0x6168720300000000, 0xb582019800000000, 0x88bbe4ee00000000,
4245 0x5c51977500000000, 0x3019ca0500000000, 0xe4f3b99e00000000,
4246 0xd9ca5ce800000000, 0x0d202f7300000000, 0xa3b8960500000000,
4247 0x7752e59e00000000, 0x4a6b00e800000000, 0x9e81737300000000,
4248 0x165a730500000000, 0xc2b0009e00000000, 0xff89e5e800000000,
4249 0x2b63967300000000, 0x85fb2f0500000000, 0x51115c9e00000000,
4250 0x6c28b9e800000000, 0xb8c2ca7300000000, 0x7c9fb80400000000,
4251 0xa875cb9f00000000, 0x954c2ee900000000, 0x41a65d7200000000,
4252 0xef3ee40400000000, 0x3bd4979f00000000, 0x06ed72e900000000,
4253 0xd207017200000000, 0x5adc010400000000, 0x8e36729f00000000,
4254 0xb30f97e900000000, 0x67e5e47200000000, 0xc97d5d0400000000,
4255 0x1d972e9f00000000, 0x20aecbe900000000, 0xf444b87200000000,
4256 0xa8152f0700000000, 0x7cff5c9c00000000, 0x41c6b9ea00000000,
4257 0x952cca7100000000, 0x3bb4730700000000, 0xef5e009c00000000,
4258 0xd267e5ea00000000, 0x068d967100000000, 0x8e56960700000000,
4259 0x5abce59c00000000, 0x678500ea00000000, 0xb36f737100000000,
4260 0x1df7ca0700000000, 0xc91db99c00000000, 0xf4245cea00000000,
4261 0x20ce2f7100000000, 0xe4935d0600000000, 0x30792e9d00000000,
4262 0x0d40cbeb00000000, 0xd9aab87000000000, 0x7732010600000000,
4263 0xa3d8729d00000000, 0x9ee197eb00000000, 0x4a0be47000000000,
4264 0xc2d0e40600000000, 0x163a979d00000000, 0x2b0372eb00000000,
4265 0xffe9017000000000, 0x5171b80600000000, 0x859bcb9d00000000,
4266 0xb8a22eeb00000000, 0x6c485d7000000000, 0x6032940b00000000,
4267 0xb4d8e79000000000, 0x89e102e600000000, 0x5d0b717d00000000,
4268 0xf393c80b00000000, 0x2779bb9000000000, 0x1a405ee600000000,
4269 0xceaa2d7d00000000, 0x46712d0b00000000, 0x929b5e9000000000,
4270 0xafa2bbe600000000, 0x7b48c87d00000000, 0xd5d0710b00000000,
4271 0x013a029000000000, 0x3c03e7e600000000, 0xe8e9947d00000000,
4272 0x2cb4e60a00000000, 0xf85e959100000000, 0xc56770e700000000,
4273 0x118d037c00000000, 0xbf15ba0a00000000, 0x6bffc99100000000,
4274 0x56c62ce700000000, 0x822c5f7c00000000, 0x0af75f0a00000000,
4275 0xde1d2c9100000000, 0xe324c9e700000000, 0x37ceba7c00000000,
4276 0x9956030a00000000, 0x4dbc709100000000, 0x708595e700000000,
4277 0xa46fe67c00000000, 0xf83e710900000000, 0x2cd4029200000000,
4278 0x11ede7e400000000, 0xc507947f00000000, 0x6b9f2d0900000000,
4279 0xbf755e9200000000, 0x824cbbe400000000, 0x56a6c87f00000000,
4280 0xde7dc80900000000, 0x0a97bb9200000000, 0x37ae5ee400000000,
4281 0xe3442d7f00000000, 0x4ddc940900000000, 0x9936e79200000000,
4282 0xa40f02e400000000, 0x70e5717f00000000, 0xb4b8030800000000,
4283 0x6052709300000000, 0x5d6b95e500000000, 0x8981e67e00000000,
4284 0x27195f0800000000, 0xf3f32c9300000000, 0xcecac9e500000000,
4285 0x1a20ba7e00000000, 0x92fbba0800000000, 0x4611c99300000000,
4286 0x7b282ce500000000, 0xafc25f7e00000000, 0x015ae60800000000,
4287 0xd5b0959300000000, 0xe88970e500000000, 0x3c63037e00000000,
4288 0x502b5e0e00000000, 0x84c12d9500000000, 0xb9f8c8e300000000,
4289 0x6d12bb7800000000, 0xc38a020e00000000, 0x1760719500000000,
4290 0x2a5994e300000000, 0xfeb3e77800000000, 0x7668e70e00000000,
4291 0xa282949500000000, 0x9fbb71e300000000, 0x4b51027800000000,
4292 0xe5c9bb0e00000000, 0x3123c89500000000, 0x0c1a2de300000000,
4293 0xd8f05e7800000000, 0x1cad2c0f00000000, 0xc8475f9400000000,
4294 0xf57ebae200000000, 0x2194c97900000000, 0x8f0c700f00000000,
4295 0x5be6039400000000, 0x66dfe6e200000000, 0xb235957900000000,
4296 0x3aee950f00000000, 0xee04e69400000000, 0xd33d03e200000000,
4297 0x07d7707900000000, 0xa94fc90f00000000, 0x7da5ba9400000000,
4298 0x409c5fe200000000, 0x94762c7900000000, 0xc827bb0c00000000,
4299 0x1ccdc89700000000, 0x21f42de100000000, 0xf51e5e7a00000000,
4300 0x5b86e70c00000000, 0x8f6c949700000000, 0xb25571e100000000,
4301 0x66bf027a00000000, 0xee64020c00000000, 0x3a8e719700000000,
4302 0x07b794e100000000, 0xd35de77a00000000, 0x7dc55e0c00000000,
4303 0xa92f2d9700000000, 0x9416c8e100000000, 0x40fcbb7a00000000,
4304 0x84a1c90d00000000, 0x504bba9600000000, 0x6d725fe000000000,
4305 0xb9982c7b00000000, 0x1700950d00000000, 0xc3eae69600000000,
4306 0xfed303e000000000, 0x2a39707b00000000, 0xa2e2700d00000000,
4307 0x7608039600000000, 0x4b31e6e000000000, 0x9fdb957b00000000,
4308 0x31432c0d00000000, 0xe5a95f9600000000, 0xd890bae000000000,
4309 0x0c7ac97b00000000},
4310 {0x0000000000000000, 0x2765258100000000, 0x0fcc3bd900000000,
4311 0x28a91e5800000000, 0x5f9e066900000000, 0x78fb23e800000000,
4312 0x50523db000000000, 0x7737183100000000, 0xbe3c0dd200000000,
4313 0x9959285300000000, 0xb1f0360b00000000, 0x9695138a00000000,
4314 0xe1a20bbb00000000, 0xc6c72e3a00000000, 0xee6e306200000000,
4315 0xc90b15e300000000, 0x3d7f6b7f00000000, 0x1a1a4efe00000000,
4316 0x32b350a600000000, 0x15d6752700000000, 0x62e16d1600000000,
4317 0x4584489700000000, 0x6d2d56cf00000000, 0x4a48734e00000000,
4318 0x834366ad00000000, 0xa426432c00000000, 0x8c8f5d7400000000,
4319 0xabea78f500000000, 0xdcdd60c400000000, 0xfbb8454500000000,
4320 0xd3115b1d00000000, 0xf4747e9c00000000, 0x7afed6fe00000000,
4321 0x5d9bf37f00000000, 0x7532ed2700000000, 0x5257c8a600000000,
4322 0x2560d09700000000, 0x0205f51600000000, 0x2aaceb4e00000000,
4323 0x0dc9cecf00000000, 0xc4c2db2c00000000, 0xe3a7fead00000000,
4324 0xcb0ee0f500000000, 0xec6bc57400000000, 0x9b5cdd4500000000,
4325 0xbc39f8c400000000, 0x9490e69c00000000, 0xb3f5c31d00000000,
4326 0x4781bd8100000000, 0x60e4980000000000, 0x484d865800000000,
4327 0x6f28a3d900000000, 0x181fbbe800000000, 0x3f7a9e6900000000,
4328 0x17d3803100000000, 0x30b6a5b000000000, 0xf9bdb05300000000,
4329 0xded895d200000000, 0xf6718b8a00000000, 0xd114ae0b00000000,
4330 0xa623b63a00000000, 0x814693bb00000000, 0xa9ef8de300000000,
4331 0x8e8aa86200000000, 0xb5fadc2600000000, 0x929ff9a700000000,
4332 0xba36e7ff00000000, 0x9d53c27e00000000, 0xea64da4f00000000,
4333 0xcd01ffce00000000, 0xe5a8e19600000000, 0xc2cdc41700000000,
4334 0x0bc6d1f400000000, 0x2ca3f47500000000, 0x040aea2d00000000,
4335 0x236fcfac00000000, 0x5458d79d00000000, 0x733df21c00000000,
4336 0x5b94ec4400000000, 0x7cf1c9c500000000, 0x8885b75900000000,
4337 0xafe092d800000000, 0x87498c8000000000, 0xa02ca90100000000,
4338 0xd71bb13000000000, 0xf07e94b100000000, 0xd8d78ae900000000,
4339 0xffb2af6800000000, 0x36b9ba8b00000000, 0x11dc9f0a00000000,
4340 0x3975815200000000, 0x1e10a4d300000000, 0x6927bce200000000,
4341 0x4e42996300000000, 0x66eb873b00000000, 0x418ea2ba00000000,
4342 0xcf040ad800000000, 0xe8612f5900000000, 0xc0c8310100000000,
4343 0xe7ad148000000000, 0x909a0cb100000000, 0xb7ff293000000000,
4344 0x9f56376800000000, 0xb83312e900000000, 0x7138070a00000000,
4345 0x565d228b00000000, 0x7ef43cd300000000, 0x5991195200000000,
4346 0x2ea6016300000000, 0x09c324e200000000, 0x216a3aba00000000,
4347 0x060f1f3b00000000, 0xf27b61a700000000, 0xd51e442600000000,
4348 0xfdb75a7e00000000, 0xdad27fff00000000, 0xade567ce00000000,
4349 0x8a80424f00000000, 0xa2295c1700000000, 0x854c799600000000,
4350 0x4c476c7500000000, 0x6b2249f400000000, 0x438b57ac00000000,
4351 0x64ee722d00000000, 0x13d96a1c00000000, 0x34bc4f9d00000000,
4352 0x1c1551c500000000, 0x3b70744400000000, 0x6af5b94d00000000,
4353 0x4d909ccc00000000, 0x6539829400000000, 0x425ca71500000000,
4354 0x356bbf2400000000, 0x120e9aa500000000, 0x3aa784fd00000000,
4355 0x1dc2a17c00000000, 0xd4c9b49f00000000, 0xf3ac911e00000000,
4356 0xdb058f4600000000, 0xfc60aac700000000, 0x8b57b2f600000000,
4357 0xac32977700000000, 0x849b892f00000000, 0xa3feacae00000000,
4358 0x578ad23200000000, 0x70eff7b300000000, 0x5846e9eb00000000,
4359 0x7f23cc6a00000000, 0x0814d45b00000000, 0x2f71f1da00000000,
4360 0x07d8ef8200000000, 0x20bdca0300000000, 0xe9b6dfe000000000,
4361 0xced3fa6100000000, 0xe67ae43900000000, 0xc11fc1b800000000,
4362 0xb628d98900000000, 0x914dfc0800000000, 0xb9e4e25000000000,
4363 0x9e81c7d100000000, 0x100b6fb300000000, 0x376e4a3200000000,
4364 0x1fc7546a00000000, 0x38a271eb00000000, 0x4f9569da00000000,
4365 0x68f04c5b00000000, 0x4059520300000000, 0x673c778200000000,
4366 0xae37626100000000, 0x895247e000000000, 0xa1fb59b800000000,
4367 0x869e7c3900000000, 0xf1a9640800000000, 0xd6cc418900000000,
4368 0xfe655fd100000000, 0xd9007a5000000000, 0x2d7404cc00000000,
4369 0x0a11214d00000000, 0x22b83f1500000000, 0x05dd1a9400000000,
4370 0x72ea02a500000000, 0x558f272400000000, 0x7d26397c00000000,
4371 0x5a431cfd00000000, 0x9348091e00000000, 0xb42d2c9f00000000,
4372 0x9c8432c700000000, 0xbbe1174600000000, 0xccd60f7700000000,
4373 0xebb32af600000000, 0xc31a34ae00000000, 0xe47f112f00000000,
4374 0xdf0f656b00000000, 0xf86a40ea00000000, 0xd0c35eb200000000,
4375 0xf7a67b3300000000, 0x8091630200000000, 0xa7f4468300000000,
4376 0x8f5d58db00000000, 0xa8387d5a00000000, 0x613368b900000000,
4377 0x46564d3800000000, 0x6eff536000000000, 0x499a76e100000000,
4378 0x3ead6ed000000000, 0x19c84b5100000000, 0x3161550900000000,
4379 0x1604708800000000, 0xe2700e1400000000, 0xc5152b9500000000,
4380 0xedbc35cd00000000, 0xcad9104c00000000, 0xbdee087d00000000,
4381 0x9a8b2dfc00000000, 0xb22233a400000000, 0x9547162500000000,
4382 0x5c4c03c600000000, 0x7b29264700000000, 0x5380381f00000000,
4383 0x74e51d9e00000000, 0x03d205af00000000, 0x24b7202e00000000,
4384 0x0c1e3e7600000000, 0x2b7b1bf700000000, 0xa5f1b39500000000,
4385 0x8294961400000000, 0xaa3d884c00000000, 0x8d58adcd00000000,
4386 0xfa6fb5fc00000000, 0xdd0a907d00000000, 0xf5a38e2500000000,
4387 0xd2c6aba400000000, 0x1bcdbe4700000000, 0x3ca89bc600000000,
4388 0x1401859e00000000, 0x3364a01f00000000, 0x4453b82e00000000,
4389 0x63369daf00000000, 0x4b9f83f700000000, 0x6cfaa67600000000,
4390 0x988ed8ea00000000, 0xbfebfd6b00000000, 0x9742e33300000000,
4391 0xb027c6b200000000, 0xc710de8300000000, 0xe075fb0200000000,
4392 0xc8dce55a00000000, 0xefb9c0db00000000, 0x26b2d53800000000,
4393 0x01d7f0b900000000, 0x297eeee100000000, 0x0e1bcb6000000000,
4394 0x792cd35100000000, 0x5e49f6d000000000, 0x76e0e88800000000,
4395 0x5185cd0900000000}};
4396
4397 #else /* W == 4 */
4398
4399 local const z_crc_t FAR crc_braid_table[][256] = {
4400 {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f,
4401 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91,
4402 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e,
4403 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c,
4404 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02,
4405 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12,
4406 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567,
4407 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277,
4408 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679,
4409 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b,
4410 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4,
4411 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a,
4412 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0,
4413 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0,
4414 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91,
4415 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881,
4416 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173,
4417 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d,
4418 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912,
4419 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8,
4420 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6,
4421 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6,
4422 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b,
4423 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b,
4424 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75,
4425 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f,
4426 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00,
4427 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee,
4428 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c,
4429 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c,
4430 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d,
4431 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d,
4432 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67,
4433 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89,
4434 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706,
4435 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14,
4436 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a,
4437 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a,
4438 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f,
4439 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f,
4440 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591,
4441 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983,
4442 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c,
4443 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2,
4444 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8,
4445 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8,
4446 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89,
4447 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99,
4448 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b,
4449 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485,
4450 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a,
4451 0x36197165},
4452 {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382,
4453 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85,
4454 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06,
4455 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca,
4456 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e,
4457 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc,
4458 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616,
4459 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54,
4460 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10,
4461 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc,
4462 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f,
4463 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58,
4464 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef,
4465 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad,
4466 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b,
4467 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29,
4468 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6,
4469 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1,
4470 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622,
4471 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039,
4472 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d,
4473 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f,
4474 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32,
4475 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770,
4476 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034,
4477 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f,
4478 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc,
4479 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db,
4480 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154,
4481 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16,
4482 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0,
4483 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592,
4484 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca,
4485 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd,
4486 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e,
4487 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882,
4488 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6,
4489 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384,
4490 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1,
4491 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3,
4492 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7,
4493 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b,
4494 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8,
4495 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff,
4496 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7,
4497 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5,
4498 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23,
4499 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761,
4500 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee,
4501 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9,
4502 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a,
4503 0x1a3b93aa},
4504 {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a,
4505 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca,
4506 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3,
4507 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb,
4508 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c,
4509 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58,
4510 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed,
4511 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9,
4512 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e,
4513 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906,
4514 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f,
4515 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf,
4516 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0,
4517 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4,
4518 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769,
4519 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d,
4520 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632,
4521 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82,
4522 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb,
4523 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73,
4524 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484,
4525 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0,
4526 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5,
4527 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1,
4528 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516,
4529 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f,
4530 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946,
4531 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6,
4532 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9,
4533 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad,
4534 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820,
4535 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364,
4536 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab,
4537 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b,
4538 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62,
4539 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a,
4540 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd,
4541 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089,
4542 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c,
4543 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8,
4544 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f,
4545 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477,
4546 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e,
4547 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be,
4548 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71,
4549 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635,
4550 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8,
4551 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc,
4552 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3,
4553 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753,
4554 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a,
4555 0xe147d714},
4556 {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c,
4557 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b,
4558 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92,
4559 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4,
4560 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069,
4561 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526,
4562 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25,
4563 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a,
4564 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7,
4565 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491,
4566 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958,
4567 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f,
4568 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307,
4569 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648,
4570 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999,
4571 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6,
4572 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a,
4573 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d,
4574 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4,
4575 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61,
4576 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc,
4577 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3,
4578 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53,
4579 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c,
4580 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1,
4581 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c,
4582 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5,
4583 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92,
4584 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e,
4585 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771,
4586 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0,
4587 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def,
4588 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0,
4589 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7,
4590 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e,
4591 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58,
4592 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285,
4593 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca,
4594 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce,
4595 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81,
4596 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c,
4597 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a,
4598 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3,
4599 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4,
4600 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb,
4601 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4,
4602 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75,
4603 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a,
4604 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296,
4605 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1,
4606 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808,
4607 0x494f0c4b}};
4608
4609 local const z_word_t FAR crc_braid_big_table[][256] = {
4610 {0x00000000, 0x43147b17, 0x8628f62e, 0xc53c8d39, 0x0c51ec5d,
4611 0x4f45974a, 0x8a791a73, 0xc96d6164, 0x18a2d8bb, 0x5bb6a3ac,
4612 0x9e8a2e95, 0xdd9e5582, 0x14f334e6, 0x57e74ff1, 0x92dbc2c8,
4613 0xd1cfb9df, 0x7142c0ac, 0x3256bbbb, 0xf76a3682, 0xb47e4d95,
4614 0x7d132cf1, 0x3e0757e6, 0xfb3bdadf, 0xb82fa1c8, 0x69e01817,
4615 0x2af46300, 0xefc8ee39, 0xacdc952e, 0x65b1f44a, 0x26a58f5d,
4616 0xe3990264, 0xa08d7973, 0xa382f182, 0xe0968a95, 0x25aa07ac,
4617 0x66be7cbb, 0xafd31ddf, 0xecc766c8, 0x29fbebf1, 0x6aef90e6,
4618 0xbb202939, 0xf834522e, 0x3d08df17, 0x7e1ca400, 0xb771c564,
4619 0xf465be73, 0x3159334a, 0x724d485d, 0xd2c0312e, 0x91d44a39,
4620 0x54e8c700, 0x17fcbc17, 0xde91dd73, 0x9d85a664, 0x58b92b5d,
4621 0x1bad504a, 0xca62e995, 0x89769282, 0x4c4a1fbb, 0x0f5e64ac,
4622 0xc63305c8, 0x85277edf, 0x401bf3e6, 0x030f88f1, 0x070392de,
4623 0x4417e9c9, 0x812b64f0, 0xc23f1fe7, 0x0b527e83, 0x48460594,
4624 0x8d7a88ad, 0xce6ef3ba, 0x1fa14a65, 0x5cb53172, 0x9989bc4b,
4625 0xda9dc75c, 0x13f0a638, 0x50e4dd2f, 0x95d85016, 0xd6cc2b01,
4626 0x76415272, 0x35552965, 0xf069a45c, 0xb37ddf4b, 0x7a10be2f,
4627 0x3904c538, 0xfc384801, 0xbf2c3316, 0x6ee38ac9, 0x2df7f1de,
4628 0xe8cb7ce7, 0xabdf07f0, 0x62b26694, 0x21a61d83, 0xe49a90ba,
4629 0xa78eebad, 0xa481635c, 0xe795184b, 0x22a99572, 0x61bdee65,
4630 0xa8d08f01, 0xebc4f416, 0x2ef8792f, 0x6dec0238, 0xbc23bbe7,
4631 0xff37c0f0, 0x3a0b4dc9, 0x791f36de, 0xb07257ba, 0xf3662cad,
4632 0x365aa194, 0x754eda83, 0xd5c3a3f0, 0x96d7d8e7, 0x53eb55de,
4633 0x10ff2ec9, 0xd9924fad, 0x9a8634ba, 0x5fbab983, 0x1caec294,
4634 0xcd617b4b, 0x8e75005c, 0x4b498d65, 0x085df672, 0xc1309716,
4635 0x8224ec01, 0x47186138, 0x040c1a2f, 0x4f005566, 0x0c142e71,
4636 0xc928a348, 0x8a3cd85f, 0x4351b93b, 0x0045c22c, 0xc5794f15,
4637 0x866d3402, 0x57a28ddd, 0x14b6f6ca, 0xd18a7bf3, 0x929e00e4,
4638 0x5bf36180, 0x18e71a97, 0xdddb97ae, 0x9ecfecb9, 0x3e4295ca,
4639 0x7d56eedd, 0xb86a63e4, 0xfb7e18f3, 0x32137997, 0x71070280,
4640 0xb43b8fb9, 0xf72ff4ae, 0x26e04d71, 0x65f43666, 0xa0c8bb5f,
4641 0xe3dcc048, 0x2ab1a12c, 0x69a5da3b, 0xac995702, 0xef8d2c15,
4642 0xec82a4e4, 0xaf96dff3, 0x6aaa52ca, 0x29be29dd, 0xe0d348b9,
4643 0xa3c733ae, 0x66fbbe97, 0x25efc580, 0xf4207c5f, 0xb7340748,
4644 0x72088a71, 0x311cf166, 0xf8719002, 0xbb65eb15, 0x7e59662c,
4645 0x3d4d1d3b, 0x9dc06448, 0xded41f5f, 0x1be89266, 0x58fce971,
4646 0x91918815, 0xd285f302, 0x17b97e3b, 0x54ad052c, 0x8562bcf3,
4647 0xc676c7e4, 0x034a4add, 0x405e31ca, 0x893350ae, 0xca272bb9,
4648 0x0f1ba680, 0x4c0fdd97, 0x4803c7b8, 0x0b17bcaf, 0xce2b3196,
4649 0x8d3f4a81, 0x44522be5, 0x074650f2, 0xc27addcb, 0x816ea6dc,
4650 0x50a11f03, 0x13b56414, 0xd689e92d, 0x959d923a, 0x5cf0f35e,
4651 0x1fe48849, 0xdad80570, 0x99cc7e67, 0x39410714, 0x7a557c03,
4652 0xbf69f13a, 0xfc7d8a2d, 0x3510eb49, 0x7604905e, 0xb3381d67,
4653 0xf02c6670, 0x21e3dfaf, 0x62f7a4b8, 0xa7cb2981, 0xe4df5296,
4654 0x2db233f2, 0x6ea648e5, 0xab9ac5dc, 0xe88ebecb, 0xeb81363a,
4655 0xa8954d2d, 0x6da9c014, 0x2ebdbb03, 0xe7d0da67, 0xa4c4a170,
4656 0x61f82c49, 0x22ec575e, 0xf323ee81, 0xb0379596, 0x750b18af,
4657 0x361f63b8, 0xff7202dc, 0xbc6679cb, 0x795af4f2, 0x3a4e8fe5,
4658 0x9ac3f696, 0xd9d78d81, 0x1ceb00b8, 0x5fff7baf, 0x96921acb,
4659 0xd58661dc, 0x10baece5, 0x53ae97f2, 0x82612e2d, 0xc175553a,
4660 0x0449d803, 0x475da314, 0x8e30c270, 0xcd24b967, 0x0818345e,
4661 0x4b0c4f49},
4662 {0x00000000, 0x3e6bc2ef, 0x3dd0f504, 0x03bb37eb, 0x7aa0eb09,
4663 0x44cb29e6, 0x47701e0d, 0x791bdce2, 0xf440d713, 0xca2b15fc,
4664 0xc9902217, 0xf7fbe0f8, 0x8ee03c1a, 0xb08bfef5, 0xb330c91e,
4665 0x8d5b0bf1, 0xe881ae27, 0xd6ea6cc8, 0xd5515b23, 0xeb3a99cc,
4666 0x9221452e, 0xac4a87c1, 0xaff1b02a, 0x919a72c5, 0x1cc17934,
4667 0x22aabbdb, 0x21118c30, 0x1f7a4edf, 0x6661923d, 0x580a50d2,
4668 0x5bb16739, 0x65daa5d6, 0xd0035d4f, 0xee689fa0, 0xedd3a84b,
4669 0xd3b86aa4, 0xaaa3b646, 0x94c874a9, 0x97734342, 0xa91881ad,
4670 0x24438a5c, 0x1a2848b3, 0x19937f58, 0x27f8bdb7, 0x5ee36155,
4671 0x6088a3ba, 0x63339451, 0x5d5856be, 0x3882f368, 0x06e93187,
4672 0x0552066c, 0x3b39c483, 0x42221861, 0x7c49da8e, 0x7ff2ed65,
4673 0x41992f8a, 0xccc2247b, 0xf2a9e694, 0xf112d17f, 0xcf791390,
4674 0xb662cf72, 0x88090d9d, 0x8bb23a76, 0xb5d9f899, 0xa007ba9e,
4675 0x9e6c7871, 0x9dd74f9a, 0xa3bc8d75, 0xdaa75197, 0xe4cc9378,
4676 0xe777a493, 0xd91c667c, 0x54476d8d, 0x6a2caf62, 0x69979889,
4677 0x57fc5a66, 0x2ee78684, 0x108c446b, 0x13377380, 0x2d5cb16f,
4678 0x488614b9, 0x76edd656, 0x7556e1bd, 0x4b3d2352, 0x3226ffb0,
4679 0x0c4d3d5f, 0x0ff60ab4, 0x319dc85b, 0xbcc6c3aa, 0x82ad0145,
4680 0x811636ae, 0xbf7df441, 0xc66628a3, 0xf80dea4c, 0xfbb6dda7,
4681 0xc5dd1f48, 0x7004e7d1, 0x4e6f253e, 0x4dd412d5, 0x73bfd03a,
4682 0x0aa40cd8, 0x34cfce37, 0x3774f9dc, 0x091f3b33, 0x844430c2,
4683 0xba2ff22d, 0xb994c5c6, 0x87ff0729, 0xfee4dbcb, 0xc08f1924,
4684 0xc3342ecf, 0xfd5fec20, 0x988549f6, 0xa6ee8b19, 0xa555bcf2,
4685 0x9b3e7e1d, 0xe225a2ff, 0xdc4e6010, 0xdff557fb, 0xe19e9514,
4686 0x6cc59ee5, 0x52ae5c0a, 0x51156be1, 0x6f7ea90e, 0x166575ec,
4687 0x280eb703, 0x2bb580e8, 0x15de4207, 0x010905e6, 0x3f62c709,
4688 0x3cd9f0e2, 0x02b2320d, 0x7ba9eeef, 0x45c22c00, 0x46791beb,
4689 0x7812d904, 0xf549d2f5, 0xcb22101a, 0xc89927f1, 0xf6f2e51e,
4690 0x8fe939fc, 0xb182fb13, 0xb239ccf8, 0x8c520e17, 0xe988abc1,
4691 0xd7e3692e, 0xd4585ec5, 0xea339c2a, 0x932840c8, 0xad438227,
4692 0xaef8b5cc, 0x90937723, 0x1dc87cd2, 0x23a3be3d, 0x201889d6,
4693 0x1e734b39, 0x676897db, 0x59035534, 0x5ab862df, 0x64d3a030,
4694 0xd10a58a9, 0xef619a46, 0xecdaadad, 0xd2b16f42, 0xabaab3a0,
4695 0x95c1714f, 0x967a46a4, 0xa811844b, 0x254a8fba, 0x1b214d55,
4696 0x189a7abe, 0x26f1b851, 0x5fea64b3, 0x6181a65c, 0x623a91b7,
4697 0x5c515358, 0x398bf68e, 0x07e03461, 0x045b038a, 0x3a30c165,
4698 0x432b1d87, 0x7d40df68, 0x7efbe883, 0x40902a6c, 0xcdcb219d,
4699 0xf3a0e372, 0xf01bd499, 0xce701676, 0xb76bca94, 0x8900087b,
4700 0x8abb3f90, 0xb4d0fd7f, 0xa10ebf78, 0x9f657d97, 0x9cde4a7c,
4701 0xa2b58893, 0xdbae5471, 0xe5c5969e, 0xe67ea175, 0xd815639a,
4702 0x554e686b, 0x6b25aa84, 0x689e9d6f, 0x56f55f80, 0x2fee8362,
4703 0x1185418d, 0x123e7666, 0x2c55b489, 0x498f115f, 0x77e4d3b0,
4704 0x745fe45b, 0x4a3426b4, 0x332ffa56, 0x0d4438b9, 0x0eff0f52,
4705 0x3094cdbd, 0xbdcfc64c, 0x83a404a3, 0x801f3348, 0xbe74f1a7,
4706 0xc76f2d45, 0xf904efaa, 0xfabfd841, 0xc4d41aae, 0x710de237,
4707 0x4f6620d8, 0x4cdd1733, 0x72b6d5dc, 0x0bad093e, 0x35c6cbd1,
4708 0x367dfc3a, 0x08163ed5, 0x854d3524, 0xbb26f7cb, 0xb89dc020,
4709 0x86f602cf, 0xffedde2d, 0xc1861cc2, 0xc23d2b29, 0xfc56e9c6,
4710 0x998c4c10, 0xa7e78eff, 0xa45cb914, 0x9a377bfb, 0xe32ca719,
4711 0xdd4765f6, 0xdefc521d, 0xe09790f2, 0x6dcc9b03, 0x53a759ec,
4712 0x501c6e07, 0x6e77ace8, 0x176c700a, 0x2907b2e5, 0x2abc850e,
4713 0x14d747e1},
4714 {0x00000000, 0xc0df8ec1, 0xc1b96c58, 0x0166e299, 0x8273d9b0,
4715 0x42ac5771, 0x43cab5e8, 0x83153b29, 0x45e1c3ba, 0x853e4d7b,
4716 0x8458afe2, 0x44872123, 0xc7921a0a, 0x074d94cb, 0x062b7652,
4717 0xc6f4f893, 0xcbc4f6ae, 0x0b1b786f, 0x0a7d9af6, 0xcaa21437,
4718 0x49b72f1e, 0x8968a1df, 0x880e4346, 0x48d1cd87, 0x8e253514,
4719 0x4efabbd5, 0x4f9c594c, 0x8f43d78d, 0x0c56eca4, 0xcc896265,
4720 0xcdef80fc, 0x0d300e3d, 0xd78f9c86, 0x17501247, 0x1636f0de,
4721 0xd6e97e1f, 0x55fc4536, 0x9523cbf7, 0x9445296e, 0x549aa7af,
4722 0x926e5f3c, 0x52b1d1fd, 0x53d73364, 0x9308bda5, 0x101d868c,
4723 0xd0c2084d, 0xd1a4ead4, 0x117b6415, 0x1c4b6a28, 0xdc94e4e9,
4724 0xddf20670, 0x1d2d88b1, 0x9e38b398, 0x5ee73d59, 0x5f81dfc0,
4725 0x9f5e5101, 0x59aaa992, 0x99752753, 0x9813c5ca, 0x58cc4b0b,
4726 0xdbd97022, 0x1b06fee3, 0x1a601c7a, 0xdabf92bb, 0xef1948d6,
4727 0x2fc6c617, 0x2ea0248e, 0xee7faa4f, 0x6d6a9166, 0xadb51fa7,
4728 0xacd3fd3e, 0x6c0c73ff, 0xaaf88b6c, 0x6a2705ad, 0x6b41e734,
4729 0xab9e69f5, 0x288b52dc, 0xe854dc1d, 0xe9323e84, 0x29edb045,
4730 0x24ddbe78, 0xe40230b9, 0xe564d220, 0x25bb5ce1, 0xa6ae67c8,
4731 0x6671e909, 0x67170b90, 0xa7c88551, 0x613c7dc2, 0xa1e3f303,
4732 0xa085119a, 0x605a9f5b, 0xe34fa472, 0x23902ab3, 0x22f6c82a,
4733 0xe22946eb, 0x3896d450, 0xf8495a91, 0xf92fb808, 0x39f036c9,
4734 0xbae50de0, 0x7a3a8321, 0x7b5c61b8, 0xbb83ef79, 0x7d7717ea,
4735 0xbda8992b, 0xbcce7bb2, 0x7c11f573, 0xff04ce5a, 0x3fdb409b,
4736 0x3ebda202, 0xfe622cc3, 0xf35222fe, 0x338dac3f, 0x32eb4ea6,
4737 0xf234c067, 0x7121fb4e, 0xb1fe758f, 0xb0989716, 0x704719d7,
4738 0xb6b3e144, 0x766c6f85, 0x770a8d1c, 0xb7d503dd, 0x34c038f4,
4739 0xf41fb635, 0xf57954ac, 0x35a6da6d, 0x9f35e177, 0x5fea6fb6,
4740 0x5e8c8d2f, 0x9e5303ee, 0x1d4638c7, 0xdd99b606, 0xdcff549f,
4741 0x1c20da5e, 0xdad422cd, 0x1a0bac0c, 0x1b6d4e95, 0xdbb2c054,
4742 0x58a7fb7d, 0x987875bc, 0x991e9725, 0x59c119e4, 0x54f117d9,
4743 0x942e9918, 0x95487b81, 0x5597f540, 0xd682ce69, 0x165d40a8,
4744 0x173ba231, 0xd7e42cf0, 0x1110d463, 0xd1cf5aa2, 0xd0a9b83b,
4745 0x107636fa, 0x93630dd3, 0x53bc8312, 0x52da618b, 0x9205ef4a,
4746 0x48ba7df1, 0x8865f330, 0x890311a9, 0x49dc9f68, 0xcac9a441,
4747 0x0a162a80, 0x0b70c819, 0xcbaf46d8, 0x0d5bbe4b, 0xcd84308a,
4748 0xcce2d213, 0x0c3d5cd2, 0x8f2867fb, 0x4ff7e93a, 0x4e910ba3,
4749 0x8e4e8562, 0x837e8b5f, 0x43a1059e, 0x42c7e707, 0x821869c6,
4750 0x010d52ef, 0xc1d2dc2e, 0xc0b43eb7, 0x006bb076, 0xc69f48e5,
4751 0x0640c624, 0x072624bd, 0xc7f9aa7c, 0x44ec9155, 0x84331f94,
4752 0x8555fd0d, 0x458a73cc, 0x702ca9a1, 0xb0f32760, 0xb195c5f9,
4753 0x714a4b38, 0xf25f7011, 0x3280fed0, 0x33e61c49, 0xf3399288,
4754 0x35cd6a1b, 0xf512e4da, 0xf4740643, 0x34ab8882, 0xb7beb3ab,
4755 0x77613d6a, 0x7607dff3, 0xb6d85132, 0xbbe85f0f, 0x7b37d1ce,
4756 0x7a513357, 0xba8ebd96, 0x399b86bf, 0xf944087e, 0xf822eae7,
4757 0x38fd6426, 0xfe099cb5, 0x3ed61274, 0x3fb0f0ed, 0xff6f7e2c,
4758 0x7c7a4505, 0xbca5cbc4, 0xbdc3295d, 0x7d1ca79c, 0xa7a33527,
4759 0x677cbbe6, 0x661a597f, 0xa6c5d7be, 0x25d0ec97, 0xe50f6256,
4760 0xe46980cf, 0x24b60e0e, 0xe242f69d, 0x229d785c, 0x23fb9ac5,
4761 0xe3241404, 0x60312f2d, 0xa0eea1ec, 0xa1884375, 0x6157cdb4,
4762 0x6c67c389, 0xacb84d48, 0xaddeafd1, 0x6d012110, 0xee141a39,
4763 0x2ecb94f8, 0x2fad7661, 0xef72f8a0, 0x29860033, 0xe9598ef2,
4764 0xe83f6c6b, 0x28e0e2aa, 0xabf5d983, 0x6b2a5742, 0x6a4cb5db,
4765 0xaa933b1a},
4766 {0x00000000, 0x6f4ca59b, 0x9f9e3bec, 0xf0d29e77, 0x7f3b0603,
4767 0x1077a398, 0xe0a53def, 0x8fe99874, 0xfe760c06, 0x913aa99d,
4768 0x61e837ea, 0x0ea49271, 0x814d0a05, 0xee01af9e, 0x1ed331e9,
4769 0x719f9472, 0xfced180c, 0x93a1bd97, 0x637323e0, 0x0c3f867b,
4770 0x83d61e0f, 0xec9abb94, 0x1c4825e3, 0x73048078, 0x029b140a,
4771 0x6dd7b191, 0x9d052fe6, 0xf2498a7d, 0x7da01209, 0x12ecb792,
4772 0xe23e29e5, 0x8d728c7e, 0xf8db3118, 0x97979483, 0x67450af4,
4773 0x0809af6f, 0x87e0371b, 0xe8ac9280, 0x187e0cf7, 0x7732a96c,
4774 0x06ad3d1e, 0x69e19885, 0x993306f2, 0xf67fa369, 0x79963b1d,
4775 0x16da9e86, 0xe60800f1, 0x8944a56a, 0x04362914, 0x6b7a8c8f,
4776 0x9ba812f8, 0xf4e4b763, 0x7b0d2f17, 0x14418a8c, 0xe49314fb,
4777 0x8bdfb160, 0xfa402512, 0x950c8089, 0x65de1efe, 0x0a92bb65,
4778 0x857b2311, 0xea37868a, 0x1ae518fd, 0x75a9bd66, 0xf0b76330,
4779 0x9ffbc6ab, 0x6f2958dc, 0x0065fd47, 0x8f8c6533, 0xe0c0c0a8,
4780 0x10125edf, 0x7f5efb44, 0x0ec16f36, 0x618dcaad, 0x915f54da,
4781 0xfe13f141, 0x71fa6935, 0x1eb6ccae, 0xee6452d9, 0x8128f742,
4782 0x0c5a7b3c, 0x6316dea7, 0x93c440d0, 0xfc88e54b, 0x73617d3f,
4783 0x1c2dd8a4, 0xecff46d3, 0x83b3e348, 0xf22c773a, 0x9d60d2a1,
4784 0x6db24cd6, 0x02fee94d, 0x8d177139, 0xe25bd4a2, 0x12894ad5,
4785 0x7dc5ef4e, 0x086c5228, 0x6720f7b3, 0x97f269c4, 0xf8becc5f,
4786 0x7757542b, 0x181bf1b0, 0xe8c96fc7, 0x8785ca5c, 0xf61a5e2e,
4787 0x9956fbb5, 0x698465c2, 0x06c8c059, 0x8921582d, 0xe66dfdb6,
4788 0x16bf63c1, 0x79f3c65a, 0xf4814a24, 0x9bcdefbf, 0x6b1f71c8,
4789 0x0453d453, 0x8bba4c27, 0xe4f6e9bc, 0x142477cb, 0x7b68d250,
4790 0x0af74622, 0x65bbe3b9, 0x95697dce, 0xfa25d855, 0x75cc4021,
4791 0x1a80e5ba, 0xea527bcd, 0x851ede56, 0xe06fc760, 0x8f2362fb,
4792 0x7ff1fc8c, 0x10bd5917, 0x9f54c163, 0xf01864f8, 0x00cafa8f,
4793 0x6f865f14, 0x1e19cb66, 0x71556efd, 0x8187f08a, 0xeecb5511,
4794 0x6122cd65, 0x0e6e68fe, 0xfebcf689, 0x91f05312, 0x1c82df6c,
4795 0x73ce7af7, 0x831ce480, 0xec50411b, 0x63b9d96f, 0x0cf57cf4,
4796 0xfc27e283, 0x936b4718, 0xe2f4d36a, 0x8db876f1, 0x7d6ae886,
4797 0x12264d1d, 0x9dcfd569, 0xf28370f2, 0x0251ee85, 0x6d1d4b1e,
4798 0x18b4f678, 0x77f853e3, 0x872acd94, 0xe866680f, 0x678ff07b,
4799 0x08c355e0, 0xf811cb97, 0x975d6e0c, 0xe6c2fa7e, 0x898e5fe5,
4800 0x795cc192, 0x16106409, 0x99f9fc7d, 0xf6b559e6, 0x0667c791,
4801 0x692b620a, 0xe459ee74, 0x8b154bef, 0x7bc7d598, 0x148b7003,
4802 0x9b62e877, 0xf42e4dec, 0x04fcd39b, 0x6bb07600, 0x1a2fe272,
4803 0x756347e9, 0x85b1d99e, 0xeafd7c05, 0x6514e471, 0x0a5841ea,
4804 0xfa8adf9d, 0x95c67a06, 0x10d8a450, 0x7f9401cb, 0x8f469fbc,
4805 0xe00a3a27, 0x6fe3a253, 0x00af07c8, 0xf07d99bf, 0x9f313c24,
4806 0xeeaea856, 0x81e20dcd, 0x713093ba, 0x1e7c3621, 0x9195ae55,
4807 0xfed90bce, 0x0e0b95b9, 0x61473022, 0xec35bc5c, 0x837919c7,
4808 0x73ab87b0, 0x1ce7222b, 0x930eba5f, 0xfc421fc4, 0x0c9081b3,
4809 0x63dc2428, 0x1243b05a, 0x7d0f15c1, 0x8ddd8bb6, 0xe2912e2d,
4810 0x6d78b659, 0x023413c2, 0xf2e68db5, 0x9daa282e, 0xe8039548,
4811 0x874f30d3, 0x779daea4, 0x18d10b3f, 0x9738934b, 0xf87436d0,
4812 0x08a6a8a7, 0x67ea0d3c, 0x1675994e, 0x79393cd5, 0x89eba2a2,
4813 0xe6a70739, 0x694e9f4d, 0x06023ad6, 0xf6d0a4a1, 0x999c013a,
4814 0x14ee8d44, 0x7ba228df, 0x8b70b6a8, 0xe43c1333, 0x6bd58b47,
4815 0x04992edc, 0xf44bb0ab, 0x9b071530, 0xea988142, 0x85d424d9,
4816 0x7506baae, 0x1a4a1f35, 0x95a38741, 0xfaef22da, 0x0a3dbcad,
4817 0x65711936}};
4818
4819 #endif
4820
4821 #endif
4822
4823 #if N == 4
4824
4825 #if W == 8
4826
4827 local const z_crc_t FAR crc_braid_table[][256] = {
4828 {0x00000000, 0xf1da05aa, 0x38c50d15, 0xc91f08bf, 0x718a1a2a,
4829 0x80501f80, 0x494f173f, 0xb8951295, 0xe3143454, 0x12ce31fe,
4830 0xdbd13941, 0x2a0b3ceb, 0x929e2e7e, 0x63442bd4, 0xaa5b236b,
4831 0x5b8126c1, 0x1d596ee9, 0xec836b43, 0x259c63fc, 0xd4466656,
4832 0x6cd374c3, 0x9d097169, 0x541679d6, 0xa5cc7c7c, 0xfe4d5abd,
4833 0x0f975f17, 0xc68857a8, 0x37525202, 0x8fc74097, 0x7e1d453d,
4834 0xb7024d82, 0x46d84828, 0x3ab2ddd2, 0xcb68d878, 0x0277d0c7,
4835 0xf3add56d, 0x4b38c7f8, 0xbae2c252, 0x73fdcaed, 0x8227cf47,
4836 0xd9a6e986, 0x287cec2c, 0xe163e493, 0x10b9e139, 0xa82cf3ac,
4837 0x59f6f606, 0x90e9feb9, 0x6133fb13, 0x27ebb33b, 0xd631b691,
4838 0x1f2ebe2e, 0xeef4bb84, 0x5661a911, 0xa7bbacbb, 0x6ea4a404,
4839 0x9f7ea1ae, 0xc4ff876f, 0x352582c5, 0xfc3a8a7a, 0x0de08fd0,
4840 0xb5759d45, 0x44af98ef, 0x8db09050, 0x7c6a95fa, 0x7565bba4,
4841 0x84bfbe0e, 0x4da0b6b1, 0xbc7ab31b, 0x04efa18e, 0xf535a424,
4842 0x3c2aac9b, 0xcdf0a931, 0x96718ff0, 0x67ab8a5a, 0xaeb482e5,
4843 0x5f6e874f, 0xe7fb95da, 0x16219070, 0xdf3e98cf, 0x2ee49d65,
4844 0x683cd54d, 0x99e6d0e7, 0x50f9d858, 0xa123ddf2, 0x19b6cf67,
4845 0xe86ccacd, 0x2173c272, 0xd0a9c7d8, 0x8b28e119, 0x7af2e4b3,
4846 0xb3edec0c, 0x4237e9a6, 0xfaa2fb33, 0x0b78fe99, 0xc267f626,
4847 0x33bdf38c, 0x4fd76676, 0xbe0d63dc, 0x77126b63, 0x86c86ec9,
4848 0x3e5d7c5c, 0xcf8779f6, 0x06987149, 0xf74274e3, 0xacc35222,
4849 0x5d195788, 0x94065f37, 0x65dc5a9d, 0xdd494808, 0x2c934da2,
4850 0xe58c451d, 0x145640b7, 0x528e089f, 0xa3540d35, 0x6a4b058a,
4851 0x9b910020, 0x230412b5, 0xd2de171f, 0x1bc11fa0, 0xea1b1a0a,
4852 0xb19a3ccb, 0x40403961, 0x895f31de, 0x78853474, 0xc01026e1,
4853 0x31ca234b, 0xf8d52bf4, 0x090f2e5e, 0xeacb7748, 0x1b1172e2,
4854 0xd20e7a5d, 0x23d47ff7, 0x9b416d62, 0x6a9b68c8, 0xa3846077,
4855 0x525e65dd, 0x09df431c, 0xf80546b6, 0x311a4e09, 0xc0c04ba3,
4856 0x78555936, 0x898f5c9c, 0x40905423, 0xb14a5189, 0xf79219a1,
4857 0x06481c0b, 0xcf5714b4, 0x3e8d111e, 0x8618038b, 0x77c20621,
4858 0xbedd0e9e, 0x4f070b34, 0x14862df5, 0xe55c285f, 0x2c4320e0,
4859 0xdd99254a, 0x650c37df, 0x94d63275, 0x5dc93aca, 0xac133f60,
4860 0xd079aa9a, 0x21a3af30, 0xe8bca78f, 0x1966a225, 0xa1f3b0b0,
4861 0x5029b51a, 0x9936bda5, 0x68ecb80f, 0x336d9ece, 0xc2b79b64,
4862 0x0ba893db, 0xfa729671, 0x42e784e4, 0xb33d814e, 0x7a2289f1,
4863 0x8bf88c5b, 0xcd20c473, 0x3cfac1d9, 0xf5e5c966, 0x043fcccc,
4864 0xbcaade59, 0x4d70dbf3, 0x846fd34c, 0x75b5d6e6, 0x2e34f027,
4865 0xdfeef58d, 0x16f1fd32, 0xe72bf898, 0x5fbeea0d, 0xae64efa7,
4866 0x677be718, 0x96a1e2b2, 0x9faeccec, 0x6e74c946, 0xa76bc1f9,
4867 0x56b1c453, 0xee24d6c6, 0x1ffed36c, 0xd6e1dbd3, 0x273bde79,
4868 0x7cbaf8b8, 0x8d60fd12, 0x447ff5ad, 0xb5a5f007, 0x0d30e292,
4869 0xfceae738, 0x35f5ef87, 0xc42fea2d, 0x82f7a205, 0x732da7af,
4870 0xba32af10, 0x4be8aaba, 0xf37db82f, 0x02a7bd85, 0xcbb8b53a,
4871 0x3a62b090, 0x61e39651, 0x903993fb, 0x59269b44, 0xa8fc9eee,
4872 0x10698c7b, 0xe1b389d1, 0x28ac816e, 0xd97684c4, 0xa51c113e,
4873 0x54c61494, 0x9dd91c2b, 0x6c031981, 0xd4960b14, 0x254c0ebe,
4874 0xec530601, 0x1d8903ab, 0x4608256a, 0xb7d220c0, 0x7ecd287f,
4875 0x8f172dd5, 0x37823f40, 0xc6583aea, 0x0f473255, 0xfe9d37ff,
4876 0xb8457fd7, 0x499f7a7d, 0x808072c2, 0x715a7768, 0xc9cf65fd,
4877 0x38156057, 0xf10a68e8, 0x00d06d42, 0x5b514b83, 0xaa8b4e29,
4878 0x63944696, 0x924e433c, 0x2adb51a9, 0xdb015403, 0x121e5cbc,
4879 0xe3c45916},
4880 {0x00000000, 0x0ee7e8d1, 0x1dcfd1a2, 0x13283973, 0x3b9fa344,
4881 0x35784b95, 0x265072e6, 0x28b79a37, 0x773f4688, 0x79d8ae59,
4882 0x6af0972a, 0x64177ffb, 0x4ca0e5cc, 0x42470d1d, 0x516f346e,
4883 0x5f88dcbf, 0xee7e8d10, 0xe09965c1, 0xf3b15cb2, 0xfd56b463,
4884 0xd5e12e54, 0xdb06c685, 0xc82efff6, 0xc6c91727, 0x9941cb98,
4885 0x97a62349, 0x848e1a3a, 0x8a69f2eb, 0xa2de68dc, 0xac39800d,
4886 0xbf11b97e, 0xb1f651af, 0x078c1c61, 0x096bf4b0, 0x1a43cdc3,
4887 0x14a42512, 0x3c13bf25, 0x32f457f4, 0x21dc6e87, 0x2f3b8656,
4888 0x70b35ae9, 0x7e54b238, 0x6d7c8b4b, 0x639b639a, 0x4b2cf9ad,
4889 0x45cb117c, 0x56e3280f, 0x5804c0de, 0xe9f29171, 0xe71579a0,
4890 0xf43d40d3, 0xfadaa802, 0xd26d3235, 0xdc8adae4, 0xcfa2e397,
4891 0xc1450b46, 0x9ecdd7f9, 0x902a3f28, 0x8302065b, 0x8de5ee8a,
4892 0xa55274bd, 0xabb59c6c, 0xb89da51f, 0xb67a4dce, 0x0f1838c2,
4893 0x01ffd013, 0x12d7e960, 0x1c3001b1, 0x34879b86, 0x3a607357,
4894 0x29484a24, 0x27afa2f5, 0x78277e4a, 0x76c0969b, 0x65e8afe8,
4895 0x6b0f4739, 0x43b8dd0e, 0x4d5f35df, 0x5e770cac, 0x5090e47d,
4896 0xe166b5d2, 0xef815d03, 0xfca96470, 0xf24e8ca1, 0xdaf91696,
4897 0xd41efe47, 0xc736c734, 0xc9d12fe5, 0x9659f35a, 0x98be1b8b,
4898 0x8b9622f8, 0x8571ca29, 0xadc6501e, 0xa321b8cf, 0xb00981bc,
4899 0xbeee696d, 0x089424a3, 0x0673cc72, 0x155bf501, 0x1bbc1dd0,
4900 0x330b87e7, 0x3dec6f36, 0x2ec45645, 0x2023be94, 0x7fab622b,
4901 0x714c8afa, 0x6264b389, 0x6c835b58, 0x4434c16f, 0x4ad329be,
4902 0x59fb10cd, 0x571cf81c, 0xe6eaa9b3, 0xe80d4162, 0xfb257811,
4903 0xf5c290c0, 0xdd750af7, 0xd392e226, 0xc0badb55, 0xce5d3384,
4904 0x91d5ef3b, 0x9f3207ea, 0x8c1a3e99, 0x82fdd648, 0xaa4a4c7f,
4905 0xa4ada4ae, 0xb7859ddd, 0xb962750c, 0x1e307184, 0x10d79955,
4906 0x03ffa026, 0x0d1848f7, 0x25afd2c0, 0x2b483a11, 0x38600362,
4907 0x3687ebb3, 0x690f370c, 0x67e8dfdd, 0x74c0e6ae, 0x7a270e7f,
4908 0x52909448, 0x5c777c99, 0x4f5f45ea, 0x41b8ad3b, 0xf04efc94,
4909 0xfea91445, 0xed812d36, 0xe366c5e7, 0xcbd15fd0, 0xc536b701,
4910 0xd61e8e72, 0xd8f966a3, 0x8771ba1c, 0x899652cd, 0x9abe6bbe,
4911 0x9459836f, 0xbcee1958, 0xb209f189, 0xa121c8fa, 0xafc6202b,
4912 0x19bc6de5, 0x175b8534, 0x0473bc47, 0x0a945496, 0x2223cea1,
4913 0x2cc42670, 0x3fec1f03, 0x310bf7d2, 0x6e832b6d, 0x6064c3bc,
4914 0x734cfacf, 0x7dab121e, 0x551c8829, 0x5bfb60f8, 0x48d3598b,
4915 0x4634b15a, 0xf7c2e0f5, 0xf9250824, 0xea0d3157, 0xe4ead986,
4916 0xcc5d43b1, 0xc2baab60, 0xd1929213, 0xdf757ac2, 0x80fda67d,
4917 0x8e1a4eac, 0x9d3277df, 0x93d59f0e, 0xbb620539, 0xb585ede8,
4918 0xa6add49b, 0xa84a3c4a, 0x11284946, 0x1fcfa197, 0x0ce798e4,
4919 0x02007035, 0x2ab7ea02, 0x245002d3, 0x37783ba0, 0x399fd371,
4920 0x66170fce, 0x68f0e71f, 0x7bd8de6c, 0x753f36bd, 0x5d88ac8a,
4921 0x536f445b, 0x40477d28, 0x4ea095f9, 0xff56c456, 0xf1b12c87,
4922 0xe29915f4, 0xec7efd25, 0xc4c96712, 0xca2e8fc3, 0xd906b6b0,
4923 0xd7e15e61, 0x886982de, 0x868e6a0f, 0x95a6537c, 0x9b41bbad,
4924 0xb3f6219a, 0xbd11c94b, 0xae39f038, 0xa0de18e9, 0x16a45527,
4925 0x1843bdf6, 0x0b6b8485, 0x058c6c54, 0x2d3bf663, 0x23dc1eb2,
4926 0x30f427c1, 0x3e13cf10, 0x619b13af, 0x6f7cfb7e, 0x7c54c20d,
4927 0x72b32adc, 0x5a04b0eb, 0x54e3583a, 0x47cb6149, 0x492c8998,
4928 0xf8dad837, 0xf63d30e6, 0xe5150995, 0xebf2e144, 0xc3457b73,
4929 0xcda293a2, 0xde8aaad1, 0xd06d4200, 0x8fe59ebf, 0x8102766e,
4930 0x922a4f1d, 0x9ccda7cc, 0xb47a3dfb, 0xba9dd52a, 0xa9b5ec59,
4931 0xa7520488},
4932 {0x00000000, 0x3c60e308, 0x78c1c610, 0x44a12518, 0xf1838c20,
4933 0xcde36f28, 0x89424a30, 0xb522a938, 0x38761e01, 0x0416fd09,
4934 0x40b7d811, 0x7cd73b19, 0xc9f59221, 0xf5957129, 0xb1345431,
4935 0x8d54b739, 0x70ec3c02, 0x4c8cdf0a, 0x082dfa12, 0x344d191a,
4936 0x816fb022, 0xbd0f532a, 0xf9ae7632, 0xc5ce953a, 0x489a2203,
4937 0x74fac10b, 0x305be413, 0x0c3b071b, 0xb919ae23, 0x85794d2b,
4938 0xc1d86833, 0xfdb88b3b, 0xe1d87804, 0xddb89b0c, 0x9919be14,
4939 0xa5795d1c, 0x105bf424, 0x2c3b172c, 0x689a3234, 0x54fad13c,
4940 0xd9ae6605, 0xe5ce850d, 0xa16fa015, 0x9d0f431d, 0x282dea25,
4941 0x144d092d, 0x50ec2c35, 0x6c8ccf3d, 0x91344406, 0xad54a70e,
4942 0xe9f58216, 0xd595611e, 0x60b7c826, 0x5cd72b2e, 0x18760e36,
4943 0x2416ed3e, 0xa9425a07, 0x9522b90f, 0xd1839c17, 0xede37f1f,
4944 0x58c1d627, 0x64a1352f, 0x20001037, 0x1c60f33f, 0x18c1f649,
4945 0x24a11541, 0x60003059, 0x5c60d351, 0xe9427a69, 0xd5229961,
4946 0x9183bc79, 0xade35f71, 0x20b7e848, 0x1cd70b40, 0x58762e58,
4947 0x6416cd50, 0xd1346468, 0xed548760, 0xa9f5a278, 0x95954170,
4948 0x682dca4b, 0x544d2943, 0x10ec0c5b, 0x2c8cef53, 0x99ae466b,
4949 0xa5cea563, 0xe16f807b, 0xdd0f6373, 0x505bd44a, 0x6c3b3742,
4950 0x289a125a, 0x14faf152, 0xa1d8586a, 0x9db8bb62, 0xd9199e7a,
4951 0xe5797d72, 0xf9198e4d, 0xc5796d45, 0x81d8485d, 0xbdb8ab55,
4952 0x089a026d, 0x34fae165, 0x705bc47d, 0x4c3b2775, 0xc16f904c,
4953 0xfd0f7344, 0xb9ae565c, 0x85ceb554, 0x30ec1c6c, 0x0c8cff64,
4954 0x482dda7c, 0x744d3974, 0x89f5b24f, 0xb5955147, 0xf134745f,
4955 0xcd549757, 0x78763e6f, 0x4416dd67, 0x00b7f87f, 0x3cd71b77,
4956 0xb183ac4e, 0x8de34f46, 0xc9426a5e, 0xf5228956, 0x4000206e,
4957 0x7c60c366, 0x38c1e67e, 0x04a10576, 0x3183ec92, 0x0de30f9a,
4958 0x49422a82, 0x7522c98a, 0xc00060b2, 0xfc6083ba, 0xb8c1a6a2,
4959 0x84a145aa, 0x09f5f293, 0x3595119b, 0x71343483, 0x4d54d78b,
4960 0xf8767eb3, 0xc4169dbb, 0x80b7b8a3, 0xbcd75bab, 0x416fd090,
4961 0x7d0f3398, 0x39ae1680, 0x05cef588, 0xb0ec5cb0, 0x8c8cbfb8,
4962 0xc82d9aa0, 0xf44d79a8, 0x7919ce91, 0x45792d99, 0x01d80881,
4963 0x3db8eb89, 0x889a42b1, 0xb4faa1b9, 0xf05b84a1, 0xcc3b67a9,
4964 0xd05b9496, 0xec3b779e, 0xa89a5286, 0x94fab18e, 0x21d818b6,
4965 0x1db8fbbe, 0x5919dea6, 0x65793dae, 0xe82d8a97, 0xd44d699f,
4966 0x90ec4c87, 0xac8caf8f, 0x19ae06b7, 0x25cee5bf, 0x616fc0a7,
4967 0x5d0f23af, 0xa0b7a894, 0x9cd74b9c, 0xd8766e84, 0xe4168d8c,
4968 0x513424b4, 0x6d54c7bc, 0x29f5e2a4, 0x159501ac, 0x98c1b695,
4969 0xa4a1559d, 0xe0007085, 0xdc60938d, 0x69423ab5, 0x5522d9bd,
4970 0x1183fca5, 0x2de31fad, 0x29421adb, 0x1522f9d3, 0x5183dccb,
4971 0x6de33fc3, 0xd8c196fb, 0xe4a175f3, 0xa00050eb, 0x9c60b3e3,
4972 0x113404da, 0x2d54e7d2, 0x69f5c2ca, 0x559521c2, 0xe0b788fa,
4973 0xdcd76bf2, 0x98764eea, 0xa416ade2, 0x59ae26d9, 0x65cec5d1,
4974 0x216fe0c9, 0x1d0f03c1, 0xa82daaf9, 0x944d49f1, 0xd0ec6ce9,
4975 0xec8c8fe1, 0x61d838d8, 0x5db8dbd0, 0x1919fec8, 0x25791dc0,
4976 0x905bb4f8, 0xac3b57f0, 0xe89a72e8, 0xd4fa91e0, 0xc89a62df,
4977 0xf4fa81d7, 0xb05ba4cf, 0x8c3b47c7, 0x3919eeff, 0x05790df7,
4978 0x41d828ef, 0x7db8cbe7, 0xf0ec7cde, 0xcc8c9fd6, 0x882dbace,
4979 0xb44d59c6, 0x016ff0fe, 0x3d0f13f6, 0x79ae36ee, 0x45ced5e6,
4980 0xb8765edd, 0x8416bdd5, 0xc0b798cd, 0xfcd77bc5, 0x49f5d2fd,
4981 0x759531f5, 0x313414ed, 0x0d54f7e5, 0x800040dc, 0xbc60a3d4,
4982 0xf8c186cc, 0xc4a165c4, 0x7183ccfc, 0x4de32ff4, 0x09420aec,
4983 0x3522e9e4},
4984 {0x00000000, 0x6307d924, 0xc60fb248, 0xa5086b6c, 0x576e62d1,
4985 0x3469bbf5, 0x9161d099, 0xf26609bd, 0xaedcc5a2, 0xcddb1c86,
4986 0x68d377ea, 0x0bd4aece, 0xf9b2a773, 0x9ab57e57, 0x3fbd153b,
4987 0x5cbacc1f, 0x86c88d05, 0xe5cf5421, 0x40c73f4d, 0x23c0e669,
4988 0xd1a6efd4, 0xb2a136f0, 0x17a95d9c, 0x74ae84b8, 0x281448a7,
4989 0x4b139183, 0xee1bfaef, 0x8d1c23cb, 0x7f7a2a76, 0x1c7df352,
4990 0xb975983e, 0xda72411a, 0xd6e01c4b, 0xb5e7c56f, 0x10efae03,
4991 0x73e87727, 0x818e7e9a, 0xe289a7be, 0x4781ccd2, 0x248615f6,
4992 0x783cd9e9, 0x1b3b00cd, 0xbe336ba1, 0xdd34b285, 0x2f52bb38,
4993 0x4c55621c, 0xe95d0970, 0x8a5ad054, 0x5028914e, 0x332f486a,
4994 0x96272306, 0xf520fa22, 0x0746f39f, 0x64412abb, 0xc14941d7,
4995 0xa24e98f3, 0xfef454ec, 0x9df38dc8, 0x38fbe6a4, 0x5bfc3f80,
4996 0xa99a363d, 0xca9def19, 0x6f958475, 0x0c925d51, 0x76b13ed7,
4997 0x15b6e7f3, 0xb0be8c9f, 0xd3b955bb, 0x21df5c06, 0x42d88522,
4998 0xe7d0ee4e, 0x84d7376a, 0xd86dfb75, 0xbb6a2251, 0x1e62493d,
4999 0x7d659019, 0x8f0399a4, 0xec044080, 0x490c2bec, 0x2a0bf2c8,
5000 0xf079b3d2, 0x937e6af6, 0x3676019a, 0x5571d8be, 0xa717d103,
5001 0xc4100827, 0x6118634b, 0x021fba6f, 0x5ea57670, 0x3da2af54,
5002 0x98aac438, 0xfbad1d1c, 0x09cb14a1, 0x6acccd85, 0xcfc4a6e9,
5003 0xacc37fcd, 0xa051229c, 0xc356fbb8, 0x665e90d4, 0x055949f0,
5004 0xf73f404d, 0x94389969, 0x3130f205, 0x52372b21, 0x0e8de73e,
5005 0x6d8a3e1a, 0xc8825576, 0xab858c52, 0x59e385ef, 0x3ae45ccb,
5006 0x9fec37a7, 0xfcebee83, 0x2699af99, 0x459e76bd, 0xe0961dd1,
5007 0x8391c4f5, 0x71f7cd48, 0x12f0146c, 0xb7f87f00, 0xd4ffa624,
5008 0x88456a3b, 0xeb42b31f, 0x4e4ad873, 0x2d4d0157, 0xdf2b08ea,
5009 0xbc2cd1ce, 0x1924baa2, 0x7a236386, 0xed627dae, 0x8e65a48a,
5010 0x2b6dcfe6, 0x486a16c2, 0xba0c1f7f, 0xd90bc65b, 0x7c03ad37,
5011 0x1f047413, 0x43beb80c, 0x20b96128, 0x85b10a44, 0xe6b6d360,
5012 0x14d0dadd, 0x77d703f9, 0xd2df6895, 0xb1d8b1b1, 0x6baaf0ab,
5013 0x08ad298f, 0xada542e3, 0xcea29bc7, 0x3cc4927a, 0x5fc34b5e,
5014 0xfacb2032, 0x99ccf916, 0xc5763509, 0xa671ec2d, 0x03798741,
5015 0x607e5e65, 0x921857d8, 0xf11f8efc, 0x5417e590, 0x37103cb4,
5016 0x3b8261e5, 0x5885b8c1, 0xfd8dd3ad, 0x9e8a0a89, 0x6cec0334,
5017 0x0febda10, 0xaae3b17c, 0xc9e46858, 0x955ea447, 0xf6597d63,
5018 0x5351160f, 0x3056cf2b, 0xc230c696, 0xa1371fb2, 0x043f74de,
5019 0x6738adfa, 0xbd4aece0, 0xde4d35c4, 0x7b455ea8, 0x1842878c,
5020 0xea248e31, 0x89235715, 0x2c2b3c79, 0x4f2ce55d, 0x13962942,
5021 0x7091f066, 0xd5999b0a, 0xb69e422e, 0x44f84b93, 0x27ff92b7,
5022 0x82f7f9db, 0xe1f020ff, 0x9bd34379, 0xf8d49a5d, 0x5ddcf131,
5023 0x3edb2815, 0xccbd21a8, 0xafbaf88c, 0x0ab293e0, 0x69b54ac4,
5024 0x350f86db, 0x56085fff, 0xf3003493, 0x9007edb7, 0x6261e40a,
5025 0x01663d2e, 0xa46e5642, 0xc7698f66, 0x1d1bce7c, 0x7e1c1758,
5026 0xdb147c34, 0xb813a510, 0x4a75acad, 0x29727589, 0x8c7a1ee5,
5027 0xef7dc7c1, 0xb3c70bde, 0xd0c0d2fa, 0x75c8b996, 0x16cf60b2,
5028 0xe4a9690f, 0x87aeb02b, 0x22a6db47, 0x41a10263, 0x4d335f32,
5029 0x2e348616, 0x8b3ced7a, 0xe83b345e, 0x1a5d3de3, 0x795ae4c7,
5030 0xdc528fab, 0xbf55568f, 0xe3ef9a90, 0x80e843b4, 0x25e028d8,
5031 0x46e7f1fc, 0xb481f841, 0xd7862165, 0x728e4a09, 0x1189932d,
5032 0xcbfbd237, 0xa8fc0b13, 0x0df4607f, 0x6ef3b95b, 0x9c95b0e6,
5033 0xff9269c2, 0x5a9a02ae, 0x399ddb8a, 0x65271795, 0x0620ceb1,
5034 0xa328a5dd, 0xc02f7cf9, 0x32497544, 0x514eac60, 0xf446c70c,
5035 0x97411e28},
5036 {0x00000000, 0x01b5fd1d, 0x036bfa3a, 0x02de0727, 0x06d7f474,
5037 0x07620969, 0x05bc0e4e, 0x0409f353, 0x0dafe8e8, 0x0c1a15f5,
5038 0x0ec412d2, 0x0f71efcf, 0x0b781c9c, 0x0acde181, 0x0813e6a6,
5039 0x09a61bbb, 0x1b5fd1d0, 0x1aea2ccd, 0x18342bea, 0x1981d6f7,
5040 0x1d8825a4, 0x1c3dd8b9, 0x1ee3df9e, 0x1f562283, 0x16f03938,
5041 0x1745c425, 0x159bc302, 0x142e3e1f, 0x1027cd4c, 0x11923051,
5042 0x134c3776, 0x12f9ca6b, 0x36bfa3a0, 0x370a5ebd, 0x35d4599a,
5043 0x3461a487, 0x306857d4, 0x31ddaac9, 0x3303adee, 0x32b650f3,
5044 0x3b104b48, 0x3aa5b655, 0x387bb172, 0x39ce4c6f, 0x3dc7bf3c,
5045 0x3c724221, 0x3eac4506, 0x3f19b81b, 0x2de07270, 0x2c558f6d,
5046 0x2e8b884a, 0x2f3e7557, 0x2b378604, 0x2a827b19, 0x285c7c3e,
5047 0x29e98123, 0x204f9a98, 0x21fa6785, 0x232460a2, 0x22919dbf,
5048 0x26986eec, 0x272d93f1, 0x25f394d6, 0x244669cb, 0x6d7f4740,
5049 0x6ccaba5d, 0x6e14bd7a, 0x6fa14067, 0x6ba8b334, 0x6a1d4e29,
5050 0x68c3490e, 0x6976b413, 0x60d0afa8, 0x616552b5, 0x63bb5592,
5051 0x620ea88f, 0x66075bdc, 0x67b2a6c1, 0x656ca1e6, 0x64d95cfb,
5052 0x76209690, 0x77956b8d, 0x754b6caa, 0x74fe91b7, 0x70f762e4,
5053 0x71429ff9, 0x739c98de, 0x722965c3, 0x7b8f7e78, 0x7a3a8365,
5054 0x78e48442, 0x7951795f, 0x7d588a0c, 0x7ced7711, 0x7e337036,
5055 0x7f868d2b, 0x5bc0e4e0, 0x5a7519fd, 0x58ab1eda, 0x591ee3c7,
5056 0x5d171094, 0x5ca2ed89, 0x5e7ceaae, 0x5fc917b3, 0x566f0c08,
5057 0x57daf115, 0x5504f632, 0x54b10b2f, 0x50b8f87c, 0x510d0561,
5058 0x53d30246, 0x5266ff5b, 0x409f3530, 0x412ac82d, 0x43f4cf0a,
5059 0x42413217, 0x4648c144, 0x47fd3c59, 0x45233b7e, 0x4496c663,
5060 0x4d30ddd8, 0x4c8520c5, 0x4e5b27e2, 0x4feedaff, 0x4be729ac,
5061 0x4a52d4b1, 0x488cd396, 0x49392e8b, 0xdafe8e80, 0xdb4b739d,
5062 0xd99574ba, 0xd82089a7, 0xdc297af4, 0xdd9c87e9, 0xdf4280ce,
5063 0xdef77dd3, 0xd7516668, 0xd6e49b75, 0xd43a9c52, 0xd58f614f,
5064 0xd186921c, 0xd0336f01, 0xd2ed6826, 0xd358953b, 0xc1a15f50,
5065 0xc014a24d, 0xc2caa56a, 0xc37f5877, 0xc776ab24, 0xc6c35639,
5066 0xc41d511e, 0xc5a8ac03, 0xcc0eb7b8, 0xcdbb4aa5, 0xcf654d82,
5067 0xced0b09f, 0xcad943cc, 0xcb6cbed1, 0xc9b2b9f6, 0xc80744eb,
5068 0xec412d20, 0xedf4d03d, 0xef2ad71a, 0xee9f2a07, 0xea96d954,
5069 0xeb232449, 0xe9fd236e, 0xe848de73, 0xe1eec5c8, 0xe05b38d5,
5070 0xe2853ff2, 0xe330c2ef, 0xe73931bc, 0xe68ccca1, 0xe452cb86,
5071 0xe5e7369b, 0xf71efcf0, 0xf6ab01ed, 0xf47506ca, 0xf5c0fbd7,
5072 0xf1c90884, 0xf07cf599, 0xf2a2f2be, 0xf3170fa3, 0xfab11418,
5073 0xfb04e905, 0xf9daee22, 0xf86f133f, 0xfc66e06c, 0xfdd31d71,
5074 0xff0d1a56, 0xfeb8e74b, 0xb781c9c0, 0xb63434dd, 0xb4ea33fa,
5075 0xb55fcee7, 0xb1563db4, 0xb0e3c0a9, 0xb23dc78e, 0xb3883a93,
5076 0xba2e2128, 0xbb9bdc35, 0xb945db12, 0xb8f0260f, 0xbcf9d55c,
5077 0xbd4c2841, 0xbf922f66, 0xbe27d27b, 0xacde1810, 0xad6be50d,
5078 0xafb5e22a, 0xae001f37, 0xaa09ec64, 0xabbc1179, 0xa962165e,
5079 0xa8d7eb43, 0xa171f0f8, 0xa0c40de5, 0xa21a0ac2, 0xa3aff7df,
5080 0xa7a6048c, 0xa613f991, 0xa4cdfeb6, 0xa57803ab, 0x813e6a60,
5081 0x808b977d, 0x8255905a, 0x83e06d47, 0x87e99e14, 0x865c6309,
5082 0x8482642e, 0x85379933, 0x8c918288, 0x8d247f95, 0x8ffa78b2,
5083 0x8e4f85af, 0x8a4676fc, 0x8bf38be1, 0x892d8cc6, 0x889871db,
5084 0x9a61bbb0, 0x9bd446ad, 0x990a418a, 0x98bfbc97, 0x9cb64fc4,
5085 0x9d03b2d9, 0x9fddb5fe, 0x9e6848e3, 0x97ce5358, 0x967bae45,
5086 0x94a5a962, 0x9510547f, 0x9119a72c, 0x90ac5a31, 0x92725d16,
5087 0x93c7a00b},
5088 {0x00000000, 0x6e8c1b41, 0xdd183682, 0xb3942dc3, 0x61416b45,
5089 0x0fcd7004, 0xbc595dc7, 0xd2d54686, 0xc282d68a, 0xac0ecdcb,
5090 0x1f9ae008, 0x7116fb49, 0xa3c3bdcf, 0xcd4fa68e, 0x7edb8b4d,
5091 0x1057900c, 0x5e74ab55, 0x30f8b014, 0x836c9dd7, 0xede08696,
5092 0x3f35c010, 0x51b9db51, 0xe22df692, 0x8ca1edd3, 0x9cf67ddf,
5093 0xf27a669e, 0x41ee4b5d, 0x2f62501c, 0xfdb7169a, 0x933b0ddb,
5094 0x20af2018, 0x4e233b59, 0xbce956aa, 0xd2654deb, 0x61f16028,
5095 0x0f7d7b69, 0xdda83def, 0xb32426ae, 0x00b00b6d, 0x6e3c102c,
5096 0x7e6b8020, 0x10e79b61, 0xa373b6a2, 0xcdffade3, 0x1f2aeb65,
5097 0x71a6f024, 0xc232dde7, 0xacbec6a6, 0xe29dfdff, 0x8c11e6be,
5098 0x3f85cb7d, 0x5109d03c, 0x83dc96ba, 0xed508dfb, 0x5ec4a038,
5099 0x3048bb79, 0x201f2b75, 0x4e933034, 0xfd071df7, 0x938b06b6,
5100 0x415e4030, 0x2fd25b71, 0x9c4676b2, 0xf2ca6df3, 0xa2a3ab15,
5101 0xcc2fb054, 0x7fbb9d97, 0x113786d6, 0xc3e2c050, 0xad6edb11,
5102 0x1efaf6d2, 0x7076ed93, 0x60217d9f, 0x0ead66de, 0xbd394b1d,
5103 0xd3b5505c, 0x016016da, 0x6fec0d9b, 0xdc782058, 0xb2f43b19,
5104 0xfcd70040, 0x925b1b01, 0x21cf36c2, 0x4f432d83, 0x9d966b05,
5105 0xf31a7044, 0x408e5d87, 0x2e0246c6, 0x3e55d6ca, 0x50d9cd8b,
5106 0xe34de048, 0x8dc1fb09, 0x5f14bd8f, 0x3198a6ce, 0x820c8b0d,
5107 0xec80904c, 0x1e4afdbf, 0x70c6e6fe, 0xc352cb3d, 0xadded07c,
5108 0x7f0b96fa, 0x11878dbb, 0xa213a078, 0xcc9fbb39, 0xdcc82b35,
5109 0xb2443074, 0x01d01db7, 0x6f5c06f6, 0xbd894070, 0xd3055b31,
5110 0x609176f2, 0x0e1d6db3, 0x403e56ea, 0x2eb24dab, 0x9d266068,
5111 0xf3aa7b29, 0x217f3daf, 0x4ff326ee, 0xfc670b2d, 0x92eb106c,
5112 0x82bc8060, 0xec309b21, 0x5fa4b6e2, 0x3128ada3, 0xe3fdeb25,
5113 0x8d71f064, 0x3ee5dda7, 0x5069c6e6, 0x9e36506b, 0xf0ba4b2a,
5114 0x432e66e9, 0x2da27da8, 0xff773b2e, 0x91fb206f, 0x226f0dac,
5115 0x4ce316ed, 0x5cb486e1, 0x32389da0, 0x81acb063, 0xef20ab22,
5116 0x3df5eda4, 0x5379f6e5, 0xe0eddb26, 0x8e61c067, 0xc042fb3e,
5117 0xaecee07f, 0x1d5acdbc, 0x73d6d6fd, 0xa103907b, 0xcf8f8b3a,
5118 0x7c1ba6f9, 0x1297bdb8, 0x02c02db4, 0x6c4c36f5, 0xdfd81b36,
5119 0xb1540077, 0x638146f1, 0x0d0d5db0, 0xbe997073, 0xd0156b32,
5120 0x22df06c1, 0x4c531d80, 0xffc73043, 0x914b2b02, 0x439e6d84,
5121 0x2d1276c5, 0x9e865b06, 0xf00a4047, 0xe05dd04b, 0x8ed1cb0a,
5122 0x3d45e6c9, 0x53c9fd88, 0x811cbb0e, 0xef90a04f, 0x5c048d8c,
5123 0x328896cd, 0x7cabad94, 0x1227b6d5, 0xa1b39b16, 0xcf3f8057,
5124 0x1deac6d1, 0x7366dd90, 0xc0f2f053, 0xae7eeb12, 0xbe297b1e,
5125 0xd0a5605f, 0x63314d9c, 0x0dbd56dd, 0xdf68105b, 0xb1e40b1a,
5126 0x027026d9, 0x6cfc3d98, 0x3c95fb7e, 0x5219e03f, 0xe18dcdfc,
5127 0x8f01d6bd, 0x5dd4903b, 0x33588b7a, 0x80cca6b9, 0xee40bdf8,
5128 0xfe172df4, 0x909b36b5, 0x230f1b76, 0x4d830037, 0x9f5646b1,
5129 0xf1da5df0, 0x424e7033, 0x2cc26b72, 0x62e1502b, 0x0c6d4b6a,
5130 0xbff966a9, 0xd1757de8, 0x03a03b6e, 0x6d2c202f, 0xdeb80dec,
5131 0xb03416ad, 0xa06386a1, 0xceef9de0, 0x7d7bb023, 0x13f7ab62,
5132 0xc122ede4, 0xafaef6a5, 0x1c3adb66, 0x72b6c027, 0x807cadd4,
5133 0xeef0b695, 0x5d649b56, 0x33e88017, 0xe13dc691, 0x8fb1ddd0,
5134 0x3c25f013, 0x52a9eb52, 0x42fe7b5e, 0x2c72601f, 0x9fe64ddc,
5135 0xf16a569d, 0x23bf101b, 0x4d330b5a, 0xfea72699, 0x902b3dd8,
5136 0xde080681, 0xb0841dc0, 0x03103003, 0x6d9c2b42, 0xbf496dc4,
5137 0xd1c57685, 0x62515b46, 0x0cdd4007, 0x1c8ad00b, 0x7206cb4a,
5138 0xc192e689, 0xaf1efdc8, 0x7dcbbb4e, 0x1347a00f, 0xa0d38dcc,
5139 0xce5f968d},
5140 {0x00000000, 0xe71da697, 0x154a4b6f, 0xf257edf8, 0x2a9496de,
5141 0xcd893049, 0x3fdeddb1, 0xd8c37b26, 0x55292dbc, 0xb2348b2b,
5142 0x406366d3, 0xa77ec044, 0x7fbdbb62, 0x98a01df5, 0x6af7f00d,
5143 0x8dea569a, 0xaa525b78, 0x4d4ffdef, 0xbf181017, 0x5805b680,
5144 0x80c6cda6, 0x67db6b31, 0x958c86c9, 0x7291205e, 0xff7b76c4,
5145 0x1866d053, 0xea313dab, 0x0d2c9b3c, 0xd5efe01a, 0x32f2468d,
5146 0xc0a5ab75, 0x27b80de2, 0x8fd5b0b1, 0x68c81626, 0x9a9ffbde,
5147 0x7d825d49, 0xa541266f, 0x425c80f8, 0xb00b6d00, 0x5716cb97,
5148 0xdafc9d0d, 0x3de13b9a, 0xcfb6d662, 0x28ab70f5, 0xf0680bd3,
5149 0x1775ad44, 0xe52240bc, 0x023fe62b, 0x2587ebc9, 0xc29a4d5e,
5150 0x30cda0a6, 0xd7d00631, 0x0f137d17, 0xe80edb80, 0x1a593678,
5151 0xfd4490ef, 0x70aec675, 0x97b360e2, 0x65e48d1a, 0x82f92b8d,
5152 0x5a3a50ab, 0xbd27f63c, 0x4f701bc4, 0xa86dbd53, 0xc4da6723,
5153 0x23c7c1b4, 0xd1902c4c, 0x368d8adb, 0xee4ef1fd, 0x0953576a,
5154 0xfb04ba92, 0x1c191c05, 0x91f34a9f, 0x76eeec08, 0x84b901f0,
5155 0x63a4a767, 0xbb67dc41, 0x5c7a7ad6, 0xae2d972e, 0x493031b9,
5156 0x6e883c5b, 0x89959acc, 0x7bc27734, 0x9cdfd1a3, 0x441caa85,
5157 0xa3010c12, 0x5156e1ea, 0xb64b477d, 0x3ba111e7, 0xdcbcb770,
5158 0x2eeb5a88, 0xc9f6fc1f, 0x11358739, 0xf62821ae, 0x047fcc56,
5159 0xe3626ac1, 0x4b0fd792, 0xac127105, 0x5e459cfd, 0xb9583a6a,
5160 0x619b414c, 0x8686e7db, 0x74d10a23, 0x93ccacb4, 0x1e26fa2e,
5161 0xf93b5cb9, 0x0b6cb141, 0xec7117d6, 0x34b26cf0, 0xd3afca67,
5162 0x21f8279f, 0xc6e58108, 0xe15d8cea, 0x06402a7d, 0xf417c785,
5163 0x130a6112, 0xcbc91a34, 0x2cd4bca3, 0xde83515b, 0x399ef7cc,
5164 0xb474a156, 0x536907c1, 0xa13eea39, 0x46234cae, 0x9ee03788,
5165 0x79fd911f, 0x8baa7ce7, 0x6cb7da70, 0x52c5c807, 0xb5d86e90,
5166 0x478f8368, 0xa09225ff, 0x78515ed9, 0x9f4cf84e, 0x6d1b15b6,
5167 0x8a06b321, 0x07ece5bb, 0xe0f1432c, 0x12a6aed4, 0xf5bb0843,
5168 0x2d787365, 0xca65d5f2, 0x3832380a, 0xdf2f9e9d, 0xf897937f,
5169 0x1f8a35e8, 0xedddd810, 0x0ac07e87, 0xd20305a1, 0x351ea336,
5170 0xc7494ece, 0x2054e859, 0xadbebec3, 0x4aa31854, 0xb8f4f5ac,
5171 0x5fe9533b, 0x872a281d, 0x60378e8a, 0x92606372, 0x757dc5e5,
5172 0xdd1078b6, 0x3a0dde21, 0xc85a33d9, 0x2f47954e, 0xf784ee68,
5173 0x109948ff, 0xe2cea507, 0x05d30390, 0x8839550a, 0x6f24f39d,
5174 0x9d731e65, 0x7a6eb8f2, 0xa2adc3d4, 0x45b06543, 0xb7e788bb,
5175 0x50fa2e2c, 0x774223ce, 0x905f8559, 0x620868a1, 0x8515ce36,
5176 0x5dd6b510, 0xbacb1387, 0x489cfe7f, 0xaf8158e8, 0x226b0e72,
5177 0xc576a8e5, 0x3721451d, 0xd03ce38a, 0x08ff98ac, 0xefe23e3b,
5178 0x1db5d3c3, 0xfaa87554, 0x961faf24, 0x710209b3, 0x8355e44b,
5179 0x644842dc, 0xbc8b39fa, 0x5b969f6d, 0xa9c17295, 0x4edcd402,
5180 0xc3368298, 0x242b240f, 0xd67cc9f7, 0x31616f60, 0xe9a21446,
5181 0x0ebfb2d1, 0xfce85f29, 0x1bf5f9be, 0x3c4df45c, 0xdb5052cb,
5182 0x2907bf33, 0xce1a19a4, 0x16d96282, 0xf1c4c415, 0x039329ed,
5183 0xe48e8f7a, 0x6964d9e0, 0x8e797f77, 0x7c2e928f, 0x9b333418,
5184 0x43f04f3e, 0xa4ede9a9, 0x56ba0451, 0xb1a7a2c6, 0x19ca1f95,
5185 0xfed7b902, 0x0c8054fa, 0xeb9df26d, 0x335e894b, 0xd4432fdc,
5186 0x2614c224, 0xc10964b3, 0x4ce33229, 0xabfe94be, 0x59a97946,
5187 0xbeb4dfd1, 0x6677a4f7, 0x816a0260, 0x733def98, 0x9420490f,
5188 0xb39844ed, 0x5485e27a, 0xa6d20f82, 0x41cfa915, 0x990cd233,
5189 0x7e1174a4, 0x8c46995c, 0x6b5b3fcb, 0xe6b16951, 0x01accfc6,
5190 0xf3fb223e, 0x14e684a9, 0xcc25ff8f, 0x2b385918, 0xd96fb4e0,
5191 0x3e721277},
5192 {0x00000000, 0xa58b900e, 0x9066265d, 0x35edb653, 0xfbbd4afb,
5193 0x5e36daf5, 0x6bdb6ca6, 0xce50fca8, 0x2c0b93b7, 0x898003b9,
5194 0xbc6db5ea, 0x19e625e4, 0xd7b6d94c, 0x723d4942, 0x47d0ff11,
5195 0xe25b6f1f, 0x5817276e, 0xfd9cb760, 0xc8710133, 0x6dfa913d,
5196 0xa3aa6d95, 0x0621fd9b, 0x33cc4bc8, 0x9647dbc6, 0x741cb4d9,
5197 0xd19724d7, 0xe47a9284, 0x41f1028a, 0x8fa1fe22, 0x2a2a6e2c,
5198 0x1fc7d87f, 0xba4c4871, 0xb02e4edc, 0x15a5ded2, 0x20486881,
5199 0x85c3f88f, 0x4b930427, 0xee189429, 0xdbf5227a, 0x7e7eb274,
5200 0x9c25dd6b, 0x39ae4d65, 0x0c43fb36, 0xa9c86b38, 0x67989790,
5201 0xc213079e, 0xf7feb1cd, 0x527521c3, 0xe83969b2, 0x4db2f9bc,
5202 0x785f4fef, 0xddd4dfe1, 0x13842349, 0xb60fb347, 0x83e20514,
5203 0x2669951a, 0xc432fa05, 0x61b96a0b, 0x5454dc58, 0xf1df4c56,
5204 0x3f8fb0fe, 0x9a0420f0, 0xafe996a3, 0x0a6206ad, 0xbb2d9bf9,
5205 0x1ea60bf7, 0x2b4bbda4, 0x8ec02daa, 0x4090d102, 0xe51b410c,
5206 0xd0f6f75f, 0x757d6751, 0x9726084e, 0x32ad9840, 0x07402e13,
5207 0xa2cbbe1d, 0x6c9b42b5, 0xc910d2bb, 0xfcfd64e8, 0x5976f4e6,
5208 0xe33abc97, 0x46b12c99, 0x735c9aca, 0xd6d70ac4, 0x1887f66c,
5209 0xbd0c6662, 0x88e1d031, 0x2d6a403f, 0xcf312f20, 0x6ababf2e,
5210 0x5f57097d, 0xfadc9973, 0x348c65db, 0x9107f5d5, 0xa4ea4386,
5211 0x0161d388, 0x0b03d525, 0xae88452b, 0x9b65f378, 0x3eee6376,
5212 0xf0be9fde, 0x55350fd0, 0x60d8b983, 0xc553298d, 0x27084692,
5213 0x8283d69c, 0xb76e60cf, 0x12e5f0c1, 0xdcb50c69, 0x793e9c67,
5214 0x4cd32a34, 0xe958ba3a, 0x5314f24b, 0xf69f6245, 0xc372d416,
5215 0x66f94418, 0xa8a9b8b0, 0x0d2228be, 0x38cf9eed, 0x9d440ee3,
5216 0x7f1f61fc, 0xda94f1f2, 0xef7947a1, 0x4af2d7af, 0x84a22b07,
5217 0x2129bb09, 0x14c40d5a, 0xb14f9d54, 0xad2a31b3, 0x08a1a1bd,
5218 0x3d4c17ee, 0x98c787e0, 0x56977b48, 0xf31ceb46, 0xc6f15d15,
5219 0x637acd1b, 0x8121a204, 0x24aa320a, 0x11478459, 0xb4cc1457,
5220 0x7a9ce8ff, 0xdf1778f1, 0xeafacea2, 0x4f715eac, 0xf53d16dd,
5221 0x50b686d3, 0x655b3080, 0xc0d0a08e, 0x0e805c26, 0xab0bcc28,
5222 0x9ee67a7b, 0x3b6dea75, 0xd936856a, 0x7cbd1564, 0x4950a337,
5223 0xecdb3339, 0x228bcf91, 0x87005f9f, 0xb2ede9cc, 0x176679c2,
5224 0x1d047f6f, 0xb88fef61, 0x8d625932, 0x28e9c93c, 0xe6b93594,
5225 0x4332a59a, 0x76df13c9, 0xd35483c7, 0x310fecd8, 0x94847cd6,
5226 0xa169ca85, 0x04e25a8b, 0xcab2a623, 0x6f39362d, 0x5ad4807e,
5227 0xff5f1070, 0x45135801, 0xe098c80f, 0xd5757e5c, 0x70feee52,
5228 0xbeae12fa, 0x1b2582f4, 0x2ec834a7, 0x8b43a4a9, 0x6918cbb6,
5229 0xcc935bb8, 0xf97eedeb, 0x5cf57de5, 0x92a5814d, 0x372e1143,
5230 0x02c3a710, 0xa748371e, 0x1607aa4a, 0xb38c3a44, 0x86618c17,
5231 0x23ea1c19, 0xedbae0b1, 0x483170bf, 0x7ddcc6ec, 0xd85756e2,
5232 0x3a0c39fd, 0x9f87a9f3, 0xaa6a1fa0, 0x0fe18fae, 0xc1b17306,
5233 0x643ae308, 0x51d7555b, 0xf45cc555, 0x4e108d24, 0xeb9b1d2a,
5234 0xde76ab79, 0x7bfd3b77, 0xb5adc7df, 0x102657d1, 0x25cbe182,
5235 0x8040718c, 0x621b1e93, 0xc7908e9d, 0xf27d38ce, 0x57f6a8c0,
5236 0x99a65468, 0x3c2dc466, 0x09c07235, 0xac4be23b, 0xa629e496,
5237 0x03a27498, 0x364fc2cb, 0x93c452c5, 0x5d94ae6d, 0xf81f3e63,
5238 0xcdf28830, 0x6879183e, 0x8a227721, 0x2fa9e72f, 0x1a44517c,
5239 0xbfcfc172, 0x719f3dda, 0xd414add4, 0xe1f91b87, 0x44728b89,
5240 0xfe3ec3f8, 0x5bb553f6, 0x6e58e5a5, 0xcbd375ab, 0x05838903,
5241 0xa008190d, 0x95e5af5e, 0x306e3f50, 0xd235504f, 0x77bec041,
5242 0x42537612, 0xe7d8e61c, 0x29881ab4, 0x8c038aba, 0xb9ee3ce9,
5243 0x1c65ace7}};
5244
5245 local const z_word_t FAR crc_braid_big_table[][256] = {
5246 {0x0000000000000000, 0x0e908ba500000000, 0x5d26669000000000,
5247 0x53b6ed3500000000, 0xfb4abdfb00000000, 0xf5da365e00000000,
5248 0xa66cdb6b00000000, 0xa8fc50ce00000000, 0xb7930b2c00000000,
5249 0xb903808900000000, 0xeab56dbc00000000, 0xe425e61900000000,
5250 0x4cd9b6d700000000, 0x42493d7200000000, 0x11ffd04700000000,
5251 0x1f6f5be200000000, 0x6e27175800000000, 0x60b79cfd00000000,
5252 0x330171c800000000, 0x3d91fa6d00000000, 0x956daaa300000000,
5253 0x9bfd210600000000, 0xc84bcc3300000000, 0xc6db479600000000,
5254 0xd9b41c7400000000, 0xd72497d100000000, 0x84927ae400000000,
5255 0x8a02f14100000000, 0x22fea18f00000000, 0x2c6e2a2a00000000,
5256 0x7fd8c71f00000000, 0x71484cba00000000, 0xdc4e2eb000000000,
5257 0xd2dea51500000000, 0x8168482000000000, 0x8ff8c38500000000,
5258 0x2704934b00000000, 0x299418ee00000000, 0x7a22f5db00000000,
5259 0x74b27e7e00000000, 0x6bdd259c00000000, 0x654dae3900000000,
5260 0x36fb430c00000000, 0x386bc8a900000000, 0x9097986700000000,
5261 0x9e0713c200000000, 0xcdb1fef700000000, 0xc321755200000000,
5262 0xb26939e800000000, 0xbcf9b24d00000000, 0xef4f5f7800000000,
5263 0xe1dfd4dd00000000, 0x4923841300000000, 0x47b30fb600000000,
5264 0x1405e28300000000, 0x1a95692600000000, 0x05fa32c400000000,
5265 0x0b6ab96100000000, 0x58dc545400000000, 0x564cdff100000000,
5266 0xfeb08f3f00000000, 0xf020049a00000000, 0xa396e9af00000000,
5267 0xad06620a00000000, 0xf99b2dbb00000000, 0xf70ba61e00000000,
5268 0xa4bd4b2b00000000, 0xaa2dc08e00000000, 0x02d1904000000000,
5269 0x0c411be500000000, 0x5ff7f6d000000000, 0x51677d7500000000,
5270 0x4e08269700000000, 0x4098ad3200000000, 0x132e400700000000,
5271 0x1dbecba200000000, 0xb5429b6c00000000, 0xbbd210c900000000,
5272 0xe864fdfc00000000, 0xe6f4765900000000, 0x97bc3ae300000000,
5273 0x992cb14600000000, 0xca9a5c7300000000, 0xc40ad7d600000000,
5274 0x6cf6871800000000, 0x62660cbd00000000, 0x31d0e18800000000,
5275 0x3f406a2d00000000, 0x202f31cf00000000, 0x2ebfba6a00000000,
5276 0x7d09575f00000000, 0x7399dcfa00000000, 0xdb658c3400000000,
5277 0xd5f5079100000000, 0x8643eaa400000000, 0x88d3610100000000,
5278 0x25d5030b00000000, 0x2b4588ae00000000, 0x78f3659b00000000,
5279 0x7663ee3e00000000, 0xde9fbef000000000, 0xd00f355500000000,
5280 0x83b9d86000000000, 0x8d2953c500000000, 0x9246082700000000,
5281 0x9cd6838200000000, 0xcf606eb700000000, 0xc1f0e51200000000,
5282 0x690cb5dc00000000, 0x679c3e7900000000, 0x342ad34c00000000,
5283 0x3aba58e900000000, 0x4bf2145300000000, 0x45629ff600000000,
5284 0x16d472c300000000, 0x1844f96600000000, 0xb0b8a9a800000000,
5285 0xbe28220d00000000, 0xed9ecf3800000000, 0xe30e449d00000000,
5286 0xfc611f7f00000000, 0xf2f194da00000000, 0xa14779ef00000000,
5287 0xafd7f24a00000000, 0x072ba28400000000, 0x09bb292100000000,
5288 0x5a0dc41400000000, 0x549d4fb100000000, 0xb3312aad00000000,
5289 0xbda1a10800000000, 0xee174c3d00000000, 0xe087c79800000000,
5290 0x487b975600000000, 0x46eb1cf300000000, 0x155df1c600000000,
5291 0x1bcd7a6300000000, 0x04a2218100000000, 0x0a32aa2400000000,
5292 0x5984471100000000, 0x5714ccb400000000, 0xffe89c7a00000000,
5293 0xf17817df00000000, 0xa2cefaea00000000, 0xac5e714f00000000,
5294 0xdd163df500000000, 0xd386b65000000000, 0x80305b6500000000,
5295 0x8ea0d0c000000000, 0x265c800e00000000, 0x28cc0bab00000000,
5296 0x7b7ae69e00000000, 0x75ea6d3b00000000, 0x6a8536d900000000,
5297 0x6415bd7c00000000, 0x37a3504900000000, 0x3933dbec00000000,
5298 0x91cf8b2200000000, 0x9f5f008700000000, 0xcce9edb200000000,
5299 0xc279661700000000, 0x6f7f041d00000000, 0x61ef8fb800000000,
5300 0x3259628d00000000, 0x3cc9e92800000000, 0x9435b9e600000000,
5301 0x9aa5324300000000, 0xc913df7600000000, 0xc78354d300000000,
5302 0xd8ec0f3100000000, 0xd67c849400000000, 0x85ca69a100000000,
5303 0x8b5ae20400000000, 0x23a6b2ca00000000, 0x2d36396f00000000,
5304 0x7e80d45a00000000, 0x70105fff00000000, 0x0158134500000000,
5305 0x0fc898e000000000, 0x5c7e75d500000000, 0x52eefe7000000000,
5306 0xfa12aebe00000000, 0xf482251b00000000, 0xa734c82e00000000,
5307 0xa9a4438b00000000, 0xb6cb186900000000, 0xb85b93cc00000000,
5308 0xebed7ef900000000, 0xe57df55c00000000, 0x4d81a59200000000,
5309 0x43112e3700000000, 0x10a7c30200000000, 0x1e3748a700000000,
5310 0x4aaa071600000000, 0x443a8cb300000000, 0x178c618600000000,
5311 0x191cea2300000000, 0xb1e0baed00000000, 0xbf70314800000000,
5312 0xecc6dc7d00000000, 0xe25657d800000000, 0xfd390c3a00000000,
5313 0xf3a9879f00000000, 0xa01f6aaa00000000, 0xae8fe10f00000000,
5314 0x0673b1c100000000, 0x08e33a6400000000, 0x5b55d75100000000,
5315 0x55c55cf400000000, 0x248d104e00000000, 0x2a1d9beb00000000,
5316 0x79ab76de00000000, 0x773bfd7b00000000, 0xdfc7adb500000000,
5317 0xd157261000000000, 0x82e1cb2500000000, 0x8c71408000000000,
5318 0x931e1b6200000000, 0x9d8e90c700000000, 0xce387df200000000,
5319 0xc0a8f65700000000, 0x6854a69900000000, 0x66c42d3c00000000,
5320 0x3572c00900000000, 0x3be24bac00000000, 0x96e429a600000000,
5321 0x9874a20300000000, 0xcbc24f3600000000, 0xc552c49300000000,
5322 0x6dae945d00000000, 0x633e1ff800000000, 0x3088f2cd00000000,
5323 0x3e18796800000000, 0x2177228a00000000, 0x2fe7a92f00000000,
5324 0x7c51441a00000000, 0x72c1cfbf00000000, 0xda3d9f7100000000,
5325 0xd4ad14d400000000, 0x871bf9e100000000, 0x898b724400000000,
5326 0xf8c33efe00000000, 0xf653b55b00000000, 0xa5e5586e00000000,
5327 0xab75d3cb00000000, 0x0389830500000000, 0x0d1908a000000000,
5328 0x5eafe59500000000, 0x503f6e3000000000, 0x4f5035d200000000,
5329 0x41c0be7700000000, 0x1276534200000000, 0x1ce6d8e700000000,
5330 0xb41a882900000000, 0xba8a038c00000000, 0xe93ceeb900000000,
5331 0xe7ac651c00000000},
5332 {0x0000000000000000, 0x97a61de700000000, 0x6f4b4a1500000000,
5333 0xf8ed57f200000000, 0xde96942a00000000, 0x493089cd00000000,
5334 0xb1ddde3f00000000, 0x267bc3d800000000, 0xbc2d295500000000,
5335 0x2b8b34b200000000, 0xd366634000000000, 0x44c07ea700000000,
5336 0x62bbbd7f00000000, 0xf51da09800000000, 0x0df0f76a00000000,
5337 0x9a56ea8d00000000, 0x785b52aa00000000, 0xeffd4f4d00000000,
5338 0x171018bf00000000, 0x80b6055800000000, 0xa6cdc68000000000,
5339 0x316bdb6700000000, 0xc9868c9500000000, 0x5e20917200000000,
5340 0xc4767bff00000000, 0x53d0661800000000, 0xab3d31ea00000000,
5341 0x3c9b2c0d00000000, 0x1ae0efd500000000, 0x8d46f23200000000,
5342 0x75aba5c000000000, 0xe20db82700000000, 0xb1b0d58f00000000,
5343 0x2616c86800000000, 0xdefb9f9a00000000, 0x495d827d00000000,
5344 0x6f2641a500000000, 0xf8805c4200000000, 0x006d0bb000000000,
5345 0x97cb165700000000, 0x0d9dfcda00000000, 0x9a3be13d00000000,
5346 0x62d6b6cf00000000, 0xf570ab2800000000, 0xd30b68f000000000,
5347 0x44ad751700000000, 0xbc4022e500000000, 0x2be63f0200000000,
5348 0xc9eb872500000000, 0x5e4d9ac200000000, 0xa6a0cd3000000000,
5349 0x3106d0d700000000, 0x177d130f00000000, 0x80db0ee800000000,
5350 0x7836591a00000000, 0xef9044fd00000000, 0x75c6ae7000000000,
5351 0xe260b39700000000, 0x1a8de46500000000, 0x8d2bf98200000000,
5352 0xab503a5a00000000, 0x3cf627bd00000000, 0xc41b704f00000000,
5353 0x53bd6da800000000, 0x2367dac400000000, 0xb4c1c72300000000,
5354 0x4c2c90d100000000, 0xdb8a8d3600000000, 0xfdf14eee00000000,
5355 0x6a57530900000000, 0x92ba04fb00000000, 0x051c191c00000000,
5356 0x9f4af39100000000, 0x08ecee7600000000, 0xf001b98400000000,
5357 0x67a7a46300000000, 0x41dc67bb00000000, 0xd67a7a5c00000000,
5358 0x2e972dae00000000, 0xb931304900000000, 0x5b3c886e00000000,
5359 0xcc9a958900000000, 0x3477c27b00000000, 0xa3d1df9c00000000,
5360 0x85aa1c4400000000, 0x120c01a300000000, 0xeae1565100000000,
5361 0x7d474bb600000000, 0xe711a13b00000000, 0x70b7bcdc00000000,
5362 0x885aeb2e00000000, 0x1ffcf6c900000000, 0x3987351100000000,
5363 0xae2128f600000000, 0x56cc7f0400000000, 0xc16a62e300000000,
5364 0x92d70f4b00000000, 0x057112ac00000000, 0xfd9c455e00000000,
5365 0x6a3a58b900000000, 0x4c419b6100000000, 0xdbe7868600000000,
5366 0x230ad17400000000, 0xb4accc9300000000, 0x2efa261e00000000,
5367 0xb95c3bf900000000, 0x41b16c0b00000000, 0xd61771ec00000000,
5368 0xf06cb23400000000, 0x67caafd300000000, 0x9f27f82100000000,
5369 0x0881e5c600000000, 0xea8c5de100000000, 0x7d2a400600000000,
5370 0x85c717f400000000, 0x12610a1300000000, 0x341ac9cb00000000,
5371 0xa3bcd42c00000000, 0x5b5183de00000000, 0xccf79e3900000000,
5372 0x56a174b400000000, 0xc107695300000000, 0x39ea3ea100000000,
5373 0xae4c234600000000, 0x8837e09e00000000, 0x1f91fd7900000000,
5374 0xe77caa8b00000000, 0x70dab76c00000000, 0x07c8c55200000000,
5375 0x906ed8b500000000, 0x68838f4700000000, 0xff2592a000000000,
5376 0xd95e517800000000, 0x4ef84c9f00000000, 0xb6151b6d00000000,
5377 0x21b3068a00000000, 0xbbe5ec0700000000, 0x2c43f1e000000000,
5378 0xd4aea61200000000, 0x4308bbf500000000, 0x6573782d00000000,
5379 0xf2d565ca00000000, 0x0a38323800000000, 0x9d9e2fdf00000000,
5380 0x7f9397f800000000, 0xe8358a1f00000000, 0x10d8dded00000000,
5381 0x877ec00a00000000, 0xa10503d200000000, 0x36a31e3500000000,
5382 0xce4e49c700000000, 0x59e8542000000000, 0xc3bebead00000000,
5383 0x5418a34a00000000, 0xacf5f4b800000000, 0x3b53e95f00000000,
5384 0x1d282a8700000000, 0x8a8e376000000000, 0x7263609200000000,
5385 0xe5c57d7500000000, 0xb67810dd00000000, 0x21de0d3a00000000,
5386 0xd9335ac800000000, 0x4e95472f00000000, 0x68ee84f700000000,
5387 0xff48991000000000, 0x07a5cee200000000, 0x9003d30500000000,
5388 0x0a55398800000000, 0x9df3246f00000000, 0x651e739d00000000,
5389 0xf2b86e7a00000000, 0xd4c3ada200000000, 0x4365b04500000000,
5390 0xbb88e7b700000000, 0x2c2efa5000000000, 0xce23427700000000,
5391 0x59855f9000000000, 0xa168086200000000, 0x36ce158500000000,
5392 0x10b5d65d00000000, 0x8713cbba00000000, 0x7ffe9c4800000000,
5393 0xe85881af00000000, 0x720e6b2200000000, 0xe5a876c500000000,
5394 0x1d45213700000000, 0x8ae33cd000000000, 0xac98ff0800000000,
5395 0x3b3ee2ef00000000, 0xc3d3b51d00000000, 0x5475a8fa00000000,
5396 0x24af1f9600000000, 0xb309027100000000, 0x4be4558300000000,
5397 0xdc42486400000000, 0xfa398bbc00000000, 0x6d9f965b00000000,
5398 0x9572c1a900000000, 0x02d4dc4e00000000, 0x988236c300000000,
5399 0x0f242b2400000000, 0xf7c97cd600000000, 0x606f613100000000,
5400 0x4614a2e900000000, 0xd1b2bf0e00000000, 0x295fe8fc00000000,
5401 0xbef9f51b00000000, 0x5cf44d3c00000000, 0xcb5250db00000000,
5402 0x33bf072900000000, 0xa4191ace00000000, 0x8262d91600000000,
5403 0x15c4c4f100000000, 0xed29930300000000, 0x7a8f8ee400000000,
5404 0xe0d9646900000000, 0x777f798e00000000, 0x8f922e7c00000000,
5405 0x1834339b00000000, 0x3e4ff04300000000, 0xa9e9eda400000000,
5406 0x5104ba5600000000, 0xc6a2a7b100000000, 0x951fca1900000000,
5407 0x02b9d7fe00000000, 0xfa54800c00000000, 0x6df29deb00000000,
5408 0x4b895e3300000000, 0xdc2f43d400000000, 0x24c2142600000000,
5409 0xb36409c100000000, 0x2932e34c00000000, 0xbe94feab00000000,
5410 0x4679a95900000000, 0xd1dfb4be00000000, 0xf7a4776600000000,
5411 0x60026a8100000000, 0x98ef3d7300000000, 0x0f49209400000000,
5412 0xed4498b300000000, 0x7ae2855400000000, 0x820fd2a600000000,
5413 0x15a9cf4100000000, 0x33d20c9900000000, 0xa474117e00000000,
5414 0x5c99468c00000000, 0xcb3f5b6b00000000, 0x5169b1e600000000,
5415 0xc6cfac0100000000, 0x3e22fbf300000000, 0xa984e61400000000,
5416 0x8fff25cc00000000, 0x1859382b00000000, 0xe0b46fd900000000,
5417 0x7712723e00000000},
5418 {0x0000000000000000, 0x411b8c6e00000000, 0x823618dd00000000,
5419 0xc32d94b300000000, 0x456b416100000000, 0x0470cd0f00000000,
5420 0xc75d59bc00000000, 0x8646d5d200000000, 0x8ad682c200000000,
5421 0xcbcd0eac00000000, 0x08e09a1f00000000, 0x49fb167100000000,
5422 0xcfbdc3a300000000, 0x8ea64fcd00000000, 0x4d8bdb7e00000000,
5423 0x0c90571000000000, 0x55ab745e00000000, 0x14b0f83000000000,
5424 0xd79d6c8300000000, 0x9686e0ed00000000, 0x10c0353f00000000,
5425 0x51dbb95100000000, 0x92f62de200000000, 0xd3eda18c00000000,
5426 0xdf7df69c00000000, 0x9e667af200000000, 0x5d4bee4100000000,
5427 0x1c50622f00000000, 0x9a16b7fd00000000, 0xdb0d3b9300000000,
5428 0x1820af2000000000, 0x593b234e00000000, 0xaa56e9bc00000000,
5429 0xeb4d65d200000000, 0x2860f16100000000, 0x697b7d0f00000000,
5430 0xef3da8dd00000000, 0xae2624b300000000, 0x6d0bb00000000000,
5431 0x2c103c6e00000000, 0x20806b7e00000000, 0x619be71000000000,
5432 0xa2b673a300000000, 0xe3adffcd00000000, 0x65eb2a1f00000000,
5433 0x24f0a67100000000, 0xe7dd32c200000000, 0xa6c6beac00000000,
5434 0xfffd9de200000000, 0xbee6118c00000000, 0x7dcb853f00000000,
5435 0x3cd0095100000000, 0xba96dc8300000000, 0xfb8d50ed00000000,
5436 0x38a0c45e00000000, 0x79bb483000000000, 0x752b1f2000000000,
5437 0x3430934e00000000, 0xf71d07fd00000000, 0xb6068b9300000000,
5438 0x30405e4100000000, 0x715bd22f00000000, 0xb276469c00000000,
5439 0xf36dcaf200000000, 0x15aba3a200000000, 0x54b02fcc00000000,
5440 0x979dbb7f00000000, 0xd686371100000000, 0x50c0e2c300000000,
5441 0x11db6ead00000000, 0xd2f6fa1e00000000, 0x93ed767000000000,
5442 0x9f7d216000000000, 0xde66ad0e00000000, 0x1d4b39bd00000000,
5443 0x5c50b5d300000000, 0xda16600100000000, 0x9b0dec6f00000000,
5444 0x582078dc00000000, 0x193bf4b200000000, 0x4000d7fc00000000,
5445 0x011b5b9200000000, 0xc236cf2100000000, 0x832d434f00000000,
5446 0x056b969d00000000, 0x44701af300000000, 0x875d8e4000000000,
5447 0xc646022e00000000, 0xcad6553e00000000, 0x8bcdd95000000000,
5448 0x48e04de300000000, 0x09fbc18d00000000, 0x8fbd145f00000000,
5449 0xcea6983100000000, 0x0d8b0c8200000000, 0x4c9080ec00000000,
5450 0xbffd4a1e00000000, 0xfee6c67000000000, 0x3dcb52c300000000,
5451 0x7cd0dead00000000, 0xfa960b7f00000000, 0xbb8d871100000000,
5452 0x78a013a200000000, 0x39bb9fcc00000000, 0x352bc8dc00000000,
5453 0x743044b200000000, 0xb71dd00100000000, 0xf6065c6f00000000,
5454 0x704089bd00000000, 0x315b05d300000000, 0xf276916000000000,
5455 0xb36d1d0e00000000, 0xea563e4000000000, 0xab4db22e00000000,
5456 0x6860269d00000000, 0x297baaf300000000, 0xaf3d7f2100000000,
5457 0xee26f34f00000000, 0x2d0b67fc00000000, 0x6c10eb9200000000,
5458 0x6080bc8200000000, 0x219b30ec00000000, 0xe2b6a45f00000000,
5459 0xa3ad283100000000, 0x25ebfde300000000, 0x64f0718d00000000,
5460 0xa7dde53e00000000, 0xe6c6695000000000, 0x6b50369e00000000,
5461 0x2a4bbaf000000000, 0xe9662e4300000000, 0xa87da22d00000000,
5462 0x2e3b77ff00000000, 0x6f20fb9100000000, 0xac0d6f2200000000,
5463 0xed16e34c00000000, 0xe186b45c00000000, 0xa09d383200000000,
5464 0x63b0ac8100000000, 0x22ab20ef00000000, 0xa4edf53d00000000,
5465 0xe5f6795300000000, 0x26dbede000000000, 0x67c0618e00000000,
5466 0x3efb42c000000000, 0x7fe0ceae00000000, 0xbccd5a1d00000000,
5467 0xfdd6d67300000000, 0x7b9003a100000000, 0x3a8b8fcf00000000,
5468 0xf9a61b7c00000000, 0xb8bd971200000000, 0xb42dc00200000000,
5469 0xf5364c6c00000000, 0x361bd8df00000000, 0x770054b100000000,
5470 0xf146816300000000, 0xb05d0d0d00000000, 0x737099be00000000,
5471 0x326b15d000000000, 0xc106df2200000000, 0x801d534c00000000,
5472 0x4330c7ff00000000, 0x022b4b9100000000, 0x846d9e4300000000,
5473 0xc576122d00000000, 0x065b869e00000000, 0x47400af000000000,
5474 0x4bd05de000000000, 0x0acbd18e00000000, 0xc9e6453d00000000,
5475 0x88fdc95300000000, 0x0ebb1c8100000000, 0x4fa090ef00000000,
5476 0x8c8d045c00000000, 0xcd96883200000000, 0x94adab7c00000000,
5477 0xd5b6271200000000, 0x169bb3a100000000, 0x57803fcf00000000,
5478 0xd1c6ea1d00000000, 0x90dd667300000000, 0x53f0f2c000000000,
5479 0x12eb7eae00000000, 0x1e7b29be00000000, 0x5f60a5d000000000,
5480 0x9c4d316300000000, 0xdd56bd0d00000000, 0x5b1068df00000000,
5481 0x1a0be4b100000000, 0xd926700200000000, 0x983dfc6c00000000,
5482 0x7efb953c00000000, 0x3fe0195200000000, 0xfccd8de100000000,
5483 0xbdd6018f00000000, 0x3b90d45d00000000, 0x7a8b583300000000,
5484 0xb9a6cc8000000000, 0xf8bd40ee00000000, 0xf42d17fe00000000,
5485 0xb5369b9000000000, 0x761b0f2300000000, 0x3700834d00000000,
5486 0xb146569f00000000, 0xf05ddaf100000000, 0x33704e4200000000,
5487 0x726bc22c00000000, 0x2b50e16200000000, 0x6a4b6d0c00000000,
5488 0xa966f9bf00000000, 0xe87d75d100000000, 0x6e3ba00300000000,
5489 0x2f202c6d00000000, 0xec0db8de00000000, 0xad1634b000000000,
5490 0xa18663a000000000, 0xe09defce00000000, 0x23b07b7d00000000,
5491 0x62abf71300000000, 0xe4ed22c100000000, 0xa5f6aeaf00000000,
5492 0x66db3a1c00000000, 0x27c0b67200000000, 0xd4ad7c8000000000,
5493 0x95b6f0ee00000000, 0x569b645d00000000, 0x1780e83300000000,
5494 0x91c63de100000000, 0xd0ddb18f00000000, 0x13f0253c00000000,
5495 0x52eba95200000000, 0x5e7bfe4200000000, 0x1f60722c00000000,
5496 0xdc4de69f00000000, 0x9d566af100000000, 0x1b10bf2300000000,
5497 0x5a0b334d00000000, 0x9926a7fe00000000, 0xd83d2b9000000000,
5498 0x810608de00000000, 0xc01d84b000000000, 0x0330100300000000,
5499 0x422b9c6d00000000, 0xc46d49bf00000000, 0x8576c5d100000000,
5500 0x465b516200000000, 0x0740dd0c00000000, 0x0bd08a1c00000000,
5501 0x4acb067200000000, 0x89e692c100000000, 0xc8fd1eaf00000000,
5502 0x4ebbcb7d00000000, 0x0fa0471300000000, 0xcc8dd3a000000000,
5503 0x8d965fce00000000},
5504 {0x0000000000000000, 0x1dfdb50100000000, 0x3afa6b0300000000,
5505 0x2707de0200000000, 0x74f4d70600000000, 0x6909620700000000,
5506 0x4e0ebc0500000000, 0x53f3090400000000, 0xe8e8af0d00000000,
5507 0xf5151a0c00000000, 0xd212c40e00000000, 0xcfef710f00000000,
5508 0x9c1c780b00000000, 0x81e1cd0a00000000, 0xa6e6130800000000,
5509 0xbb1ba60900000000, 0xd0d15f1b00000000, 0xcd2cea1a00000000,
5510 0xea2b341800000000, 0xf7d6811900000000, 0xa425881d00000000,
5511 0xb9d83d1c00000000, 0x9edfe31e00000000, 0x8322561f00000000,
5512 0x3839f01600000000, 0x25c4451700000000, 0x02c39b1500000000,
5513 0x1f3e2e1400000000, 0x4ccd271000000000, 0x5130921100000000,
5514 0x76374c1300000000, 0x6bcaf91200000000, 0xa0a3bf3600000000,
5515 0xbd5e0a3700000000, 0x9a59d43500000000, 0x87a4613400000000,
5516 0xd457683000000000, 0xc9aadd3100000000, 0xeead033300000000,
5517 0xf350b63200000000, 0x484b103b00000000, 0x55b6a53a00000000,
5518 0x72b17b3800000000, 0x6f4cce3900000000, 0x3cbfc73d00000000,
5519 0x2142723c00000000, 0x0645ac3e00000000, 0x1bb8193f00000000,
5520 0x7072e02d00000000, 0x6d8f552c00000000, 0x4a888b2e00000000,
5521 0x57753e2f00000000, 0x0486372b00000000, 0x197b822a00000000,
5522 0x3e7c5c2800000000, 0x2381e92900000000, 0x989a4f2000000000,
5523 0x8567fa2100000000, 0xa260242300000000, 0xbf9d912200000000,
5524 0xec6e982600000000, 0xf1932d2700000000, 0xd694f32500000000,
5525 0xcb69462400000000, 0x40477f6d00000000, 0x5dbaca6c00000000,
5526 0x7abd146e00000000, 0x6740a16f00000000, 0x34b3a86b00000000,
5527 0x294e1d6a00000000, 0x0e49c36800000000, 0x13b4766900000000,
5528 0xa8afd06000000000, 0xb552656100000000, 0x9255bb6300000000,
5529 0x8fa80e6200000000, 0xdc5b076600000000, 0xc1a6b26700000000,
5530 0xe6a16c6500000000, 0xfb5cd96400000000, 0x9096207600000000,
5531 0x8d6b957700000000, 0xaa6c4b7500000000, 0xb791fe7400000000,
5532 0xe462f77000000000, 0xf99f427100000000, 0xde989c7300000000,
5533 0xc365297200000000, 0x787e8f7b00000000, 0x65833a7a00000000,
5534 0x4284e47800000000, 0x5f79517900000000, 0x0c8a587d00000000,
5535 0x1177ed7c00000000, 0x3670337e00000000, 0x2b8d867f00000000,
5536 0xe0e4c05b00000000, 0xfd19755a00000000, 0xda1eab5800000000,
5537 0xc7e31e5900000000, 0x9410175d00000000, 0x89eda25c00000000,
5538 0xaeea7c5e00000000, 0xb317c95f00000000, 0x080c6f5600000000,
5539 0x15f1da5700000000, 0x32f6045500000000, 0x2f0bb15400000000,
5540 0x7cf8b85000000000, 0x61050d5100000000, 0x4602d35300000000,
5541 0x5bff665200000000, 0x30359f4000000000, 0x2dc82a4100000000,
5542 0x0acff44300000000, 0x1732414200000000, 0x44c1484600000000,
5543 0x593cfd4700000000, 0x7e3b234500000000, 0x63c6964400000000,
5544 0xd8dd304d00000000, 0xc520854c00000000, 0xe2275b4e00000000,
5545 0xffdaee4f00000000, 0xac29e74b00000000, 0xb1d4524a00000000,
5546 0x96d38c4800000000, 0x8b2e394900000000, 0x808efeda00000000,
5547 0x9d734bdb00000000, 0xba7495d900000000, 0xa78920d800000000,
5548 0xf47a29dc00000000, 0xe9879cdd00000000, 0xce8042df00000000,
5549 0xd37df7de00000000, 0x686651d700000000, 0x759be4d600000000,
5550 0x529c3ad400000000, 0x4f618fd500000000, 0x1c9286d100000000,
5551 0x016f33d000000000, 0x2668edd200000000, 0x3b9558d300000000,
5552 0x505fa1c100000000, 0x4da214c000000000, 0x6aa5cac200000000,
5553 0x77587fc300000000, 0x24ab76c700000000, 0x3956c3c600000000,
5554 0x1e511dc400000000, 0x03aca8c500000000, 0xb8b70ecc00000000,
5555 0xa54abbcd00000000, 0x824d65cf00000000, 0x9fb0d0ce00000000,
5556 0xcc43d9ca00000000, 0xd1be6ccb00000000, 0xf6b9b2c900000000,
5557 0xeb4407c800000000, 0x202d41ec00000000, 0x3dd0f4ed00000000,
5558 0x1ad72aef00000000, 0x072a9fee00000000, 0x54d996ea00000000,
5559 0x492423eb00000000, 0x6e23fde900000000, 0x73de48e800000000,
5560 0xc8c5eee100000000, 0xd5385be000000000, 0xf23f85e200000000,
5561 0xefc230e300000000, 0xbc3139e700000000, 0xa1cc8ce600000000,
5562 0x86cb52e400000000, 0x9b36e7e500000000, 0xf0fc1ef700000000,
5563 0xed01abf600000000, 0xca0675f400000000, 0xd7fbc0f500000000,
5564 0x8408c9f100000000, 0x99f57cf000000000, 0xbef2a2f200000000,
5565 0xa30f17f300000000, 0x1814b1fa00000000, 0x05e904fb00000000,
5566 0x22eedaf900000000, 0x3f136ff800000000, 0x6ce066fc00000000,
5567 0x711dd3fd00000000, 0x561a0dff00000000, 0x4be7b8fe00000000,
5568 0xc0c981b700000000, 0xdd3434b600000000, 0xfa33eab400000000,
5569 0xe7ce5fb500000000, 0xb43d56b100000000, 0xa9c0e3b000000000,
5570 0x8ec73db200000000, 0x933a88b300000000, 0x28212eba00000000,
5571 0x35dc9bbb00000000, 0x12db45b900000000, 0x0f26f0b800000000,
5572 0x5cd5f9bc00000000, 0x41284cbd00000000, 0x662f92bf00000000,
5573 0x7bd227be00000000, 0x1018deac00000000, 0x0de56bad00000000,
5574 0x2ae2b5af00000000, 0x371f00ae00000000, 0x64ec09aa00000000,
5575 0x7911bcab00000000, 0x5e1662a900000000, 0x43ebd7a800000000,
5576 0xf8f071a100000000, 0xe50dc4a000000000, 0xc20a1aa200000000,
5577 0xdff7afa300000000, 0x8c04a6a700000000, 0x91f913a600000000,
5578 0xb6fecda400000000, 0xab0378a500000000, 0x606a3e8100000000,
5579 0x7d978b8000000000, 0x5a90558200000000, 0x476de08300000000,
5580 0x149ee98700000000, 0x09635c8600000000, 0x2e64828400000000,
5581 0x3399378500000000, 0x8882918c00000000, 0x957f248d00000000,
5582 0xb278fa8f00000000, 0xaf854f8e00000000, 0xfc76468a00000000,
5583 0xe18bf38b00000000, 0xc68c2d8900000000, 0xdb71988800000000,
5584 0xb0bb619a00000000, 0xad46d49b00000000, 0x8a410a9900000000,
5585 0x97bcbf9800000000, 0xc44fb69c00000000, 0xd9b2039d00000000,
5586 0xfeb5dd9f00000000, 0xe348689e00000000, 0x5853ce9700000000,
5587 0x45ae7b9600000000, 0x62a9a59400000000, 0x7f54109500000000,
5588 0x2ca7199100000000, 0x315aac9000000000, 0x165d729200000000,
5589 0x0ba0c79300000000},
5590 {0x0000000000000000, 0x24d9076300000000, 0x48b20fc600000000,
5591 0x6c6b08a500000000, 0xd1626e5700000000, 0xf5bb693400000000,
5592 0x99d0619100000000, 0xbd0966f200000000, 0xa2c5dcae00000000,
5593 0x861cdbcd00000000, 0xea77d36800000000, 0xceaed40b00000000,
5594 0x73a7b2f900000000, 0x577eb59a00000000, 0x3b15bd3f00000000,
5595 0x1fccba5c00000000, 0x058dc88600000000, 0x2154cfe500000000,
5596 0x4d3fc74000000000, 0x69e6c02300000000, 0xd4efa6d100000000,
5597 0xf036a1b200000000, 0x9c5da91700000000, 0xb884ae7400000000,
5598 0xa748142800000000, 0x8391134b00000000, 0xeffa1bee00000000,
5599 0xcb231c8d00000000, 0x762a7a7f00000000, 0x52f37d1c00000000,
5600 0x3e9875b900000000, 0x1a4172da00000000, 0x4b1ce0d600000000,
5601 0x6fc5e7b500000000, 0x03aeef1000000000, 0x2777e87300000000,
5602 0x9a7e8e8100000000, 0xbea789e200000000, 0xd2cc814700000000,
5603 0xf615862400000000, 0xe9d93c7800000000, 0xcd003b1b00000000,
5604 0xa16b33be00000000, 0x85b234dd00000000, 0x38bb522f00000000,
5605 0x1c62554c00000000, 0x70095de900000000, 0x54d05a8a00000000,
5606 0x4e91285000000000, 0x6a482f3300000000, 0x0623279600000000,
5607 0x22fa20f500000000, 0x9ff3460700000000, 0xbb2a416400000000,
5608 0xd74149c100000000, 0xf3984ea200000000, 0xec54f4fe00000000,
5609 0xc88df39d00000000, 0xa4e6fb3800000000, 0x803ffc5b00000000,
5610 0x3d369aa900000000, 0x19ef9dca00000000, 0x7584956f00000000,
5611 0x515d920c00000000, 0xd73eb17600000000, 0xf3e7b61500000000,
5612 0x9f8cbeb000000000, 0xbb55b9d300000000, 0x065cdf2100000000,
5613 0x2285d84200000000, 0x4eeed0e700000000, 0x6a37d78400000000,
5614 0x75fb6dd800000000, 0x51226abb00000000, 0x3d49621e00000000,
5615 0x1990657d00000000, 0xa499038f00000000, 0x804004ec00000000,
5616 0xec2b0c4900000000, 0xc8f20b2a00000000, 0xd2b379f000000000,
5617 0xf66a7e9300000000, 0x9a01763600000000, 0xbed8715500000000,
5618 0x03d117a700000000, 0x270810c400000000, 0x4b63186100000000,
5619 0x6fba1f0200000000, 0x7076a55e00000000, 0x54afa23d00000000,
5620 0x38c4aa9800000000, 0x1c1dadfb00000000, 0xa114cb0900000000,
5621 0x85cdcc6a00000000, 0xe9a6c4cf00000000, 0xcd7fc3ac00000000,
5622 0x9c2251a000000000, 0xb8fb56c300000000, 0xd4905e6600000000,
5623 0xf049590500000000, 0x4d403ff700000000, 0x6999389400000000,
5624 0x05f2303100000000, 0x212b375200000000, 0x3ee78d0e00000000,
5625 0x1a3e8a6d00000000, 0x765582c800000000, 0x528c85ab00000000,
5626 0xef85e35900000000, 0xcb5ce43a00000000, 0xa737ec9f00000000,
5627 0x83eeebfc00000000, 0x99af992600000000, 0xbd769e4500000000,
5628 0xd11d96e000000000, 0xf5c4918300000000, 0x48cdf77100000000,
5629 0x6c14f01200000000, 0x007ff8b700000000, 0x24a6ffd400000000,
5630 0x3b6a458800000000, 0x1fb342eb00000000, 0x73d84a4e00000000,
5631 0x57014d2d00000000, 0xea082bdf00000000, 0xced12cbc00000000,
5632 0xa2ba241900000000, 0x8663237a00000000, 0xae7d62ed00000000,
5633 0x8aa4658e00000000, 0xe6cf6d2b00000000, 0xc2166a4800000000,
5634 0x7f1f0cba00000000, 0x5bc60bd900000000, 0x37ad037c00000000,
5635 0x1374041f00000000, 0x0cb8be4300000000, 0x2861b92000000000,
5636 0x440ab18500000000, 0x60d3b6e600000000, 0xdddad01400000000,
5637 0xf903d77700000000, 0x9568dfd200000000, 0xb1b1d8b100000000,
5638 0xabf0aa6b00000000, 0x8f29ad0800000000, 0xe342a5ad00000000,
5639 0xc79ba2ce00000000, 0x7a92c43c00000000, 0x5e4bc35f00000000,
5640 0x3220cbfa00000000, 0x16f9cc9900000000, 0x093576c500000000,
5641 0x2dec71a600000000, 0x4187790300000000, 0x655e7e6000000000,
5642 0xd857189200000000, 0xfc8e1ff100000000, 0x90e5175400000000,
5643 0xb43c103700000000, 0xe561823b00000000, 0xc1b8855800000000,
5644 0xadd38dfd00000000, 0x890a8a9e00000000, 0x3403ec6c00000000,
5645 0x10daeb0f00000000, 0x7cb1e3aa00000000, 0x5868e4c900000000,
5646 0x47a45e9500000000, 0x637d59f600000000, 0x0f16515300000000,
5647 0x2bcf563000000000, 0x96c630c200000000, 0xb21f37a100000000,
5648 0xde743f0400000000, 0xfaad386700000000, 0xe0ec4abd00000000,
5649 0xc4354dde00000000, 0xa85e457b00000000, 0x8c87421800000000,
5650 0x318e24ea00000000, 0x1557238900000000, 0x793c2b2c00000000,
5651 0x5de52c4f00000000, 0x4229961300000000, 0x66f0917000000000,
5652 0x0a9b99d500000000, 0x2e429eb600000000, 0x934bf84400000000,
5653 0xb792ff2700000000, 0xdbf9f78200000000, 0xff20f0e100000000,
5654 0x7943d39b00000000, 0x5d9ad4f800000000, 0x31f1dc5d00000000,
5655 0x1528db3e00000000, 0xa821bdcc00000000, 0x8cf8baaf00000000,
5656 0xe093b20a00000000, 0xc44ab56900000000, 0xdb860f3500000000,
5657 0xff5f085600000000, 0x933400f300000000, 0xb7ed079000000000,
5658 0x0ae4616200000000, 0x2e3d660100000000, 0x42566ea400000000,
5659 0x668f69c700000000, 0x7cce1b1d00000000, 0x58171c7e00000000,
5660 0x347c14db00000000, 0x10a513b800000000, 0xadac754a00000000,
5661 0x8975722900000000, 0xe51e7a8c00000000, 0xc1c77def00000000,
5662 0xde0bc7b300000000, 0xfad2c0d000000000, 0x96b9c87500000000,
5663 0xb260cf1600000000, 0x0f69a9e400000000, 0x2bb0ae8700000000,
5664 0x47dba62200000000, 0x6302a14100000000, 0x325f334d00000000,
5665 0x1686342e00000000, 0x7aed3c8b00000000, 0x5e343be800000000,
5666 0xe33d5d1a00000000, 0xc7e45a7900000000, 0xab8f52dc00000000,
5667 0x8f5655bf00000000, 0x909aefe300000000, 0xb443e88000000000,
5668 0xd828e02500000000, 0xfcf1e74600000000, 0x41f881b400000000,
5669 0x652186d700000000, 0x094a8e7200000000, 0x2d93891100000000,
5670 0x37d2fbcb00000000, 0x130bfca800000000, 0x7f60f40d00000000,
5671 0x5bb9f36e00000000, 0xe6b0959c00000000, 0xc26992ff00000000,
5672 0xae029a5a00000000, 0x8adb9d3900000000, 0x9517276500000000,
5673 0xb1ce200600000000, 0xdda528a300000000, 0xf97c2fc000000000,
5674 0x4475493200000000, 0x60ac4e5100000000, 0x0cc746f400000000,
5675 0x281e419700000000},
5676 {0x0000000000000000, 0x08e3603c00000000, 0x10c6c17800000000,
5677 0x1825a14400000000, 0x208c83f100000000, 0x286fe3cd00000000,
5678 0x304a428900000000, 0x38a922b500000000, 0x011e763800000000,
5679 0x09fd160400000000, 0x11d8b74000000000, 0x193bd77c00000000,
5680 0x2192f5c900000000, 0x297195f500000000, 0x315434b100000000,
5681 0x39b7548d00000000, 0x023cec7000000000, 0x0adf8c4c00000000,
5682 0x12fa2d0800000000, 0x1a194d3400000000, 0x22b06f8100000000,
5683 0x2a530fbd00000000, 0x3276aef900000000, 0x3a95cec500000000,
5684 0x03229a4800000000, 0x0bc1fa7400000000, 0x13e45b3000000000,
5685 0x1b073b0c00000000, 0x23ae19b900000000, 0x2b4d798500000000,
5686 0x3368d8c100000000, 0x3b8bb8fd00000000, 0x0478d8e100000000,
5687 0x0c9bb8dd00000000, 0x14be199900000000, 0x1c5d79a500000000,
5688 0x24f45b1000000000, 0x2c173b2c00000000, 0x34329a6800000000,
5689 0x3cd1fa5400000000, 0x0566aed900000000, 0x0d85cee500000000,
5690 0x15a06fa100000000, 0x1d430f9d00000000, 0x25ea2d2800000000,
5691 0x2d094d1400000000, 0x352cec5000000000, 0x3dcf8c6c00000000,
5692 0x0644349100000000, 0x0ea754ad00000000, 0x1682f5e900000000,
5693 0x1e6195d500000000, 0x26c8b76000000000, 0x2e2bd75c00000000,
5694 0x360e761800000000, 0x3eed162400000000, 0x075a42a900000000,
5695 0x0fb9229500000000, 0x179c83d100000000, 0x1f7fe3ed00000000,
5696 0x27d6c15800000000, 0x2f35a16400000000, 0x3710002000000000,
5697 0x3ff3601c00000000, 0x49f6c11800000000, 0x4115a12400000000,
5698 0x5930006000000000, 0x51d3605c00000000, 0x697a42e900000000,
5699 0x619922d500000000, 0x79bc839100000000, 0x715fe3ad00000000,
5700 0x48e8b72000000000, 0x400bd71c00000000, 0x582e765800000000,
5701 0x50cd166400000000, 0x686434d100000000, 0x608754ed00000000,
5702 0x78a2f5a900000000, 0x7041959500000000, 0x4bca2d6800000000,
5703 0x43294d5400000000, 0x5b0cec1000000000, 0x53ef8c2c00000000,
5704 0x6b46ae9900000000, 0x63a5cea500000000, 0x7b806fe100000000,
5705 0x73630fdd00000000, 0x4ad45b5000000000, 0x42373b6c00000000,
5706 0x5a129a2800000000, 0x52f1fa1400000000, 0x6a58d8a100000000,
5707 0x62bbb89d00000000, 0x7a9e19d900000000, 0x727d79e500000000,
5708 0x4d8e19f900000000, 0x456d79c500000000, 0x5d48d88100000000,
5709 0x55abb8bd00000000, 0x6d029a0800000000, 0x65e1fa3400000000,
5710 0x7dc45b7000000000, 0x75273b4c00000000, 0x4c906fc100000000,
5711 0x44730ffd00000000, 0x5c56aeb900000000, 0x54b5ce8500000000,
5712 0x6c1cec3000000000, 0x64ff8c0c00000000, 0x7cda2d4800000000,
5713 0x74394d7400000000, 0x4fb2f58900000000, 0x475195b500000000,
5714 0x5f7434f100000000, 0x579754cd00000000, 0x6f3e767800000000,
5715 0x67dd164400000000, 0x7ff8b70000000000, 0x771bd73c00000000,
5716 0x4eac83b100000000, 0x464fe38d00000000, 0x5e6a42c900000000,
5717 0x568922f500000000, 0x6e20004000000000, 0x66c3607c00000000,
5718 0x7ee6c13800000000, 0x7605a10400000000, 0x92ec833100000000,
5719 0x9a0fe30d00000000, 0x822a424900000000, 0x8ac9227500000000,
5720 0xb26000c000000000, 0xba8360fc00000000, 0xa2a6c1b800000000,
5721 0xaa45a18400000000, 0x93f2f50900000000, 0x9b11953500000000,
5722 0x8334347100000000, 0x8bd7544d00000000, 0xb37e76f800000000,
5723 0xbb9d16c400000000, 0xa3b8b78000000000, 0xab5bd7bc00000000,
5724 0x90d06f4100000000, 0x98330f7d00000000, 0x8016ae3900000000,
5725 0x88f5ce0500000000, 0xb05cecb000000000, 0xb8bf8c8c00000000,
5726 0xa09a2dc800000000, 0xa8794df400000000, 0x91ce197900000000,
5727 0x992d794500000000, 0x8108d80100000000, 0x89ebb83d00000000,
5728 0xb1429a8800000000, 0xb9a1fab400000000, 0xa1845bf000000000,
5729 0xa9673bcc00000000, 0x96945bd000000000, 0x9e773bec00000000,
5730 0x86529aa800000000, 0x8eb1fa9400000000, 0xb618d82100000000,
5731 0xbefbb81d00000000, 0xa6de195900000000, 0xae3d796500000000,
5732 0x978a2de800000000, 0x9f694dd400000000, 0x874cec9000000000,
5733 0x8faf8cac00000000, 0xb706ae1900000000, 0xbfe5ce2500000000,
5734 0xa7c06f6100000000, 0xaf230f5d00000000, 0x94a8b7a000000000,
5735 0x9c4bd79c00000000, 0x846e76d800000000, 0x8c8d16e400000000,
5736 0xb424345100000000, 0xbcc7546d00000000, 0xa4e2f52900000000,
5737 0xac01951500000000, 0x95b6c19800000000, 0x9d55a1a400000000,
5738 0x857000e000000000, 0x8d9360dc00000000, 0xb53a426900000000,
5739 0xbdd9225500000000, 0xa5fc831100000000, 0xad1fe32d00000000,
5740 0xdb1a422900000000, 0xd3f9221500000000, 0xcbdc835100000000,
5741 0xc33fe36d00000000, 0xfb96c1d800000000, 0xf375a1e400000000,
5742 0xeb5000a000000000, 0xe3b3609c00000000, 0xda04341100000000,
5743 0xd2e7542d00000000, 0xcac2f56900000000, 0xc221955500000000,
5744 0xfa88b7e000000000, 0xf26bd7dc00000000, 0xea4e769800000000,
5745 0xe2ad16a400000000, 0xd926ae5900000000, 0xd1c5ce6500000000,
5746 0xc9e06f2100000000, 0xc1030f1d00000000, 0xf9aa2da800000000,
5747 0xf1494d9400000000, 0xe96cecd000000000, 0xe18f8cec00000000,
5748 0xd838d86100000000, 0xd0dbb85d00000000, 0xc8fe191900000000,
5749 0xc01d792500000000, 0xf8b45b9000000000, 0xf0573bac00000000,
5750 0xe8729ae800000000, 0xe091fad400000000, 0xdf629ac800000000,
5751 0xd781faf400000000, 0xcfa45bb000000000, 0xc7473b8c00000000,
5752 0xffee193900000000, 0xf70d790500000000, 0xef28d84100000000,
5753 0xe7cbb87d00000000, 0xde7cecf000000000, 0xd69f8ccc00000000,
5754 0xceba2d8800000000, 0xc6594db400000000, 0xfef06f0100000000,
5755 0xf6130f3d00000000, 0xee36ae7900000000, 0xe6d5ce4500000000,
5756 0xdd5e76b800000000, 0xd5bd168400000000, 0xcd98b7c000000000,
5757 0xc57bd7fc00000000, 0xfdd2f54900000000, 0xf531957500000000,
5758 0xed14343100000000, 0xe5f7540d00000000, 0xdc40008000000000,
5759 0xd4a360bc00000000, 0xcc86c1f800000000, 0xc465a1c400000000,
5760 0xfccc837100000000, 0xf42fe34d00000000, 0xec0a420900000000,
5761 0xe4e9223500000000},
5762 {0x0000000000000000, 0xd1e8e70e00000000, 0xa2d1cf1d00000000,
5763 0x7339281300000000, 0x44a39f3b00000000, 0x954b783500000000,
5764 0xe672502600000000, 0x379ab72800000000, 0x88463f7700000000,
5765 0x59aed87900000000, 0x2a97f06a00000000, 0xfb7f176400000000,
5766 0xcce5a04c00000000, 0x1d0d474200000000, 0x6e346f5100000000,
5767 0xbfdc885f00000000, 0x108d7eee00000000, 0xc16599e000000000,
5768 0xb25cb1f300000000, 0x63b456fd00000000, 0x542ee1d500000000,
5769 0x85c606db00000000, 0xf6ff2ec800000000, 0x2717c9c600000000,
5770 0x98cb419900000000, 0x4923a69700000000, 0x3a1a8e8400000000,
5771 0xebf2698a00000000, 0xdc68dea200000000, 0x0d8039ac00000000,
5772 0x7eb911bf00000000, 0xaf51f6b100000000, 0x611c8c0700000000,
5773 0xb0f46b0900000000, 0xc3cd431a00000000, 0x1225a41400000000,
5774 0x25bf133c00000000, 0xf457f43200000000, 0x876edc2100000000,
5775 0x56863b2f00000000, 0xe95ab37000000000, 0x38b2547e00000000,
5776 0x4b8b7c6d00000000, 0x9a639b6300000000, 0xadf92c4b00000000,
5777 0x7c11cb4500000000, 0x0f28e35600000000, 0xdec0045800000000,
5778 0x7191f2e900000000, 0xa07915e700000000, 0xd3403df400000000,
5779 0x02a8dafa00000000, 0x35326dd200000000, 0xe4da8adc00000000,
5780 0x97e3a2cf00000000, 0x460b45c100000000, 0xf9d7cd9e00000000,
5781 0x283f2a9000000000, 0x5b06028300000000, 0x8aeee58d00000000,
5782 0xbd7452a500000000, 0x6c9cb5ab00000000, 0x1fa59db800000000,
5783 0xce4d7ab600000000, 0xc238180f00000000, 0x13d0ff0100000000,
5784 0x60e9d71200000000, 0xb101301c00000000, 0x869b873400000000,
5785 0x5773603a00000000, 0x244a482900000000, 0xf5a2af2700000000,
5786 0x4a7e277800000000, 0x9b96c07600000000, 0xe8afe86500000000,
5787 0x39470f6b00000000, 0x0eddb84300000000, 0xdf355f4d00000000,
5788 0xac0c775e00000000, 0x7de4905000000000, 0xd2b566e100000000,
5789 0x035d81ef00000000, 0x7064a9fc00000000, 0xa18c4ef200000000,
5790 0x9616f9da00000000, 0x47fe1ed400000000, 0x34c736c700000000,
5791 0xe52fd1c900000000, 0x5af3599600000000, 0x8b1bbe9800000000,
5792 0xf822968b00000000, 0x29ca718500000000, 0x1e50c6ad00000000,
5793 0xcfb821a300000000, 0xbc8109b000000000, 0x6d69eebe00000000,
5794 0xa324940800000000, 0x72cc730600000000, 0x01f55b1500000000,
5795 0xd01dbc1b00000000, 0xe7870b3300000000, 0x366fec3d00000000,
5796 0x4556c42e00000000, 0x94be232000000000, 0x2b62ab7f00000000,
5797 0xfa8a4c7100000000, 0x89b3646200000000, 0x585b836c00000000,
5798 0x6fc1344400000000, 0xbe29d34a00000000, 0xcd10fb5900000000,
5799 0x1cf81c5700000000, 0xb3a9eae600000000, 0x62410de800000000,
5800 0x117825fb00000000, 0xc090c2f500000000, 0xf70a75dd00000000,
5801 0x26e292d300000000, 0x55dbbac000000000, 0x84335dce00000000,
5802 0x3befd59100000000, 0xea07329f00000000, 0x993e1a8c00000000,
5803 0x48d6fd8200000000, 0x7f4c4aaa00000000, 0xaea4ada400000000,
5804 0xdd9d85b700000000, 0x0c7562b900000000, 0x8471301e00000000,
5805 0x5599d71000000000, 0x26a0ff0300000000, 0xf748180d00000000,
5806 0xc0d2af2500000000, 0x113a482b00000000, 0x6203603800000000,
5807 0xb3eb873600000000, 0x0c370f6900000000, 0xdddfe86700000000,
5808 0xaee6c07400000000, 0x7f0e277a00000000, 0x4894905200000000,
5809 0x997c775c00000000, 0xea455f4f00000000, 0x3badb84100000000,
5810 0x94fc4ef000000000, 0x4514a9fe00000000, 0x362d81ed00000000,
5811 0xe7c566e300000000, 0xd05fd1cb00000000, 0x01b736c500000000,
5812 0x728e1ed600000000, 0xa366f9d800000000, 0x1cba718700000000,
5813 0xcd52968900000000, 0xbe6bbe9a00000000, 0x6f83599400000000,
5814 0x5819eebc00000000, 0x89f109b200000000, 0xfac821a100000000,
5815 0x2b20c6af00000000, 0xe56dbc1900000000, 0x34855b1700000000,
5816 0x47bc730400000000, 0x9654940a00000000, 0xa1ce232200000000,
5817 0x7026c42c00000000, 0x031fec3f00000000, 0xd2f70b3100000000,
5818 0x6d2b836e00000000, 0xbcc3646000000000, 0xcffa4c7300000000,
5819 0x1e12ab7d00000000, 0x29881c5500000000, 0xf860fb5b00000000,
5820 0x8b59d34800000000, 0x5ab1344600000000, 0xf5e0c2f700000000,
5821 0x240825f900000000, 0x57310dea00000000, 0x86d9eae400000000,
5822 0xb1435dcc00000000, 0x60abbac200000000, 0x139292d100000000,
5823 0xc27a75df00000000, 0x7da6fd8000000000, 0xac4e1a8e00000000,
5824 0xdf77329d00000000, 0x0e9fd59300000000, 0x390562bb00000000,
5825 0xe8ed85b500000000, 0x9bd4ada600000000, 0x4a3c4aa800000000,
5826 0x4649281100000000, 0x97a1cf1f00000000, 0xe498e70c00000000,
5827 0x3570000200000000, 0x02eab72a00000000, 0xd302502400000000,
5828 0xa03b783700000000, 0x71d39f3900000000, 0xce0f176600000000,
5829 0x1fe7f06800000000, 0x6cded87b00000000, 0xbd363f7500000000,
5830 0x8aac885d00000000, 0x5b446f5300000000, 0x287d474000000000,
5831 0xf995a04e00000000, 0x56c456ff00000000, 0x872cb1f100000000,
5832 0xf41599e200000000, 0x25fd7eec00000000, 0x1267c9c400000000,
5833 0xc38f2eca00000000, 0xb0b606d900000000, 0x615ee1d700000000,
5834 0xde82698800000000, 0x0f6a8e8600000000, 0x7c53a69500000000,
5835 0xadbb419b00000000, 0x9a21f6b300000000, 0x4bc911bd00000000,
5836 0x38f039ae00000000, 0xe918dea000000000, 0x2755a41600000000,
5837 0xf6bd431800000000, 0x85846b0b00000000, 0x546c8c0500000000,
5838 0x63f63b2d00000000, 0xb21edc2300000000, 0xc127f43000000000,
5839 0x10cf133e00000000, 0xaf139b6100000000, 0x7efb7c6f00000000,
5840 0x0dc2547c00000000, 0xdc2ab37200000000, 0xebb0045a00000000,
5841 0x3a58e35400000000, 0x4961cb4700000000, 0x98892c4900000000,
5842 0x37d8daf800000000, 0xe6303df600000000, 0x950915e500000000,
5843 0x44e1f2eb00000000, 0x737b45c300000000, 0xa293a2cd00000000,
5844 0xd1aa8ade00000000, 0x00426dd000000000, 0xbf9ee58f00000000,
5845 0x6e76028100000000, 0x1d4f2a9200000000, 0xcca7cd9c00000000,
5846 0xfb3d7ab400000000, 0x2ad59dba00000000, 0x59ecb5a900000000,
5847 0x880452a700000000},
5848 {0x0000000000000000, 0xaa05daf100000000, 0x150dc53800000000,
5849 0xbf081fc900000000, 0x2a1a8a7100000000, 0x801f508000000000,
5850 0x3f174f4900000000, 0x951295b800000000, 0x543414e300000000,
5851 0xfe31ce1200000000, 0x4139d1db00000000, 0xeb3c0b2a00000000,
5852 0x7e2e9e9200000000, 0xd42b446300000000, 0x6b235baa00000000,
5853 0xc126815b00000000, 0xe96e591d00000000, 0x436b83ec00000000,
5854 0xfc639c2500000000, 0x566646d400000000, 0xc374d36c00000000,
5855 0x6971099d00000000, 0xd679165400000000, 0x7c7ccca500000000,
5856 0xbd5a4dfe00000000, 0x175f970f00000000, 0xa85788c600000000,
5857 0x0252523700000000, 0x9740c78f00000000, 0x3d451d7e00000000,
5858 0x824d02b700000000, 0x2848d84600000000, 0xd2ddb23a00000000,
5859 0x78d868cb00000000, 0xc7d0770200000000, 0x6dd5adf300000000,
5860 0xf8c7384b00000000, 0x52c2e2ba00000000, 0xedcafd7300000000,
5861 0x47cf278200000000, 0x86e9a6d900000000, 0x2cec7c2800000000,
5862 0x93e463e100000000, 0x39e1b91000000000, 0xacf32ca800000000,
5863 0x06f6f65900000000, 0xb9fee99000000000, 0x13fb336100000000,
5864 0x3bb3eb2700000000, 0x91b631d600000000, 0x2ebe2e1f00000000,
5865 0x84bbf4ee00000000, 0x11a9615600000000, 0xbbacbba700000000,
5866 0x04a4a46e00000000, 0xaea17e9f00000000, 0x6f87ffc400000000,
5867 0xc582253500000000, 0x7a8a3afc00000000, 0xd08fe00d00000000,
5868 0x459d75b500000000, 0xef98af4400000000, 0x5090b08d00000000,
5869 0xfa956a7c00000000, 0xa4bb657500000000, 0x0ebebf8400000000,
5870 0xb1b6a04d00000000, 0x1bb37abc00000000, 0x8ea1ef0400000000,
5871 0x24a435f500000000, 0x9bac2a3c00000000, 0x31a9f0cd00000000,
5872 0xf08f719600000000, 0x5a8aab6700000000, 0xe582b4ae00000000,
5873 0x4f876e5f00000000, 0xda95fbe700000000, 0x7090211600000000,
5874 0xcf983edf00000000, 0x659de42e00000000, 0x4dd53c6800000000,
5875 0xe7d0e69900000000, 0x58d8f95000000000, 0xf2dd23a100000000,
5876 0x67cfb61900000000, 0xcdca6ce800000000, 0x72c2732100000000,
5877 0xd8c7a9d000000000, 0x19e1288b00000000, 0xb3e4f27a00000000,
5878 0x0cecedb300000000, 0xa6e9374200000000, 0x33fba2fa00000000,
5879 0x99fe780b00000000, 0x26f667c200000000, 0x8cf3bd3300000000,
5880 0x7666d74f00000000, 0xdc630dbe00000000, 0x636b127700000000,
5881 0xc96ec88600000000, 0x5c7c5d3e00000000, 0xf67987cf00000000,
5882 0x4971980600000000, 0xe37442f700000000, 0x2252c3ac00000000,
5883 0x8857195d00000000, 0x375f069400000000, 0x9d5adc6500000000,
5884 0x084849dd00000000, 0xa24d932c00000000, 0x1d458ce500000000,
5885 0xb740561400000000, 0x9f088e5200000000, 0x350d54a300000000,
5886 0x8a054b6a00000000, 0x2000919b00000000, 0xb512042300000000,
5887 0x1f17ded200000000, 0xa01fc11b00000000, 0x0a1a1bea00000000,
5888 0xcb3c9ab100000000, 0x6139404000000000, 0xde315f8900000000,
5889 0x7434857800000000, 0xe12610c000000000, 0x4b23ca3100000000,
5890 0xf42bd5f800000000, 0x5e2e0f0900000000, 0x4877cbea00000000,
5891 0xe272111b00000000, 0x5d7a0ed200000000, 0xf77fd42300000000,
5892 0x626d419b00000000, 0xc8689b6a00000000, 0x776084a300000000,
5893 0xdd655e5200000000, 0x1c43df0900000000, 0xb64605f800000000,
5894 0x094e1a3100000000, 0xa34bc0c000000000, 0x3659557800000000,
5895 0x9c5c8f8900000000, 0x2354904000000000, 0x89514ab100000000,
5896 0xa11992f700000000, 0x0b1c480600000000, 0xb41457cf00000000,
5897 0x1e118d3e00000000, 0x8b03188600000000, 0x2106c27700000000,
5898 0x9e0eddbe00000000, 0x340b074f00000000, 0xf52d861400000000,
5899 0x5f285ce500000000, 0xe020432c00000000, 0x4a2599dd00000000,
5900 0xdf370c6500000000, 0x7532d69400000000, 0xca3ac95d00000000,
5901 0x603f13ac00000000, 0x9aaa79d000000000, 0x30afa32100000000,
5902 0x8fa7bce800000000, 0x25a2661900000000, 0xb0b0f3a100000000,
5903 0x1ab5295000000000, 0xa5bd369900000000, 0x0fb8ec6800000000,
5904 0xce9e6d3300000000, 0x649bb7c200000000, 0xdb93a80b00000000,
5905 0x719672fa00000000, 0xe484e74200000000, 0x4e813db300000000,
5906 0xf189227a00000000, 0x5b8cf88b00000000, 0x73c420cd00000000,
5907 0xd9c1fa3c00000000, 0x66c9e5f500000000, 0xcccc3f0400000000,
5908 0x59deaabc00000000, 0xf3db704d00000000, 0x4cd36f8400000000,
5909 0xe6d6b57500000000, 0x27f0342e00000000, 0x8df5eedf00000000,
5910 0x32fdf11600000000, 0x98f82be700000000, 0x0deabe5f00000000,
5911 0xa7ef64ae00000000, 0x18e77b6700000000, 0xb2e2a19600000000,
5912 0xecccae9f00000000, 0x46c9746e00000000, 0xf9c16ba700000000,
5913 0x53c4b15600000000, 0xc6d624ee00000000, 0x6cd3fe1f00000000,
5914 0xd3dbe1d600000000, 0x79de3b2700000000, 0xb8f8ba7c00000000,
5915 0x12fd608d00000000, 0xadf57f4400000000, 0x07f0a5b500000000,
5916 0x92e2300d00000000, 0x38e7eafc00000000, 0x87eff53500000000,
5917 0x2dea2fc400000000, 0x05a2f78200000000, 0xafa72d7300000000,
5918 0x10af32ba00000000, 0xbaaae84b00000000, 0x2fb87df300000000,
5919 0x85bda70200000000, 0x3ab5b8cb00000000, 0x90b0623a00000000,
5920 0x5196e36100000000, 0xfb93399000000000, 0x449b265900000000,
5921 0xee9efca800000000, 0x7b8c691000000000, 0xd189b3e100000000,
5922 0x6e81ac2800000000, 0xc48476d900000000, 0x3e111ca500000000,
5923 0x9414c65400000000, 0x2b1cd99d00000000, 0x8119036c00000000,
5924 0x140b96d400000000, 0xbe0e4c2500000000, 0x010653ec00000000,
5925 0xab03891d00000000, 0x6a25084600000000, 0xc020d2b700000000,
5926 0x7f28cd7e00000000, 0xd52d178f00000000, 0x403f823700000000,
5927 0xea3a58c600000000, 0x5532470f00000000, 0xff379dfe00000000,
5928 0xd77f45b800000000, 0x7d7a9f4900000000, 0xc272808000000000,
5929 0x68775a7100000000, 0xfd65cfc900000000, 0x5760153800000000,
5930 0xe8680af100000000, 0x426dd00000000000, 0x834b515b00000000,
5931 0x294e8baa00000000, 0x9646946300000000, 0x3c434e9200000000,
5932 0xa951db2a00000000, 0x035401db00000000, 0xbc5c1e1200000000,
5933 0x1659c4e300000000}};
5934
5935 #else /* W == 4 */
5936
5937 local const z_crc_t FAR crc_braid_table[][256] = {
5938 {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87,
5939 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede,
5940 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab,
5941 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c,
5942 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1,
5943 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7,
5944 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e,
5945 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308,
5946 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5,
5947 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472,
5948 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07,
5949 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e,
5950 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa,
5951 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec,
5952 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6,
5953 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0,
5954 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3,
5955 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba,
5956 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf,
5957 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975,
5958 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8,
5959 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde,
5960 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a,
5961 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c,
5962 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1,
5963 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65,
5964 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410,
5965 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649,
5966 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a,
5967 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c,
5968 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946,
5969 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450,
5970 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e,
5971 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857,
5972 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022,
5973 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5,
5974 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758,
5975 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e,
5976 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d,
5977 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b,
5978 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6,
5979 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401,
5980 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74,
5981 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d,
5982 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073,
5983 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65,
5984 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f,
5985 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749,
5986 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a,
5987 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033,
5988 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846,
5989 0x0d7139d7},
5990 {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563,
5991 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f,
5992 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875,
5993 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536,
5994 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8,
5995 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43,
5996 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f,
5997 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184,
5998 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a,
5999 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39,
6000 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523,
6001 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f,
6002 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d,
6003 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6,
6004 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b,
6005 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0,
6006 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151,
6007 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d,
6008 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47,
6009 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a,
6010 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964,
6011 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef,
6012 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d,
6013 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6,
6014 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348,
6015 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53,
6016 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449,
6017 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645,
6018 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4,
6019 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f,
6020 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2,
6021 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69,
6022 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46,
6023 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a,
6024 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650,
6025 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13,
6026 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded,
6027 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366,
6028 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57,
6029 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc,
6030 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222,
6031 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61,
6032 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b,
6033 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277,
6034 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558,
6035 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3,
6036 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e,
6037 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5,
6038 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74,
6039 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78,
6040 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262,
6041 0x1c53e98a},
6042 {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b,
6043 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40,
6044 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580,
6045 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7,
6046 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a,
6047 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37,
6048 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75,
6049 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218,
6050 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5,
6051 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2,
6052 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02,
6053 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59,
6054 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1,
6055 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c,
6056 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a,
6057 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307,
6058 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486,
6059 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd,
6060 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d,
6061 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2,
6062 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f,
6063 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72,
6064 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8,
6065 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985,
6066 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268,
6067 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94,
6068 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454,
6069 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f,
6070 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e,
6071 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3,
6072 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915,
6073 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778,
6074 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821,
6075 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a,
6076 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba,
6077 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d,
6078 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560,
6079 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d,
6080 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe,
6081 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3,
6082 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e,
6083 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509,
6084 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9,
6085 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92,
6086 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb,
6087 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6,
6088 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50,
6089 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d,
6090 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc,
6091 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7,
6092 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927,
6093 0x3f88e851},
6094 {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96,
6095 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8,
6096 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0,
6097 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14,
6098 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7,
6099 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4,
6100 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe,
6101 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad,
6102 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e,
6103 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa,
6104 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2,
6105 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c,
6106 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab,
6107 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8,
6108 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d,
6109 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e,
6110 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7,
6111 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99,
6112 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1,
6113 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690,
6114 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933,
6115 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20,
6116 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf,
6117 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc,
6118 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f,
6119 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92,
6120 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca,
6121 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4,
6122 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd,
6123 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de,
6124 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb,
6125 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8,
6126 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474,
6127 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a,
6128 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252,
6129 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6,
6130 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55,
6131 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846,
6132 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7,
6133 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4,
6134 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47,
6135 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3,
6136 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb,
6137 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5,
6138 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49,
6139 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a,
6140 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f,
6141 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c,
6142 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305,
6143 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b,
6144 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523,
6145 0x3dee8ca6}};
6146
6147 local const z_word_t FAR crc_braid_big_table[][256] = {
6148 {0x00000000, 0x85d996dd, 0x4bb55c60, 0xce6ccabd, 0x966ab9c0,
6149 0x13b32f1d, 0xdddfe5a0, 0x5806737d, 0x6dd3035a, 0xe80a9587,
6150 0x26665f3a, 0xa3bfc9e7, 0xfbb9ba9a, 0x7e602c47, 0xb00ce6fa,
6151 0x35d57027, 0xdaa607b4, 0x5f7f9169, 0x91135bd4, 0x14cacd09,
6152 0x4cccbe74, 0xc91528a9, 0x0779e214, 0x82a074c9, 0xb77504ee,
6153 0x32ac9233, 0xfcc0588e, 0x7919ce53, 0x211fbd2e, 0xa4c62bf3,
6154 0x6aaae14e, 0xef737793, 0xf54b7eb3, 0x7092e86e, 0xbefe22d3,
6155 0x3b27b40e, 0x6321c773, 0xe6f851ae, 0x28949b13, 0xad4d0dce,
6156 0x98987de9, 0x1d41eb34, 0xd32d2189, 0x56f4b754, 0x0ef2c429,
6157 0x8b2b52f4, 0x45479849, 0xc09e0e94, 0x2fed7907, 0xaa34efda,
6158 0x64582567, 0xe181b3ba, 0xb987c0c7, 0x3c5e561a, 0xf2329ca7,
6159 0x77eb0a7a, 0x423e7a5d, 0xc7e7ec80, 0x098b263d, 0x8c52b0e0,
6160 0xd454c39d, 0x518d5540, 0x9fe19ffd, 0x1a380920, 0xab918dbd,
6161 0x2e481b60, 0xe024d1dd, 0x65fd4700, 0x3dfb347d, 0xb822a2a0,
6162 0x764e681d, 0xf397fec0, 0xc6428ee7, 0x439b183a, 0x8df7d287,
6163 0x082e445a, 0x50283727, 0xd5f1a1fa, 0x1b9d6b47, 0x9e44fd9a,
6164 0x71378a09, 0xf4ee1cd4, 0x3a82d669, 0xbf5b40b4, 0xe75d33c9,
6165 0x6284a514, 0xace86fa9, 0x2931f974, 0x1ce48953, 0x993d1f8e,
6166 0x5751d533, 0xd28843ee, 0x8a8e3093, 0x0f57a64e, 0xc13b6cf3,
6167 0x44e2fa2e, 0x5edaf30e, 0xdb0365d3, 0x156faf6e, 0x90b639b3,
6168 0xc8b04ace, 0x4d69dc13, 0x830516ae, 0x06dc8073, 0x3309f054,
6169 0xb6d06689, 0x78bcac34, 0xfd653ae9, 0xa5634994, 0x20badf49,
6170 0xeed615f4, 0x6b0f8329, 0x847cf4ba, 0x01a56267, 0xcfc9a8da,
6171 0x4a103e07, 0x12164d7a, 0x97cfdba7, 0x59a3111a, 0xdc7a87c7,
6172 0xe9aff7e0, 0x6c76613d, 0xa21aab80, 0x27c33d5d, 0x7fc54e20,
6173 0xfa1cd8fd, 0x34701240, 0xb1a9849d, 0x17256aa0, 0x92fcfc7d,
6174 0x5c9036c0, 0xd949a01d, 0x814fd360, 0x049645bd, 0xcafa8f00,
6175 0x4f2319dd, 0x7af669fa, 0xff2fff27, 0x3143359a, 0xb49aa347,
6176 0xec9cd03a, 0x694546e7, 0xa7298c5a, 0x22f01a87, 0xcd836d14,
6177 0x485afbc9, 0x86363174, 0x03efa7a9, 0x5be9d4d4, 0xde304209,
6178 0x105c88b4, 0x95851e69, 0xa0506e4e, 0x2589f893, 0xebe5322e,
6179 0x6e3ca4f3, 0x363ad78e, 0xb3e34153, 0x7d8f8bee, 0xf8561d33,
6180 0xe26e1413, 0x67b782ce, 0xa9db4873, 0x2c02deae, 0x7404add3,
6181 0xf1dd3b0e, 0x3fb1f1b3, 0xba68676e, 0x8fbd1749, 0x0a648194,
6182 0xc4084b29, 0x41d1ddf4, 0x19d7ae89, 0x9c0e3854, 0x5262f2e9,
6183 0xd7bb6434, 0x38c813a7, 0xbd11857a, 0x737d4fc7, 0xf6a4d91a,
6184 0xaea2aa67, 0x2b7b3cba, 0xe517f607, 0x60ce60da, 0x551b10fd,
6185 0xd0c28620, 0x1eae4c9d, 0x9b77da40, 0xc371a93d, 0x46a83fe0,
6186 0x88c4f55d, 0x0d1d6380, 0xbcb4e71d, 0x396d71c0, 0xf701bb7d,
6187 0x72d82da0, 0x2ade5edd, 0xaf07c800, 0x616b02bd, 0xe4b29460,
6188 0xd167e447, 0x54be729a, 0x9ad2b827, 0x1f0b2efa, 0x470d5d87,
6189 0xc2d4cb5a, 0x0cb801e7, 0x8961973a, 0x6612e0a9, 0xe3cb7674,
6190 0x2da7bcc9, 0xa87e2a14, 0xf0785969, 0x75a1cfb4, 0xbbcd0509,
6191 0x3e1493d4, 0x0bc1e3f3, 0x8e18752e, 0x4074bf93, 0xc5ad294e,
6192 0x9dab5a33, 0x1872ccee, 0xd61e0653, 0x53c7908e, 0x49ff99ae,
6193 0xcc260f73, 0x024ac5ce, 0x87935313, 0xdf95206e, 0x5a4cb6b3,
6194 0x94207c0e, 0x11f9ead3, 0x242c9af4, 0xa1f50c29, 0x6f99c694,
6195 0xea405049, 0xb2462334, 0x379fb5e9, 0xf9f37f54, 0x7c2ae989,
6196 0x93599e1a, 0x168008c7, 0xd8ecc27a, 0x5d3554a7, 0x053327da,
6197 0x80eab107, 0x4e867bba, 0xcb5fed67, 0xfe8a9d40, 0x7b530b9d,
6198 0xb53fc120, 0x30e657fd, 0x68e02480, 0xed39b25d, 0x235578e0,
6199 0xa68cee3d},
6200 {0x00000000, 0x76e10f9d, 0xadc46ee1, 0xdb25617c, 0x1b8fac19,
6201 0x6d6ea384, 0xb64bc2f8, 0xc0aacd65, 0x361e5933, 0x40ff56ae,
6202 0x9bda37d2, 0xed3b384f, 0x2d91f52a, 0x5b70fab7, 0x80559bcb,
6203 0xf6b49456, 0x6c3cb266, 0x1addbdfb, 0xc1f8dc87, 0xb719d31a,
6204 0x77b31e7f, 0x015211e2, 0xda77709e, 0xac967f03, 0x5a22eb55,
6205 0x2cc3e4c8, 0xf7e685b4, 0x81078a29, 0x41ad474c, 0x374c48d1,
6206 0xec6929ad, 0x9a882630, 0xd87864cd, 0xae996b50, 0x75bc0a2c,
6207 0x035d05b1, 0xc3f7c8d4, 0xb516c749, 0x6e33a635, 0x18d2a9a8,
6208 0xee663dfe, 0x98873263, 0x43a2531f, 0x35435c82, 0xf5e991e7,
6209 0x83089e7a, 0x582dff06, 0x2eccf09b, 0xb444d6ab, 0xc2a5d936,
6210 0x1980b84a, 0x6f61b7d7, 0xafcb7ab2, 0xd92a752f, 0x020f1453,
6211 0x74ee1bce, 0x825a8f98, 0xf4bb8005, 0x2f9ee179, 0x597feee4,
6212 0x99d52381, 0xef342c1c, 0x34114d60, 0x42f042fd, 0xf1f7b941,
6213 0x8716b6dc, 0x5c33d7a0, 0x2ad2d83d, 0xea781558, 0x9c991ac5,
6214 0x47bc7bb9, 0x315d7424, 0xc7e9e072, 0xb108efef, 0x6a2d8e93,
6215 0x1ccc810e, 0xdc664c6b, 0xaa8743f6, 0x71a2228a, 0x07432d17,
6216 0x9dcb0b27, 0xeb2a04ba, 0x300f65c6, 0x46ee6a5b, 0x8644a73e,
6217 0xf0a5a8a3, 0x2b80c9df, 0x5d61c642, 0xabd55214, 0xdd345d89,
6218 0x06113cf5, 0x70f03368, 0xb05afe0d, 0xc6bbf190, 0x1d9e90ec,
6219 0x6b7f9f71, 0x298fdd8c, 0x5f6ed211, 0x844bb36d, 0xf2aabcf0,
6220 0x32007195, 0x44e17e08, 0x9fc41f74, 0xe92510e9, 0x1f9184bf,
6221 0x69708b22, 0xb255ea5e, 0xc4b4e5c3, 0x041e28a6, 0x72ff273b,
6222 0xa9da4647, 0xdf3b49da, 0x45b36fea, 0x33526077, 0xe877010b,
6223 0x9e960e96, 0x5e3cc3f3, 0x28ddcc6e, 0xf3f8ad12, 0x8519a28f,
6224 0x73ad36d9, 0x054c3944, 0xde695838, 0xa88857a5, 0x68229ac0,
6225 0x1ec3955d, 0xc5e6f421, 0xb307fbbc, 0xe2ef7383, 0x940e7c1e,
6226 0x4f2b1d62, 0x39ca12ff, 0xf960df9a, 0x8f81d007, 0x54a4b17b,
6227 0x2245bee6, 0xd4f12ab0, 0xa210252d, 0x79354451, 0x0fd44bcc,
6228 0xcf7e86a9, 0xb99f8934, 0x62bae848, 0x145be7d5, 0x8ed3c1e5,
6229 0xf832ce78, 0x2317af04, 0x55f6a099, 0x955c6dfc, 0xe3bd6261,
6230 0x3898031d, 0x4e790c80, 0xb8cd98d6, 0xce2c974b, 0x1509f637,
6231 0x63e8f9aa, 0xa34234cf, 0xd5a33b52, 0x0e865a2e, 0x786755b3,
6232 0x3a97174e, 0x4c7618d3, 0x975379af, 0xe1b27632, 0x2118bb57,
6233 0x57f9b4ca, 0x8cdcd5b6, 0xfa3dda2b, 0x0c894e7d, 0x7a6841e0,
6234 0xa14d209c, 0xd7ac2f01, 0x1706e264, 0x61e7edf9, 0xbac28c85,
6235 0xcc238318, 0x56aba528, 0x204aaab5, 0xfb6fcbc9, 0x8d8ec454,
6236 0x4d240931, 0x3bc506ac, 0xe0e067d0, 0x9601684d, 0x60b5fc1b,
6237 0x1654f386, 0xcd7192fa, 0xbb909d67, 0x7b3a5002, 0x0ddb5f9f,
6238 0xd6fe3ee3, 0xa01f317e, 0x1318cac2, 0x65f9c55f, 0xbedca423,
6239 0xc83dabbe, 0x089766db, 0x7e766946, 0xa553083a, 0xd3b207a7,
6240 0x250693f1, 0x53e79c6c, 0x88c2fd10, 0xfe23f28d, 0x3e893fe8,
6241 0x48683075, 0x934d5109, 0xe5ac5e94, 0x7f2478a4, 0x09c57739,
6242 0xd2e01645, 0xa40119d8, 0x64abd4bd, 0x124adb20, 0xc96fba5c,
6243 0xbf8eb5c1, 0x493a2197, 0x3fdb2e0a, 0xe4fe4f76, 0x921f40eb,
6244 0x52b58d8e, 0x24548213, 0xff71e36f, 0x8990ecf2, 0xcb60ae0f,
6245 0xbd81a192, 0x66a4c0ee, 0x1045cf73, 0xd0ef0216, 0xa60e0d8b,
6246 0x7d2b6cf7, 0x0bca636a, 0xfd7ef73c, 0x8b9ff8a1, 0x50ba99dd,
6247 0x265b9640, 0xe6f15b25, 0x901054b8, 0x4b3535c4, 0x3dd43a59,
6248 0xa75c1c69, 0xd1bd13f4, 0x0a987288, 0x7c797d15, 0xbcd3b070,
6249 0xca32bfed, 0x1117de91, 0x67f6d10c, 0x9142455a, 0xe7a34ac7,
6250 0x3c862bbb, 0x4a672426, 0x8acde943, 0xfc2ce6de, 0x270987a2,
6251 0x51e8883f},
6252 {0x00000000, 0xe8dbfbb9, 0x91b186a8, 0x796a7d11, 0x63657c8a,
6253 0x8bbe8733, 0xf2d4fa22, 0x1a0f019b, 0x87cc89cf, 0x6f177276,
6254 0x167d0f67, 0xfea6f4de, 0xe4a9f545, 0x0c720efc, 0x751873ed,
6255 0x9dc38854, 0x4f9f6244, 0xa74499fd, 0xde2ee4ec, 0x36f51f55,
6256 0x2cfa1ece, 0xc421e577, 0xbd4b9866, 0x559063df, 0xc853eb8b,
6257 0x20881032, 0x59e26d23, 0xb139969a, 0xab369701, 0x43ed6cb8,
6258 0x3a8711a9, 0xd25cea10, 0x9e3ec588, 0x76e53e31, 0x0f8f4320,
6259 0xe754b899, 0xfd5bb902, 0x158042bb, 0x6cea3faa, 0x8431c413,
6260 0x19f24c47, 0xf129b7fe, 0x8843caef, 0x60983156, 0x7a9730cd,
6261 0x924ccb74, 0xeb26b665, 0x03fd4ddc, 0xd1a1a7cc, 0x397a5c75,
6262 0x40102164, 0xa8cbdadd, 0xb2c4db46, 0x5a1f20ff, 0x23755dee,
6263 0xcbaea657, 0x566d2e03, 0xbeb6d5ba, 0xc7dca8ab, 0x2f075312,
6264 0x35085289, 0xddd3a930, 0xa4b9d421, 0x4c622f98, 0x7d7bfbca,
6265 0x95a00073, 0xecca7d62, 0x041186db, 0x1e1e8740, 0xf6c57cf9,
6266 0x8faf01e8, 0x6774fa51, 0xfab77205, 0x126c89bc, 0x6b06f4ad,
6267 0x83dd0f14, 0x99d20e8f, 0x7109f536, 0x08638827, 0xe0b8739e,
6268 0x32e4998e, 0xda3f6237, 0xa3551f26, 0x4b8ee49f, 0x5181e504,
6269 0xb95a1ebd, 0xc03063ac, 0x28eb9815, 0xb5281041, 0x5df3ebf8,
6270 0x249996e9, 0xcc426d50, 0xd64d6ccb, 0x3e969772, 0x47fcea63,
6271 0xaf2711da, 0xe3453e42, 0x0b9ec5fb, 0x72f4b8ea, 0x9a2f4353,
6272 0x802042c8, 0x68fbb971, 0x1191c460, 0xf94a3fd9, 0x6489b78d,
6273 0x8c524c34, 0xf5383125, 0x1de3ca9c, 0x07eccb07, 0xef3730be,
6274 0x965d4daf, 0x7e86b616, 0xacda5c06, 0x4401a7bf, 0x3d6bdaae,
6275 0xd5b02117, 0xcfbf208c, 0x2764db35, 0x5e0ea624, 0xb6d55d9d,
6276 0x2b16d5c9, 0xc3cd2e70, 0xbaa75361, 0x527ca8d8, 0x4873a943,
6277 0xa0a852fa, 0xd9c22feb, 0x3119d452, 0xbbf0874e, 0x532b7cf7,
6278 0x2a4101e6, 0xc29afa5f, 0xd895fbc4, 0x304e007d, 0x49247d6c,
6279 0xa1ff86d5, 0x3c3c0e81, 0xd4e7f538, 0xad8d8829, 0x45567390,
6280 0x5f59720b, 0xb78289b2, 0xcee8f4a3, 0x26330f1a, 0xf46fe50a,
6281 0x1cb41eb3, 0x65de63a2, 0x8d05981b, 0x970a9980, 0x7fd16239,
6282 0x06bb1f28, 0xee60e491, 0x73a36cc5, 0x9b78977c, 0xe212ea6d,
6283 0x0ac911d4, 0x10c6104f, 0xf81debf6, 0x817796e7, 0x69ac6d5e,
6284 0x25ce42c6, 0xcd15b97f, 0xb47fc46e, 0x5ca43fd7, 0x46ab3e4c,
6285 0xae70c5f5, 0xd71ab8e4, 0x3fc1435d, 0xa202cb09, 0x4ad930b0,
6286 0x33b34da1, 0xdb68b618, 0xc167b783, 0x29bc4c3a, 0x50d6312b,
6287 0xb80dca92, 0x6a512082, 0x828adb3b, 0xfbe0a62a, 0x133b5d93,
6288 0x09345c08, 0xe1efa7b1, 0x9885daa0, 0x705e2119, 0xed9da94d,
6289 0x054652f4, 0x7c2c2fe5, 0x94f7d45c, 0x8ef8d5c7, 0x66232e7e,
6290 0x1f49536f, 0xf792a8d6, 0xc68b7c84, 0x2e50873d, 0x573afa2c,
6291 0xbfe10195, 0xa5ee000e, 0x4d35fbb7, 0x345f86a6, 0xdc847d1f,
6292 0x4147f54b, 0xa99c0ef2, 0xd0f673e3, 0x382d885a, 0x222289c1,
6293 0xcaf97278, 0xb3930f69, 0x5b48f4d0, 0x89141ec0, 0x61cfe579,
6294 0x18a59868, 0xf07e63d1, 0xea71624a, 0x02aa99f3, 0x7bc0e4e2,
6295 0x931b1f5b, 0x0ed8970f, 0xe6036cb6, 0x9f6911a7, 0x77b2ea1e,
6296 0x6dbdeb85, 0x8566103c, 0xfc0c6d2d, 0x14d79694, 0x58b5b90c,
6297 0xb06e42b5, 0xc9043fa4, 0x21dfc41d, 0x3bd0c586, 0xd30b3e3f,
6298 0xaa61432e, 0x42bab897, 0xdf7930c3, 0x37a2cb7a, 0x4ec8b66b,
6299 0xa6134dd2, 0xbc1c4c49, 0x54c7b7f0, 0x2dadcae1, 0xc5763158,
6300 0x172adb48, 0xfff120f1, 0x869b5de0, 0x6e40a659, 0x744fa7c2,
6301 0x9c945c7b, 0xe5fe216a, 0x0d25dad3, 0x90e65287, 0x783da93e,
6302 0x0157d42f, 0xe98c2f96, 0xf3832e0d, 0x1b58d5b4, 0x6232a8a5,
6303 0x8ae9531c},
6304 {0x00000000, 0x919168ae, 0x6325a087, 0xf2b4c829, 0x874c31d4,
6305 0x16dd597a, 0xe4699153, 0x75f8f9fd, 0x4f9f1373, 0xde0e7bdd,
6306 0x2cbab3f4, 0xbd2bdb5a, 0xc8d322a7, 0x59424a09, 0xabf68220,
6307 0x3a67ea8e, 0x9e3e27e6, 0x0faf4f48, 0xfd1b8761, 0x6c8aefcf,
6308 0x19721632, 0x88e37e9c, 0x7a57b6b5, 0xebc6de1b, 0xd1a13495,
6309 0x40305c3b, 0xb2849412, 0x2315fcbc, 0x56ed0541, 0xc77c6def,
6310 0x35c8a5c6, 0xa459cd68, 0x7d7b3f17, 0xecea57b9, 0x1e5e9f90,
6311 0x8fcff73e, 0xfa370ec3, 0x6ba6666d, 0x9912ae44, 0x0883c6ea,
6312 0x32e42c64, 0xa37544ca, 0x51c18ce3, 0xc050e44d, 0xb5a81db0,
6313 0x2439751e, 0xd68dbd37, 0x471cd599, 0xe34518f1, 0x72d4705f,
6314 0x8060b876, 0x11f1d0d8, 0x64092925, 0xf598418b, 0x072c89a2,
6315 0x96bde10c, 0xacda0b82, 0x3d4b632c, 0xcfffab05, 0x5e6ec3ab,
6316 0x2b963a56, 0xba0752f8, 0x48b39ad1, 0xd922f27f, 0xfaf67e2e,
6317 0x6b671680, 0x99d3dea9, 0x0842b607, 0x7dba4ffa, 0xec2b2754,
6318 0x1e9fef7d, 0x8f0e87d3, 0xb5696d5d, 0x24f805f3, 0xd64ccdda,
6319 0x47dda574, 0x32255c89, 0xa3b43427, 0x5100fc0e, 0xc09194a0,
6320 0x64c859c8, 0xf5593166, 0x07edf94f, 0x967c91e1, 0xe384681c,
6321 0x721500b2, 0x80a1c89b, 0x1130a035, 0x2b574abb, 0xbac62215,
6322 0x4872ea3c, 0xd9e38292, 0xac1b7b6f, 0x3d8a13c1, 0xcf3edbe8,
6323 0x5eafb346, 0x878d4139, 0x161c2997, 0xe4a8e1be, 0x75398910,
6324 0x00c170ed, 0x91501843, 0x63e4d06a, 0xf275b8c4, 0xc812524a,
6325 0x59833ae4, 0xab37f2cd, 0x3aa69a63, 0x4f5e639e, 0xdecf0b30,
6326 0x2c7bc319, 0xbdeaabb7, 0x19b366df, 0x88220e71, 0x7a96c658,
6327 0xeb07aef6, 0x9eff570b, 0x0f6e3fa5, 0xfddaf78c, 0x6c4b9f22,
6328 0x562c75ac, 0xc7bd1d02, 0x3509d52b, 0xa498bd85, 0xd1604478,
6329 0x40f12cd6, 0xb245e4ff, 0x23d48c51, 0xf4edfd5c, 0x657c95f2,
6330 0x97c85ddb, 0x06593575, 0x73a1cc88, 0xe230a426, 0x10846c0f,
6331 0x811504a1, 0xbb72ee2f, 0x2ae38681, 0xd8574ea8, 0x49c62606,
6332 0x3c3edffb, 0xadafb755, 0x5f1b7f7c, 0xce8a17d2, 0x6ad3daba,
6333 0xfb42b214, 0x09f67a3d, 0x98671293, 0xed9feb6e, 0x7c0e83c0,
6334 0x8eba4be9, 0x1f2b2347, 0x254cc9c9, 0xb4dda167, 0x4669694e,
6335 0xd7f801e0, 0xa200f81d, 0x339190b3, 0xc125589a, 0x50b43034,
6336 0x8996c24b, 0x1807aae5, 0xeab362cc, 0x7b220a62, 0x0edaf39f,
6337 0x9f4b9b31, 0x6dff5318, 0xfc6e3bb6, 0xc609d138, 0x5798b996,
6338 0xa52c71bf, 0x34bd1911, 0x4145e0ec, 0xd0d48842, 0x2260406b,
6339 0xb3f128c5, 0x17a8e5ad, 0x86398d03, 0x748d452a, 0xe51c2d84,
6340 0x90e4d479, 0x0175bcd7, 0xf3c174fe, 0x62501c50, 0x5837f6de,
6341 0xc9a69e70, 0x3b125659, 0xaa833ef7, 0xdf7bc70a, 0x4eeaafa4,
6342 0xbc5e678d, 0x2dcf0f23, 0x0e1b8372, 0x9f8aebdc, 0x6d3e23f5,
6343 0xfcaf4b5b, 0x8957b2a6, 0x18c6da08, 0xea721221, 0x7be37a8f,
6344 0x41849001, 0xd015f8af, 0x22a13086, 0xb3305828, 0xc6c8a1d5,
6345 0x5759c97b, 0xa5ed0152, 0x347c69fc, 0x9025a494, 0x01b4cc3a,
6346 0xf3000413, 0x62916cbd, 0x17699540, 0x86f8fdee, 0x744c35c7,
6347 0xe5dd5d69, 0xdfbab7e7, 0x4e2bdf49, 0xbc9f1760, 0x2d0e7fce,
6348 0x58f68633, 0xc967ee9d, 0x3bd326b4, 0xaa424e1a, 0x7360bc65,
6349 0xe2f1d4cb, 0x10451ce2, 0x81d4744c, 0xf42c8db1, 0x65bde51f,
6350 0x97092d36, 0x06984598, 0x3cffaf16, 0xad6ec7b8, 0x5fda0f91,
6351 0xce4b673f, 0xbbb39ec2, 0x2a22f66c, 0xd8963e45, 0x490756eb,
6352 0xed5e9b83, 0x7ccff32d, 0x8e7b3b04, 0x1fea53aa, 0x6a12aa57,
6353 0xfb83c2f9, 0x09370ad0, 0x98a6627e, 0xa2c188f0, 0x3350e05e,
6354 0xc1e42877, 0x507540d9, 0x258db924, 0xb41cd18a, 0x46a819a3,
6355 0xd739710d}};
6356
6357 #endif
6358
6359 #endif
6360
6361 #if N == 5
6362
6363 #if W == 8
6364
6365 local const z_crc_t FAR crc_braid_table[][256] = {
6366 {0x00000000, 0xaf449247, 0x85f822cf, 0x2abcb088, 0xd08143df,
6367 0x7fc5d198, 0x55796110, 0xfa3df357, 0x7a7381ff, 0xd53713b8,
6368 0xff8ba330, 0x50cf3177, 0xaaf2c220, 0x05b65067, 0x2f0ae0ef,
6369 0x804e72a8, 0xf4e703fe, 0x5ba391b9, 0x711f2131, 0xde5bb376,
6370 0x24664021, 0x8b22d266, 0xa19e62ee, 0x0edaf0a9, 0x8e948201,
6371 0x21d01046, 0x0b6ca0ce, 0xa4283289, 0x5e15c1de, 0xf1515399,
6372 0xdbede311, 0x74a97156, 0x32bf01bd, 0x9dfb93fa, 0xb7472372,
6373 0x1803b135, 0xe23e4262, 0x4d7ad025, 0x67c660ad, 0xc882f2ea,
6374 0x48cc8042, 0xe7881205, 0xcd34a28d, 0x627030ca, 0x984dc39d,
6375 0x370951da, 0x1db5e152, 0xb2f17315, 0xc6580243, 0x691c9004,
6376 0x43a0208c, 0xece4b2cb, 0x16d9419c, 0xb99dd3db, 0x93216353,
6377 0x3c65f114, 0xbc2b83bc, 0x136f11fb, 0x39d3a173, 0x96973334,
6378 0x6caac063, 0xc3ee5224, 0xe952e2ac, 0x461670eb, 0x657e037a,
6379 0xca3a913d, 0xe08621b5, 0x4fc2b3f2, 0xb5ff40a5, 0x1abbd2e2,
6380 0x3007626a, 0x9f43f02d, 0x1f0d8285, 0xb04910c2, 0x9af5a04a,
6381 0x35b1320d, 0xcf8cc15a, 0x60c8531d, 0x4a74e395, 0xe53071d2,
6382 0x91990084, 0x3edd92c3, 0x1461224b, 0xbb25b00c, 0x4118435b,
6383 0xee5cd11c, 0xc4e06194, 0x6ba4f3d3, 0xebea817b, 0x44ae133c,
6384 0x6e12a3b4, 0xc15631f3, 0x3b6bc2a4, 0x942f50e3, 0xbe93e06b,
6385 0x11d7722c, 0x57c102c7, 0xf8859080, 0xd2392008, 0x7d7db24f,
6386 0x87404118, 0x2804d35f, 0x02b863d7, 0xadfcf190, 0x2db28338,
6387 0x82f6117f, 0xa84aa1f7, 0x070e33b0, 0xfd33c0e7, 0x527752a0,
6388 0x78cbe228, 0xd78f706f, 0xa3260139, 0x0c62937e, 0x26de23f6,
6389 0x899ab1b1, 0x73a742e6, 0xdce3d0a1, 0xf65f6029, 0x591bf26e,
6390 0xd95580c6, 0x76111281, 0x5cada209, 0xf3e9304e, 0x09d4c319,
6391 0xa690515e, 0x8c2ce1d6, 0x23687391, 0xcafc06f4, 0x65b894b3,
6392 0x4f04243b, 0xe040b67c, 0x1a7d452b, 0xb539d76c, 0x9f8567e4,
6393 0x30c1f5a3, 0xb08f870b, 0x1fcb154c, 0x3577a5c4, 0x9a333783,
6394 0x600ec4d4, 0xcf4a5693, 0xe5f6e61b, 0x4ab2745c, 0x3e1b050a,
6395 0x915f974d, 0xbbe327c5, 0x14a7b582, 0xee9a46d5, 0x41ded492,
6396 0x6b62641a, 0xc426f65d, 0x446884f5, 0xeb2c16b2, 0xc190a63a,
6397 0x6ed4347d, 0x94e9c72a, 0x3bad556d, 0x1111e5e5, 0xbe5577a2,
6398 0xf8430749, 0x5707950e, 0x7dbb2586, 0xd2ffb7c1, 0x28c24496,
6399 0x8786d6d1, 0xad3a6659, 0x027ef41e, 0x823086b6, 0x2d7414f1,
6400 0x07c8a479, 0xa88c363e, 0x52b1c569, 0xfdf5572e, 0xd749e7a6,
6401 0x780d75e1, 0x0ca404b7, 0xa3e096f0, 0x895c2678, 0x2618b43f,
6402 0xdc254768, 0x7361d52f, 0x59dd65a7, 0xf699f7e0, 0x76d78548,
6403 0xd993170f, 0xf32fa787, 0x5c6b35c0, 0xa656c697, 0x091254d0,
6404 0x23aee458, 0x8cea761f, 0xaf82058e, 0x00c697c9, 0x2a7a2741,
6405 0x853eb506, 0x7f034651, 0xd047d416, 0xfafb649e, 0x55bff6d9,
6406 0xd5f18471, 0x7ab51636, 0x5009a6be, 0xff4d34f9, 0x0570c7ae,
6407 0xaa3455e9, 0x8088e561, 0x2fcc7726, 0x5b650670, 0xf4219437,
6408 0xde9d24bf, 0x71d9b6f8, 0x8be445af, 0x24a0d7e8, 0x0e1c6760,
6409 0xa158f527, 0x2116878f, 0x8e5215c8, 0xa4eea540, 0x0baa3707,
6410 0xf197c450, 0x5ed35617, 0x746fe69f, 0xdb2b74d8, 0x9d3d0433,
6411 0x32799674, 0x18c526fc, 0xb781b4bb, 0x4dbc47ec, 0xe2f8d5ab,
6412 0xc8446523, 0x6700f764, 0xe74e85cc, 0x480a178b, 0x62b6a703,
6413 0xcdf23544, 0x37cfc613, 0x988b5454, 0xb237e4dc, 0x1d73769b,
6414 0x69da07cd, 0xc69e958a, 0xec222502, 0x4366b745, 0xb95b4412,
6415 0x161fd655, 0x3ca366dd, 0x93e7f49a, 0x13a98632, 0xbced1475,
6416 0x9651a4fd, 0x391536ba, 0xc328c5ed, 0x6c6c57aa, 0x46d0e722,
6417 0xe9947565},
6418 {0x00000000, 0x4e890ba9, 0x9d121752, 0xd39b1cfb, 0xe15528e5,
6419 0xafdc234c, 0x7c473fb7, 0x32ce341e, 0x19db578b, 0x57525c22,
6420 0x84c940d9, 0xca404b70, 0xf88e7f6e, 0xb60774c7, 0x659c683c,
6421 0x2b156395, 0x33b6af16, 0x7d3fa4bf, 0xaea4b844, 0xe02db3ed,
6422 0xd2e387f3, 0x9c6a8c5a, 0x4ff190a1, 0x01789b08, 0x2a6df89d,
6423 0x64e4f334, 0xb77fefcf, 0xf9f6e466, 0xcb38d078, 0x85b1dbd1,
6424 0x562ac72a, 0x18a3cc83, 0x676d5e2c, 0x29e45585, 0xfa7f497e,
6425 0xb4f642d7, 0x863876c9, 0xc8b17d60, 0x1b2a619b, 0x55a36a32,
6426 0x7eb609a7, 0x303f020e, 0xe3a41ef5, 0xad2d155c, 0x9fe32142,
6427 0xd16a2aeb, 0x02f13610, 0x4c783db9, 0x54dbf13a, 0x1a52fa93,
6428 0xc9c9e668, 0x8740edc1, 0xb58ed9df, 0xfb07d276, 0x289cce8d,
6429 0x6615c524, 0x4d00a6b1, 0x0389ad18, 0xd012b1e3, 0x9e9bba4a,
6430 0xac558e54, 0xe2dc85fd, 0x31479906, 0x7fce92af, 0xcedabc58,
6431 0x8053b7f1, 0x53c8ab0a, 0x1d41a0a3, 0x2f8f94bd, 0x61069f14,
6432 0xb29d83ef, 0xfc148846, 0xd701ebd3, 0x9988e07a, 0x4a13fc81,
6433 0x049af728, 0x3654c336, 0x78ddc89f, 0xab46d464, 0xe5cfdfcd,
6434 0xfd6c134e, 0xb3e518e7, 0x607e041c, 0x2ef70fb5, 0x1c393bab,
6435 0x52b03002, 0x812b2cf9, 0xcfa22750, 0xe4b744c5, 0xaa3e4f6c,
6436 0x79a55397, 0x372c583e, 0x05e26c20, 0x4b6b6789, 0x98f07b72,
6437 0xd67970db, 0xa9b7e274, 0xe73ee9dd, 0x34a5f526, 0x7a2cfe8f,
6438 0x48e2ca91, 0x066bc138, 0xd5f0ddc3, 0x9b79d66a, 0xb06cb5ff,
6439 0xfee5be56, 0x2d7ea2ad, 0x63f7a904, 0x51399d1a, 0x1fb096b3,
6440 0xcc2b8a48, 0x82a281e1, 0x9a014d62, 0xd48846cb, 0x07135a30,
6441 0x499a5199, 0x7b546587, 0x35dd6e2e, 0xe64672d5, 0xa8cf797c,
6442 0x83da1ae9, 0xcd531140, 0x1ec80dbb, 0x50410612, 0x628f320c,
6443 0x2c0639a5, 0xff9d255e, 0xb1142ef7, 0x46c47ef1, 0x084d7558,
6444 0xdbd669a3, 0x955f620a, 0xa7915614, 0xe9185dbd, 0x3a834146,
6445 0x740a4aef, 0x5f1f297a, 0x119622d3, 0xc20d3e28, 0x8c843581,
6446 0xbe4a019f, 0xf0c30a36, 0x235816cd, 0x6dd11d64, 0x7572d1e7,
6447 0x3bfbda4e, 0xe860c6b5, 0xa6e9cd1c, 0x9427f902, 0xdaaef2ab,
6448 0x0935ee50, 0x47bce5f9, 0x6ca9866c, 0x22208dc5, 0xf1bb913e,
6449 0xbf329a97, 0x8dfcae89, 0xc375a520, 0x10eeb9db, 0x5e67b272,
6450 0x21a920dd, 0x6f202b74, 0xbcbb378f, 0xf2323c26, 0xc0fc0838,
6451 0x8e750391, 0x5dee1f6a, 0x136714c3, 0x38727756, 0x76fb7cff,
6452 0xa5606004, 0xebe96bad, 0xd9275fb3, 0x97ae541a, 0x443548e1,
6453 0x0abc4348, 0x121f8fcb, 0x5c968462, 0x8f0d9899, 0xc1849330,
6454 0xf34aa72e, 0xbdc3ac87, 0x6e58b07c, 0x20d1bbd5, 0x0bc4d840,
6455 0x454dd3e9, 0x96d6cf12, 0xd85fc4bb, 0xea91f0a5, 0xa418fb0c,
6456 0x7783e7f7, 0x390aec5e, 0x881ec2a9, 0xc697c900, 0x150cd5fb,
6457 0x5b85de52, 0x694bea4c, 0x27c2e1e5, 0xf459fd1e, 0xbad0f6b7,
6458 0x91c59522, 0xdf4c9e8b, 0x0cd78270, 0x425e89d9, 0x7090bdc7,
6459 0x3e19b66e, 0xed82aa95, 0xa30ba13c, 0xbba86dbf, 0xf5216616,
6460 0x26ba7aed, 0x68337144, 0x5afd455a, 0x14744ef3, 0xc7ef5208,
6461 0x896659a1, 0xa2733a34, 0xecfa319d, 0x3f612d66, 0x71e826cf,
6462 0x432612d1, 0x0daf1978, 0xde340583, 0x90bd0e2a, 0xef739c85,
6463 0xa1fa972c, 0x72618bd7, 0x3ce8807e, 0x0e26b460, 0x40afbfc9,
6464 0x9334a332, 0xddbda89b, 0xf6a8cb0e, 0xb821c0a7, 0x6bbadc5c,
6465 0x2533d7f5, 0x17fde3eb, 0x5974e842, 0x8aeff4b9, 0xc466ff10,
6466 0xdcc53393, 0x924c383a, 0x41d724c1, 0x0f5e2f68, 0x3d901b76,
6467 0x731910df, 0xa0820c24, 0xee0b078d, 0xc51e6418, 0x8b976fb1,
6468 0x580c734a, 0x168578e3, 0x244b4cfd, 0x6ac24754, 0xb9595baf,
6469 0xf7d05006},
6470 {0x00000000, 0x8d88fde2, 0xc060fd85, 0x4de80067, 0x5bb0fd4b,
6471 0xd63800a9, 0x9bd000ce, 0x1658fd2c, 0xb761fa96, 0x3ae90774,
6472 0x77010713, 0xfa89faf1, 0xecd107dd, 0x6159fa3f, 0x2cb1fa58,
6473 0xa13907ba, 0xb5b2f36d, 0x383a0e8f, 0x75d20ee8, 0xf85af30a,
6474 0xee020e26, 0x638af3c4, 0x2e62f3a3, 0xa3ea0e41, 0x02d309fb,
6475 0x8f5bf419, 0xc2b3f47e, 0x4f3b099c, 0x5963f4b0, 0xd4eb0952,
6476 0x99030935, 0x148bf4d7, 0xb014e09b, 0x3d9c1d79, 0x70741d1e,
6477 0xfdfce0fc, 0xeba41dd0, 0x662ce032, 0x2bc4e055, 0xa64c1db7,
6478 0x07751a0d, 0x8afde7ef, 0xc715e788, 0x4a9d1a6a, 0x5cc5e746,
6479 0xd14d1aa4, 0x9ca51ac3, 0x112de721, 0x05a613f6, 0x882eee14,
6480 0xc5c6ee73, 0x484e1391, 0x5e16eebd, 0xd39e135f, 0x9e761338,
6481 0x13feeeda, 0xb2c7e960, 0x3f4f1482, 0x72a714e5, 0xff2fe907,
6482 0xe977142b, 0x64ffe9c9, 0x2917e9ae, 0xa49f144c, 0xbb58c777,
6483 0x36d03a95, 0x7b383af2, 0xf6b0c710, 0xe0e83a3c, 0x6d60c7de,
6484 0x2088c7b9, 0xad003a5b, 0x0c393de1, 0x81b1c003, 0xcc59c064,
6485 0x41d13d86, 0x5789c0aa, 0xda013d48, 0x97e93d2f, 0x1a61c0cd,
6486 0x0eea341a, 0x8362c9f8, 0xce8ac99f, 0x4302347d, 0x555ac951,
6487 0xd8d234b3, 0x953a34d4, 0x18b2c936, 0xb98bce8c, 0x3403336e,
6488 0x79eb3309, 0xf463ceeb, 0xe23b33c7, 0x6fb3ce25, 0x225bce42,
6489 0xafd333a0, 0x0b4c27ec, 0x86c4da0e, 0xcb2cda69, 0x46a4278b,
6490 0x50fcdaa7, 0xdd742745, 0x909c2722, 0x1d14dac0, 0xbc2ddd7a,
6491 0x31a52098, 0x7c4d20ff, 0xf1c5dd1d, 0xe79d2031, 0x6a15ddd3,
6492 0x27fdddb4, 0xaa752056, 0xbefed481, 0x33762963, 0x7e9e2904,
6493 0xf316d4e6, 0xe54e29ca, 0x68c6d428, 0x252ed44f, 0xa8a629ad,
6494 0x099f2e17, 0x8417d3f5, 0xc9ffd392, 0x44772e70, 0x522fd35c,
6495 0xdfa72ebe, 0x924f2ed9, 0x1fc7d33b, 0xadc088af, 0x2048754d,
6496 0x6da0752a, 0xe02888c8, 0xf67075e4, 0x7bf88806, 0x36108861,
6497 0xbb987583, 0x1aa17239, 0x97298fdb, 0xdac18fbc, 0x5749725e,
6498 0x41118f72, 0xcc997290, 0x817172f7, 0x0cf98f15, 0x18727bc2,
6499 0x95fa8620, 0xd8128647, 0x559a7ba5, 0x43c28689, 0xce4a7b6b,
6500 0x83a27b0c, 0x0e2a86ee, 0xaf138154, 0x229b7cb6, 0x6f737cd1,
6501 0xe2fb8133, 0xf4a37c1f, 0x792b81fd, 0x34c3819a, 0xb94b7c78,
6502 0x1dd46834, 0x905c95d6, 0xddb495b1, 0x503c6853, 0x4664957f,
6503 0xcbec689d, 0x860468fa, 0x0b8c9518, 0xaab592a2, 0x273d6f40,
6504 0x6ad56f27, 0xe75d92c5, 0xf1056fe9, 0x7c8d920b, 0x3165926c,
6505 0xbced6f8e, 0xa8669b59, 0x25ee66bb, 0x680666dc, 0xe58e9b3e,
6506 0xf3d66612, 0x7e5e9bf0, 0x33b69b97, 0xbe3e6675, 0x1f0761cf,
6507 0x928f9c2d, 0xdf679c4a, 0x52ef61a8, 0x44b79c84, 0xc93f6166,
6508 0x84d76101, 0x095f9ce3, 0x16984fd8, 0x9b10b23a, 0xd6f8b25d,
6509 0x5b704fbf, 0x4d28b293, 0xc0a04f71, 0x8d484f16, 0x00c0b2f4,
6510 0xa1f9b54e, 0x2c7148ac, 0x619948cb, 0xec11b529, 0xfa494805,
6511 0x77c1b5e7, 0x3a29b580, 0xb7a14862, 0xa32abcb5, 0x2ea24157,
6512 0x634a4130, 0xeec2bcd2, 0xf89a41fe, 0x7512bc1c, 0x38fabc7b,
6513 0xb5724199, 0x144b4623, 0x99c3bbc1, 0xd42bbba6, 0x59a34644,
6514 0x4ffbbb68, 0xc273468a, 0x8f9b46ed, 0x0213bb0f, 0xa68caf43,
6515 0x2b0452a1, 0x66ec52c6, 0xeb64af24, 0xfd3c5208, 0x70b4afea,
6516 0x3d5caf8d, 0xb0d4526f, 0x11ed55d5, 0x9c65a837, 0xd18da850,
6517 0x5c0555b2, 0x4a5da89e, 0xc7d5557c, 0x8a3d551b, 0x07b5a8f9,
6518 0x133e5c2e, 0x9eb6a1cc, 0xd35ea1ab, 0x5ed65c49, 0x488ea165,
6519 0xc5065c87, 0x88ee5ce0, 0x0566a102, 0xa45fa6b8, 0x29d75b5a,
6520 0x643f5b3d, 0xe9b7a6df, 0xffef5bf3, 0x7267a611, 0x3f8fa676,
6521 0xb2075b94},
6522 {0x00000000, 0x80f0171f, 0xda91287f, 0x5a613f60, 0x6e5356bf,
6523 0xeea341a0, 0xb4c27ec0, 0x343269df, 0xdca6ad7e, 0x5c56ba61,
6524 0x06378501, 0x86c7921e, 0xb2f5fbc1, 0x3205ecde, 0x6864d3be,
6525 0xe894c4a1, 0x623c5cbd, 0xe2cc4ba2, 0xb8ad74c2, 0x385d63dd,
6526 0x0c6f0a02, 0x8c9f1d1d, 0xd6fe227d, 0x560e3562, 0xbe9af1c3,
6527 0x3e6ae6dc, 0x640bd9bc, 0xe4fbcea3, 0xd0c9a77c, 0x5039b063,
6528 0x0a588f03, 0x8aa8981c, 0xc478b97a, 0x4488ae65, 0x1ee99105,
6529 0x9e19861a, 0xaa2befc5, 0x2adbf8da, 0x70bac7ba, 0xf04ad0a5,
6530 0x18de1404, 0x982e031b, 0xc24f3c7b, 0x42bf2b64, 0x768d42bb,
6531 0xf67d55a4, 0xac1c6ac4, 0x2cec7ddb, 0xa644e5c7, 0x26b4f2d8,
6532 0x7cd5cdb8, 0xfc25daa7, 0xc817b378, 0x48e7a467, 0x12869b07,
6533 0x92768c18, 0x7ae248b9, 0xfa125fa6, 0xa07360c6, 0x208377d9,
6534 0x14b11e06, 0x94410919, 0xce203679, 0x4ed02166, 0x538074b5,
6535 0xd37063aa, 0x89115cca, 0x09e14bd5, 0x3dd3220a, 0xbd233515,
6536 0xe7420a75, 0x67b21d6a, 0x8f26d9cb, 0x0fd6ced4, 0x55b7f1b4,
6537 0xd547e6ab, 0xe1758f74, 0x6185986b, 0x3be4a70b, 0xbb14b014,
6538 0x31bc2808, 0xb14c3f17, 0xeb2d0077, 0x6bdd1768, 0x5fef7eb7,
6539 0xdf1f69a8, 0x857e56c8, 0x058e41d7, 0xed1a8576, 0x6dea9269,
6540 0x378bad09, 0xb77bba16, 0x8349d3c9, 0x03b9c4d6, 0x59d8fbb6,
6541 0xd928eca9, 0x97f8cdcf, 0x1708dad0, 0x4d69e5b0, 0xcd99f2af,
6542 0xf9ab9b70, 0x795b8c6f, 0x233ab30f, 0xa3caa410, 0x4b5e60b1,
6543 0xcbae77ae, 0x91cf48ce, 0x113f5fd1, 0x250d360e, 0xa5fd2111,
6544 0xff9c1e71, 0x7f6c096e, 0xf5c49172, 0x7534866d, 0x2f55b90d,
6545 0xafa5ae12, 0x9b97c7cd, 0x1b67d0d2, 0x4106efb2, 0xc1f6f8ad,
6546 0x29623c0c, 0xa9922b13, 0xf3f31473, 0x7303036c, 0x47316ab3,
6547 0xc7c17dac, 0x9da042cc, 0x1d5055d3, 0xa700e96a, 0x27f0fe75,
6548 0x7d91c115, 0xfd61d60a, 0xc953bfd5, 0x49a3a8ca, 0x13c297aa,
6549 0x933280b5, 0x7ba64414, 0xfb56530b, 0xa1376c6b, 0x21c77b74,
6550 0x15f512ab, 0x950505b4, 0xcf643ad4, 0x4f942dcb, 0xc53cb5d7,
6551 0x45cca2c8, 0x1fad9da8, 0x9f5d8ab7, 0xab6fe368, 0x2b9ff477,
6552 0x71fecb17, 0xf10edc08, 0x199a18a9, 0x996a0fb6, 0xc30b30d6,
6553 0x43fb27c9, 0x77c94e16, 0xf7395909, 0xad586669, 0x2da87176,
6554 0x63785010, 0xe388470f, 0xb9e9786f, 0x39196f70, 0x0d2b06af,
6555 0x8ddb11b0, 0xd7ba2ed0, 0x574a39cf, 0xbfdefd6e, 0x3f2eea71,
6556 0x654fd511, 0xe5bfc20e, 0xd18dabd1, 0x517dbcce, 0x0b1c83ae,
6557 0x8bec94b1, 0x01440cad, 0x81b41bb2, 0xdbd524d2, 0x5b2533cd,
6558 0x6f175a12, 0xefe74d0d, 0xb586726d, 0x35766572, 0xdde2a1d3,
6559 0x5d12b6cc, 0x077389ac, 0x87839eb3, 0xb3b1f76c, 0x3341e073,
6560 0x6920df13, 0xe9d0c80c, 0xf4809ddf, 0x74708ac0, 0x2e11b5a0,
6561 0xaee1a2bf, 0x9ad3cb60, 0x1a23dc7f, 0x4042e31f, 0xc0b2f400,
6562 0x282630a1, 0xa8d627be, 0xf2b718de, 0x72470fc1, 0x4675661e,
6563 0xc6857101, 0x9ce44e61, 0x1c14597e, 0x96bcc162, 0x164cd67d,
6564 0x4c2de91d, 0xccddfe02, 0xf8ef97dd, 0x781f80c2, 0x227ebfa2,
6565 0xa28ea8bd, 0x4a1a6c1c, 0xcaea7b03, 0x908b4463, 0x107b537c,
6566 0x24493aa3, 0xa4b92dbc, 0xfed812dc, 0x7e2805c3, 0x30f824a5,
6567 0xb00833ba, 0xea690cda, 0x6a991bc5, 0x5eab721a, 0xde5b6505,
6568 0x843a5a65, 0x04ca4d7a, 0xec5e89db, 0x6cae9ec4, 0x36cfa1a4,
6569 0xb63fb6bb, 0x820ddf64, 0x02fdc87b, 0x589cf71b, 0xd86ce004,
6570 0x52c47818, 0xd2346f07, 0x88555067, 0x08a54778, 0x3c972ea7,
6571 0xbc6739b8, 0xe60606d8, 0x66f611c7, 0x8e62d566, 0x0e92c279,
6572 0x54f3fd19, 0xd403ea06, 0xe03183d9, 0x60c194c6, 0x3aa0aba6,
6573 0xba50bcb9},
6574 {0x00000000, 0x9570d495, 0xf190af6b, 0x64e07bfe, 0x38505897,
6575 0xad208c02, 0xc9c0f7fc, 0x5cb02369, 0x70a0b12e, 0xe5d065bb,
6576 0x81301e45, 0x1440cad0, 0x48f0e9b9, 0xdd803d2c, 0xb96046d2,
6577 0x2c109247, 0xe141625c, 0x7431b6c9, 0x10d1cd37, 0x85a119a2,
6578 0xd9113acb, 0x4c61ee5e, 0x288195a0, 0xbdf14135, 0x91e1d372,
6579 0x049107e7, 0x60717c19, 0xf501a88c, 0xa9b18be5, 0x3cc15f70,
6580 0x5821248e, 0xcd51f01b, 0x19f3c2f9, 0x8c83166c, 0xe8636d92,
6581 0x7d13b907, 0x21a39a6e, 0xb4d34efb, 0xd0333505, 0x4543e190,
6582 0x695373d7, 0xfc23a742, 0x98c3dcbc, 0x0db30829, 0x51032b40,
6583 0xc473ffd5, 0xa093842b, 0x35e350be, 0xf8b2a0a5, 0x6dc27430,
6584 0x09220fce, 0x9c52db5b, 0xc0e2f832, 0x55922ca7, 0x31725759,
6585 0xa40283cc, 0x8812118b, 0x1d62c51e, 0x7982bee0, 0xecf26a75,
6586 0xb042491c, 0x25329d89, 0x41d2e677, 0xd4a232e2, 0x33e785f2,
6587 0xa6975167, 0xc2772a99, 0x5707fe0c, 0x0bb7dd65, 0x9ec709f0,
6588 0xfa27720e, 0x6f57a69b, 0x434734dc, 0xd637e049, 0xb2d79bb7,
6589 0x27a74f22, 0x7b176c4b, 0xee67b8de, 0x8a87c320, 0x1ff717b5,
6590 0xd2a6e7ae, 0x47d6333b, 0x233648c5, 0xb6469c50, 0xeaf6bf39,
6591 0x7f866bac, 0x1b661052, 0x8e16c4c7, 0xa2065680, 0x37768215,
6592 0x5396f9eb, 0xc6e62d7e, 0x9a560e17, 0x0f26da82, 0x6bc6a17c,
6593 0xfeb675e9, 0x2a14470b, 0xbf64939e, 0xdb84e860, 0x4ef43cf5,
6594 0x12441f9c, 0x8734cb09, 0xe3d4b0f7, 0x76a46462, 0x5ab4f625,
6595 0xcfc422b0, 0xab24594e, 0x3e548ddb, 0x62e4aeb2, 0xf7947a27,
6596 0x937401d9, 0x0604d54c, 0xcb552557, 0x5e25f1c2, 0x3ac58a3c,
6597 0xafb55ea9, 0xf3057dc0, 0x6675a955, 0x0295d2ab, 0x97e5063e,
6598 0xbbf59479, 0x2e8540ec, 0x4a653b12, 0xdf15ef87, 0x83a5ccee,
6599 0x16d5187b, 0x72356385, 0xe745b710, 0x67cf0be4, 0xf2bfdf71,
6600 0x965fa48f, 0x032f701a, 0x5f9f5373, 0xcaef87e6, 0xae0ffc18,
6601 0x3b7f288d, 0x176fbaca, 0x821f6e5f, 0xe6ff15a1, 0x738fc134,
6602 0x2f3fe25d, 0xba4f36c8, 0xdeaf4d36, 0x4bdf99a3, 0x868e69b8,
6603 0x13febd2d, 0x771ec6d3, 0xe26e1246, 0xbede312f, 0x2baee5ba,
6604 0x4f4e9e44, 0xda3e4ad1, 0xf62ed896, 0x635e0c03, 0x07be77fd,
6605 0x92cea368, 0xce7e8001, 0x5b0e5494, 0x3fee2f6a, 0xaa9efbff,
6606 0x7e3cc91d, 0xeb4c1d88, 0x8fac6676, 0x1adcb2e3, 0x466c918a,
6607 0xd31c451f, 0xb7fc3ee1, 0x228cea74, 0x0e9c7833, 0x9becaca6,
6608 0xff0cd758, 0x6a7c03cd, 0x36cc20a4, 0xa3bcf431, 0xc75c8fcf,
6609 0x522c5b5a, 0x9f7dab41, 0x0a0d7fd4, 0x6eed042a, 0xfb9dd0bf,
6610 0xa72df3d6, 0x325d2743, 0x56bd5cbd, 0xc3cd8828, 0xefdd1a6f,
6611 0x7aadcefa, 0x1e4db504, 0x8b3d6191, 0xd78d42f8, 0x42fd966d,
6612 0x261ded93, 0xb36d3906, 0x54288e16, 0xc1585a83, 0xa5b8217d,
6613 0x30c8f5e8, 0x6c78d681, 0xf9080214, 0x9de879ea, 0x0898ad7f,
6614 0x24883f38, 0xb1f8ebad, 0xd5189053, 0x406844c6, 0x1cd867af,
6615 0x89a8b33a, 0xed48c8c4, 0x78381c51, 0xb569ec4a, 0x201938df,
6616 0x44f94321, 0xd18997b4, 0x8d39b4dd, 0x18496048, 0x7ca91bb6,
6617 0xe9d9cf23, 0xc5c95d64, 0x50b989f1, 0x3459f20f, 0xa129269a,
6618 0xfd9905f3, 0x68e9d166, 0x0c09aa98, 0x99797e0d, 0x4ddb4cef,
6619 0xd8ab987a, 0xbc4be384, 0x293b3711, 0x758b1478, 0xe0fbc0ed,
6620 0x841bbb13, 0x116b6f86, 0x3d7bfdc1, 0xa80b2954, 0xcceb52aa,
6621 0x599b863f, 0x052ba556, 0x905b71c3, 0xf4bb0a3d, 0x61cbdea8,
6622 0xac9a2eb3, 0x39eafa26, 0x5d0a81d8, 0xc87a554d, 0x94ca7624,
6623 0x01baa2b1, 0x655ad94f, 0xf02a0dda, 0xdc3a9f9d, 0x494a4b08,
6624 0x2daa30f6, 0xb8dae463, 0xe46ac70a, 0x711a139f, 0x15fa6861,
6625 0x808abcf4},
6626 {0x00000000, 0xcf9e17c8, 0x444d29d1, 0x8bd33e19, 0x889a53a2,
6627 0x4704446a, 0xccd77a73, 0x03496dbb, 0xca45a105, 0x05dbb6cd,
6628 0x8e0888d4, 0x41969f1c, 0x42dff2a7, 0x8d41e56f, 0x0692db76,
6629 0xc90cccbe, 0x4ffa444b, 0x80645383, 0x0bb76d9a, 0xc4297a52,
6630 0xc76017e9, 0x08fe0021, 0x832d3e38, 0x4cb329f0, 0x85bfe54e,
6631 0x4a21f286, 0xc1f2cc9f, 0x0e6cdb57, 0x0d25b6ec, 0xc2bba124,
6632 0x49689f3d, 0x86f688f5, 0x9ff48896, 0x506a9f5e, 0xdbb9a147,
6633 0x1427b68f, 0x176edb34, 0xd8f0ccfc, 0x5323f2e5, 0x9cbde52d,
6634 0x55b12993, 0x9a2f3e5b, 0x11fc0042, 0xde62178a, 0xdd2b7a31,
6635 0x12b56df9, 0x996653e0, 0x56f84428, 0xd00eccdd, 0x1f90db15,
6636 0x9443e50c, 0x5bddf2c4, 0x58949f7f, 0x970a88b7, 0x1cd9b6ae,
6637 0xd347a166, 0x1a4b6dd8, 0xd5d57a10, 0x5e064409, 0x919853c1,
6638 0x92d13e7a, 0x5d4f29b2, 0xd69c17ab, 0x19020063, 0xe498176d,
6639 0x2b0600a5, 0xa0d53ebc, 0x6f4b2974, 0x6c0244cf, 0xa39c5307,
6640 0x284f6d1e, 0xe7d17ad6, 0x2eddb668, 0xe143a1a0, 0x6a909fb9,
6641 0xa50e8871, 0xa647e5ca, 0x69d9f202, 0xe20acc1b, 0x2d94dbd3,
6642 0xab625326, 0x64fc44ee, 0xef2f7af7, 0x20b16d3f, 0x23f80084,
6643 0xec66174c, 0x67b52955, 0xa82b3e9d, 0x6127f223, 0xaeb9e5eb,
6644 0x256adbf2, 0xeaf4cc3a, 0xe9bda181, 0x2623b649, 0xadf08850,
6645 0x626e9f98, 0x7b6c9ffb, 0xb4f28833, 0x3f21b62a, 0xf0bfa1e2,
6646 0xf3f6cc59, 0x3c68db91, 0xb7bbe588, 0x7825f240, 0xb1293efe,
6647 0x7eb72936, 0xf564172f, 0x3afa00e7, 0x39b36d5c, 0xf62d7a94,
6648 0x7dfe448d, 0xb2605345, 0x3496dbb0, 0xfb08cc78, 0x70dbf261,
6649 0xbf45e5a9, 0xbc0c8812, 0x73929fda, 0xf841a1c3, 0x37dfb60b,
6650 0xfed37ab5, 0x314d6d7d, 0xba9e5364, 0x750044ac, 0x76492917,
6651 0xb9d73edf, 0x320400c6, 0xfd9a170e, 0x1241289b, 0xdddf3f53,
6652 0x560c014a, 0x99921682, 0x9adb7b39, 0x55456cf1, 0xde9652e8,
6653 0x11084520, 0xd804899e, 0x179a9e56, 0x9c49a04f, 0x53d7b787,
6654 0x509eda3c, 0x9f00cdf4, 0x14d3f3ed, 0xdb4de425, 0x5dbb6cd0,
6655 0x92257b18, 0x19f64501, 0xd66852c9, 0xd5213f72, 0x1abf28ba,
6656 0x916c16a3, 0x5ef2016b, 0x97fecdd5, 0x5860da1d, 0xd3b3e404,
6657 0x1c2df3cc, 0x1f649e77, 0xd0fa89bf, 0x5b29b7a6, 0x94b7a06e,
6658 0x8db5a00d, 0x422bb7c5, 0xc9f889dc, 0x06669e14, 0x052ff3af,
6659 0xcab1e467, 0x4162da7e, 0x8efccdb6, 0x47f00108, 0x886e16c0,
6660 0x03bd28d9, 0xcc233f11, 0xcf6a52aa, 0x00f44562, 0x8b277b7b,
6661 0x44b96cb3, 0xc24fe446, 0x0dd1f38e, 0x8602cd97, 0x499cda5f,
6662 0x4ad5b7e4, 0x854ba02c, 0x0e989e35, 0xc10689fd, 0x080a4543,
6663 0xc794528b, 0x4c476c92, 0x83d97b5a, 0x809016e1, 0x4f0e0129,
6664 0xc4dd3f30, 0x0b4328f8, 0xf6d93ff6, 0x3947283e, 0xb2941627,
6665 0x7d0a01ef, 0x7e436c54, 0xb1dd7b9c, 0x3a0e4585, 0xf590524d,
6666 0x3c9c9ef3, 0xf302893b, 0x78d1b722, 0xb74fa0ea, 0xb406cd51,
6667 0x7b98da99, 0xf04be480, 0x3fd5f348, 0xb9237bbd, 0x76bd6c75,
6668 0xfd6e526c, 0x32f045a4, 0x31b9281f, 0xfe273fd7, 0x75f401ce,
6669 0xba6a1606, 0x7366dab8, 0xbcf8cd70, 0x372bf369, 0xf8b5e4a1,
6670 0xfbfc891a, 0x34629ed2, 0xbfb1a0cb, 0x702fb703, 0x692db760,
6671 0xa6b3a0a8, 0x2d609eb1, 0xe2fe8979, 0xe1b7e4c2, 0x2e29f30a,
6672 0xa5facd13, 0x6a64dadb, 0xa3681665, 0x6cf601ad, 0xe7253fb4,
6673 0x28bb287c, 0x2bf245c7, 0xe46c520f, 0x6fbf6c16, 0xa0217bde,
6674 0x26d7f32b, 0xe949e4e3, 0x629adafa, 0xad04cd32, 0xae4da089,
6675 0x61d3b741, 0xea008958, 0x259e9e90, 0xec92522e, 0x230c45e6,
6676 0xa8df7bff, 0x67416c37, 0x6408018c, 0xab961644, 0x2045285d,
6677 0xefdb3f95},
6678 {0x00000000, 0x24825136, 0x4904a26c, 0x6d86f35a, 0x920944d8,
6679 0xb68b15ee, 0xdb0de6b4, 0xff8fb782, 0xff638ff1, 0xdbe1dec7,
6680 0xb6672d9d, 0x92e57cab, 0x6d6acb29, 0x49e89a1f, 0x246e6945,
6681 0x00ec3873, 0x25b619a3, 0x01344895, 0x6cb2bbcf, 0x4830eaf9,
6682 0xb7bf5d7b, 0x933d0c4d, 0xfebbff17, 0xda39ae21, 0xdad59652,
6683 0xfe57c764, 0x93d1343e, 0xb7536508, 0x48dcd28a, 0x6c5e83bc,
6684 0x01d870e6, 0x255a21d0, 0x4b6c3346, 0x6fee6270, 0x0268912a,
6685 0x26eac01c, 0xd965779e, 0xfde726a8, 0x9061d5f2, 0xb4e384c4,
6686 0xb40fbcb7, 0x908ded81, 0xfd0b1edb, 0xd9894fed, 0x2606f86f,
6687 0x0284a959, 0x6f025a03, 0x4b800b35, 0x6eda2ae5, 0x4a587bd3,
6688 0x27de8889, 0x035cd9bf, 0xfcd36e3d, 0xd8513f0b, 0xb5d7cc51,
6689 0x91559d67, 0x91b9a514, 0xb53bf422, 0xd8bd0778, 0xfc3f564e,
6690 0x03b0e1cc, 0x2732b0fa, 0x4ab443a0, 0x6e361296, 0x96d8668c,
6691 0xb25a37ba, 0xdfdcc4e0, 0xfb5e95d6, 0x04d12254, 0x20537362,
6692 0x4dd58038, 0x6957d10e, 0x69bbe97d, 0x4d39b84b, 0x20bf4b11,
6693 0x043d1a27, 0xfbb2ada5, 0xdf30fc93, 0xb2b60fc9, 0x96345eff,
6694 0xb36e7f2f, 0x97ec2e19, 0xfa6add43, 0xdee88c75, 0x21673bf7,
6695 0x05e56ac1, 0x6863999b, 0x4ce1c8ad, 0x4c0df0de, 0x688fa1e8,
6696 0x050952b2, 0x218b0384, 0xde04b406, 0xfa86e530, 0x9700166a,
6697 0xb382475c, 0xddb455ca, 0xf93604fc, 0x94b0f7a6, 0xb032a690,
6698 0x4fbd1112, 0x6b3f4024, 0x06b9b37e, 0x223be248, 0x22d7da3b,
6699 0x06558b0d, 0x6bd37857, 0x4f512961, 0xb0de9ee3, 0x945ccfd5,
6700 0xf9da3c8f, 0xdd586db9, 0xf8024c69, 0xdc801d5f, 0xb106ee05,
6701 0x9584bf33, 0x6a0b08b1, 0x4e895987, 0x230faadd, 0x078dfbeb,
6702 0x0761c398, 0x23e392ae, 0x4e6561f4, 0x6ae730c2, 0x95688740,
6703 0xb1ead676, 0xdc6c252c, 0xf8ee741a, 0xf6c1cb59, 0xd2439a6f,
6704 0xbfc56935, 0x9b473803, 0x64c88f81, 0x404adeb7, 0x2dcc2ded,
6705 0x094e7cdb, 0x09a244a8, 0x2d20159e, 0x40a6e6c4, 0x6424b7f2,
6706 0x9bab0070, 0xbf295146, 0xd2afa21c, 0xf62df32a, 0xd377d2fa,
6707 0xf7f583cc, 0x9a737096, 0xbef121a0, 0x417e9622, 0x65fcc714,
6708 0x087a344e, 0x2cf86578, 0x2c145d0b, 0x08960c3d, 0x6510ff67,
6709 0x4192ae51, 0xbe1d19d3, 0x9a9f48e5, 0xf719bbbf, 0xd39bea89,
6710 0xbdadf81f, 0x992fa929, 0xf4a95a73, 0xd02b0b45, 0x2fa4bcc7,
6711 0x0b26edf1, 0x66a01eab, 0x42224f9d, 0x42ce77ee, 0x664c26d8,
6712 0x0bcad582, 0x2f4884b4, 0xd0c73336, 0xf4456200, 0x99c3915a,
6713 0xbd41c06c, 0x981be1bc, 0xbc99b08a, 0xd11f43d0, 0xf59d12e6,
6714 0x0a12a564, 0x2e90f452, 0x43160708, 0x6794563e, 0x67786e4d,
6715 0x43fa3f7b, 0x2e7ccc21, 0x0afe9d17, 0xf5712a95, 0xd1f37ba3,
6716 0xbc7588f9, 0x98f7d9cf, 0x6019add5, 0x449bfce3, 0x291d0fb9,
6717 0x0d9f5e8f, 0xf210e90d, 0xd692b83b, 0xbb144b61, 0x9f961a57,
6718 0x9f7a2224, 0xbbf87312, 0xd67e8048, 0xf2fcd17e, 0x0d7366fc,
6719 0x29f137ca, 0x4477c490, 0x60f595a6, 0x45afb476, 0x612de540,
6720 0x0cab161a, 0x2829472c, 0xd7a6f0ae, 0xf324a198, 0x9ea252c2,
6721 0xba2003f4, 0xbacc3b87, 0x9e4e6ab1, 0xf3c899eb, 0xd74ac8dd,
6722 0x28c57f5f, 0x0c472e69, 0x61c1dd33, 0x45438c05, 0x2b759e93,
6723 0x0ff7cfa5, 0x62713cff, 0x46f36dc9, 0xb97cda4b, 0x9dfe8b7d,
6724 0xf0787827, 0xd4fa2911, 0xd4161162, 0xf0944054, 0x9d12b30e,
6725 0xb990e238, 0x461f55ba, 0x629d048c, 0x0f1bf7d6, 0x2b99a6e0,
6726 0x0ec38730, 0x2a41d606, 0x47c7255c, 0x6345746a, 0x9ccac3e8,
6727 0xb84892de, 0xd5ce6184, 0xf14c30b2, 0xf1a008c1, 0xd52259f7,
6728 0xb8a4aaad, 0x9c26fb9b, 0x63a94c19, 0x472b1d2f, 0x2aadee75,
6729 0x0e2fbf43},
6730 {0x00000000, 0x36f290f3, 0x6de521e6, 0x5b17b115, 0xdbca43cc,
6731 0xed38d33f, 0xb62f622a, 0x80ddf2d9, 0x6ce581d9, 0x5a17112a,
6732 0x0100a03f, 0x37f230cc, 0xb72fc215, 0x81dd52e6, 0xdacae3f3,
6733 0xec387300, 0xd9cb03b2, 0xef399341, 0xb42e2254, 0x82dcb2a7,
6734 0x0201407e, 0x34f3d08d, 0x6fe46198, 0x5916f16b, 0xb52e826b,
6735 0x83dc1298, 0xd8cba38d, 0xee39337e, 0x6ee4c1a7, 0x58165154,
6736 0x0301e041, 0x35f370b2, 0x68e70125, 0x5e1591d6, 0x050220c3,
6737 0x33f0b030, 0xb32d42e9, 0x85dfd21a, 0xdec8630f, 0xe83af3fc,
6738 0x040280fc, 0x32f0100f, 0x69e7a11a, 0x5f1531e9, 0xdfc8c330,
6739 0xe93a53c3, 0xb22de2d6, 0x84df7225, 0xb12c0297, 0x87de9264,
6740 0xdcc92371, 0xea3bb382, 0x6ae6415b, 0x5c14d1a8, 0x070360bd,
6741 0x31f1f04e, 0xddc9834e, 0xeb3b13bd, 0xb02ca2a8, 0x86de325b,
6742 0x0603c082, 0x30f15071, 0x6be6e164, 0x5d147197, 0xd1ce024a,
6743 0xe73c92b9, 0xbc2b23ac, 0x8ad9b35f, 0x0a044186, 0x3cf6d175,
6744 0x67e16060, 0x5113f093, 0xbd2b8393, 0x8bd91360, 0xd0cea275,
6745 0xe63c3286, 0x66e1c05f, 0x501350ac, 0x0b04e1b9, 0x3df6714a,
6746 0x080501f8, 0x3ef7910b, 0x65e0201e, 0x5312b0ed, 0xd3cf4234,
6747 0xe53dd2c7, 0xbe2a63d2, 0x88d8f321, 0x64e08021, 0x521210d2,
6748 0x0905a1c7, 0x3ff73134, 0xbf2ac3ed, 0x89d8531e, 0xd2cfe20b,
6749 0xe43d72f8, 0xb929036f, 0x8fdb939c, 0xd4cc2289, 0xe23eb27a,
6750 0x62e340a3, 0x5411d050, 0x0f066145, 0x39f4f1b6, 0xd5cc82b6,
6751 0xe33e1245, 0xb829a350, 0x8edb33a3, 0x0e06c17a, 0x38f45189,
6752 0x63e3e09c, 0x5511706f, 0x60e200dd, 0x5610902e, 0x0d07213b,
6753 0x3bf5b1c8, 0xbb284311, 0x8ddad3e2, 0xd6cd62f7, 0xe03ff204,
6754 0x0c078104, 0x3af511f7, 0x61e2a0e2, 0x57103011, 0xd7cdc2c8,
6755 0xe13f523b, 0xba28e32e, 0x8cda73dd, 0x78ed02d5, 0x4e1f9226,
6756 0x15082333, 0x23fab3c0, 0xa3274119, 0x95d5d1ea, 0xcec260ff,
6757 0xf830f00c, 0x1408830c, 0x22fa13ff, 0x79eda2ea, 0x4f1f3219,
6758 0xcfc2c0c0, 0xf9305033, 0xa227e126, 0x94d571d5, 0xa1260167,
6759 0x97d49194, 0xccc32081, 0xfa31b072, 0x7aec42ab, 0x4c1ed258,
6760 0x1709634d, 0x21fbf3be, 0xcdc380be, 0xfb31104d, 0xa026a158,
6761 0x96d431ab, 0x1609c372, 0x20fb5381, 0x7bece294, 0x4d1e7267,
6762 0x100a03f0, 0x26f89303, 0x7def2216, 0x4b1db2e5, 0xcbc0403c,
6763 0xfd32d0cf, 0xa62561da, 0x90d7f129, 0x7cef8229, 0x4a1d12da,
6764 0x110aa3cf, 0x27f8333c, 0xa725c1e5, 0x91d75116, 0xcac0e003,
6765 0xfc3270f0, 0xc9c10042, 0xff3390b1, 0xa42421a4, 0x92d6b157,
6766 0x120b438e, 0x24f9d37d, 0x7fee6268, 0x491cf29b, 0xa524819b,
6767 0x93d61168, 0xc8c1a07d, 0xfe33308e, 0x7eeec257, 0x481c52a4,
6768 0x130be3b1, 0x25f97342, 0xa923009f, 0x9fd1906c, 0xc4c62179,
6769 0xf234b18a, 0x72e94353, 0x441bd3a0, 0x1f0c62b5, 0x29fef246,
6770 0xc5c68146, 0xf33411b5, 0xa823a0a0, 0x9ed13053, 0x1e0cc28a,
6771 0x28fe5279, 0x73e9e36c, 0x451b739f, 0x70e8032d, 0x461a93de,
6772 0x1d0d22cb, 0x2bffb238, 0xab2240e1, 0x9dd0d012, 0xc6c76107,
6773 0xf035f1f4, 0x1c0d82f4, 0x2aff1207, 0x71e8a312, 0x471a33e1,
6774 0xc7c7c138, 0xf13551cb, 0xaa22e0de, 0x9cd0702d, 0xc1c401ba,
6775 0xf7369149, 0xac21205c, 0x9ad3b0af, 0x1a0e4276, 0x2cfcd285,
6776 0x77eb6390, 0x4119f363, 0xad218063, 0x9bd31090, 0xc0c4a185,
6777 0xf6363176, 0x76ebc3af, 0x4019535c, 0x1b0ee249, 0x2dfc72ba,
6778 0x180f0208, 0x2efd92fb, 0x75ea23ee, 0x4318b31d, 0xc3c541c4,
6779 0xf537d137, 0xae206022, 0x98d2f0d1, 0x74ea83d1, 0x42181322,
6780 0x190fa237, 0x2ffd32c4, 0xaf20c01d, 0x99d250ee, 0xc2c5e1fb,
6781 0xf4377108}};
6782
6783 local const z_word_t FAR crc_braid_big_table[][256] = {
6784 {0x0000000000000000, 0xf390f23600000000, 0xe621e56d00000000,
6785 0x15b1175b00000000, 0xcc43cadb00000000, 0x3fd338ed00000000,
6786 0x2a622fb600000000, 0xd9f2dd8000000000, 0xd981e56c00000000,
6787 0x2a11175a00000000, 0x3fa0000100000000, 0xcc30f23700000000,
6788 0x15c22fb700000000, 0xe652dd8100000000, 0xf3e3cada00000000,
6789 0x007338ec00000000, 0xb203cbd900000000, 0x419339ef00000000,
6790 0x54222eb400000000, 0xa7b2dc8200000000, 0x7e40010200000000,
6791 0x8dd0f33400000000, 0x9861e46f00000000, 0x6bf1165900000000,
6792 0x6b822eb500000000, 0x9812dc8300000000, 0x8da3cbd800000000,
6793 0x7e3339ee00000000, 0xa7c1e46e00000000, 0x5451165800000000,
6794 0x41e0010300000000, 0xb270f33500000000, 0x2501e76800000000,
6795 0xd691155e00000000, 0xc320020500000000, 0x30b0f03300000000,
6796 0xe9422db300000000, 0x1ad2df8500000000, 0x0f63c8de00000000,
6797 0xfcf33ae800000000, 0xfc80020400000000, 0x0f10f03200000000,
6798 0x1aa1e76900000000, 0xe931155f00000000, 0x30c3c8df00000000,
6799 0xc3533ae900000000, 0xd6e22db200000000, 0x2572df8400000000,
6800 0x97022cb100000000, 0x6492de8700000000, 0x7123c9dc00000000,
6801 0x82b33bea00000000, 0x5b41e66a00000000, 0xa8d1145c00000000,
6802 0xbd60030700000000, 0x4ef0f13100000000, 0x4e83c9dd00000000,
6803 0xbd133beb00000000, 0xa8a22cb000000000, 0x5b32de8600000000,
6804 0x82c0030600000000, 0x7150f13000000000, 0x64e1e66b00000000,
6805 0x9771145d00000000, 0x4a02ced100000000, 0xb9923ce700000000,
6806 0xac232bbc00000000, 0x5fb3d98a00000000, 0x8641040a00000000,
6807 0x75d1f63c00000000, 0x6060e16700000000, 0x93f0135100000000,
6808 0x93832bbd00000000, 0x6013d98b00000000, 0x75a2ced000000000,
6809 0x86323ce600000000, 0x5fc0e16600000000, 0xac50135000000000,
6810 0xb9e1040b00000000, 0x4a71f63d00000000, 0xf801050800000000,
6811 0x0b91f73e00000000, 0x1e20e06500000000, 0xedb0125300000000,
6812 0x3442cfd300000000, 0xc7d23de500000000, 0xd2632abe00000000,
6813 0x21f3d88800000000, 0x2180e06400000000, 0xd210125200000000,
6814 0xc7a1050900000000, 0x3431f73f00000000, 0xedc32abf00000000,
6815 0x1e53d88900000000, 0x0be2cfd200000000, 0xf8723de400000000,
6816 0x6f0329b900000000, 0x9c93db8f00000000, 0x8922ccd400000000,
6817 0x7ab23ee200000000, 0xa340e36200000000, 0x50d0115400000000,
6818 0x4561060f00000000, 0xb6f1f43900000000, 0xb682ccd500000000,
6819 0x45123ee300000000, 0x50a329b800000000, 0xa333db8e00000000,
6820 0x7ac1060e00000000, 0x8951f43800000000, 0x9ce0e36300000000,
6821 0x6f70115500000000, 0xdd00e26000000000, 0x2e90105600000000,
6822 0x3b21070d00000000, 0xc8b1f53b00000000, 0x114328bb00000000,
6823 0xe2d3da8d00000000, 0xf762cdd600000000, 0x04f23fe000000000,
6824 0x0481070c00000000, 0xf711f53a00000000, 0xe2a0e26100000000,
6825 0x1130105700000000, 0xc8c2cdd700000000, 0x3b523fe100000000,
6826 0x2ee328ba00000000, 0xdd73da8c00000000, 0xd502ed7800000000,
6827 0x26921f4e00000000, 0x3323081500000000, 0xc0b3fa2300000000,
6828 0x194127a300000000, 0xead1d59500000000, 0xff60c2ce00000000,
6829 0x0cf030f800000000, 0x0c83081400000000, 0xff13fa2200000000,
6830 0xeaa2ed7900000000, 0x19321f4f00000000, 0xc0c0c2cf00000000,
6831 0x335030f900000000, 0x26e127a200000000, 0xd571d59400000000,
6832 0x670126a100000000, 0x9491d49700000000, 0x8120c3cc00000000,
6833 0x72b031fa00000000, 0xab42ec7a00000000, 0x58d21e4c00000000,
6834 0x4d63091700000000, 0xbef3fb2100000000, 0xbe80c3cd00000000,
6835 0x4d1031fb00000000, 0x58a126a000000000, 0xab31d49600000000,
6836 0x72c3091600000000, 0x8153fb2000000000, 0x94e2ec7b00000000,
6837 0x67721e4d00000000, 0xf0030a1000000000, 0x0393f82600000000,
6838 0x1622ef7d00000000, 0xe5b21d4b00000000, 0x3c40c0cb00000000,
6839 0xcfd032fd00000000, 0xda6125a600000000, 0x29f1d79000000000,
6840 0x2982ef7c00000000, 0xda121d4a00000000, 0xcfa30a1100000000,
6841 0x3c33f82700000000, 0xe5c125a700000000, 0x1651d79100000000,
6842 0x03e0c0ca00000000, 0xf07032fc00000000, 0x4200c1c900000000,
6843 0xb19033ff00000000, 0xa42124a400000000, 0x57b1d69200000000,
6844 0x8e430b1200000000, 0x7dd3f92400000000, 0x6862ee7f00000000,
6845 0x9bf21c4900000000, 0x9b8124a500000000, 0x6811d69300000000,
6846 0x7da0c1c800000000, 0x8e3033fe00000000, 0x57c2ee7e00000000,
6847 0xa4521c4800000000, 0xb1e30b1300000000, 0x4273f92500000000,
6848 0x9f0023a900000000, 0x6c90d19f00000000, 0x7921c6c400000000,
6849 0x8ab134f200000000, 0x5343e97200000000, 0xa0d31b4400000000,
6850 0xb5620c1f00000000, 0x46f2fe2900000000, 0x4681c6c500000000,
6851 0xb51134f300000000, 0xa0a023a800000000, 0x5330d19e00000000,
6852 0x8ac20c1e00000000, 0x7952fe2800000000, 0x6ce3e97300000000,
6853 0x9f731b4500000000, 0x2d03e87000000000, 0xde931a4600000000,
6854 0xcb220d1d00000000, 0x38b2ff2b00000000, 0xe14022ab00000000,
6855 0x12d0d09d00000000, 0x0761c7c600000000, 0xf4f135f000000000,
6856 0xf4820d1c00000000, 0x0712ff2a00000000, 0x12a3e87100000000,
6857 0xe1331a4700000000, 0x38c1c7c700000000, 0xcb5135f100000000,
6858 0xdee022aa00000000, 0x2d70d09c00000000, 0xba01c4c100000000,
6859 0x499136f700000000, 0x5c2021ac00000000, 0xafb0d39a00000000,
6860 0x76420e1a00000000, 0x85d2fc2c00000000, 0x9063eb7700000000,
6861 0x63f3194100000000, 0x638021ad00000000, 0x9010d39b00000000,
6862 0x85a1c4c000000000, 0x763136f600000000, 0xafc3eb7600000000,
6863 0x5c53194000000000, 0x49e20e1b00000000, 0xba72fc2d00000000,
6864 0x08020f1800000000, 0xfb92fd2e00000000, 0xee23ea7500000000,
6865 0x1db3184300000000, 0xc441c5c300000000, 0x37d137f500000000,
6866 0x226020ae00000000, 0xd1f0d29800000000, 0xd183ea7400000000,
6867 0x2213184200000000, 0x37a20f1900000000, 0xc432fd2f00000000,
6868 0x1dc020af00000000, 0xee50d29900000000, 0xfbe1c5c200000000,
6869 0x087137f400000000},
6870 {0x0000000000000000, 0x3651822400000000, 0x6ca2044900000000,
6871 0x5af3866d00000000, 0xd844099200000000, 0xee158bb600000000,
6872 0xb4e60ddb00000000, 0x82b78fff00000000, 0xf18f63ff00000000,
6873 0xc7dee1db00000000, 0x9d2d67b600000000, 0xab7ce59200000000,
6874 0x29cb6a6d00000000, 0x1f9ae84900000000, 0x45696e2400000000,
6875 0x7338ec0000000000, 0xa319b62500000000, 0x9548340100000000,
6876 0xcfbbb26c00000000, 0xf9ea304800000000, 0x7b5dbfb700000000,
6877 0x4d0c3d9300000000, 0x17ffbbfe00000000, 0x21ae39da00000000,
6878 0x5296d5da00000000, 0x64c757fe00000000, 0x3e34d19300000000,
6879 0x086553b700000000, 0x8ad2dc4800000000, 0xbc835e6c00000000,
6880 0xe670d80100000000, 0xd0215a2500000000, 0x46336c4b00000000,
6881 0x7062ee6f00000000, 0x2a91680200000000, 0x1cc0ea2600000000,
6882 0x9e7765d900000000, 0xa826e7fd00000000, 0xf2d5619000000000,
6883 0xc484e3b400000000, 0xb7bc0fb400000000, 0x81ed8d9000000000,
6884 0xdb1e0bfd00000000, 0xed4f89d900000000, 0x6ff8062600000000,
6885 0x59a9840200000000, 0x035a026f00000000, 0x350b804b00000000,
6886 0xe52ada6e00000000, 0xd37b584a00000000, 0x8988de2700000000,
6887 0xbfd95c0300000000, 0x3d6ed3fc00000000, 0x0b3f51d800000000,
6888 0x51ccd7b500000000, 0x679d559100000000, 0x14a5b99100000000,
6889 0x22f43bb500000000, 0x7807bdd800000000, 0x4e563ffc00000000,
6890 0xcce1b00300000000, 0xfab0322700000000, 0xa043b44a00000000,
6891 0x9612366e00000000, 0x8c66d89600000000, 0xba375ab200000000,
6892 0xe0c4dcdf00000000, 0xd6955efb00000000, 0x5422d10400000000,
6893 0x6273532000000000, 0x3880d54d00000000, 0x0ed1576900000000,
6894 0x7de9bb6900000000, 0x4bb8394d00000000, 0x114bbf2000000000,
6895 0x271a3d0400000000, 0xa5adb2fb00000000, 0x93fc30df00000000,
6896 0xc90fb6b200000000, 0xff5e349600000000, 0x2f7f6eb300000000,
6897 0x192eec9700000000, 0x43dd6afa00000000, 0x758ce8de00000000,
6898 0xf73b672100000000, 0xc16ae50500000000, 0x9b99636800000000,
6899 0xadc8e14c00000000, 0xdef00d4c00000000, 0xe8a18f6800000000,
6900 0xb252090500000000, 0x84038b2100000000, 0x06b404de00000000,
6901 0x30e586fa00000000, 0x6a16009700000000, 0x5c4782b300000000,
6902 0xca55b4dd00000000, 0xfc0436f900000000, 0xa6f7b09400000000,
6903 0x90a632b000000000, 0x1211bd4f00000000, 0x24403f6b00000000,
6904 0x7eb3b90600000000, 0x48e23b2200000000, 0x3bdad72200000000,
6905 0x0d8b550600000000, 0x5778d36b00000000, 0x6129514f00000000,
6906 0xe39edeb000000000, 0xd5cf5c9400000000, 0x8f3cdaf900000000,
6907 0xb96d58dd00000000, 0x694c02f800000000, 0x5f1d80dc00000000,
6908 0x05ee06b100000000, 0x33bf849500000000, 0xb1080b6a00000000,
6909 0x8759894e00000000, 0xddaa0f2300000000, 0xebfb8d0700000000,
6910 0x98c3610700000000, 0xae92e32300000000, 0xf461654e00000000,
6911 0xc230e76a00000000, 0x4087689500000000, 0x76d6eab100000000,
6912 0x2c256cdc00000000, 0x1a74eef800000000, 0x59cbc1f600000000,
6913 0x6f9a43d200000000, 0x3569c5bf00000000, 0x0338479b00000000,
6914 0x818fc86400000000, 0xb7de4a4000000000, 0xed2dcc2d00000000,
6915 0xdb7c4e0900000000, 0xa844a20900000000, 0x9e15202d00000000,
6916 0xc4e6a64000000000, 0xf2b7246400000000, 0x7000ab9b00000000,
6917 0x465129bf00000000, 0x1ca2afd200000000, 0x2af32df600000000,
6918 0xfad277d300000000, 0xcc83f5f700000000, 0x9670739a00000000,
6919 0xa021f1be00000000, 0x22967e4100000000, 0x14c7fc6500000000,
6920 0x4e347a0800000000, 0x7865f82c00000000, 0x0b5d142c00000000,
6921 0x3d0c960800000000, 0x67ff106500000000, 0x51ae924100000000,
6922 0xd3191dbe00000000, 0xe5489f9a00000000, 0xbfbb19f700000000,
6923 0x89ea9bd300000000, 0x1ff8adbd00000000, 0x29a92f9900000000,
6924 0x735aa9f400000000, 0x450b2bd000000000, 0xc7bca42f00000000,
6925 0xf1ed260b00000000, 0xab1ea06600000000, 0x9d4f224200000000,
6926 0xee77ce4200000000, 0xd8264c6600000000, 0x82d5ca0b00000000,
6927 0xb484482f00000000, 0x3633c7d000000000, 0x006245f400000000,
6928 0x5a91c39900000000, 0x6cc041bd00000000, 0xbce11b9800000000,
6929 0x8ab099bc00000000, 0xd0431fd100000000, 0xe6129df500000000,
6930 0x64a5120a00000000, 0x52f4902e00000000, 0x0807164300000000,
6931 0x3e56946700000000, 0x4d6e786700000000, 0x7b3ffa4300000000,
6932 0x21cc7c2e00000000, 0x179dfe0a00000000, 0x952a71f500000000,
6933 0xa37bf3d100000000, 0xf98875bc00000000, 0xcfd9f79800000000,
6934 0xd5ad196000000000, 0xe3fc9b4400000000, 0xb90f1d2900000000,
6935 0x8f5e9f0d00000000, 0x0de910f200000000, 0x3bb892d600000000,
6936 0x614b14bb00000000, 0x571a969f00000000, 0x24227a9f00000000,
6937 0x1273f8bb00000000, 0x48807ed600000000, 0x7ed1fcf200000000,
6938 0xfc66730d00000000, 0xca37f12900000000, 0x90c4774400000000,
6939 0xa695f56000000000, 0x76b4af4500000000, 0x40e52d6100000000,
6940 0x1a16ab0c00000000, 0x2c47292800000000, 0xaef0a6d700000000,
6941 0x98a124f300000000, 0xc252a29e00000000, 0xf40320ba00000000,
6942 0x873bccba00000000, 0xb16a4e9e00000000, 0xeb99c8f300000000,
6943 0xddc84ad700000000, 0x5f7fc52800000000, 0x692e470c00000000,
6944 0x33ddc16100000000, 0x058c434500000000, 0x939e752b00000000,
6945 0xa5cff70f00000000, 0xff3c716200000000, 0xc96df34600000000,
6946 0x4bda7cb900000000, 0x7d8bfe9d00000000, 0x277878f000000000,
6947 0x1129fad400000000, 0x621116d400000000, 0x544094f000000000,
6948 0x0eb3129d00000000, 0x38e290b900000000, 0xba551f4600000000,
6949 0x8c049d6200000000, 0xd6f71b0f00000000, 0xe0a6992b00000000,
6950 0x3087c30e00000000, 0x06d6412a00000000, 0x5c25c74700000000,
6951 0x6a74456300000000, 0xe8c3ca9c00000000, 0xde9248b800000000,
6952 0x8461ced500000000, 0xb2304cf100000000, 0xc108a0f100000000,
6953 0xf75922d500000000, 0xadaaa4b800000000, 0x9bfb269c00000000,
6954 0x194ca96300000000, 0x2f1d2b4700000000, 0x75eead2a00000000,
6955 0x43bf2f0e00000000},
6956 {0x0000000000000000, 0xc8179ecf00000000, 0xd1294d4400000000,
6957 0x193ed38b00000000, 0xa2539a8800000000, 0x6a44044700000000,
6958 0x737ad7cc00000000, 0xbb6d490300000000, 0x05a145ca00000000,
6959 0xcdb6db0500000000, 0xd488088e00000000, 0x1c9f964100000000,
6960 0xa7f2df4200000000, 0x6fe5418d00000000, 0x76db920600000000,
6961 0xbecc0cc900000000, 0x4b44fa4f00000000, 0x8353648000000000,
6962 0x9a6db70b00000000, 0x527a29c400000000, 0xe91760c700000000,
6963 0x2100fe0800000000, 0x383e2d8300000000, 0xf029b34c00000000,
6964 0x4ee5bf8500000000, 0x86f2214a00000000, 0x9fccf2c100000000,
6965 0x57db6c0e00000000, 0xecb6250d00000000, 0x24a1bbc200000000,
6966 0x3d9f684900000000, 0xf588f68600000000, 0x9688f49f00000000,
6967 0x5e9f6a5000000000, 0x47a1b9db00000000, 0x8fb6271400000000,
6968 0x34db6e1700000000, 0xfcccf0d800000000, 0xe5f2235300000000,
6969 0x2de5bd9c00000000, 0x9329b15500000000, 0x5b3e2f9a00000000,
6970 0x4200fc1100000000, 0x8a1762de00000000, 0x317a2bdd00000000,
6971 0xf96db51200000000, 0xe053669900000000, 0x2844f85600000000,
6972 0xddcc0ed000000000, 0x15db901f00000000, 0x0ce5439400000000,
6973 0xc4f2dd5b00000000, 0x7f9f945800000000, 0xb7880a9700000000,
6974 0xaeb6d91c00000000, 0x66a147d300000000, 0xd86d4b1a00000000,
6975 0x107ad5d500000000, 0x0944065e00000000, 0xc153989100000000,
6976 0x7a3ed19200000000, 0xb2294f5d00000000, 0xab179cd600000000,
6977 0x6300021900000000, 0x6d1798e400000000, 0xa500062b00000000,
6978 0xbc3ed5a000000000, 0x74294b6f00000000, 0xcf44026c00000000,
6979 0x07539ca300000000, 0x1e6d4f2800000000, 0xd67ad1e700000000,
6980 0x68b6dd2e00000000, 0xa0a143e100000000, 0xb99f906a00000000,
6981 0x71880ea500000000, 0xcae547a600000000, 0x02f2d96900000000,
6982 0x1bcc0ae200000000, 0xd3db942d00000000, 0x265362ab00000000,
6983 0xee44fc6400000000, 0xf77a2fef00000000, 0x3f6db12000000000,
6984 0x8400f82300000000, 0x4c1766ec00000000, 0x5529b56700000000,
6985 0x9d3e2ba800000000, 0x23f2276100000000, 0xebe5b9ae00000000,
6986 0xf2db6a2500000000, 0x3accf4ea00000000, 0x81a1bde900000000,
6987 0x49b6232600000000, 0x5088f0ad00000000, 0x989f6e6200000000,
6988 0xfb9f6c7b00000000, 0x3388f2b400000000, 0x2ab6213f00000000,
6989 0xe2a1bff000000000, 0x59ccf6f300000000, 0x91db683c00000000,
6990 0x88e5bbb700000000, 0x40f2257800000000, 0xfe3e29b100000000,
6991 0x3629b77e00000000, 0x2f1764f500000000, 0xe700fa3a00000000,
6992 0x5c6db33900000000, 0x947a2df600000000, 0x8d44fe7d00000000,
6993 0x455360b200000000, 0xb0db963400000000, 0x78cc08fb00000000,
6994 0x61f2db7000000000, 0xa9e545bf00000000, 0x12880cbc00000000,
6995 0xda9f927300000000, 0xc3a141f800000000, 0x0bb6df3700000000,
6996 0xb57ad3fe00000000, 0x7d6d4d3100000000, 0x64539eba00000000,
6997 0xac44007500000000, 0x1729497600000000, 0xdf3ed7b900000000,
6998 0xc600043200000000, 0x0e179afd00000000, 0x9b28411200000000,
6999 0x533fdfdd00000000, 0x4a010c5600000000, 0x8216929900000000,
7000 0x397bdb9a00000000, 0xf16c455500000000, 0xe85296de00000000,
7001 0x2045081100000000, 0x9e8904d800000000, 0x569e9a1700000000,
7002 0x4fa0499c00000000, 0x87b7d75300000000, 0x3cda9e5000000000,
7003 0xf4cd009f00000000, 0xedf3d31400000000, 0x25e44ddb00000000,
7004 0xd06cbb5d00000000, 0x187b259200000000, 0x0145f61900000000,
7005 0xc95268d600000000, 0x723f21d500000000, 0xba28bf1a00000000,
7006 0xa3166c9100000000, 0x6b01f25e00000000, 0xd5cdfe9700000000,
7007 0x1dda605800000000, 0x04e4b3d300000000, 0xccf32d1c00000000,
7008 0x779e641f00000000, 0xbf89fad000000000, 0xa6b7295b00000000,
7009 0x6ea0b79400000000, 0x0da0b58d00000000, 0xc5b72b4200000000,
7010 0xdc89f8c900000000, 0x149e660600000000, 0xaff32f0500000000,
7011 0x67e4b1ca00000000, 0x7eda624100000000, 0xb6cdfc8e00000000,
7012 0x0801f04700000000, 0xc0166e8800000000, 0xd928bd0300000000,
7013 0x113f23cc00000000, 0xaa526acf00000000, 0x6245f40000000000,
7014 0x7b7b278b00000000, 0xb36cb94400000000, 0x46e44fc200000000,
7015 0x8ef3d10d00000000, 0x97cd028600000000, 0x5fda9c4900000000,
7016 0xe4b7d54a00000000, 0x2ca04b8500000000, 0x359e980e00000000,
7017 0xfd8906c100000000, 0x43450a0800000000, 0x8b5294c700000000,
7018 0x926c474c00000000, 0x5a7bd98300000000, 0xe116908000000000,
7019 0x29010e4f00000000, 0x303fddc400000000, 0xf828430b00000000,
7020 0xf63fd9f600000000, 0x3e28473900000000, 0x271694b200000000,
7021 0xef010a7d00000000, 0x546c437e00000000, 0x9c7bddb100000000,
7022 0x85450e3a00000000, 0x4d5290f500000000, 0xf39e9c3c00000000,
7023 0x3b8902f300000000, 0x22b7d17800000000, 0xeaa04fb700000000,
7024 0x51cd06b400000000, 0x99da987b00000000, 0x80e44bf000000000,
7025 0x48f3d53f00000000, 0xbd7b23b900000000, 0x756cbd7600000000,
7026 0x6c526efd00000000, 0xa445f03200000000, 0x1f28b93100000000,
7027 0xd73f27fe00000000, 0xce01f47500000000, 0x06166aba00000000,
7028 0xb8da667300000000, 0x70cdf8bc00000000, 0x69f32b3700000000,
7029 0xa1e4b5f800000000, 0x1a89fcfb00000000, 0xd29e623400000000,
7030 0xcba0b1bf00000000, 0x03b72f7000000000, 0x60b72d6900000000,
7031 0xa8a0b3a600000000, 0xb19e602d00000000, 0x7989fee200000000,
7032 0xc2e4b7e100000000, 0x0af3292e00000000, 0x13cdfaa500000000,
7033 0xdbda646a00000000, 0x651668a300000000, 0xad01f66c00000000,
7034 0xb43f25e700000000, 0x7c28bb2800000000, 0xc745f22b00000000,
7035 0x0f526ce400000000, 0x166cbf6f00000000, 0xde7b21a000000000,
7036 0x2bf3d72600000000, 0xe3e449e900000000, 0xfada9a6200000000,
7037 0x32cd04ad00000000, 0x89a04dae00000000, 0x41b7d36100000000,
7038 0x588900ea00000000, 0x909e9e2500000000, 0x2e5292ec00000000,
7039 0xe6450c2300000000, 0xff7bdfa800000000, 0x376c416700000000,
7040 0x8c01086400000000, 0x441696ab00000000, 0x5d28452000000000,
7041 0x953fdbef00000000},
7042 {0x0000000000000000, 0x95d4709500000000, 0x6baf90f100000000,
7043 0xfe7be06400000000, 0x9758503800000000, 0x028c20ad00000000,
7044 0xfcf7c0c900000000, 0x6923b05c00000000, 0x2eb1a07000000000,
7045 0xbb65d0e500000000, 0x451e308100000000, 0xd0ca401400000000,
7046 0xb9e9f04800000000, 0x2c3d80dd00000000, 0xd24660b900000000,
7047 0x4792102c00000000, 0x5c6241e100000000, 0xc9b6317400000000,
7048 0x37cdd11000000000, 0xa219a18500000000, 0xcb3a11d900000000,
7049 0x5eee614c00000000, 0xa095812800000000, 0x3541f1bd00000000,
7050 0x72d3e19100000000, 0xe707910400000000, 0x197c716000000000,
7051 0x8ca801f500000000, 0xe58bb1a900000000, 0x705fc13c00000000,
7052 0x8e24215800000000, 0x1bf051cd00000000, 0xf9c2f31900000000,
7053 0x6c16838c00000000, 0x926d63e800000000, 0x07b9137d00000000,
7054 0x6e9aa32100000000, 0xfb4ed3b400000000, 0x053533d000000000,
7055 0x90e1434500000000, 0xd773536900000000, 0x42a723fc00000000,
7056 0xbcdcc39800000000, 0x2908b30d00000000, 0x402b035100000000,
7057 0xd5ff73c400000000, 0x2b8493a000000000, 0xbe50e33500000000,
7058 0xa5a0b2f800000000, 0x3074c26d00000000, 0xce0f220900000000,
7059 0x5bdb529c00000000, 0x32f8e2c000000000, 0xa72c925500000000,
7060 0x5957723100000000, 0xcc8302a400000000, 0x8b11128800000000,
7061 0x1ec5621d00000000, 0xe0be827900000000, 0x756af2ec00000000,
7062 0x1c4942b000000000, 0x899d322500000000, 0x77e6d24100000000,
7063 0xe232a2d400000000, 0xf285e73300000000, 0x675197a600000000,
7064 0x992a77c200000000, 0x0cfe075700000000, 0x65ddb70b00000000,
7065 0xf009c79e00000000, 0x0e7227fa00000000, 0x9ba6576f00000000,
7066 0xdc34474300000000, 0x49e037d600000000, 0xb79bd7b200000000,
7067 0x224fa72700000000, 0x4b6c177b00000000, 0xdeb867ee00000000,
7068 0x20c3878a00000000, 0xb517f71f00000000, 0xaee7a6d200000000,
7069 0x3b33d64700000000, 0xc548362300000000, 0x509c46b600000000,
7070 0x39bff6ea00000000, 0xac6b867f00000000, 0x5210661b00000000,
7071 0xc7c4168e00000000, 0x805606a200000000, 0x1582763700000000,
7072 0xebf9965300000000, 0x7e2de6c600000000, 0x170e569a00000000,
7073 0x82da260f00000000, 0x7ca1c66b00000000, 0xe975b6fe00000000,
7074 0x0b47142a00000000, 0x9e9364bf00000000, 0x60e884db00000000,
7075 0xf53cf44e00000000, 0x9c1f441200000000, 0x09cb348700000000,
7076 0xf7b0d4e300000000, 0x6264a47600000000, 0x25f6b45a00000000,
7077 0xb022c4cf00000000, 0x4e5924ab00000000, 0xdb8d543e00000000,
7078 0xb2aee46200000000, 0x277a94f700000000, 0xd901749300000000,
7079 0x4cd5040600000000, 0x572555cb00000000, 0xc2f1255e00000000,
7080 0x3c8ac53a00000000, 0xa95eb5af00000000, 0xc07d05f300000000,
7081 0x55a9756600000000, 0xabd2950200000000, 0x3e06e59700000000,
7082 0x7994f5bb00000000, 0xec40852e00000000, 0x123b654a00000000,
7083 0x87ef15df00000000, 0xeecca58300000000, 0x7b18d51600000000,
7084 0x8563357200000000, 0x10b745e700000000, 0xe40bcf6700000000,
7085 0x71dfbff200000000, 0x8fa45f9600000000, 0x1a702f0300000000,
7086 0x73539f5f00000000, 0xe687efca00000000, 0x18fc0fae00000000,
7087 0x8d287f3b00000000, 0xcaba6f1700000000, 0x5f6e1f8200000000,
7088 0xa115ffe600000000, 0x34c18f7300000000, 0x5de23f2f00000000,
7089 0xc8364fba00000000, 0x364dafde00000000, 0xa399df4b00000000,
7090 0xb8698e8600000000, 0x2dbdfe1300000000, 0xd3c61e7700000000,
7091 0x46126ee200000000, 0x2f31debe00000000, 0xbae5ae2b00000000,
7092 0x449e4e4f00000000, 0xd14a3eda00000000, 0x96d82ef600000000,
7093 0x030c5e6300000000, 0xfd77be0700000000, 0x68a3ce9200000000,
7094 0x01807ece00000000, 0x94540e5b00000000, 0x6a2fee3f00000000,
7095 0xfffb9eaa00000000, 0x1dc93c7e00000000, 0x881d4ceb00000000,
7096 0x7666ac8f00000000, 0xe3b2dc1a00000000, 0x8a916c4600000000,
7097 0x1f451cd300000000, 0xe13efcb700000000, 0x74ea8c2200000000,
7098 0x33789c0e00000000, 0xa6acec9b00000000, 0x58d70cff00000000,
7099 0xcd037c6a00000000, 0xa420cc3600000000, 0x31f4bca300000000,
7100 0xcf8f5cc700000000, 0x5a5b2c5200000000, 0x41ab7d9f00000000,
7101 0xd47f0d0a00000000, 0x2a04ed6e00000000, 0xbfd09dfb00000000,
7102 0xd6f32da700000000, 0x43275d3200000000, 0xbd5cbd5600000000,
7103 0x2888cdc300000000, 0x6f1addef00000000, 0xfacead7a00000000,
7104 0x04b54d1e00000000, 0x91613d8b00000000, 0xf8428dd700000000,
7105 0x6d96fd4200000000, 0x93ed1d2600000000, 0x06396db300000000,
7106 0x168e285400000000, 0x835a58c100000000, 0x7d21b8a500000000,
7107 0xe8f5c83000000000, 0x81d6786c00000000, 0x140208f900000000,
7108 0xea79e89d00000000, 0x7fad980800000000, 0x383f882400000000,
7109 0xadebf8b100000000, 0x539018d500000000, 0xc644684000000000,
7110 0xaf67d81c00000000, 0x3ab3a88900000000, 0xc4c848ed00000000,
7111 0x511c387800000000, 0x4aec69b500000000, 0xdf38192000000000,
7112 0x2143f94400000000, 0xb49789d100000000, 0xddb4398d00000000,
7113 0x4860491800000000, 0xb61ba97c00000000, 0x23cfd9e900000000,
7114 0x645dc9c500000000, 0xf189b95000000000, 0x0ff2593400000000,
7115 0x9a2629a100000000, 0xf30599fd00000000, 0x66d1e96800000000,
7116 0x98aa090c00000000, 0x0d7e799900000000, 0xef4cdb4d00000000,
7117 0x7a98abd800000000, 0x84e34bbc00000000, 0x11373b2900000000,
7118 0x78148b7500000000, 0xedc0fbe000000000, 0x13bb1b8400000000,
7119 0x866f6b1100000000, 0xc1fd7b3d00000000, 0x54290ba800000000,
7120 0xaa52ebcc00000000, 0x3f869b5900000000, 0x56a52b0500000000,
7121 0xc3715b9000000000, 0x3d0abbf400000000, 0xa8decb6100000000,
7122 0xb32e9aac00000000, 0x26faea3900000000, 0xd8810a5d00000000,
7123 0x4d557ac800000000, 0x2476ca9400000000, 0xb1a2ba0100000000,
7124 0x4fd95a6500000000, 0xda0d2af000000000, 0x9d9f3adc00000000,
7125 0x084b4a4900000000, 0xf630aa2d00000000, 0x63e4dab800000000,
7126 0x0ac76ae400000000, 0x9f131a7100000000, 0x6168fa1500000000,
7127 0xf4bc8a8000000000},
7128 {0x0000000000000000, 0x1f17f08000000000, 0x7f2891da00000000,
7129 0x603f615a00000000, 0xbf56536e00000000, 0xa041a3ee00000000,
7130 0xc07ec2b400000000, 0xdf69323400000000, 0x7eada6dc00000000,
7131 0x61ba565c00000000, 0x0185370600000000, 0x1e92c78600000000,
7132 0xc1fbf5b200000000, 0xdeec053200000000, 0xbed3646800000000,
7133 0xa1c494e800000000, 0xbd5c3c6200000000, 0xa24bcce200000000,
7134 0xc274adb800000000, 0xdd635d3800000000, 0x020a6f0c00000000,
7135 0x1d1d9f8c00000000, 0x7d22fed600000000, 0x62350e5600000000,
7136 0xc3f19abe00000000, 0xdce66a3e00000000, 0xbcd90b6400000000,
7137 0xa3cefbe400000000, 0x7ca7c9d000000000, 0x63b0395000000000,
7138 0x038f580a00000000, 0x1c98a88a00000000, 0x7ab978c400000000,
7139 0x65ae884400000000, 0x0591e91e00000000, 0x1a86199e00000000,
7140 0xc5ef2baa00000000, 0xdaf8db2a00000000, 0xbac7ba7000000000,
7141 0xa5d04af000000000, 0x0414de1800000000, 0x1b032e9800000000,
7142 0x7b3c4fc200000000, 0x642bbf4200000000, 0xbb428d7600000000,
7143 0xa4557df600000000, 0xc46a1cac00000000, 0xdb7dec2c00000000,
7144 0xc7e544a600000000, 0xd8f2b42600000000, 0xb8cdd57c00000000,
7145 0xa7da25fc00000000, 0x78b317c800000000, 0x67a4e74800000000,
7146 0x079b861200000000, 0x188c769200000000, 0xb948e27a00000000,
7147 0xa65f12fa00000000, 0xc66073a000000000, 0xd977832000000000,
7148 0x061eb11400000000, 0x1909419400000000, 0x793620ce00000000,
7149 0x6621d04e00000000, 0xb574805300000000, 0xaa6370d300000000,
7150 0xca5c118900000000, 0xd54be10900000000, 0x0a22d33d00000000,
7151 0x153523bd00000000, 0x750a42e700000000, 0x6a1db26700000000,
7152 0xcbd9268f00000000, 0xd4ced60f00000000, 0xb4f1b75500000000,
7153 0xabe647d500000000, 0x748f75e100000000, 0x6b98856100000000,
7154 0x0ba7e43b00000000, 0x14b014bb00000000, 0x0828bc3100000000,
7155 0x173f4cb100000000, 0x77002deb00000000, 0x6817dd6b00000000,
7156 0xb77eef5f00000000, 0xa8691fdf00000000, 0xc8567e8500000000,
7157 0xd7418e0500000000, 0x76851aed00000000, 0x6992ea6d00000000,
7158 0x09ad8b3700000000, 0x16ba7bb700000000, 0xc9d3498300000000,
7159 0xd6c4b90300000000, 0xb6fbd85900000000, 0xa9ec28d900000000,
7160 0xcfcdf89700000000, 0xd0da081700000000, 0xb0e5694d00000000,
7161 0xaff299cd00000000, 0x709babf900000000, 0x6f8c5b7900000000,
7162 0x0fb33a2300000000, 0x10a4caa300000000, 0xb1605e4b00000000,
7163 0xae77aecb00000000, 0xce48cf9100000000, 0xd15f3f1100000000,
7164 0x0e360d2500000000, 0x1121fda500000000, 0x711e9cff00000000,
7165 0x6e096c7f00000000, 0x7291c4f500000000, 0x6d86347500000000,
7166 0x0db9552f00000000, 0x12aea5af00000000, 0xcdc7979b00000000,
7167 0xd2d0671b00000000, 0xb2ef064100000000, 0xadf8f6c100000000,
7168 0x0c3c622900000000, 0x132b92a900000000, 0x7314f3f300000000,
7169 0x6c03037300000000, 0xb36a314700000000, 0xac7dc1c700000000,
7170 0xcc42a09d00000000, 0xd355501d00000000, 0x6ae900a700000000,
7171 0x75fef02700000000, 0x15c1917d00000000, 0x0ad661fd00000000,
7172 0xd5bf53c900000000, 0xcaa8a34900000000, 0xaa97c21300000000,
7173 0xb580329300000000, 0x1444a67b00000000, 0x0b5356fb00000000,
7174 0x6b6c37a100000000, 0x747bc72100000000, 0xab12f51500000000,
7175 0xb405059500000000, 0xd43a64cf00000000, 0xcb2d944f00000000,
7176 0xd7b53cc500000000, 0xc8a2cc4500000000, 0xa89dad1f00000000,
7177 0xb78a5d9f00000000, 0x68e36fab00000000, 0x77f49f2b00000000,
7178 0x17cbfe7100000000, 0x08dc0ef100000000, 0xa9189a1900000000,
7179 0xb60f6a9900000000, 0xd6300bc300000000, 0xc927fb4300000000,
7180 0x164ec97700000000, 0x095939f700000000, 0x696658ad00000000,
7181 0x7671a82d00000000, 0x1050786300000000, 0x0f4788e300000000,
7182 0x6f78e9b900000000, 0x706f193900000000, 0xaf062b0d00000000,
7183 0xb011db8d00000000, 0xd02ebad700000000, 0xcf394a5700000000,
7184 0x6efddebf00000000, 0x71ea2e3f00000000, 0x11d54f6500000000,
7185 0x0ec2bfe500000000, 0xd1ab8dd100000000, 0xcebc7d5100000000,
7186 0xae831c0b00000000, 0xb194ec8b00000000, 0xad0c440100000000,
7187 0xb21bb48100000000, 0xd224d5db00000000, 0xcd33255b00000000,
7188 0x125a176f00000000, 0x0d4de7ef00000000, 0x6d7286b500000000,
7189 0x7265763500000000, 0xd3a1e2dd00000000, 0xccb6125d00000000,
7190 0xac89730700000000, 0xb39e838700000000, 0x6cf7b1b300000000,
7191 0x73e0413300000000, 0x13df206900000000, 0x0cc8d0e900000000,
7192 0xdf9d80f400000000, 0xc08a707400000000, 0xa0b5112e00000000,
7193 0xbfa2e1ae00000000, 0x60cbd39a00000000, 0x7fdc231a00000000,
7194 0x1fe3424000000000, 0x00f4b2c000000000, 0xa130262800000000,
7195 0xbe27d6a800000000, 0xde18b7f200000000, 0xc10f477200000000,
7196 0x1e66754600000000, 0x017185c600000000, 0x614ee49c00000000,
7197 0x7e59141c00000000, 0x62c1bc9600000000, 0x7dd64c1600000000,
7198 0x1de92d4c00000000, 0x02feddcc00000000, 0xdd97eff800000000,
7199 0xc2801f7800000000, 0xa2bf7e2200000000, 0xbda88ea200000000,
7200 0x1c6c1a4a00000000, 0x037beaca00000000, 0x63448b9000000000,
7201 0x7c537b1000000000, 0xa33a492400000000, 0xbc2db9a400000000,
7202 0xdc12d8fe00000000, 0xc305287e00000000, 0xa524f83000000000,
7203 0xba3308b000000000, 0xda0c69ea00000000, 0xc51b996a00000000,
7204 0x1a72ab5e00000000, 0x05655bde00000000, 0x655a3a8400000000,
7205 0x7a4dca0400000000, 0xdb895eec00000000, 0xc49eae6c00000000,
7206 0xa4a1cf3600000000, 0xbbb63fb600000000, 0x64df0d8200000000,
7207 0x7bc8fd0200000000, 0x1bf79c5800000000, 0x04e06cd800000000,
7208 0x1878c45200000000, 0x076f34d200000000, 0x6750558800000000,
7209 0x7847a50800000000, 0xa72e973c00000000, 0xb83967bc00000000,
7210 0xd80606e600000000, 0xc711f66600000000, 0x66d5628e00000000,
7211 0x79c2920e00000000, 0x19fdf35400000000, 0x06ea03d400000000,
7212 0xd98331e000000000, 0xc694c16000000000, 0xa6aba03a00000000,
7213 0xb9bc50ba00000000},
7214 {0x0000000000000000, 0xe2fd888d00000000, 0x85fd60c000000000,
7215 0x6700e84d00000000, 0x4bfdb05b00000000, 0xa90038d600000000,
7216 0xce00d09b00000000, 0x2cfd581600000000, 0x96fa61b700000000,
7217 0x7407e93a00000000, 0x1307017700000000, 0xf1fa89fa00000000,
7218 0xdd07d1ec00000000, 0x3ffa596100000000, 0x58fab12c00000000,
7219 0xba0739a100000000, 0x6df3b2b500000000, 0x8f0e3a3800000000,
7220 0xe80ed27500000000, 0x0af35af800000000, 0x260e02ee00000000,
7221 0xc4f38a6300000000, 0xa3f3622e00000000, 0x410eeaa300000000,
7222 0xfb09d30200000000, 0x19f45b8f00000000, 0x7ef4b3c200000000,
7223 0x9c093b4f00000000, 0xb0f4635900000000, 0x5209ebd400000000,
7224 0x3509039900000000, 0xd7f48b1400000000, 0x9be014b000000000,
7225 0x791d9c3d00000000, 0x1e1d747000000000, 0xfce0fcfd00000000,
7226 0xd01da4eb00000000, 0x32e02c6600000000, 0x55e0c42b00000000,
7227 0xb71d4ca600000000, 0x0d1a750700000000, 0xefe7fd8a00000000,
7228 0x88e715c700000000, 0x6a1a9d4a00000000, 0x46e7c55c00000000,
7229 0xa41a4dd100000000, 0xc31aa59c00000000, 0x21e72d1100000000,
7230 0xf613a60500000000, 0x14ee2e8800000000, 0x73eec6c500000000,
7231 0x91134e4800000000, 0xbdee165e00000000, 0x5f139ed300000000,
7232 0x3813769e00000000, 0xdaeefe1300000000, 0x60e9c7b200000000,
7233 0x82144f3f00000000, 0xe514a77200000000, 0x07e92fff00000000,
7234 0x2b1477e900000000, 0xc9e9ff6400000000, 0xaee9172900000000,
7235 0x4c149fa400000000, 0x77c758bb00000000, 0x953ad03600000000,
7236 0xf23a387b00000000, 0x10c7b0f600000000, 0x3c3ae8e000000000,
7237 0xdec7606d00000000, 0xb9c7882000000000, 0x5b3a00ad00000000,
7238 0xe13d390c00000000, 0x03c0b18100000000, 0x64c059cc00000000,
7239 0x863dd14100000000, 0xaac0895700000000, 0x483d01da00000000,
7240 0x2f3de99700000000, 0xcdc0611a00000000, 0x1a34ea0e00000000,
7241 0xf8c9628300000000, 0x9fc98ace00000000, 0x7d34024300000000,
7242 0x51c95a5500000000, 0xb334d2d800000000, 0xd4343a9500000000,
7243 0x36c9b21800000000, 0x8cce8bb900000000, 0x6e33033400000000,
7244 0x0933eb7900000000, 0xebce63f400000000, 0xc7333be200000000,
7245 0x25ceb36f00000000, 0x42ce5b2200000000, 0xa033d3af00000000,
7246 0xec274c0b00000000, 0x0edac48600000000, 0x69da2ccb00000000,
7247 0x8b27a44600000000, 0xa7dafc5000000000, 0x452774dd00000000,
7248 0x22279c9000000000, 0xc0da141d00000000, 0x7add2dbc00000000,
7249 0x9820a53100000000, 0xff204d7c00000000, 0x1dddc5f100000000,
7250 0x31209de700000000, 0xd3dd156a00000000, 0xb4ddfd2700000000,
7251 0x562075aa00000000, 0x81d4febe00000000, 0x6329763300000000,
7252 0x04299e7e00000000, 0xe6d416f300000000, 0xca294ee500000000,
7253 0x28d4c66800000000, 0x4fd42e2500000000, 0xad29a6a800000000,
7254 0x172e9f0900000000, 0xf5d3178400000000, 0x92d3ffc900000000,
7255 0x702e774400000000, 0x5cd32f5200000000, 0xbe2ea7df00000000,
7256 0xd92e4f9200000000, 0x3bd3c71f00000000, 0xaf88c0ad00000000,
7257 0x4d75482000000000, 0x2a75a06d00000000, 0xc88828e000000000,
7258 0xe47570f600000000, 0x0688f87b00000000, 0x6188103600000000,
7259 0x837598bb00000000, 0x3972a11a00000000, 0xdb8f299700000000,
7260 0xbc8fc1da00000000, 0x5e72495700000000, 0x728f114100000000,
7261 0x907299cc00000000, 0xf772718100000000, 0x158ff90c00000000,
7262 0xc27b721800000000, 0x2086fa9500000000, 0x478612d800000000,
7263 0xa57b9a5500000000, 0x8986c24300000000, 0x6b7b4ace00000000,
7264 0x0c7ba28300000000, 0xee862a0e00000000, 0x548113af00000000,
7265 0xb67c9b2200000000, 0xd17c736f00000000, 0x3381fbe200000000,
7266 0x1f7ca3f400000000, 0xfd812b7900000000, 0x9a81c33400000000,
7267 0x787c4bb900000000, 0x3468d41d00000000, 0xd6955c9000000000,
7268 0xb195b4dd00000000, 0x53683c5000000000, 0x7f95644600000000,
7269 0x9d68eccb00000000, 0xfa68048600000000, 0x18958c0b00000000,
7270 0xa292b5aa00000000, 0x406f3d2700000000, 0x276fd56a00000000,
7271 0xc5925de700000000, 0xe96f05f100000000, 0x0b928d7c00000000,
7272 0x6c92653100000000, 0x8e6fedbc00000000, 0x599b66a800000000,
7273 0xbb66ee2500000000, 0xdc66066800000000, 0x3e9b8ee500000000,
7274 0x1266d6f300000000, 0xf09b5e7e00000000, 0x979bb63300000000,
7275 0x75663ebe00000000, 0xcf61071f00000000, 0x2d9c8f9200000000,
7276 0x4a9c67df00000000, 0xa861ef5200000000, 0x849cb74400000000,
7277 0x66613fc900000000, 0x0161d78400000000, 0xe39c5f0900000000,
7278 0xd84f981600000000, 0x3ab2109b00000000, 0x5db2f8d600000000,
7279 0xbf4f705b00000000, 0x93b2284d00000000, 0x714fa0c000000000,
7280 0x164f488d00000000, 0xf4b2c00000000000, 0x4eb5f9a100000000,
7281 0xac48712c00000000, 0xcb48996100000000, 0x29b511ec00000000,
7282 0x054849fa00000000, 0xe7b5c17700000000, 0x80b5293a00000000,
7283 0x6248a1b700000000, 0xb5bc2aa300000000, 0x5741a22e00000000,
7284 0x30414a6300000000, 0xd2bcc2ee00000000, 0xfe419af800000000,
7285 0x1cbc127500000000, 0x7bbcfa3800000000, 0x994172b500000000,
7286 0x23464b1400000000, 0xc1bbc39900000000, 0xa6bb2bd400000000,
7287 0x4446a35900000000, 0x68bbfb4f00000000, 0x8a4673c200000000,
7288 0xed469b8f00000000, 0x0fbb130200000000, 0x43af8ca600000000,
7289 0xa152042b00000000, 0xc652ec6600000000, 0x24af64eb00000000,
7290 0x08523cfd00000000, 0xeaafb47000000000, 0x8daf5c3d00000000,
7291 0x6f52d4b000000000, 0xd555ed1100000000, 0x37a8659c00000000,
7292 0x50a88dd100000000, 0xb255055c00000000, 0x9ea85d4a00000000,
7293 0x7c55d5c700000000, 0x1b553d8a00000000, 0xf9a8b50700000000,
7294 0x2e5c3e1300000000, 0xcca1b69e00000000, 0xaba15ed300000000,
7295 0x495cd65e00000000, 0x65a18e4800000000, 0x875c06c500000000,
7296 0xe05cee8800000000, 0x02a1660500000000, 0xb8a65fa400000000,
7297 0x5a5bd72900000000, 0x3d5b3f6400000000, 0xdfa6b7e900000000,
7298 0xf35befff00000000, 0x11a6677200000000, 0x76a68f3f00000000,
7299 0x945b07b200000000},
7300 {0x0000000000000000, 0xa90b894e00000000, 0x5217129d00000000,
7301 0xfb1c9bd300000000, 0xe52855e100000000, 0x4c23dcaf00000000,
7302 0xb73f477c00000000, 0x1e34ce3200000000, 0x8b57db1900000000,
7303 0x225c525700000000, 0xd940c98400000000, 0x704b40ca00000000,
7304 0x6e7f8ef800000000, 0xc77407b600000000, 0x3c689c6500000000,
7305 0x9563152b00000000, 0x16afb63300000000, 0xbfa43f7d00000000,
7306 0x44b8a4ae00000000, 0xedb32de000000000, 0xf387e3d200000000,
7307 0x5a8c6a9c00000000, 0xa190f14f00000000, 0x089b780100000000,
7308 0x9df86d2a00000000, 0x34f3e46400000000, 0xcfef7fb700000000,
7309 0x66e4f6f900000000, 0x78d038cb00000000, 0xd1dbb18500000000,
7310 0x2ac72a5600000000, 0x83cca31800000000, 0x2c5e6d6700000000,
7311 0x8555e42900000000, 0x7e497ffa00000000, 0xd742f6b400000000,
7312 0xc976388600000000, 0x607db1c800000000, 0x9b612a1b00000000,
7313 0x326aa35500000000, 0xa709b67e00000000, 0x0e023f3000000000,
7314 0xf51ea4e300000000, 0x5c152dad00000000, 0x4221e39f00000000,
7315 0xeb2a6ad100000000, 0x1036f10200000000, 0xb93d784c00000000,
7316 0x3af1db5400000000, 0x93fa521a00000000, 0x68e6c9c900000000,
7317 0xc1ed408700000000, 0xdfd98eb500000000, 0x76d207fb00000000,
7318 0x8dce9c2800000000, 0x24c5156600000000, 0xb1a6004d00000000,
7319 0x18ad890300000000, 0xe3b112d000000000, 0x4aba9b9e00000000,
7320 0x548e55ac00000000, 0xfd85dce200000000, 0x0699473100000000,
7321 0xaf92ce7f00000000, 0x58bcdace00000000, 0xf1b7538000000000,
7322 0x0aabc85300000000, 0xa3a0411d00000000, 0xbd948f2f00000000,
7323 0x149f066100000000, 0xef839db200000000, 0x468814fc00000000,
7324 0xd3eb01d700000000, 0x7ae0889900000000, 0x81fc134a00000000,
7325 0x28f79a0400000000, 0x36c3543600000000, 0x9fc8dd7800000000,
7326 0x64d446ab00000000, 0xcddfcfe500000000, 0x4e136cfd00000000,
7327 0xe718e5b300000000, 0x1c047e6000000000, 0xb50ff72e00000000,
7328 0xab3b391c00000000, 0x0230b05200000000, 0xf92c2b8100000000,
7329 0x5027a2cf00000000, 0xc544b7e400000000, 0x6c4f3eaa00000000,
7330 0x9753a57900000000, 0x3e582c3700000000, 0x206ce20500000000,
7331 0x89676b4b00000000, 0x727bf09800000000, 0xdb7079d600000000,
7332 0x74e2b7a900000000, 0xdde93ee700000000, 0x26f5a53400000000,
7333 0x8ffe2c7a00000000, 0x91cae24800000000, 0x38c16b0600000000,
7334 0xc3ddf0d500000000, 0x6ad6799b00000000, 0xffb56cb000000000,
7335 0x56bee5fe00000000, 0xada27e2d00000000, 0x04a9f76300000000,
7336 0x1a9d395100000000, 0xb396b01f00000000, 0x488a2bcc00000000,
7337 0xe181a28200000000, 0x624d019a00000000, 0xcb4688d400000000,
7338 0x305a130700000000, 0x99519a4900000000, 0x8765547b00000000,
7339 0x2e6edd3500000000, 0xd57246e600000000, 0x7c79cfa800000000,
7340 0xe91ada8300000000, 0x401153cd00000000, 0xbb0dc81e00000000,
7341 0x1206415000000000, 0x0c328f6200000000, 0xa539062c00000000,
7342 0x5e259dff00000000, 0xf72e14b100000000, 0xf17ec44600000000,
7343 0x58754d0800000000, 0xa369d6db00000000, 0x0a625f9500000000,
7344 0x145691a700000000, 0xbd5d18e900000000, 0x4641833a00000000,
7345 0xef4a0a7400000000, 0x7a291f5f00000000, 0xd322961100000000,
7346 0x283e0dc200000000, 0x8135848c00000000, 0x9f014abe00000000,
7347 0x360ac3f000000000, 0xcd16582300000000, 0x641dd16d00000000,
7348 0xe7d1727500000000, 0x4edafb3b00000000, 0xb5c660e800000000,
7349 0x1ccde9a600000000, 0x02f9279400000000, 0xabf2aeda00000000,
7350 0x50ee350900000000, 0xf9e5bc4700000000, 0x6c86a96c00000000,
7351 0xc58d202200000000, 0x3e91bbf100000000, 0x979a32bf00000000,
7352 0x89aefc8d00000000, 0x20a575c300000000, 0xdbb9ee1000000000,
7353 0x72b2675e00000000, 0xdd20a92100000000, 0x742b206f00000000,
7354 0x8f37bbbc00000000, 0x263c32f200000000, 0x3808fcc000000000,
7355 0x9103758e00000000, 0x6a1fee5d00000000, 0xc314671300000000,
7356 0x5677723800000000, 0xff7cfb7600000000, 0x046060a500000000,
7357 0xad6be9eb00000000, 0xb35f27d900000000, 0x1a54ae9700000000,
7358 0xe148354400000000, 0x4843bc0a00000000, 0xcb8f1f1200000000,
7359 0x6284965c00000000, 0x99980d8f00000000, 0x309384c100000000,
7360 0x2ea74af300000000, 0x87acc3bd00000000, 0x7cb0586e00000000,
7361 0xd5bbd12000000000, 0x40d8c40b00000000, 0xe9d34d4500000000,
7362 0x12cfd69600000000, 0xbbc45fd800000000, 0xa5f091ea00000000,
7363 0x0cfb18a400000000, 0xf7e7837700000000, 0x5eec0a3900000000,
7364 0xa9c21e8800000000, 0x00c997c600000000, 0xfbd50c1500000000,
7365 0x52de855b00000000, 0x4cea4b6900000000, 0xe5e1c22700000000,
7366 0x1efd59f400000000, 0xb7f6d0ba00000000, 0x2295c59100000000,
7367 0x8b9e4cdf00000000, 0x7082d70c00000000, 0xd9895e4200000000,
7368 0xc7bd907000000000, 0x6eb6193e00000000, 0x95aa82ed00000000,
7369 0x3ca10ba300000000, 0xbf6da8bb00000000, 0x166621f500000000,
7370 0xed7aba2600000000, 0x4471336800000000, 0x5a45fd5a00000000,
7371 0xf34e741400000000, 0x0852efc700000000, 0xa159668900000000,
7372 0x343a73a200000000, 0x9d31faec00000000, 0x662d613f00000000,
7373 0xcf26e87100000000, 0xd112264300000000, 0x7819af0d00000000,
7374 0x830534de00000000, 0x2a0ebd9000000000, 0x859c73ef00000000,
7375 0x2c97faa100000000, 0xd78b617200000000, 0x7e80e83c00000000,
7376 0x60b4260e00000000, 0xc9bfaf4000000000, 0x32a3349300000000,
7377 0x9ba8bddd00000000, 0x0ecba8f600000000, 0xa7c021b800000000,
7378 0x5cdcba6b00000000, 0xf5d7332500000000, 0xebe3fd1700000000,
7379 0x42e8745900000000, 0xb9f4ef8a00000000, 0x10ff66c400000000,
7380 0x9333c5dc00000000, 0x3a384c9200000000, 0xc124d74100000000,
7381 0x682f5e0f00000000, 0x761b903d00000000, 0xdf10197300000000,
7382 0x240c82a000000000, 0x8d070bee00000000, 0x18641ec500000000,
7383 0xb16f978b00000000, 0x4a730c5800000000, 0xe378851600000000,
7384 0xfd4c4b2400000000, 0x5447c26a00000000, 0xaf5b59b900000000,
7385 0x0650d0f700000000},
7386 {0x0000000000000000, 0x479244af00000000, 0xcf22f88500000000,
7387 0x88b0bc2a00000000, 0xdf4381d000000000, 0x98d1c57f00000000,
7388 0x1061795500000000, 0x57f33dfa00000000, 0xff81737a00000000,
7389 0xb81337d500000000, 0x30a38bff00000000, 0x7731cf5000000000,
7390 0x20c2f2aa00000000, 0x6750b60500000000, 0xefe00a2f00000000,
7391 0xa8724e8000000000, 0xfe03e7f400000000, 0xb991a35b00000000,
7392 0x31211f7100000000, 0x76b35bde00000000, 0x2140662400000000,
7393 0x66d2228b00000000, 0xee629ea100000000, 0xa9f0da0e00000000,
7394 0x0182948e00000000, 0x4610d02100000000, 0xcea06c0b00000000,
7395 0x893228a400000000, 0xdec1155e00000000, 0x995351f100000000,
7396 0x11e3eddb00000000, 0x5671a97400000000, 0xbd01bf3200000000,
7397 0xfa93fb9d00000000, 0x722347b700000000, 0x35b1031800000000,
7398 0x62423ee200000000, 0x25d07a4d00000000, 0xad60c66700000000,
7399 0xeaf282c800000000, 0x4280cc4800000000, 0x051288e700000000,
7400 0x8da234cd00000000, 0xca30706200000000, 0x9dc34d9800000000,
7401 0xda51093700000000, 0x52e1b51d00000000, 0x1573f1b200000000,
7402 0x430258c600000000, 0x04901c6900000000, 0x8c20a04300000000,
7403 0xcbb2e4ec00000000, 0x9c41d91600000000, 0xdbd39db900000000,
7404 0x5363219300000000, 0x14f1653c00000000, 0xbc832bbc00000000,
7405 0xfb116f1300000000, 0x73a1d33900000000, 0x3433979600000000,
7406 0x63c0aa6c00000000, 0x2452eec300000000, 0xace252e900000000,
7407 0xeb70164600000000, 0x7a037e6500000000, 0x3d913aca00000000,
7408 0xb52186e000000000, 0xf2b3c24f00000000, 0xa540ffb500000000,
7409 0xe2d2bb1a00000000, 0x6a62073000000000, 0x2df0439f00000000,
7410 0x85820d1f00000000, 0xc21049b000000000, 0x4aa0f59a00000000,
7411 0x0d32b13500000000, 0x5ac18ccf00000000, 0x1d53c86000000000,
7412 0x95e3744a00000000, 0xd27130e500000000, 0x8400999100000000,
7413 0xc392dd3e00000000, 0x4b22611400000000, 0x0cb025bb00000000,
7414 0x5b43184100000000, 0x1cd15cee00000000, 0x9461e0c400000000,
7415 0xd3f3a46b00000000, 0x7b81eaeb00000000, 0x3c13ae4400000000,
7416 0xb4a3126e00000000, 0xf33156c100000000, 0xa4c26b3b00000000,
7417 0xe3502f9400000000, 0x6be093be00000000, 0x2c72d71100000000,
7418 0xc702c15700000000, 0x809085f800000000, 0x082039d200000000,
7419 0x4fb27d7d00000000, 0x1841408700000000, 0x5fd3042800000000,
7420 0xd763b80200000000, 0x90f1fcad00000000, 0x3883b22d00000000,
7421 0x7f11f68200000000, 0xf7a14aa800000000, 0xb0330e0700000000,
7422 0xe7c033fd00000000, 0xa052775200000000, 0x28e2cb7800000000,
7423 0x6f708fd700000000, 0x390126a300000000, 0x7e93620c00000000,
7424 0xf623de2600000000, 0xb1b19a8900000000, 0xe642a77300000000,
7425 0xa1d0e3dc00000000, 0x29605ff600000000, 0x6ef21b5900000000,
7426 0xc68055d900000000, 0x8112117600000000, 0x09a2ad5c00000000,
7427 0x4e30e9f300000000, 0x19c3d40900000000, 0x5e5190a600000000,
7428 0xd6e12c8c00000000, 0x9173682300000000, 0xf406fcca00000000,
7429 0xb394b86500000000, 0x3b24044f00000000, 0x7cb640e000000000,
7430 0x2b457d1a00000000, 0x6cd739b500000000, 0xe467859f00000000,
7431 0xa3f5c13000000000, 0x0b878fb000000000, 0x4c15cb1f00000000,
7432 0xc4a5773500000000, 0x8337339a00000000, 0xd4c40e6000000000,
7433 0x93564acf00000000, 0x1be6f6e500000000, 0x5c74b24a00000000,
7434 0x0a051b3e00000000, 0x4d975f9100000000, 0xc527e3bb00000000,
7435 0x82b5a71400000000, 0xd5469aee00000000, 0x92d4de4100000000,
7436 0x1a64626b00000000, 0x5df626c400000000, 0xf584684400000000,
7437 0xb2162ceb00000000, 0x3aa690c100000000, 0x7d34d46e00000000,
7438 0x2ac7e99400000000, 0x6d55ad3b00000000, 0xe5e5111100000000,
7439 0xa27755be00000000, 0x490743f800000000, 0x0e95075700000000,
7440 0x8625bb7d00000000, 0xc1b7ffd200000000, 0x9644c22800000000,
7441 0xd1d6868700000000, 0x59663aad00000000, 0x1ef47e0200000000,
7442 0xb686308200000000, 0xf114742d00000000, 0x79a4c80700000000,
7443 0x3e368ca800000000, 0x69c5b15200000000, 0x2e57f5fd00000000,
7444 0xa6e749d700000000, 0xe1750d7800000000, 0xb704a40c00000000,
7445 0xf096e0a300000000, 0x78265c8900000000, 0x3fb4182600000000,
7446 0x684725dc00000000, 0x2fd5617300000000, 0xa765dd5900000000,
7447 0xe0f799f600000000, 0x4885d77600000000, 0x0f1793d900000000,
7448 0x87a72ff300000000, 0xc0356b5c00000000, 0x97c656a600000000,
7449 0xd054120900000000, 0x58e4ae2300000000, 0x1f76ea8c00000000,
7450 0x8e0582af00000000, 0xc997c60000000000, 0x41277a2a00000000,
7451 0x06b53e8500000000, 0x5146037f00000000, 0x16d447d000000000,
7452 0x9e64fbfa00000000, 0xd9f6bf5500000000, 0x7184f1d500000000,
7453 0x3616b57a00000000, 0xbea6095000000000, 0xf9344dff00000000,
7454 0xaec7700500000000, 0xe95534aa00000000, 0x61e5888000000000,
7455 0x2677cc2f00000000, 0x7006655b00000000, 0x379421f400000000,
7456 0xbf249dde00000000, 0xf8b6d97100000000, 0xaf45e48b00000000,
7457 0xe8d7a02400000000, 0x60671c0e00000000, 0x27f558a100000000,
7458 0x8f87162100000000, 0xc815528e00000000, 0x40a5eea400000000,
7459 0x0737aa0b00000000, 0x50c497f100000000, 0x1756d35e00000000,
7460 0x9fe66f7400000000, 0xd8742bdb00000000, 0x33043d9d00000000,
7461 0x7496793200000000, 0xfc26c51800000000, 0xbbb481b700000000,
7462 0xec47bc4d00000000, 0xabd5f8e200000000, 0x236544c800000000,
7463 0x64f7006700000000, 0xcc854ee700000000, 0x8b170a4800000000,
7464 0x03a7b66200000000, 0x4435f2cd00000000, 0x13c6cf3700000000,
7465 0x54548b9800000000, 0xdce437b200000000, 0x9b76731d00000000,
7466 0xcd07da6900000000, 0x8a959ec600000000, 0x022522ec00000000,
7467 0x45b7664300000000, 0x12445bb900000000, 0x55d61f1600000000,
7468 0xdd66a33c00000000, 0x9af4e79300000000, 0x3286a91300000000,
7469 0x7514edbc00000000, 0xfda4519600000000, 0xba36153900000000,
7470 0xedc528c300000000, 0xaa576c6c00000000, 0x22e7d04600000000,
7471 0x657594e900000000}};
7472
7473 #else /* W == 4 */
7474
7475 local const z_crc_t FAR crc_braid_table[][256] = {
7476 {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59,
7477 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4,
7478 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67,
7479 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef,
7480 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97,
7481 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88,
7482 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687,
7483 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698,
7484 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0,
7485 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068,
7486 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb,
7487 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056,
7488 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016,
7489 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009,
7490 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028,
7491 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037,
7492 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a,
7493 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7,
7494 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054,
7495 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7,
7496 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af,
7497 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0,
7498 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4,
7499 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab,
7500 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3,
7501 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a,
7502 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9,
7503 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54,
7504 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09,
7505 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16,
7506 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37,
7507 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28,
7508 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e,
7509 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3,
7510 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40,
7511 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8,
7512 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0,
7513 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf,
7514 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6,
7515 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9,
7516 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1,
7517 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059,
7518 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca,
7519 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067,
7520 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031,
7521 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e,
7522 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f,
7523 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010,
7524 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d,
7525 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0,
7526 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073,
7527 0xd8ac6b35},
7528 {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2,
7529 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd,
7530 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696,
7531 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3,
7532 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f,
7533 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35,
7534 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5,
7535 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f,
7536 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673,
7537 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46,
7538 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d,
7539 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632,
7540 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28,
7541 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192,
7542 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c,
7543 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6,
7544 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0,
7545 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff,
7546 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4,
7547 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95,
7548 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9,
7549 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03,
7550 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7,
7551 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d,
7552 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151,
7553 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808,
7554 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343,
7555 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c,
7556 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a,
7557 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0,
7558 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e,
7559 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594,
7560 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6,
7561 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399,
7562 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2,
7563 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7,
7564 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb,
7565 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571,
7566 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289,
7567 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33,
7568 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f,
7569 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a,
7570 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461,
7571 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e,
7572 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c,
7573 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6,
7574 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918,
7575 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2,
7576 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484,
7577 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb,
7578 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0,
7579 0xa140efa8},
7580 {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706,
7581 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed,
7582 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289,
7583 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a,
7584 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214,
7585 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3,
7586 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3,
7587 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254,
7588 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a,
7589 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9,
7590 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad,
7591 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746,
7592 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060,
7593 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187,
7594 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef,
7595 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408,
7596 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e,
7597 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495,
7598 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1,
7599 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532,
7600 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c,
7601 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb,
7602 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb,
7603 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c,
7604 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42,
7605 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060,
7606 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04,
7607 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef,
7608 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99,
7609 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e,
7610 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16,
7611 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1,
7612 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7,
7613 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c,
7614 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38,
7615 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb,
7616 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5,
7617 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42,
7618 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62,
7619 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85,
7620 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb,
7621 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18,
7622 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c,
7623 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997,
7624 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1,
7625 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36,
7626 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e,
7627 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9,
7628 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf,
7629 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24,
7630 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040,
7631 0x917cd6a1},
7632 {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf,
7633 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd,
7634 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896,
7635 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9,
7636 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3,
7637 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f,
7638 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d,
7639 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1,
7640 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab,
7641 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4,
7642 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f,
7643 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d,
7644 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4,
7645 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978,
7646 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad,
7647 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621,
7648 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46,
7649 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854,
7650 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f,
7651 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a,
7652 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890,
7653 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c,
7654 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4,
7655 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238,
7656 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622,
7657 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab,
7658 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0,
7659 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2,
7660 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295,
7661 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19,
7662 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc,
7663 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140,
7664 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd,
7665 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf,
7666 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184,
7667 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb,
7668 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1,
7669 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d,
7670 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb,
7671 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257,
7672 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d,
7673 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22,
7674 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069,
7675 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b,
7676 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6,
7677 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a,
7678 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf,
7679 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33,
7680 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254,
7681 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146,
7682 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d,
7683 0x18ba364e}};
7684
7685 local const z_word_t FAR crc_braid_big_table[][256] = {
7686 {0x00000000, 0x43cba687, 0xc7903cd4, 0x845b9a53, 0xcf270873,
7687 0x8cecaef4, 0x08b734a7, 0x4b7c9220, 0x9e4f10e6, 0xdd84b661,
7688 0x59df2c32, 0x1a148ab5, 0x51681895, 0x12a3be12, 0x96f82441,
7689 0xd53382c6, 0x7d995117, 0x3e52f790, 0xba096dc3, 0xf9c2cb44,
7690 0xb2be5964, 0xf175ffe3, 0x752e65b0, 0x36e5c337, 0xe3d641f1,
7691 0xa01de776, 0x24467d25, 0x678ddba2, 0x2cf14982, 0x6f3aef05,
7692 0xeb617556, 0xa8aad3d1, 0xfa32a32e, 0xb9f905a9, 0x3da29ffa,
7693 0x7e69397d, 0x3515ab5d, 0x76de0dda, 0xf2859789, 0xb14e310e,
7694 0x647db3c8, 0x27b6154f, 0xa3ed8f1c, 0xe026299b, 0xab5abbbb,
7695 0xe8911d3c, 0x6cca876f, 0x2f0121e8, 0x87abf239, 0xc46054be,
7696 0x403bceed, 0x03f0686a, 0x488cfa4a, 0x0b475ccd, 0x8f1cc69e,
7697 0xccd76019, 0x19e4e2df, 0x5a2f4458, 0xde74de0b, 0x9dbf788c,
7698 0xd6c3eaac, 0x95084c2b, 0x1153d678, 0x529870ff, 0xf465465d,
7699 0xb7aee0da, 0x33f57a89, 0x703edc0e, 0x3b424e2e, 0x7889e8a9,
7700 0xfcd272fa, 0xbf19d47d, 0x6a2a56bb, 0x29e1f03c, 0xadba6a6f,
7701 0xee71cce8, 0xa50d5ec8, 0xe6c6f84f, 0x629d621c, 0x2156c49b,
7702 0x89fc174a, 0xca37b1cd, 0x4e6c2b9e, 0x0da78d19, 0x46db1f39,
7703 0x0510b9be, 0x814b23ed, 0xc280856a, 0x17b307ac, 0x5478a12b,
7704 0xd0233b78, 0x93e89dff, 0xd8940fdf, 0x9b5fa958, 0x1f04330b,
7705 0x5ccf958c, 0x0e57e573, 0x4d9c43f4, 0xc9c7d9a7, 0x8a0c7f20,
7706 0xc170ed00, 0x82bb4b87, 0x06e0d1d4, 0x452b7753, 0x9018f595,
7707 0xd3d35312, 0x5788c941, 0x14436fc6, 0x5f3ffde6, 0x1cf45b61,
7708 0x98afc132, 0xdb6467b5, 0x73ceb464, 0x300512e3, 0xb45e88b0,
7709 0xf7952e37, 0xbce9bc17, 0xff221a90, 0x7b7980c3, 0x38b22644,
7710 0xed81a482, 0xae4a0205, 0x2a119856, 0x69da3ed1, 0x22a6acf1,
7711 0x616d0a76, 0xe5369025, 0xa6fd36a2, 0xe8cb8cba, 0xab002a3d,
7712 0x2f5bb06e, 0x6c9016e9, 0x27ec84c9, 0x6427224e, 0xe07cb81d,
7713 0xa3b71e9a, 0x76849c5c, 0x354f3adb, 0xb114a088, 0xf2df060f,
7714 0xb9a3942f, 0xfa6832a8, 0x7e33a8fb, 0x3df80e7c, 0x9552ddad,
7715 0xd6997b2a, 0x52c2e179, 0x110947fe, 0x5a75d5de, 0x19be7359,
7716 0x9de5e90a, 0xde2e4f8d, 0x0b1dcd4b, 0x48d66bcc, 0xcc8df19f,
7717 0x8f465718, 0xc43ac538, 0x87f163bf, 0x03aaf9ec, 0x40615f6b,
7718 0x12f92f94, 0x51328913, 0xd5691340, 0x96a2b5c7, 0xddde27e7,
7719 0x9e158160, 0x1a4e1b33, 0x5985bdb4, 0x8cb63f72, 0xcf7d99f5,
7720 0x4b2603a6, 0x08eda521, 0x43913701, 0x005a9186, 0x84010bd5,
7721 0xc7caad52, 0x6f607e83, 0x2cabd804, 0xa8f04257, 0xeb3be4d0,
7722 0xa04776f0, 0xe38cd077, 0x67d74a24, 0x241ceca3, 0xf12f6e65,
7723 0xb2e4c8e2, 0x36bf52b1, 0x7574f436, 0x3e086616, 0x7dc3c091,
7724 0xf9985ac2, 0xba53fc45, 0x1caecae7, 0x5f656c60, 0xdb3ef633,
7725 0x98f550b4, 0xd389c294, 0x90426413, 0x1419fe40, 0x57d258c7,
7726 0x82e1da01, 0xc12a7c86, 0x4571e6d5, 0x06ba4052, 0x4dc6d272,
7727 0x0e0d74f5, 0x8a56eea6, 0xc99d4821, 0x61379bf0, 0x22fc3d77,
7728 0xa6a7a724, 0xe56c01a3, 0xae109383, 0xeddb3504, 0x6980af57,
7729 0x2a4b09d0, 0xff788b16, 0xbcb32d91, 0x38e8b7c2, 0x7b231145,
7730 0x305f8365, 0x739425e2, 0xf7cfbfb1, 0xb4041936, 0xe69c69c9,
7731 0xa557cf4e, 0x210c551d, 0x62c7f39a, 0x29bb61ba, 0x6a70c73d,
7732 0xee2b5d6e, 0xade0fbe9, 0x78d3792f, 0x3b18dfa8, 0xbf4345fb,
7733 0xfc88e37c, 0xb7f4715c, 0xf43fd7db, 0x70644d88, 0x33afeb0f,
7734 0x9b0538de, 0xd8ce9e59, 0x5c95040a, 0x1f5ea28d, 0x542230ad,
7735 0x17e9962a, 0x93b20c79, 0xd079aafe, 0x054a2838, 0x46818ebf,
7736 0xc2da14ec, 0x8111b26b, 0xca6d204b, 0x89a686cc, 0x0dfd1c9f,
7737 0x4e36ba18},
7738 {0x00000000, 0xe1b652ef, 0x836bd405, 0x62dd86ea, 0x06d7a80b,
7739 0xe761fae4, 0x85bc7c0e, 0x640a2ee1, 0x0cae5117, 0xed1803f8,
7740 0x8fc58512, 0x6e73d7fd, 0x0a79f91c, 0xebcfabf3, 0x89122d19,
7741 0x68a47ff6, 0x185ca32e, 0xf9eaf1c1, 0x9b37772b, 0x7a8125c4,
7742 0x1e8b0b25, 0xff3d59ca, 0x9de0df20, 0x7c568dcf, 0x14f2f239,
7743 0xf544a0d6, 0x9799263c, 0x762f74d3, 0x12255a32, 0xf39308dd,
7744 0x914e8e37, 0x70f8dcd8, 0x30b8465d, 0xd10e14b2, 0xb3d39258,
7745 0x5265c0b7, 0x366fee56, 0xd7d9bcb9, 0xb5043a53, 0x54b268bc,
7746 0x3c16174a, 0xdda045a5, 0xbf7dc34f, 0x5ecb91a0, 0x3ac1bf41,
7747 0xdb77edae, 0xb9aa6b44, 0x581c39ab, 0x28e4e573, 0xc952b79c,
7748 0xab8f3176, 0x4a396399, 0x2e334d78, 0xcf851f97, 0xad58997d,
7749 0x4ceecb92, 0x244ab464, 0xc5fce68b, 0xa7216061, 0x4697328e,
7750 0x229d1c6f, 0xc32b4e80, 0xa1f6c86a, 0x40409a85, 0x60708dba,
7751 0x81c6df55, 0xe31b59bf, 0x02ad0b50, 0x66a725b1, 0x8711775e,
7752 0xe5ccf1b4, 0x047aa35b, 0x6cdedcad, 0x8d688e42, 0xefb508a8,
7753 0x0e035a47, 0x6a0974a6, 0x8bbf2649, 0xe962a0a3, 0x08d4f24c,
7754 0x782c2e94, 0x999a7c7b, 0xfb47fa91, 0x1af1a87e, 0x7efb869f,
7755 0x9f4dd470, 0xfd90529a, 0x1c260075, 0x74827f83, 0x95342d6c,
7756 0xf7e9ab86, 0x165ff969, 0x7255d788, 0x93e38567, 0xf13e038d,
7757 0x10885162, 0x50c8cbe7, 0xb17e9908, 0xd3a31fe2, 0x32154d0d,
7758 0x561f63ec, 0xb7a93103, 0xd574b7e9, 0x34c2e506, 0x5c669af0,
7759 0xbdd0c81f, 0xdf0d4ef5, 0x3ebb1c1a, 0x5ab132fb, 0xbb076014,
7760 0xd9dae6fe, 0x386cb411, 0x489468c9, 0xa9223a26, 0xcbffbccc,
7761 0x2a49ee23, 0x4e43c0c2, 0xaff5922d, 0xcd2814c7, 0x2c9e4628,
7762 0x443a39de, 0xa58c6b31, 0xc751eddb, 0x26e7bf34, 0x42ed91d5,
7763 0xa35bc33a, 0xc18645d0, 0x2030173f, 0x81e66bae, 0x60503941,
7764 0x028dbfab, 0xe33bed44, 0x8731c3a5, 0x6687914a, 0x045a17a0,
7765 0xe5ec454f, 0x8d483ab9, 0x6cfe6856, 0x0e23eebc, 0xef95bc53,
7766 0x8b9f92b2, 0x6a29c05d, 0x08f446b7, 0xe9421458, 0x99bac880,
7767 0x780c9a6f, 0x1ad11c85, 0xfb674e6a, 0x9f6d608b, 0x7edb3264,
7768 0x1c06b48e, 0xfdb0e661, 0x95149997, 0x74a2cb78, 0x167f4d92,
7769 0xf7c91f7d, 0x93c3319c, 0x72756373, 0x10a8e599, 0xf11eb776,
7770 0xb15e2df3, 0x50e87f1c, 0x3235f9f6, 0xd383ab19, 0xb78985f8,
7771 0x563fd717, 0x34e251fd, 0xd5540312, 0xbdf07ce4, 0x5c462e0b,
7772 0x3e9ba8e1, 0xdf2dfa0e, 0xbb27d4ef, 0x5a918600, 0x384c00ea,
7773 0xd9fa5205, 0xa9028edd, 0x48b4dc32, 0x2a695ad8, 0xcbdf0837,
7774 0xafd526d6, 0x4e637439, 0x2cbef2d3, 0xcd08a03c, 0xa5acdfca,
7775 0x441a8d25, 0x26c70bcf, 0xc7715920, 0xa37b77c1, 0x42cd252e,
7776 0x2010a3c4, 0xc1a6f12b, 0xe196e614, 0x0020b4fb, 0x62fd3211,
7777 0x834b60fe, 0xe7414e1f, 0x06f71cf0, 0x642a9a1a, 0x859cc8f5,
7778 0xed38b703, 0x0c8ee5ec, 0x6e536306, 0x8fe531e9, 0xebef1f08,
7779 0x0a594de7, 0x6884cb0d, 0x893299e2, 0xf9ca453a, 0x187c17d5,
7780 0x7aa1913f, 0x9b17c3d0, 0xff1ded31, 0x1eabbfde, 0x7c763934,
7781 0x9dc06bdb, 0xf564142d, 0x14d246c2, 0x760fc028, 0x97b992c7,
7782 0xf3b3bc26, 0x1205eec9, 0x70d86823, 0x916e3acc, 0xd12ea049,
7783 0x3098f2a6, 0x5245744c, 0xb3f326a3, 0xd7f90842, 0x364f5aad,
7784 0x5492dc47, 0xb5248ea8, 0xdd80f15e, 0x3c36a3b1, 0x5eeb255b,
7785 0xbf5d77b4, 0xdb575955, 0x3ae10bba, 0x583c8d50, 0xb98adfbf,
7786 0xc9720367, 0x28c45188, 0x4a19d762, 0xabaf858d, 0xcfa5ab6c,
7787 0x2e13f983, 0x4cce7f69, 0xad782d86, 0xc5dc5270, 0x246a009f,
7788 0x46b78675, 0xa701d49a, 0xc30bfa7b, 0x22bda894, 0x40602e7e,
7789 0xa1d67c91},
7790 {0x00000000, 0x5880e2d7, 0xf106b474, 0xa98656a3, 0xe20d68e9,
7791 0xba8d8a3e, 0x130bdc9d, 0x4b8b3e4a, 0x851da109, 0xdd9d43de,
7792 0x741b157d, 0x2c9bf7aa, 0x6710c9e0, 0x3f902b37, 0x96167d94,
7793 0xce969f43, 0x0a3b4213, 0x52bba0c4, 0xfb3df667, 0xa3bd14b0,
7794 0xe8362afa, 0xb0b6c82d, 0x19309e8e, 0x41b07c59, 0x8f26e31a,
7795 0xd7a601cd, 0x7e20576e, 0x26a0b5b9, 0x6d2b8bf3, 0x35ab6924,
7796 0x9c2d3f87, 0xc4addd50, 0x14768426, 0x4cf666f1, 0xe5703052,
7797 0xbdf0d285, 0xf67beccf, 0xaefb0e18, 0x077d58bb, 0x5ffdba6c,
7798 0x916b252f, 0xc9ebc7f8, 0x606d915b, 0x38ed738c, 0x73664dc6,
7799 0x2be6af11, 0x8260f9b2, 0xdae01b65, 0x1e4dc635, 0x46cd24e2,
7800 0xef4b7241, 0xb7cb9096, 0xfc40aedc, 0xa4c04c0b, 0x0d461aa8,
7801 0x55c6f87f, 0x9b50673c, 0xc3d085eb, 0x6a56d348, 0x32d6319f,
7802 0x795d0fd5, 0x21dded02, 0x885bbba1, 0xd0db5976, 0x28ec084d,
7803 0x706cea9a, 0xd9eabc39, 0x816a5eee, 0xcae160a4, 0x92618273,
7804 0x3be7d4d0, 0x63673607, 0xadf1a944, 0xf5714b93, 0x5cf71d30,
7805 0x0477ffe7, 0x4ffcc1ad, 0x177c237a, 0xbefa75d9, 0xe67a970e,
7806 0x22d74a5e, 0x7a57a889, 0xd3d1fe2a, 0x8b511cfd, 0xc0da22b7,
7807 0x985ac060, 0x31dc96c3, 0x695c7414, 0xa7caeb57, 0xff4a0980,
7808 0x56cc5f23, 0x0e4cbdf4, 0x45c783be, 0x1d476169, 0xb4c137ca,
7809 0xec41d51d, 0x3c9a8c6b, 0x641a6ebc, 0xcd9c381f, 0x951cdac8,
7810 0xde97e482, 0x86170655, 0x2f9150f6, 0x7711b221, 0xb9872d62,
7811 0xe107cfb5, 0x48819916, 0x10017bc1, 0x5b8a458b, 0x030aa75c,
7812 0xaa8cf1ff, 0xf20c1328, 0x36a1ce78, 0x6e212caf, 0xc7a77a0c,
7813 0x9f2798db, 0xd4aca691, 0x8c2c4446, 0x25aa12e5, 0x7d2af032,
7814 0xb3bc6f71, 0xeb3c8da6, 0x42badb05, 0x1a3a39d2, 0x51b10798,
7815 0x0931e54f, 0xa0b7b3ec, 0xf837513b, 0x50d8119a, 0x0858f34d,
7816 0xa1dea5ee, 0xf95e4739, 0xb2d57973, 0xea559ba4, 0x43d3cd07,
7817 0x1b532fd0, 0xd5c5b093, 0x8d455244, 0x24c304e7, 0x7c43e630,
7818 0x37c8d87a, 0x6f483aad, 0xc6ce6c0e, 0x9e4e8ed9, 0x5ae35389,
7819 0x0263b15e, 0xabe5e7fd, 0xf365052a, 0xb8ee3b60, 0xe06ed9b7,
7820 0x49e88f14, 0x11686dc3, 0xdffef280, 0x877e1057, 0x2ef846f4,
7821 0x7678a423, 0x3df39a69, 0x657378be, 0xccf52e1d, 0x9475ccca,
7822 0x44ae95bc, 0x1c2e776b, 0xb5a821c8, 0xed28c31f, 0xa6a3fd55,
7823 0xfe231f82, 0x57a54921, 0x0f25abf6, 0xc1b334b5, 0x9933d662,
7824 0x30b580c1, 0x68356216, 0x23be5c5c, 0x7b3ebe8b, 0xd2b8e828,
7825 0x8a380aff, 0x4e95d7af, 0x16153578, 0xbf9363db, 0xe713810c,
7826 0xac98bf46, 0xf4185d91, 0x5d9e0b32, 0x051ee9e5, 0xcb8876a6,
7827 0x93089471, 0x3a8ec2d2, 0x620e2005, 0x29851e4f, 0x7105fc98,
7828 0xd883aa3b, 0x800348ec, 0x783419d7, 0x20b4fb00, 0x8932ada3,
7829 0xd1b24f74, 0x9a39713e, 0xc2b993e9, 0x6b3fc54a, 0x33bf279d,
7830 0xfd29b8de, 0xa5a95a09, 0x0c2f0caa, 0x54afee7d, 0x1f24d037,
7831 0x47a432e0, 0xee226443, 0xb6a28694, 0x720f5bc4, 0x2a8fb913,
7832 0x8309efb0, 0xdb890d67, 0x9002332d, 0xc882d1fa, 0x61048759,
7833 0x3984658e, 0xf712facd, 0xaf92181a, 0x06144eb9, 0x5e94ac6e,
7834 0x151f9224, 0x4d9f70f3, 0xe4192650, 0xbc99c487, 0x6c429df1,
7835 0x34c27f26, 0x9d442985, 0xc5c4cb52, 0x8e4ff518, 0xd6cf17cf,
7836 0x7f49416c, 0x27c9a3bb, 0xe95f3cf8, 0xb1dfde2f, 0x1859888c,
7837 0x40d96a5b, 0x0b525411, 0x53d2b6c6, 0xfa54e065, 0xa2d402b2,
7838 0x6679dfe2, 0x3ef93d35, 0x977f6b96, 0xcfff8941, 0x8474b70b,
7839 0xdcf455dc, 0x7572037f, 0x2df2e1a8, 0xe3647eeb, 0xbbe49c3c,
7840 0x1262ca9f, 0x4ae22848, 0x01691602, 0x59e9f4d5, 0xf06fa276,
7841 0xa8ef40a1},
7842 {0x00000000, 0x463b6765, 0x8c76ceca, 0xca4da9af, 0x59ebed4e,
7843 0x1fd08a2b, 0xd59d2384, 0x93a644e1, 0xb2d6db9d, 0xf4edbcf8,
7844 0x3ea01557, 0x789b7232, 0xeb3d36d3, 0xad0651b6, 0x674bf819,
7845 0x21709f7c, 0x25abc6e0, 0x6390a185, 0xa9dd082a, 0xefe66f4f,
7846 0x7c402bae, 0x3a7b4ccb, 0xf036e564, 0xb60d8201, 0x977d1d7d,
7847 0xd1467a18, 0x1b0bd3b7, 0x5d30b4d2, 0xce96f033, 0x88ad9756,
7848 0x42e03ef9, 0x04db599c, 0x0b50fc1a, 0x4d6b9b7f, 0x872632d0,
7849 0xc11d55b5, 0x52bb1154, 0x14807631, 0xdecddf9e, 0x98f6b8fb,
7850 0xb9862787, 0xffbd40e2, 0x35f0e94d, 0x73cb8e28, 0xe06dcac9,
7851 0xa656adac, 0x6c1b0403, 0x2a206366, 0x2efb3afa, 0x68c05d9f,
7852 0xa28df430, 0xe4b69355, 0x7710d7b4, 0x312bb0d1, 0xfb66197e,
7853 0xbd5d7e1b, 0x9c2de167, 0xda168602, 0x105b2fad, 0x566048c8,
7854 0xc5c60c29, 0x83fd6b4c, 0x49b0c2e3, 0x0f8ba586, 0x16a0f835,
7855 0x509b9f50, 0x9ad636ff, 0xdced519a, 0x4f4b157b, 0x0970721e,
7856 0xc33ddbb1, 0x8506bcd4, 0xa47623a8, 0xe24d44cd, 0x2800ed62,
7857 0x6e3b8a07, 0xfd9dcee6, 0xbba6a983, 0x71eb002c, 0x37d06749,
7858 0x330b3ed5, 0x753059b0, 0xbf7df01f, 0xf946977a, 0x6ae0d39b,
7859 0x2cdbb4fe, 0xe6961d51, 0xa0ad7a34, 0x81dde548, 0xc7e6822d,
7860 0x0dab2b82, 0x4b904ce7, 0xd8360806, 0x9e0d6f63, 0x5440c6cc,
7861 0x127ba1a9, 0x1df0042f, 0x5bcb634a, 0x9186cae5, 0xd7bdad80,
7862 0x441be961, 0x02208e04, 0xc86d27ab, 0x8e5640ce, 0xaf26dfb2,
7863 0xe91db8d7, 0x23501178, 0x656b761d, 0xf6cd32fc, 0xb0f65599,
7864 0x7abbfc36, 0x3c809b53, 0x385bc2cf, 0x7e60a5aa, 0xb42d0c05,
7865 0xf2166b60, 0x61b02f81, 0x278b48e4, 0xedc6e14b, 0xabfd862e,
7866 0x8a8d1952, 0xccb67e37, 0x06fbd798, 0x40c0b0fd, 0xd366f41c,
7867 0x955d9379, 0x5f103ad6, 0x192b5db3, 0x2c40f16b, 0x6a7b960e,
7868 0xa0363fa1, 0xe60d58c4, 0x75ab1c25, 0x33907b40, 0xf9ddd2ef,
7869 0xbfe6b58a, 0x9e962af6, 0xd8ad4d93, 0x12e0e43c, 0x54db8359,
7870 0xc77dc7b8, 0x8146a0dd, 0x4b0b0972, 0x0d306e17, 0x09eb378b,
7871 0x4fd050ee, 0x859df941, 0xc3a69e24, 0x5000dac5, 0x163bbda0,
7872 0xdc76140f, 0x9a4d736a, 0xbb3dec16, 0xfd068b73, 0x374b22dc,
7873 0x717045b9, 0xe2d60158, 0xa4ed663d, 0x6ea0cf92, 0x289ba8f7,
7874 0x27100d71, 0x612b6a14, 0xab66c3bb, 0xed5da4de, 0x7efbe03f,
7875 0x38c0875a, 0xf28d2ef5, 0xb4b64990, 0x95c6d6ec, 0xd3fdb189,
7876 0x19b01826, 0x5f8b7f43, 0xcc2d3ba2, 0x8a165cc7, 0x405bf568,
7877 0x0660920d, 0x02bbcb91, 0x4480acf4, 0x8ecd055b, 0xc8f6623e,
7878 0x5b5026df, 0x1d6b41ba, 0xd726e815, 0x911d8f70, 0xb06d100c,
7879 0xf6567769, 0x3c1bdec6, 0x7a20b9a3, 0xe986fd42, 0xafbd9a27,
7880 0x65f03388, 0x23cb54ed, 0x3ae0095e, 0x7cdb6e3b, 0xb696c794,
7881 0xf0ada0f1, 0x630be410, 0x25308375, 0xef7d2ada, 0xa9464dbf,
7882 0x8836d2c3, 0xce0db5a6, 0x04401c09, 0x427b7b6c, 0xd1dd3f8d,
7883 0x97e658e8, 0x5dabf147, 0x1b909622, 0x1f4bcfbe, 0x5970a8db,
7884 0x933d0174, 0xd5066611, 0x46a022f0, 0x009b4595, 0xcad6ec3a,
7885 0x8ced8b5f, 0xad9d1423, 0xeba67346, 0x21ebdae9, 0x67d0bd8c,
7886 0xf476f96d, 0xb24d9e08, 0x780037a7, 0x3e3b50c2, 0x31b0f544,
7887 0x778b9221, 0xbdc63b8e, 0xfbfd5ceb, 0x685b180a, 0x2e607f6f,
7888 0xe42dd6c0, 0xa216b1a5, 0x83662ed9, 0xc55d49bc, 0x0f10e013,
7889 0x492b8776, 0xda8dc397, 0x9cb6a4f2, 0x56fb0d5d, 0x10c06a38,
7890 0x141b33a4, 0x522054c1, 0x986dfd6e, 0xde569a0b, 0x4df0deea,
7891 0x0bcbb98f, 0xc1861020, 0x87bd7745, 0xa6cde839, 0xe0f68f5c,
7892 0x2abb26f3, 0x6c804196, 0xff260577, 0xb91d6212, 0x7350cbbd,
7893 0x356bacd8}};
7894
7895 #endif
7896
7897 #endif
7898
7899 #if N == 6
7900
7901 #if W == 8
7902
7903 local const z_crc_t FAR crc_braid_table[][256] = {
7904 {0x00000000, 0x3db1ecdc, 0x7b63d9b8, 0x46d23564, 0xf6c7b370,
7905 0xcb765fac, 0x8da46ac8, 0xb0158614, 0x36fe60a1, 0x0b4f8c7d,
7906 0x4d9db919, 0x702c55c5, 0xc039d3d1, 0xfd883f0d, 0xbb5a0a69,
7907 0x86ebe6b5, 0x6dfcc142, 0x504d2d9e, 0x169f18fa, 0x2b2ef426,
7908 0x9b3b7232, 0xa68a9eee, 0xe058ab8a, 0xdde94756, 0x5b02a1e3,
7909 0x66b34d3f, 0x2061785b, 0x1dd09487, 0xadc51293, 0x9074fe4f,
7910 0xd6a6cb2b, 0xeb1727f7, 0xdbf98284, 0xe6486e58, 0xa09a5b3c,
7911 0x9d2bb7e0, 0x2d3e31f4, 0x108fdd28, 0x565de84c, 0x6bec0490,
7912 0xed07e225, 0xd0b60ef9, 0x96643b9d, 0xabd5d741, 0x1bc05155,
7913 0x2671bd89, 0x60a388ed, 0x5d126431, 0xb60543c6, 0x8bb4af1a,
7914 0xcd669a7e, 0xf0d776a2, 0x40c2f0b6, 0x7d731c6a, 0x3ba1290e,
7915 0x0610c5d2, 0x80fb2367, 0xbd4acfbb, 0xfb98fadf, 0xc6291603,
7916 0x763c9017, 0x4b8d7ccb, 0x0d5f49af, 0x30eea573, 0x6c820349,
7917 0x5133ef95, 0x17e1daf1, 0x2a50362d, 0x9a45b039, 0xa7f45ce5,
7918 0xe1266981, 0xdc97855d, 0x5a7c63e8, 0x67cd8f34, 0x211fba50,
7919 0x1cae568c, 0xacbbd098, 0x910a3c44, 0xd7d80920, 0xea69e5fc,
7920 0x017ec20b, 0x3ccf2ed7, 0x7a1d1bb3, 0x47acf76f, 0xf7b9717b,
7921 0xca089da7, 0x8cdaa8c3, 0xb16b441f, 0x3780a2aa, 0x0a314e76,
7922 0x4ce37b12, 0x715297ce, 0xc14711da, 0xfcf6fd06, 0xba24c862,
7923 0x879524be, 0xb77b81cd, 0x8aca6d11, 0xcc185875, 0xf1a9b4a9,
7924 0x41bc32bd, 0x7c0dde61, 0x3adfeb05, 0x076e07d9, 0x8185e16c,
7925 0xbc340db0, 0xfae638d4, 0xc757d408, 0x7742521c, 0x4af3bec0,
7926 0x0c218ba4, 0x31906778, 0xda87408f, 0xe736ac53, 0xa1e49937,
7927 0x9c5575eb, 0x2c40f3ff, 0x11f11f23, 0x57232a47, 0x6a92c69b,
7928 0xec79202e, 0xd1c8ccf2, 0x971af996, 0xaaab154a, 0x1abe935e,
7929 0x270f7f82, 0x61dd4ae6, 0x5c6ca63a, 0xd9040692, 0xe4b5ea4e,
7930 0xa267df2a, 0x9fd633f6, 0x2fc3b5e2, 0x1272593e, 0x54a06c5a,
7931 0x69118086, 0xeffa6633, 0xd24b8aef, 0x9499bf8b, 0xa9285357,
7932 0x193dd543, 0x248c399f, 0x625e0cfb, 0x5fefe027, 0xb4f8c7d0,
7933 0x89492b0c, 0xcf9b1e68, 0xf22af2b4, 0x423f74a0, 0x7f8e987c,
7934 0x395cad18, 0x04ed41c4, 0x8206a771, 0xbfb74bad, 0xf9657ec9,
7935 0xc4d49215, 0x74c11401, 0x4970f8dd, 0x0fa2cdb9, 0x32132165,
7936 0x02fd8416, 0x3f4c68ca, 0x799e5dae, 0x442fb172, 0xf43a3766,
7937 0xc98bdbba, 0x8f59eede, 0xb2e80202, 0x3403e4b7, 0x09b2086b,
7938 0x4f603d0f, 0x72d1d1d3, 0xc2c457c7, 0xff75bb1b, 0xb9a78e7f,
7939 0x841662a3, 0x6f014554, 0x52b0a988, 0x14629cec, 0x29d37030,
7940 0x99c6f624, 0xa4771af8, 0xe2a52f9c, 0xdf14c340, 0x59ff25f5,
7941 0x644ec929, 0x229cfc4d, 0x1f2d1091, 0xaf389685, 0x92897a59,
7942 0xd45b4f3d, 0xe9eaa3e1, 0xb58605db, 0x8837e907, 0xcee5dc63,
7943 0xf35430bf, 0x4341b6ab, 0x7ef05a77, 0x38226f13, 0x059383cf,
7944 0x8378657a, 0xbec989a6, 0xf81bbcc2, 0xc5aa501e, 0x75bfd60a,
7945 0x480e3ad6, 0x0edc0fb2, 0x336de36e, 0xd87ac499, 0xe5cb2845,
7946 0xa3191d21, 0x9ea8f1fd, 0x2ebd77e9, 0x130c9b35, 0x55deae51,
7947 0x686f428d, 0xee84a438, 0xd33548e4, 0x95e77d80, 0xa856915c,
7948 0x18431748, 0x25f2fb94, 0x6320cef0, 0x5e91222c, 0x6e7f875f,
7949 0x53ce6b83, 0x151c5ee7, 0x28adb23b, 0x98b8342f, 0xa509d8f3,
7950 0xe3dbed97, 0xde6a014b, 0x5881e7fe, 0x65300b22, 0x23e23e46,
7951 0x1e53d29a, 0xae46548e, 0x93f7b852, 0xd5258d36, 0xe89461ea,
7952 0x0383461d, 0x3e32aac1, 0x78e09fa5, 0x45517379, 0xf544f56d,
7953 0xc8f519b1, 0x8e272cd5, 0xb396c009, 0x357d26bc, 0x08ccca60,
7954 0x4e1eff04, 0x73af13d8, 0xc3ba95cc, 0xfe0b7910, 0xb8d94c74,
7955 0x8568a0a8},
7956 {0x00000000, 0x69790b65, 0xd2f216ca, 0xbb8b1daf, 0x7e952bd5,
7957 0x17ec20b0, 0xac673d1f, 0xc51e367a, 0xfd2a57aa, 0x94535ccf,
7958 0x2fd84160, 0x46a14a05, 0x83bf7c7f, 0xeac6771a, 0x514d6ab5,
7959 0x383461d0, 0x2125a915, 0x485ca270, 0xf3d7bfdf, 0x9aaeb4ba,
7960 0x5fb082c0, 0x36c989a5, 0x8d42940a, 0xe43b9f6f, 0xdc0ffebf,
7961 0xb576f5da, 0x0efde875, 0x6784e310, 0xa29ad56a, 0xcbe3de0f,
7962 0x7068c3a0, 0x1911c8c5, 0x424b522a, 0x2b32594f, 0x90b944e0,
7963 0xf9c04f85, 0x3cde79ff, 0x55a7729a, 0xee2c6f35, 0x87556450,
7964 0xbf610580, 0xd6180ee5, 0x6d93134a, 0x04ea182f, 0xc1f42e55,
7965 0xa88d2530, 0x1306389f, 0x7a7f33fa, 0x636efb3f, 0x0a17f05a,
7966 0xb19cedf5, 0xd8e5e690, 0x1dfbd0ea, 0x7482db8f, 0xcf09c620,
7967 0xa670cd45, 0x9e44ac95, 0xf73da7f0, 0x4cb6ba5f, 0x25cfb13a,
7968 0xe0d18740, 0x89a88c25, 0x3223918a, 0x5b5a9aef, 0x8496a454,
7969 0xedefaf31, 0x5664b29e, 0x3f1db9fb, 0xfa038f81, 0x937a84e4,
7970 0x28f1994b, 0x4188922e, 0x79bcf3fe, 0x10c5f89b, 0xab4ee534,
7971 0xc237ee51, 0x0729d82b, 0x6e50d34e, 0xd5dbcee1, 0xbca2c584,
7972 0xa5b30d41, 0xccca0624, 0x77411b8b, 0x1e3810ee, 0xdb262694,
7973 0xb25f2df1, 0x09d4305e, 0x60ad3b3b, 0x58995aeb, 0x31e0518e,
7974 0x8a6b4c21, 0xe3124744, 0x260c713e, 0x4f757a5b, 0xf4fe67f4,
7975 0x9d876c91, 0xc6ddf67e, 0xafa4fd1b, 0x142fe0b4, 0x7d56ebd1,
7976 0xb848ddab, 0xd131d6ce, 0x6abacb61, 0x03c3c004, 0x3bf7a1d4,
7977 0x528eaab1, 0xe905b71e, 0x807cbc7b, 0x45628a01, 0x2c1b8164,
7978 0x97909ccb, 0xfee997ae, 0xe7f85f6b, 0x8e81540e, 0x350a49a1,
7979 0x5c7342c4, 0x996d74be, 0xf0147fdb, 0x4b9f6274, 0x22e66911,
7980 0x1ad208c1, 0x73ab03a4, 0xc8201e0b, 0xa159156e, 0x64472314,
7981 0x0d3e2871, 0xb6b535de, 0xdfcc3ebb, 0xd25c4ee9, 0xbb25458c,
7982 0x00ae5823, 0x69d75346, 0xacc9653c, 0xc5b06e59, 0x7e3b73f6,
7983 0x17427893, 0x2f761943, 0x460f1226, 0xfd840f89, 0x94fd04ec,
7984 0x51e33296, 0x389a39f3, 0x8311245c, 0xea682f39, 0xf379e7fc,
7985 0x9a00ec99, 0x218bf136, 0x48f2fa53, 0x8deccc29, 0xe495c74c,
7986 0x5f1edae3, 0x3667d186, 0x0e53b056, 0x672abb33, 0xdca1a69c,
7987 0xb5d8adf9, 0x70c69b83, 0x19bf90e6, 0xa2348d49, 0xcb4d862c,
7988 0x90171cc3, 0xf96e17a6, 0x42e50a09, 0x2b9c016c, 0xee823716,
7989 0x87fb3c73, 0x3c7021dc, 0x55092ab9, 0x6d3d4b69, 0x0444400c,
7990 0xbfcf5da3, 0xd6b656c6, 0x13a860bc, 0x7ad16bd9, 0xc15a7676,
7991 0xa8237d13, 0xb132b5d6, 0xd84bbeb3, 0x63c0a31c, 0x0ab9a879,
7992 0xcfa79e03, 0xa6de9566, 0x1d5588c9, 0x742c83ac, 0x4c18e27c,
7993 0x2561e919, 0x9eeaf4b6, 0xf793ffd3, 0x328dc9a9, 0x5bf4c2cc,
7994 0xe07fdf63, 0x8906d406, 0x56caeabd, 0x3fb3e1d8, 0x8438fc77,
7995 0xed41f712, 0x285fc168, 0x4126ca0d, 0xfaadd7a2, 0x93d4dcc7,
7996 0xabe0bd17, 0xc299b672, 0x7912abdd, 0x106ba0b8, 0xd57596c2,
7997 0xbc0c9da7, 0x07878008, 0x6efe8b6d, 0x77ef43a8, 0x1e9648cd,
7998 0xa51d5562, 0xcc645e07, 0x097a687d, 0x60036318, 0xdb887eb7,
7999 0xb2f175d2, 0x8ac51402, 0xe3bc1f67, 0x583702c8, 0x314e09ad,
8000 0xf4503fd7, 0x9d2934b2, 0x26a2291d, 0x4fdb2278, 0x1481b897,
8001 0x7df8b3f2, 0xc673ae5d, 0xaf0aa538, 0x6a149342, 0x036d9827,
8002 0xb8e68588, 0xd19f8eed, 0xe9abef3d, 0x80d2e458, 0x3b59f9f7,
8003 0x5220f292, 0x973ec4e8, 0xfe47cf8d, 0x45ccd222, 0x2cb5d947,
8004 0x35a41182, 0x5cdd1ae7, 0xe7560748, 0x8e2f0c2d, 0x4b313a57,
8005 0x22483132, 0x99c32c9d, 0xf0ba27f8, 0xc88e4628, 0xa1f74d4d,
8006 0x1a7c50e2, 0x73055b87, 0xb61b6dfd, 0xdf626698, 0x64e97b37,
8007 0x0d907052},
8008 {0x00000000, 0x7fc99b93, 0xff933726, 0x805aacb5, 0x2457680d,
8009 0x5b9ef39e, 0xdbc45f2b, 0xa40dc4b8, 0x48aed01a, 0x37674b89,
8010 0xb73de73c, 0xc8f47caf, 0x6cf9b817, 0x13302384, 0x936a8f31,
8011 0xeca314a2, 0x915da034, 0xee943ba7, 0x6ece9712, 0x11070c81,
8012 0xb50ac839, 0xcac353aa, 0x4a99ff1f, 0x3550648c, 0xd9f3702e,
8013 0xa63aebbd, 0x26604708, 0x59a9dc9b, 0xfda41823, 0x826d83b0,
8014 0x02372f05, 0x7dfeb496, 0xf9ca4629, 0x8603ddba, 0x0659710f,
8015 0x7990ea9c, 0xdd9d2e24, 0xa254b5b7, 0x220e1902, 0x5dc78291,
8016 0xb1649633, 0xcead0da0, 0x4ef7a115, 0x313e3a86, 0x9533fe3e,
8017 0xeafa65ad, 0x6aa0c918, 0x1569528b, 0x6897e61d, 0x175e7d8e,
8018 0x9704d13b, 0xe8cd4aa8, 0x4cc08e10, 0x33091583, 0xb353b936,
8019 0xcc9a22a5, 0x20393607, 0x5ff0ad94, 0xdfaa0121, 0xa0639ab2,
8020 0x046e5e0a, 0x7ba7c599, 0xfbfd692c, 0x8434f2bf, 0x28e58a13,
8021 0x572c1180, 0xd776bd35, 0xa8bf26a6, 0x0cb2e21e, 0x737b798d,
8022 0xf321d538, 0x8ce84eab, 0x604b5a09, 0x1f82c19a, 0x9fd86d2f,
8023 0xe011f6bc, 0x441c3204, 0x3bd5a997, 0xbb8f0522, 0xc4469eb1,
8024 0xb9b82a27, 0xc671b1b4, 0x462b1d01, 0x39e28692, 0x9def422a,
8025 0xe226d9b9, 0x627c750c, 0x1db5ee9f, 0xf116fa3d, 0x8edf61ae,
8026 0x0e85cd1b, 0x714c5688, 0xd5419230, 0xaa8809a3, 0x2ad2a516,
8027 0x551b3e85, 0xd12fcc3a, 0xaee657a9, 0x2ebcfb1c, 0x5175608f,
8028 0xf578a437, 0x8ab13fa4, 0x0aeb9311, 0x75220882, 0x99811c20,
8029 0xe64887b3, 0x66122b06, 0x19dbb095, 0xbdd6742d, 0xc21fefbe,
8030 0x4245430b, 0x3d8cd898, 0x40726c0e, 0x3fbbf79d, 0xbfe15b28,
8031 0xc028c0bb, 0x64250403, 0x1bec9f90, 0x9bb63325, 0xe47fa8b6,
8032 0x08dcbc14, 0x77152787, 0xf74f8b32, 0x888610a1, 0x2c8bd419,
8033 0x53424f8a, 0xd318e33f, 0xacd178ac, 0x51cb1426, 0x2e028fb5,
8034 0xae582300, 0xd191b893, 0x759c7c2b, 0x0a55e7b8, 0x8a0f4b0d,
8035 0xf5c6d09e, 0x1965c43c, 0x66ac5faf, 0xe6f6f31a, 0x993f6889,
8036 0x3d32ac31, 0x42fb37a2, 0xc2a19b17, 0xbd680084, 0xc096b412,
8037 0xbf5f2f81, 0x3f058334, 0x40cc18a7, 0xe4c1dc1f, 0x9b08478c,
8038 0x1b52eb39, 0x649b70aa, 0x88386408, 0xf7f1ff9b, 0x77ab532e,
8039 0x0862c8bd, 0xac6f0c05, 0xd3a69796, 0x53fc3b23, 0x2c35a0b0,
8040 0xa801520f, 0xd7c8c99c, 0x57926529, 0x285bfeba, 0x8c563a02,
8041 0xf39fa191, 0x73c50d24, 0x0c0c96b7, 0xe0af8215, 0x9f661986,
8042 0x1f3cb533, 0x60f52ea0, 0xc4f8ea18, 0xbb31718b, 0x3b6bdd3e,
8043 0x44a246ad, 0x395cf23b, 0x469569a8, 0xc6cfc51d, 0xb9065e8e,
8044 0x1d0b9a36, 0x62c201a5, 0xe298ad10, 0x9d513683, 0x71f22221,
8045 0x0e3bb9b2, 0x8e611507, 0xf1a88e94, 0x55a54a2c, 0x2a6cd1bf,
8046 0xaa367d0a, 0xd5ffe699, 0x792e9e35, 0x06e705a6, 0x86bda913,
8047 0xf9743280, 0x5d79f638, 0x22b06dab, 0xa2eac11e, 0xdd235a8d,
8048 0x31804e2f, 0x4e49d5bc, 0xce137909, 0xb1dae29a, 0x15d72622,
8049 0x6a1ebdb1, 0xea441104, 0x958d8a97, 0xe8733e01, 0x97baa592,
8050 0x17e00927, 0x682992b4, 0xcc24560c, 0xb3edcd9f, 0x33b7612a,
8051 0x4c7efab9, 0xa0ddee1b, 0xdf147588, 0x5f4ed93d, 0x208742ae,
8052 0x848a8616, 0xfb431d85, 0x7b19b130, 0x04d02aa3, 0x80e4d81c,
8053 0xff2d438f, 0x7f77ef3a, 0x00be74a9, 0xa4b3b011, 0xdb7a2b82,
8054 0x5b208737, 0x24e91ca4, 0xc84a0806, 0xb7839395, 0x37d93f20,
8055 0x4810a4b3, 0xec1d600b, 0x93d4fb98, 0x138e572d, 0x6c47ccbe,
8056 0x11b97828, 0x6e70e3bb, 0xee2a4f0e, 0x91e3d49d, 0x35ee1025,
8057 0x4a278bb6, 0xca7d2703, 0xb5b4bc90, 0x5917a832, 0x26de33a1,
8058 0xa6849f14, 0xd94d0487, 0x7d40c03f, 0x02895bac, 0x82d3f719,
8059 0xfd1a6c8a},
8060 {0x00000000, 0xa396284c, 0x9c5d56d9, 0x3fcb7e95, 0xe3cbabf3,
8061 0x405d83bf, 0x7f96fd2a, 0xdc00d566, 0x1ce651a7, 0xbf7079eb,
8062 0x80bb077e, 0x232d2f32, 0xff2dfa54, 0x5cbbd218, 0x6370ac8d,
8063 0xc0e684c1, 0x39cca34e, 0x9a5a8b02, 0xa591f597, 0x0607dddb,
8064 0xda0708bd, 0x799120f1, 0x465a5e64, 0xe5cc7628, 0x252af2e9,
8065 0x86bcdaa5, 0xb977a430, 0x1ae18c7c, 0xc6e1591a, 0x65777156,
8066 0x5abc0fc3, 0xf92a278f, 0x7399469c, 0xd00f6ed0, 0xefc41045,
8067 0x4c523809, 0x9052ed6f, 0x33c4c523, 0x0c0fbbb6, 0xaf9993fa,
8068 0x6f7f173b, 0xcce93f77, 0xf32241e2, 0x50b469ae, 0x8cb4bcc8,
8069 0x2f229484, 0x10e9ea11, 0xb37fc25d, 0x4a55e5d2, 0xe9c3cd9e,
8070 0xd608b30b, 0x759e9b47, 0xa99e4e21, 0x0a08666d, 0x35c318f8,
8071 0x965530b4, 0x56b3b475, 0xf5259c39, 0xcaeee2ac, 0x6978cae0,
8072 0xb5781f86, 0x16ee37ca, 0x2925495f, 0x8ab36113, 0xe7328d38,
8073 0x44a4a574, 0x7b6fdbe1, 0xd8f9f3ad, 0x04f926cb, 0xa76f0e87,
8074 0x98a47012, 0x3b32585e, 0xfbd4dc9f, 0x5842f4d3, 0x67898a46,
8075 0xc41fa20a, 0x181f776c, 0xbb895f20, 0x844221b5, 0x27d409f9,
8076 0xdefe2e76, 0x7d68063a, 0x42a378af, 0xe13550e3, 0x3d358585,
8077 0x9ea3adc9, 0xa168d35c, 0x02fefb10, 0xc2187fd1, 0x618e579d,
8078 0x5e452908, 0xfdd30144, 0x21d3d422, 0x8245fc6e, 0xbd8e82fb,
8079 0x1e18aab7, 0x94abcba4, 0x373de3e8, 0x08f69d7d, 0xab60b531,
8080 0x77606057, 0xd4f6481b, 0xeb3d368e, 0x48ab1ec2, 0x884d9a03,
8081 0x2bdbb24f, 0x1410ccda, 0xb786e496, 0x6b8631f0, 0xc81019bc,
8082 0xf7db6729, 0x544d4f65, 0xad6768ea, 0x0ef140a6, 0x313a3e33,
8083 0x92ac167f, 0x4eacc319, 0xed3aeb55, 0xd2f195c0, 0x7167bd8c,
8084 0xb181394d, 0x12171101, 0x2ddc6f94, 0x8e4a47d8, 0x524a92be,
8085 0xf1dcbaf2, 0xce17c467, 0x6d81ec2b, 0x15141c31, 0xb682347d,
8086 0x89494ae8, 0x2adf62a4, 0xf6dfb7c2, 0x55499f8e, 0x6a82e11b,
8087 0xc914c957, 0x09f24d96, 0xaa6465da, 0x95af1b4f, 0x36393303,
8088 0xea39e665, 0x49afce29, 0x7664b0bc, 0xd5f298f0, 0x2cd8bf7f,
8089 0x8f4e9733, 0xb085e9a6, 0x1313c1ea, 0xcf13148c, 0x6c853cc0,
8090 0x534e4255, 0xf0d86a19, 0x303eeed8, 0x93a8c694, 0xac63b801,
8091 0x0ff5904d, 0xd3f5452b, 0x70636d67, 0x4fa813f2, 0xec3e3bbe,
8092 0x668d5aad, 0xc51b72e1, 0xfad00c74, 0x59462438, 0x8546f15e,
8093 0x26d0d912, 0x191ba787, 0xba8d8fcb, 0x7a6b0b0a, 0xd9fd2346,
8094 0xe6365dd3, 0x45a0759f, 0x99a0a0f9, 0x3a3688b5, 0x05fdf620,
8095 0xa66bde6c, 0x5f41f9e3, 0xfcd7d1af, 0xc31caf3a, 0x608a8776,
8096 0xbc8a5210, 0x1f1c7a5c, 0x20d704c9, 0x83412c85, 0x43a7a844,
8097 0xe0318008, 0xdffafe9d, 0x7c6cd6d1, 0xa06c03b7, 0x03fa2bfb,
8098 0x3c31556e, 0x9fa77d22, 0xf2269109, 0x51b0b945, 0x6e7bc7d0,
8099 0xcdedef9c, 0x11ed3afa, 0xb27b12b6, 0x8db06c23, 0x2e26446f,
8100 0xeec0c0ae, 0x4d56e8e2, 0x729d9677, 0xd10bbe3b, 0x0d0b6b5d,
8101 0xae9d4311, 0x91563d84, 0x32c015c8, 0xcbea3247, 0x687c1a0b,
8102 0x57b7649e, 0xf4214cd2, 0x282199b4, 0x8bb7b1f8, 0xb47ccf6d,
8103 0x17eae721, 0xd70c63e0, 0x749a4bac, 0x4b513539, 0xe8c71d75,
8104 0x34c7c813, 0x9751e05f, 0xa89a9eca, 0x0b0cb686, 0x81bfd795,
8105 0x2229ffd9, 0x1de2814c, 0xbe74a900, 0x62747c66, 0xc1e2542a,
8106 0xfe292abf, 0x5dbf02f3, 0x9d598632, 0x3ecfae7e, 0x0104d0eb,
8107 0xa292f8a7, 0x7e922dc1, 0xdd04058d, 0xe2cf7b18, 0x41595354,
8108 0xb87374db, 0x1be55c97, 0x242e2202, 0x87b80a4e, 0x5bb8df28,
8109 0xf82ef764, 0xc7e589f1, 0x6473a1bd, 0xa495257c, 0x07030d30,
8110 0x38c873a5, 0x9b5e5be9, 0x475e8e8f, 0xe4c8a6c3, 0xdb03d856,
8111 0x7895f01a},
8112 {0x00000000, 0x2a283862, 0x545070c4, 0x7e7848a6, 0xa8a0e188,
8113 0x8288d9ea, 0xfcf0914c, 0xd6d8a92e, 0x8a30c551, 0xa018fd33,
8114 0xde60b595, 0xf4488df7, 0x229024d9, 0x08b81cbb, 0x76c0541d,
8115 0x5ce86c7f, 0xcf108ce3, 0xe538b481, 0x9b40fc27, 0xb168c445,
8116 0x67b06d6b, 0x4d985509, 0x33e01daf, 0x19c825cd, 0x452049b2,
8117 0x6f0871d0, 0x11703976, 0x3b580114, 0xed80a83a, 0xc7a89058,
8118 0xb9d0d8fe, 0x93f8e09c, 0x45501f87, 0x6f7827e5, 0x11006f43,
8119 0x3b285721, 0xedf0fe0f, 0xc7d8c66d, 0xb9a08ecb, 0x9388b6a9,
8120 0xcf60dad6, 0xe548e2b4, 0x9b30aa12, 0xb1189270, 0x67c03b5e,
8121 0x4de8033c, 0x33904b9a, 0x19b873f8, 0x8a409364, 0xa068ab06,
8122 0xde10e3a0, 0xf438dbc2, 0x22e072ec, 0x08c84a8e, 0x76b00228,
8123 0x5c983a4a, 0x00705635, 0x2a586e57, 0x542026f1, 0x7e081e93,
8124 0xa8d0b7bd, 0x82f88fdf, 0xfc80c779, 0xd6a8ff1b, 0x8aa03f0e,
8125 0xa088076c, 0xdef04fca, 0xf4d877a8, 0x2200de86, 0x0828e6e4,
8126 0x7650ae42, 0x5c789620, 0x0090fa5f, 0x2ab8c23d, 0x54c08a9b,
8127 0x7ee8b2f9, 0xa8301bd7, 0x821823b5, 0xfc606b13, 0xd6485371,
8128 0x45b0b3ed, 0x6f988b8f, 0x11e0c329, 0x3bc8fb4b, 0xed105265,
8129 0xc7386a07, 0xb94022a1, 0x93681ac3, 0xcf8076bc, 0xe5a84ede,
8130 0x9bd00678, 0xb1f83e1a, 0x67209734, 0x4d08af56, 0x3370e7f0,
8131 0x1958df92, 0xcff02089, 0xe5d818eb, 0x9ba0504d, 0xb188682f,
8132 0x6750c101, 0x4d78f963, 0x3300b1c5, 0x192889a7, 0x45c0e5d8,
8133 0x6fe8ddba, 0x1190951c, 0x3bb8ad7e, 0xed600450, 0xc7483c32,
8134 0xb9307494, 0x93184cf6, 0x00e0ac6a, 0x2ac89408, 0x54b0dcae,
8135 0x7e98e4cc, 0xa8404de2, 0x82687580, 0xfc103d26, 0xd6380544,
8136 0x8ad0693b, 0xa0f85159, 0xde8019ff, 0xf4a8219d, 0x227088b3,
8137 0x0858b0d1, 0x7620f877, 0x5c08c015, 0xce31785d, 0xe419403f,
8138 0x9a610899, 0xb04930fb, 0x669199d5, 0x4cb9a1b7, 0x32c1e911,
8139 0x18e9d173, 0x4401bd0c, 0x6e29856e, 0x1051cdc8, 0x3a79f5aa,
8140 0xeca15c84, 0xc68964e6, 0xb8f12c40, 0x92d91422, 0x0121f4be,
8141 0x2b09ccdc, 0x5571847a, 0x7f59bc18, 0xa9811536, 0x83a92d54,
8142 0xfdd165f2, 0xd7f95d90, 0x8b1131ef, 0xa139098d, 0xdf41412b,
8143 0xf5697949, 0x23b1d067, 0x0999e805, 0x77e1a0a3, 0x5dc998c1,
8144 0x8b6167da, 0xa1495fb8, 0xdf31171e, 0xf5192f7c, 0x23c18652,
8145 0x09e9be30, 0x7791f696, 0x5db9cef4, 0x0151a28b, 0x2b799ae9,
8146 0x5501d24f, 0x7f29ea2d, 0xa9f14303, 0x83d97b61, 0xfda133c7,
8147 0xd7890ba5, 0x4471eb39, 0x6e59d35b, 0x10219bfd, 0x3a09a39f,
8148 0xecd10ab1, 0xc6f932d3, 0xb8817a75, 0x92a94217, 0xce412e68,
8149 0xe469160a, 0x9a115eac, 0xb03966ce, 0x66e1cfe0, 0x4cc9f782,
8150 0x32b1bf24, 0x18998746, 0x44914753, 0x6eb97f31, 0x10c13797,
8151 0x3ae90ff5, 0xec31a6db, 0xc6199eb9, 0xb861d61f, 0x9249ee7d,
8152 0xcea18202, 0xe489ba60, 0x9af1f2c6, 0xb0d9caa4, 0x6601638a,
8153 0x4c295be8, 0x3251134e, 0x18792b2c, 0x8b81cbb0, 0xa1a9f3d2,
8154 0xdfd1bb74, 0xf5f98316, 0x23212a38, 0x0909125a, 0x77715afc,
8155 0x5d59629e, 0x01b10ee1, 0x2b993683, 0x55e17e25, 0x7fc94647,
8156 0xa911ef69, 0x8339d70b, 0xfd419fad, 0xd769a7cf, 0x01c158d4,
8157 0x2be960b6, 0x55912810, 0x7fb91072, 0xa961b95c, 0x8349813e,
8158 0xfd31c998, 0xd719f1fa, 0x8bf19d85, 0xa1d9a5e7, 0xdfa1ed41,
8159 0xf589d523, 0x23517c0d, 0x0979446f, 0x77010cc9, 0x5d2934ab,
8160 0xced1d437, 0xe4f9ec55, 0x9a81a4f3, 0xb0a99c91, 0x667135bf,
8161 0x4c590ddd, 0x3221457b, 0x18097d19, 0x44e11166, 0x6ec92904,
8162 0x10b161a2, 0x3a9959c0, 0xec41f0ee, 0xc669c88c, 0xb811802a,
8163 0x9239b848},
8164 {0x00000000, 0x4713f6fb, 0x8e27edf6, 0xc9341b0d, 0xc73eddad,
8165 0x802d2b56, 0x4919305b, 0x0e0ac6a0, 0x550cbd1b, 0x121f4be0,
8166 0xdb2b50ed, 0x9c38a616, 0x923260b6, 0xd521964d, 0x1c158d40,
8167 0x5b067bbb, 0xaa197a36, 0xed0a8ccd, 0x243e97c0, 0x632d613b,
8168 0x6d27a79b, 0x2a345160, 0xe3004a6d, 0xa413bc96, 0xff15c72d,
8169 0xb80631d6, 0x71322adb, 0x3621dc20, 0x382b1a80, 0x7f38ec7b,
8170 0xb60cf776, 0xf11f018d, 0x8f43f22d, 0xc85004d6, 0x01641fdb,
8171 0x4677e920, 0x487d2f80, 0x0f6ed97b, 0xc65ac276, 0x8149348d,
8172 0xda4f4f36, 0x9d5cb9cd, 0x5468a2c0, 0x137b543b, 0x1d71929b,
8173 0x5a626460, 0x93567f6d, 0xd4458996, 0x255a881b, 0x62497ee0,
8174 0xab7d65ed, 0xec6e9316, 0xe26455b6, 0xa577a34d, 0x6c43b840,
8175 0x2b504ebb, 0x70563500, 0x3745c3fb, 0xfe71d8f6, 0xb9622e0d,
8176 0xb768e8ad, 0xf07b1e56, 0x394f055b, 0x7e5cf3a0, 0xc5f6e21b,
8177 0x82e514e0, 0x4bd10fed, 0x0cc2f916, 0x02c83fb6, 0x45dbc94d,
8178 0x8cefd240, 0xcbfc24bb, 0x90fa5f00, 0xd7e9a9fb, 0x1eddb2f6,
8179 0x59ce440d, 0x57c482ad, 0x10d77456, 0xd9e36f5b, 0x9ef099a0,
8180 0x6fef982d, 0x28fc6ed6, 0xe1c875db, 0xa6db8320, 0xa8d14580,
8181 0xefc2b37b, 0x26f6a876, 0x61e55e8d, 0x3ae32536, 0x7df0d3cd,
8182 0xb4c4c8c0, 0xf3d73e3b, 0xfdddf89b, 0xbace0e60, 0x73fa156d,
8183 0x34e9e396, 0x4ab51036, 0x0da6e6cd, 0xc492fdc0, 0x83810b3b,
8184 0x8d8bcd9b, 0xca983b60, 0x03ac206d, 0x44bfd696, 0x1fb9ad2d,
8185 0x58aa5bd6, 0x919e40db, 0xd68db620, 0xd8877080, 0x9f94867b,
8186 0x56a09d76, 0x11b36b8d, 0xe0ac6a00, 0xa7bf9cfb, 0x6e8b87f6,
8187 0x2998710d, 0x2792b7ad, 0x60814156, 0xa9b55a5b, 0xeea6aca0,
8188 0xb5a0d71b, 0xf2b321e0, 0x3b873aed, 0x7c94cc16, 0x729e0ab6,
8189 0x358dfc4d, 0xfcb9e740, 0xbbaa11bb, 0x509cc277, 0x178f348c,
8190 0xdebb2f81, 0x99a8d97a, 0x97a21fda, 0xd0b1e921, 0x1985f22c,
8191 0x5e9604d7, 0x05907f6c, 0x42838997, 0x8bb7929a, 0xcca46461,
8192 0xc2aea2c1, 0x85bd543a, 0x4c894f37, 0x0b9ab9cc, 0xfa85b841,
8193 0xbd964eba, 0x74a255b7, 0x33b1a34c, 0x3dbb65ec, 0x7aa89317,
8194 0xb39c881a, 0xf48f7ee1, 0xaf89055a, 0xe89af3a1, 0x21aee8ac,
8195 0x66bd1e57, 0x68b7d8f7, 0x2fa42e0c, 0xe6903501, 0xa183c3fa,
8196 0xdfdf305a, 0x98ccc6a1, 0x51f8ddac, 0x16eb2b57, 0x18e1edf7,
8197 0x5ff21b0c, 0x96c60001, 0xd1d5f6fa, 0x8ad38d41, 0xcdc07bba,
8198 0x04f460b7, 0x43e7964c, 0x4ded50ec, 0x0afea617, 0xc3cabd1a,
8199 0x84d94be1, 0x75c64a6c, 0x32d5bc97, 0xfbe1a79a, 0xbcf25161,
8200 0xb2f897c1, 0xf5eb613a, 0x3cdf7a37, 0x7bcc8ccc, 0x20caf777,
8201 0x67d9018c, 0xaeed1a81, 0xe9feec7a, 0xe7f42ada, 0xa0e7dc21,
8202 0x69d3c72c, 0x2ec031d7, 0x956a206c, 0xd279d697, 0x1b4dcd9a,
8203 0x5c5e3b61, 0x5254fdc1, 0x15470b3a, 0xdc731037, 0x9b60e6cc,
8204 0xc0669d77, 0x87756b8c, 0x4e417081, 0x0952867a, 0x075840da,
8205 0x404bb621, 0x897fad2c, 0xce6c5bd7, 0x3f735a5a, 0x7860aca1,
8206 0xb154b7ac, 0xf6474157, 0xf84d87f7, 0xbf5e710c, 0x766a6a01,
8207 0x31799cfa, 0x6a7fe741, 0x2d6c11ba, 0xe4580ab7, 0xa34bfc4c,
8208 0xad413aec, 0xea52cc17, 0x2366d71a, 0x647521e1, 0x1a29d241,
8209 0x5d3a24ba, 0x940e3fb7, 0xd31dc94c, 0xdd170fec, 0x9a04f917,
8210 0x5330e21a, 0x142314e1, 0x4f256f5a, 0x083699a1, 0xc10282ac,
8211 0x86117457, 0x881bb2f7, 0xcf08440c, 0x063c5f01, 0x412fa9fa,
8212 0xb030a877, 0xf7235e8c, 0x3e174581, 0x7904b37a, 0x770e75da,
8213 0x301d8321, 0xf929982c, 0xbe3a6ed7, 0xe53c156c, 0xa22fe397,
8214 0x6b1bf89a, 0x2c080e61, 0x2202c8c1, 0x65113e3a, 0xac252537,
8215 0xeb36d3cc},
8216 {0x00000000, 0xa13984ee, 0x99020f9d, 0x383b8b73, 0xe975197b,
8217 0x484c9d95, 0x707716e6, 0xd14e9208, 0x099b34b7, 0xa8a2b059,
8218 0x90993b2a, 0x31a0bfc4, 0xe0ee2dcc, 0x41d7a922, 0x79ec2251,
8219 0xd8d5a6bf, 0x1336696e, 0xb20fed80, 0x8a3466f3, 0x2b0de21d,
8220 0xfa437015, 0x5b7af4fb, 0x63417f88, 0xc278fb66, 0x1aad5dd9,
8221 0xbb94d937, 0x83af5244, 0x2296d6aa, 0xf3d844a2, 0x52e1c04c,
8222 0x6ada4b3f, 0xcbe3cfd1, 0x266cd2dc, 0x87555632, 0xbf6edd41,
8223 0x1e5759af, 0xcf19cba7, 0x6e204f49, 0x561bc43a, 0xf72240d4,
8224 0x2ff7e66b, 0x8ece6285, 0xb6f5e9f6, 0x17cc6d18, 0xc682ff10,
8225 0x67bb7bfe, 0x5f80f08d, 0xfeb97463, 0x355abbb2, 0x94633f5c,
8226 0xac58b42f, 0x0d6130c1, 0xdc2fa2c9, 0x7d162627, 0x452dad54,
8227 0xe41429ba, 0x3cc18f05, 0x9df80beb, 0xa5c38098, 0x04fa0476,
8228 0xd5b4967e, 0x748d1290, 0x4cb699e3, 0xed8f1d0d, 0x4cd9a5b8,
8229 0xede02156, 0xd5dbaa25, 0x74e22ecb, 0xa5acbcc3, 0x0495382d,
8230 0x3caeb35e, 0x9d9737b0, 0x4542910f, 0xe47b15e1, 0xdc409e92,
8231 0x7d791a7c, 0xac378874, 0x0d0e0c9a, 0x353587e9, 0x940c0307,
8232 0x5fefccd6, 0xfed64838, 0xc6edc34b, 0x67d447a5, 0xb69ad5ad,
8233 0x17a35143, 0x2f98da30, 0x8ea15ede, 0x5674f861, 0xf74d7c8f,
8234 0xcf76f7fc, 0x6e4f7312, 0xbf01e11a, 0x1e3865f4, 0x2603ee87,
8235 0x873a6a69, 0x6ab57764, 0xcb8cf38a, 0xf3b778f9, 0x528efc17,
8236 0x83c06e1f, 0x22f9eaf1, 0x1ac26182, 0xbbfbe56c, 0x632e43d3,
8237 0xc217c73d, 0xfa2c4c4e, 0x5b15c8a0, 0x8a5b5aa8, 0x2b62de46,
8238 0x13595535, 0xb260d1db, 0x79831e0a, 0xd8ba9ae4, 0xe0811197,
8239 0x41b89579, 0x90f60771, 0x31cf839f, 0x09f408ec, 0xa8cd8c02,
8240 0x70182abd, 0xd121ae53, 0xe91a2520, 0x4823a1ce, 0x996d33c6,
8241 0x3854b728, 0x006f3c5b, 0xa156b8b5, 0x99b34b70, 0x388acf9e,
8242 0x00b144ed, 0xa188c003, 0x70c6520b, 0xd1ffd6e5, 0xe9c45d96,
8243 0x48fdd978, 0x90287fc7, 0x3111fb29, 0x092a705a, 0xa813f4b4,
8244 0x795d66bc, 0xd864e252, 0xe05f6921, 0x4166edcf, 0x8a85221e,
8245 0x2bbca6f0, 0x13872d83, 0xb2bea96d, 0x63f03b65, 0xc2c9bf8b,
8246 0xfaf234f8, 0x5bcbb016, 0x831e16a9, 0x22279247, 0x1a1c1934,
8247 0xbb259dda, 0x6a6b0fd2, 0xcb528b3c, 0xf369004f, 0x525084a1,
8248 0xbfdf99ac, 0x1ee61d42, 0x26dd9631, 0x87e412df, 0x56aa80d7,
8249 0xf7930439, 0xcfa88f4a, 0x6e910ba4, 0xb644ad1b, 0x177d29f5,
8250 0x2f46a286, 0x8e7f2668, 0x5f31b460, 0xfe08308e, 0xc633bbfd,
8251 0x670a3f13, 0xace9f0c2, 0x0dd0742c, 0x35ebff5f, 0x94d27bb1,
8252 0x459ce9b9, 0xe4a56d57, 0xdc9ee624, 0x7da762ca, 0xa572c475,
8253 0x044b409b, 0x3c70cbe8, 0x9d494f06, 0x4c07dd0e, 0xed3e59e0,
8254 0xd505d293, 0x743c567d, 0xd56aeec8, 0x74536a26, 0x4c68e155,
8255 0xed5165bb, 0x3c1ff7b3, 0x9d26735d, 0xa51df82e, 0x04247cc0,
8256 0xdcf1da7f, 0x7dc85e91, 0x45f3d5e2, 0xe4ca510c, 0x3584c304,
8257 0x94bd47ea, 0xac86cc99, 0x0dbf4877, 0xc65c87a6, 0x67650348,
8258 0x5f5e883b, 0xfe670cd5, 0x2f299edd, 0x8e101a33, 0xb62b9140,
8259 0x171215ae, 0xcfc7b311, 0x6efe37ff, 0x56c5bc8c, 0xf7fc3862,
8260 0x26b2aa6a, 0x878b2e84, 0xbfb0a5f7, 0x1e892119, 0xf3063c14,
8261 0x523fb8fa, 0x6a043389, 0xcb3db767, 0x1a73256f, 0xbb4aa181,
8262 0x83712af2, 0x2248ae1c, 0xfa9d08a3, 0x5ba48c4d, 0x639f073e,
8263 0xc2a683d0, 0x13e811d8, 0xb2d19536, 0x8aea1e45, 0x2bd39aab,
8264 0xe030557a, 0x4109d194, 0x79325ae7, 0xd80bde09, 0x09454c01,
8265 0xa87cc8ef, 0x9047439c, 0x317ec772, 0xe9ab61cd, 0x4892e523,
8266 0x70a96e50, 0xd190eabe, 0x00de78b6, 0xa1e7fc58, 0x99dc772b,
8267 0x38e5f3c5},
8268 {0x00000000, 0xe81790a1, 0x0b5e2703, 0xe349b7a2, 0x16bc4e06,
8269 0xfeabdea7, 0x1de26905, 0xf5f5f9a4, 0x2d789c0c, 0xc56f0cad,
8270 0x2626bb0f, 0xce312bae, 0x3bc4d20a, 0xd3d342ab, 0x309af509,
8271 0xd88d65a8, 0x5af13818, 0xb2e6a8b9, 0x51af1f1b, 0xb9b88fba,
8272 0x4c4d761e, 0xa45ae6bf, 0x4713511d, 0xaf04c1bc, 0x7789a414,
8273 0x9f9e34b5, 0x7cd78317, 0x94c013b6, 0x6135ea12, 0x89227ab3,
8274 0x6a6bcd11, 0x827c5db0, 0xb5e27030, 0x5df5e091, 0xbebc5733,
8275 0x56abc792, 0xa35e3e36, 0x4b49ae97, 0xa8001935, 0x40178994,
8276 0x989aec3c, 0x708d7c9d, 0x93c4cb3f, 0x7bd35b9e, 0x8e26a23a,
8277 0x6631329b, 0x85788539, 0x6d6f1598, 0xef134828, 0x0704d889,
8278 0xe44d6f2b, 0x0c5aff8a, 0xf9af062e, 0x11b8968f, 0xf2f1212d,
8279 0x1ae6b18c, 0xc26bd424, 0x2a7c4485, 0xc935f327, 0x21226386,
8280 0xd4d79a22, 0x3cc00a83, 0xdf89bd21, 0x379e2d80, 0xb0b5e621,
8281 0x58a27680, 0xbbebc122, 0x53fc5183, 0xa609a827, 0x4e1e3886,
8282 0xad578f24, 0x45401f85, 0x9dcd7a2d, 0x75daea8c, 0x96935d2e,
8283 0x7e84cd8f, 0x8b71342b, 0x6366a48a, 0x802f1328, 0x68388389,
8284 0xea44de39, 0x02534e98, 0xe11af93a, 0x090d699b, 0xfcf8903f,
8285 0x14ef009e, 0xf7a6b73c, 0x1fb1279d, 0xc73c4235, 0x2f2bd294,
8286 0xcc626536, 0x2475f597, 0xd1800c33, 0x39979c92, 0xdade2b30,
8287 0x32c9bb91, 0x05579611, 0xed4006b0, 0x0e09b112, 0xe61e21b3,
8288 0x13ebd817, 0xfbfc48b6, 0x18b5ff14, 0xf0a26fb5, 0x282f0a1d,
8289 0xc0389abc, 0x23712d1e, 0xcb66bdbf, 0x3e93441b, 0xd684d4ba,
8290 0x35cd6318, 0xdddaf3b9, 0x5fa6ae09, 0xb7b13ea8, 0x54f8890a,
8291 0xbcef19ab, 0x491ae00f, 0xa10d70ae, 0x4244c70c, 0xaa5357ad,
8292 0x72de3205, 0x9ac9a2a4, 0x79801506, 0x919785a7, 0x64627c03,
8293 0x8c75eca2, 0x6f3c5b00, 0x872bcba1, 0xba1aca03, 0x520d5aa2,
8294 0xb144ed00, 0x59537da1, 0xaca68405, 0x44b114a4, 0xa7f8a306,
8295 0x4fef33a7, 0x9762560f, 0x7f75c6ae, 0x9c3c710c, 0x742be1ad,
8296 0x81de1809, 0x69c988a8, 0x8a803f0a, 0x6297afab, 0xe0ebf21b,
8297 0x08fc62ba, 0xebb5d518, 0x03a245b9, 0xf657bc1d, 0x1e402cbc,
8298 0xfd099b1e, 0x151e0bbf, 0xcd936e17, 0x2584feb6, 0xc6cd4914,
8299 0x2edad9b5, 0xdb2f2011, 0x3338b0b0, 0xd0710712, 0x386697b3,
8300 0x0ff8ba33, 0xe7ef2a92, 0x04a69d30, 0xecb10d91, 0x1944f435,
8301 0xf1536494, 0x121ad336, 0xfa0d4397, 0x2280263f, 0xca97b69e,
8302 0x29de013c, 0xc1c9919d, 0x343c6839, 0xdc2bf898, 0x3f624f3a,
8303 0xd775df9b, 0x5509822b, 0xbd1e128a, 0x5e57a528, 0xb6403589,
8304 0x43b5cc2d, 0xaba25c8c, 0x48ebeb2e, 0xa0fc7b8f, 0x78711e27,
8305 0x90668e86, 0x732f3924, 0x9b38a985, 0x6ecd5021, 0x86dac080,
8306 0x65937722, 0x8d84e783, 0x0aaf2c22, 0xe2b8bc83, 0x01f10b21,
8307 0xe9e69b80, 0x1c136224, 0xf404f285, 0x174d4527, 0xff5ad586,
8308 0x27d7b02e, 0xcfc0208f, 0x2c89972d, 0xc49e078c, 0x316bfe28,
8309 0xd97c6e89, 0x3a35d92b, 0xd222498a, 0x505e143a, 0xb849849b,
8310 0x5b003339, 0xb317a398, 0x46e25a3c, 0xaef5ca9d, 0x4dbc7d3f,
8311 0xa5abed9e, 0x7d268836, 0x95311897, 0x7678af35, 0x9e6f3f94,
8312 0x6b9ac630, 0x838d5691, 0x60c4e133, 0x88d37192, 0xbf4d5c12,
8313 0x575accb3, 0xb4137b11, 0x5c04ebb0, 0xa9f11214, 0x41e682b5,
8314 0xa2af3517, 0x4ab8a5b6, 0x9235c01e, 0x7a2250bf, 0x996be71d,
8315 0x717c77bc, 0x84898e18, 0x6c9e1eb9, 0x8fd7a91b, 0x67c039ba,
8316 0xe5bc640a, 0x0dabf4ab, 0xeee24309, 0x06f5d3a8, 0xf3002a0c,
8317 0x1b17baad, 0xf85e0d0f, 0x10499dae, 0xc8c4f806, 0x20d368a7,
8318 0xc39adf05, 0x2b8d4fa4, 0xde78b600, 0x366f26a1, 0xd5269103,
8319 0x3d3101a2}};
8320
8321 local const z_word_t FAR crc_braid_big_table[][256] = {
8322 {0x0000000000000000, 0xa19017e800000000, 0x03275e0b00000000,
8323 0xa2b749e300000000, 0x064ebc1600000000, 0xa7deabfe00000000,
8324 0x0569e21d00000000, 0xa4f9f5f500000000, 0x0c9c782d00000000,
8325 0xad0c6fc500000000, 0x0fbb262600000000, 0xae2b31ce00000000,
8326 0x0ad2c43b00000000, 0xab42d3d300000000, 0x09f59a3000000000,
8327 0xa8658dd800000000, 0x1838f15a00000000, 0xb9a8e6b200000000,
8328 0x1b1faf5100000000, 0xba8fb8b900000000, 0x1e764d4c00000000,
8329 0xbfe65aa400000000, 0x1d51134700000000, 0xbcc104af00000000,
8330 0x14a4897700000000, 0xb5349e9f00000000, 0x1783d77c00000000,
8331 0xb613c09400000000, 0x12ea356100000000, 0xb37a228900000000,
8332 0x11cd6b6a00000000, 0xb05d7c8200000000, 0x3070e2b500000000,
8333 0x91e0f55d00000000, 0x3357bcbe00000000, 0x92c7ab5600000000,
8334 0x363e5ea300000000, 0x97ae494b00000000, 0x351900a800000000,
8335 0x9489174000000000, 0x3cec9a9800000000, 0x9d7c8d7000000000,
8336 0x3fcbc49300000000, 0x9e5bd37b00000000, 0x3aa2268e00000000,
8337 0x9b32316600000000, 0x3985788500000000, 0x98156f6d00000000,
8338 0x284813ef00000000, 0x89d8040700000000, 0x2b6f4de400000000,
8339 0x8aff5a0c00000000, 0x2e06aff900000000, 0x8f96b81100000000,
8340 0x2d21f1f200000000, 0x8cb1e61a00000000, 0x24d46bc200000000,
8341 0x85447c2a00000000, 0x27f335c900000000, 0x8663222100000000,
8342 0x229ad7d400000000, 0x830ac03c00000000, 0x21bd89df00000000,
8343 0x802d9e3700000000, 0x21e6b5b000000000, 0x8076a25800000000,
8344 0x22c1ebbb00000000, 0x8351fc5300000000, 0x27a809a600000000,
8345 0x86381e4e00000000, 0x248f57ad00000000, 0x851f404500000000,
8346 0x2d7acd9d00000000, 0x8ceada7500000000, 0x2e5d939600000000,
8347 0x8fcd847e00000000, 0x2b34718b00000000, 0x8aa4666300000000,
8348 0x28132f8000000000, 0x8983386800000000, 0x39de44ea00000000,
8349 0x984e530200000000, 0x3af91ae100000000, 0x9b690d0900000000,
8350 0x3f90f8fc00000000, 0x9e00ef1400000000, 0x3cb7a6f700000000,
8351 0x9d27b11f00000000, 0x35423cc700000000, 0x94d22b2f00000000,
8352 0x366562cc00000000, 0x97f5752400000000, 0x330c80d100000000,
8353 0x929c973900000000, 0x302bdeda00000000, 0x91bbc93200000000,
8354 0x1196570500000000, 0xb00640ed00000000, 0x12b1090e00000000,
8355 0xb3211ee600000000, 0x17d8eb1300000000, 0xb648fcfb00000000,
8356 0x14ffb51800000000, 0xb56fa2f000000000, 0x1d0a2f2800000000,
8357 0xbc9a38c000000000, 0x1e2d712300000000, 0xbfbd66cb00000000,
8358 0x1b44933e00000000, 0xbad484d600000000, 0x1863cd3500000000,
8359 0xb9f3dadd00000000, 0x09aea65f00000000, 0xa83eb1b700000000,
8360 0x0a89f85400000000, 0xab19efbc00000000, 0x0fe01a4900000000,
8361 0xae700da100000000, 0x0cc7444200000000, 0xad5753aa00000000,
8362 0x0532de7200000000, 0xa4a2c99a00000000, 0x0615807900000000,
8363 0xa785979100000000, 0x037c626400000000, 0xa2ec758c00000000,
8364 0x005b3c6f00000000, 0xa1cb2b8700000000, 0x03ca1aba00000000,
8365 0xa25a0d5200000000, 0x00ed44b100000000, 0xa17d535900000000,
8366 0x0584a6ac00000000, 0xa414b14400000000, 0x06a3f8a700000000,
8367 0xa733ef4f00000000, 0x0f56629700000000, 0xaec6757f00000000,
8368 0x0c713c9c00000000, 0xade12b7400000000, 0x0918de8100000000,
8369 0xa888c96900000000, 0x0a3f808a00000000, 0xabaf976200000000,
8370 0x1bf2ebe000000000, 0xba62fc0800000000, 0x18d5b5eb00000000,
8371 0xb945a20300000000, 0x1dbc57f600000000, 0xbc2c401e00000000,
8372 0x1e9b09fd00000000, 0xbf0b1e1500000000, 0x176e93cd00000000,
8373 0xb6fe842500000000, 0x1449cdc600000000, 0xb5d9da2e00000000,
8374 0x11202fdb00000000, 0xb0b0383300000000, 0x120771d000000000,
8375 0xb397663800000000, 0x33baf80f00000000, 0x922aefe700000000,
8376 0x309da60400000000, 0x910db1ec00000000, 0x35f4441900000000,
8377 0x946453f100000000, 0x36d31a1200000000, 0x97430dfa00000000,
8378 0x3f26802200000000, 0x9eb697ca00000000, 0x3c01de2900000000,
8379 0x9d91c9c100000000, 0x39683c3400000000, 0x98f82bdc00000000,
8380 0x3a4f623f00000000, 0x9bdf75d700000000, 0x2b82095500000000,
8381 0x8a121ebd00000000, 0x28a5575e00000000, 0x893540b600000000,
8382 0x2dccb54300000000, 0x8c5ca2ab00000000, 0x2eebeb4800000000,
8383 0x8f7bfca000000000, 0x271e717800000000, 0x868e669000000000,
8384 0x24392f7300000000, 0x85a9389b00000000, 0x2150cd6e00000000,
8385 0x80c0da8600000000, 0x2277936500000000, 0x83e7848d00000000,
8386 0x222caf0a00000000, 0x83bcb8e200000000, 0x210bf10100000000,
8387 0x809be6e900000000, 0x2462131c00000000, 0x85f204f400000000,
8388 0x27454d1700000000, 0x86d55aff00000000, 0x2eb0d72700000000,
8389 0x8f20c0cf00000000, 0x2d97892c00000000, 0x8c079ec400000000,
8390 0x28fe6b3100000000, 0x896e7cd900000000, 0x2bd9353a00000000,
8391 0x8a4922d200000000, 0x3a145e5000000000, 0x9b8449b800000000,
8392 0x3933005b00000000, 0x98a317b300000000, 0x3c5ae24600000000,
8393 0x9dcaf5ae00000000, 0x3f7dbc4d00000000, 0x9eedaba500000000,
8394 0x3688267d00000000, 0x9718319500000000, 0x35af787600000000,
8395 0x943f6f9e00000000, 0x30c69a6b00000000, 0x91568d8300000000,
8396 0x33e1c46000000000, 0x9271d38800000000, 0x125c4dbf00000000,
8397 0xb3cc5a5700000000, 0x117b13b400000000, 0xb0eb045c00000000,
8398 0x1412f1a900000000, 0xb582e64100000000, 0x1735afa200000000,
8399 0xb6a5b84a00000000, 0x1ec0359200000000, 0xbf50227a00000000,
8400 0x1de76b9900000000, 0xbc777c7100000000, 0x188e898400000000,
8401 0xb91e9e6c00000000, 0x1ba9d78f00000000, 0xba39c06700000000,
8402 0x0a64bce500000000, 0xabf4ab0d00000000, 0x0943e2ee00000000,
8403 0xa8d3f50600000000, 0x0c2a00f300000000, 0xadba171b00000000,
8404 0x0f0d5ef800000000, 0xae9d491000000000, 0x06f8c4c800000000,
8405 0xa768d32000000000, 0x05df9ac300000000, 0xa44f8d2b00000000,
8406 0x00b678de00000000, 0xa1266f3600000000, 0x039126d500000000,
8407 0xa201313d00000000},
8408 {0x0000000000000000, 0xee8439a100000000, 0x9d0f029900000000,
8409 0x738b3b3800000000, 0x7b1975e900000000, 0x959d4c4800000000,
8410 0xe616777000000000, 0x08924ed100000000, 0xb7349b0900000000,
8411 0x59b0a2a800000000, 0x2a3b999000000000, 0xc4bfa03100000000,
8412 0xcc2deee000000000, 0x22a9d74100000000, 0x5122ec7900000000,
8413 0xbfa6d5d800000000, 0x6e69361300000000, 0x80ed0fb200000000,
8414 0xf366348a00000000, 0x1de20d2b00000000, 0x157043fa00000000,
8415 0xfbf47a5b00000000, 0x887f416300000000, 0x66fb78c200000000,
8416 0xd95dad1a00000000, 0x37d994bb00000000, 0x4452af8300000000,
8417 0xaad6962200000000, 0xa244d8f300000000, 0x4cc0e15200000000,
8418 0x3f4bda6a00000000, 0xd1cfe3cb00000000, 0xdcd26c2600000000,
8419 0x3256558700000000, 0x41dd6ebf00000000, 0xaf59571e00000000,
8420 0xa7cb19cf00000000, 0x494f206e00000000, 0x3ac41b5600000000,
8421 0xd44022f700000000, 0x6be6f72f00000000, 0x8562ce8e00000000,
8422 0xf6e9f5b600000000, 0x186dcc1700000000, 0x10ff82c600000000,
8423 0xfe7bbb6700000000, 0x8df0805f00000000, 0x6374b9fe00000000,
8424 0xb2bb5a3500000000, 0x5c3f639400000000, 0x2fb458ac00000000,
8425 0xc130610d00000000, 0xc9a22fdc00000000, 0x2726167d00000000,
8426 0x54ad2d4500000000, 0xba2914e400000000, 0x058fc13c00000000,
8427 0xeb0bf89d00000000, 0x9880c3a500000000, 0x7604fa0400000000,
8428 0x7e96b4d500000000, 0x90128d7400000000, 0xe399b64c00000000,
8429 0x0d1d8fed00000000, 0xb8a5d94c00000000, 0x5621e0ed00000000,
8430 0x25aadbd500000000, 0xcb2ee27400000000, 0xc3bcaca500000000,
8431 0x2d38950400000000, 0x5eb3ae3c00000000, 0xb037979d00000000,
8432 0x0f91424500000000, 0xe1157be400000000, 0x929e40dc00000000,
8433 0x7c1a797d00000000, 0x748837ac00000000, 0x9a0c0e0d00000000,
8434 0xe987353500000000, 0x07030c9400000000, 0xd6ccef5f00000000,
8435 0x3848d6fe00000000, 0x4bc3edc600000000, 0xa547d46700000000,
8436 0xadd59ab600000000, 0x4351a31700000000, 0x30da982f00000000,
8437 0xde5ea18e00000000, 0x61f8745600000000, 0x8f7c4df700000000,
8438 0xfcf776cf00000000, 0x12734f6e00000000, 0x1ae101bf00000000,
8439 0xf465381e00000000, 0x87ee032600000000, 0x696a3a8700000000,
8440 0x6477b56a00000000, 0x8af38ccb00000000, 0xf978b7f300000000,
8441 0x17fc8e5200000000, 0x1f6ec08300000000, 0xf1eaf92200000000,
8442 0x8261c21a00000000, 0x6ce5fbbb00000000, 0xd3432e6300000000,
8443 0x3dc717c200000000, 0x4e4c2cfa00000000, 0xa0c8155b00000000,
8444 0xa85a5b8a00000000, 0x46de622b00000000, 0x3555591300000000,
8445 0xdbd160b200000000, 0x0a1e837900000000, 0xe49abad800000000,
8446 0x971181e000000000, 0x7995b84100000000, 0x7107f69000000000,
8447 0x9f83cf3100000000, 0xec08f40900000000, 0x028ccda800000000,
8448 0xbd2a187000000000, 0x53ae21d100000000, 0x20251ae900000000,
8449 0xcea1234800000000, 0xc6336d9900000000, 0x28b7543800000000,
8450 0x5b3c6f0000000000, 0xb5b856a100000000, 0x704bb39900000000,
8451 0x9ecf8a3800000000, 0xed44b10000000000, 0x03c088a100000000,
8452 0x0b52c67000000000, 0xe5d6ffd100000000, 0x965dc4e900000000,
8453 0x78d9fd4800000000, 0xc77f289000000000, 0x29fb113100000000,
8454 0x5a702a0900000000, 0xb4f413a800000000, 0xbc665d7900000000,
8455 0x52e264d800000000, 0x21695fe000000000, 0xcfed664100000000,
8456 0x1e22858a00000000, 0xf0a6bc2b00000000, 0x832d871300000000,
8457 0x6da9beb200000000, 0x653bf06300000000, 0x8bbfc9c200000000,
8458 0xf834f2fa00000000, 0x16b0cb5b00000000, 0xa9161e8300000000,
8459 0x4792272200000000, 0x34191c1a00000000, 0xda9d25bb00000000,
8460 0xd20f6b6a00000000, 0x3c8b52cb00000000, 0x4f0069f300000000,
8461 0xa184505200000000, 0xac99dfbf00000000, 0x421de61e00000000,
8462 0x3196dd2600000000, 0xdf12e48700000000, 0xd780aa5600000000,
8463 0x390493f700000000, 0x4a8fa8cf00000000, 0xa40b916e00000000,
8464 0x1bad44b600000000, 0xf5297d1700000000, 0x86a2462f00000000,
8465 0x68267f8e00000000, 0x60b4315f00000000, 0x8e3008fe00000000,
8466 0xfdbb33c600000000, 0x133f0a6700000000, 0xc2f0e9ac00000000,
8467 0x2c74d00d00000000, 0x5fffeb3500000000, 0xb17bd29400000000,
8468 0xb9e99c4500000000, 0x576da5e400000000, 0x24e69edc00000000,
8469 0xca62a77d00000000, 0x75c472a500000000, 0x9b404b0400000000,
8470 0xe8cb703c00000000, 0x064f499d00000000, 0x0edd074c00000000,
8471 0xe0593eed00000000, 0x93d205d500000000, 0x7d563c7400000000,
8472 0xc8ee6ad500000000, 0x266a537400000000, 0x55e1684c00000000,
8473 0xbb6551ed00000000, 0xb3f71f3c00000000, 0x5d73269d00000000,
8474 0x2ef81da500000000, 0xc07c240400000000, 0x7fdaf1dc00000000,
8475 0x915ec87d00000000, 0xe2d5f34500000000, 0x0c51cae400000000,
8476 0x04c3843500000000, 0xea47bd9400000000, 0x99cc86ac00000000,
8477 0x7748bf0d00000000, 0xa6875cc600000000, 0x4803656700000000,
8478 0x3b885e5f00000000, 0xd50c67fe00000000, 0xdd9e292f00000000,
8479 0x331a108e00000000, 0x40912bb600000000, 0xae15121700000000,
8480 0x11b3c7cf00000000, 0xff37fe6e00000000, 0x8cbcc55600000000,
8481 0x6238fcf700000000, 0x6aaab22600000000, 0x842e8b8700000000,
8482 0xf7a5b0bf00000000, 0x1921891e00000000, 0x143c06f300000000,
8483 0xfab83f5200000000, 0x8933046a00000000, 0x67b73dcb00000000,
8484 0x6f25731a00000000, 0x81a14abb00000000, 0xf22a718300000000,
8485 0x1cae482200000000, 0xa3089dfa00000000, 0x4d8ca45b00000000,
8486 0x3e079f6300000000, 0xd083a6c200000000, 0xd811e81300000000,
8487 0x3695d1b200000000, 0x451eea8a00000000, 0xab9ad32b00000000,
8488 0x7a5530e000000000, 0x94d1094100000000, 0xe75a327900000000,
8489 0x09de0bd800000000, 0x014c450900000000, 0xefc87ca800000000,
8490 0x9c43479000000000, 0x72c77e3100000000, 0xcd61abe900000000,
8491 0x23e5924800000000, 0x506ea97000000000, 0xbeea90d100000000,
8492 0xb678de0000000000, 0x58fce7a100000000, 0x2b77dc9900000000,
8493 0xc5f3e53800000000},
8494 {0x0000000000000000, 0xfbf6134700000000, 0xf6ed278e00000000,
8495 0x0d1b34c900000000, 0xaddd3ec700000000, 0x562b2d8000000000,
8496 0x5b30194900000000, 0xa0c60a0e00000000, 0x1bbd0c5500000000,
8497 0xe04b1f1200000000, 0xed502bdb00000000, 0x16a6389c00000000,
8498 0xb660329200000000, 0x4d9621d500000000, 0x408d151c00000000,
8499 0xbb7b065b00000000, 0x367a19aa00000000, 0xcd8c0aed00000000,
8500 0xc0973e2400000000, 0x3b612d6300000000, 0x9ba7276d00000000,
8501 0x6051342a00000000, 0x6d4a00e300000000, 0x96bc13a400000000,
8502 0x2dc715ff00000000, 0xd63106b800000000, 0xdb2a327100000000,
8503 0x20dc213600000000, 0x801a2b3800000000, 0x7bec387f00000000,
8504 0x76f70cb600000000, 0x8d011ff100000000, 0x2df2438f00000000,
8505 0xd60450c800000000, 0xdb1f640100000000, 0x20e9774600000000,
8506 0x802f7d4800000000, 0x7bd96e0f00000000, 0x76c25ac600000000,
8507 0x8d34498100000000, 0x364f4fda00000000, 0xcdb95c9d00000000,
8508 0xc0a2685400000000, 0x3b547b1300000000, 0x9b92711d00000000,
8509 0x6064625a00000000, 0x6d7f569300000000, 0x968945d400000000,
8510 0x1b885a2500000000, 0xe07e496200000000, 0xed657dab00000000,
8511 0x16936eec00000000, 0xb65564e200000000, 0x4da377a500000000,
8512 0x40b8436c00000000, 0xbb4e502b00000000, 0x0035567000000000,
8513 0xfbc3453700000000, 0xf6d871fe00000000, 0x0d2e62b900000000,
8514 0xade868b700000000, 0x561e7bf000000000, 0x5b054f3900000000,
8515 0xa0f35c7e00000000, 0x1be2f6c500000000, 0xe014e58200000000,
8516 0xed0fd14b00000000, 0x16f9c20c00000000, 0xb63fc80200000000,
8517 0x4dc9db4500000000, 0x40d2ef8c00000000, 0xbb24fccb00000000,
8518 0x005ffa9000000000, 0xfba9e9d700000000, 0xf6b2dd1e00000000,
8519 0x0d44ce5900000000, 0xad82c45700000000, 0x5674d71000000000,
8520 0x5b6fe3d900000000, 0xa099f09e00000000, 0x2d98ef6f00000000,
8521 0xd66efc2800000000, 0xdb75c8e100000000, 0x2083dba600000000,
8522 0x8045d1a800000000, 0x7bb3c2ef00000000, 0x76a8f62600000000,
8523 0x8d5ee56100000000, 0x3625e33a00000000, 0xcdd3f07d00000000,
8524 0xc0c8c4b400000000, 0x3b3ed7f300000000, 0x9bf8ddfd00000000,
8525 0x600eceba00000000, 0x6d15fa7300000000, 0x96e3e93400000000,
8526 0x3610b54a00000000, 0xcde6a60d00000000, 0xc0fd92c400000000,
8527 0x3b0b818300000000, 0x9bcd8b8d00000000, 0x603b98ca00000000,
8528 0x6d20ac0300000000, 0x96d6bf4400000000, 0x2dadb91f00000000,
8529 0xd65baa5800000000, 0xdb409e9100000000, 0x20b68dd600000000,
8530 0x807087d800000000, 0x7b86949f00000000, 0x769da05600000000,
8531 0x8d6bb31100000000, 0x006aace000000000, 0xfb9cbfa700000000,
8532 0xf6878b6e00000000, 0x0d71982900000000, 0xadb7922700000000,
8533 0x5641816000000000, 0x5b5ab5a900000000, 0xa0aca6ee00000000,
8534 0x1bd7a0b500000000, 0xe021b3f200000000, 0xed3a873b00000000,
8535 0x16cc947c00000000, 0xb60a9e7200000000, 0x4dfc8d3500000000,
8536 0x40e7b9fc00000000, 0xbb11aabb00000000, 0x77c29c5000000000,
8537 0x8c348f1700000000, 0x812fbbde00000000, 0x7ad9a89900000000,
8538 0xda1fa29700000000, 0x21e9b1d000000000, 0x2cf2851900000000,
8539 0xd704965e00000000, 0x6c7f900500000000, 0x9789834200000000,
8540 0x9a92b78b00000000, 0x6164a4cc00000000, 0xc1a2aec200000000,
8541 0x3a54bd8500000000, 0x374f894c00000000, 0xccb99a0b00000000,
8542 0x41b885fa00000000, 0xba4e96bd00000000, 0xb755a27400000000,
8543 0x4ca3b13300000000, 0xec65bb3d00000000, 0x1793a87a00000000,
8544 0x1a889cb300000000, 0xe17e8ff400000000, 0x5a0589af00000000,
8545 0xa1f39ae800000000, 0xace8ae2100000000, 0x571ebd6600000000,
8546 0xf7d8b76800000000, 0x0c2ea42f00000000, 0x013590e600000000,
8547 0xfac383a100000000, 0x5a30dfdf00000000, 0xa1c6cc9800000000,
8548 0xacddf85100000000, 0x572beb1600000000, 0xf7ede11800000000,
8549 0x0c1bf25f00000000, 0x0100c69600000000, 0xfaf6d5d100000000,
8550 0x418dd38a00000000, 0xba7bc0cd00000000, 0xb760f40400000000,
8551 0x4c96e74300000000, 0xec50ed4d00000000, 0x17a6fe0a00000000,
8552 0x1abdcac300000000, 0xe14bd98400000000, 0x6c4ac67500000000,
8553 0x97bcd53200000000, 0x9aa7e1fb00000000, 0x6151f2bc00000000,
8554 0xc197f8b200000000, 0x3a61ebf500000000, 0x377adf3c00000000,
8555 0xcc8ccc7b00000000, 0x77f7ca2000000000, 0x8c01d96700000000,
8556 0x811aedae00000000, 0x7aecfee900000000, 0xda2af4e700000000,
8557 0x21dce7a000000000, 0x2cc7d36900000000, 0xd731c02e00000000,
8558 0x6c206a9500000000, 0x97d679d200000000, 0x9acd4d1b00000000,
8559 0x613b5e5c00000000, 0xc1fd545200000000, 0x3a0b471500000000,
8560 0x371073dc00000000, 0xcce6609b00000000, 0x779d66c000000000,
8561 0x8c6b758700000000, 0x8170414e00000000, 0x7a86520900000000,
8562 0xda40580700000000, 0x21b64b4000000000, 0x2cad7f8900000000,
8563 0xd75b6cce00000000, 0x5a5a733f00000000, 0xa1ac607800000000,
8564 0xacb754b100000000, 0x574147f600000000, 0xf7874df800000000,
8565 0x0c715ebf00000000, 0x016a6a7600000000, 0xfa9c793100000000,
8566 0x41e77f6a00000000, 0xba116c2d00000000, 0xb70a58e400000000,
8567 0x4cfc4ba300000000, 0xec3a41ad00000000, 0x17cc52ea00000000,
8568 0x1ad7662300000000, 0xe121756400000000, 0x41d2291a00000000,
8569 0xba243a5d00000000, 0xb73f0e9400000000, 0x4cc91dd300000000,
8570 0xec0f17dd00000000, 0x17f9049a00000000, 0x1ae2305300000000,
8571 0xe114231400000000, 0x5a6f254f00000000, 0xa199360800000000,
8572 0xac8202c100000000, 0x5774118600000000, 0xf7b21b8800000000,
8573 0x0c4408cf00000000, 0x015f3c0600000000, 0xfaa92f4100000000,
8574 0x77a830b000000000, 0x8c5e23f700000000, 0x8145173e00000000,
8575 0x7ab3047900000000, 0xda750e7700000000, 0x21831d3000000000,
8576 0x2c9829f900000000, 0xd76e3abe00000000, 0x6c153ce500000000,
8577 0x97e32fa200000000, 0x9af81b6b00000000, 0x610e082c00000000,
8578 0xc1c8022200000000, 0x3a3e116500000000, 0x372525ac00000000,
8579 0xccd336eb00000000},
8580 {0x0000000000000000, 0x6238282a00000000, 0xc470505400000000,
8581 0xa648787e00000000, 0x88e1a0a800000000, 0xead9888200000000,
8582 0x4c91f0fc00000000, 0x2ea9d8d600000000, 0x51c5308a00000000,
8583 0x33fd18a000000000, 0x95b560de00000000, 0xf78d48f400000000,
8584 0xd924902200000000, 0xbb1cb80800000000, 0x1d54c07600000000,
8585 0x7f6ce85c00000000, 0xe38c10cf00000000, 0x81b438e500000000,
8586 0x27fc409b00000000, 0x45c468b100000000, 0x6b6db06700000000,
8587 0x0955984d00000000, 0xaf1de03300000000, 0xcd25c81900000000,
8588 0xb249204500000000, 0xd071086f00000000, 0x7639701100000000,
8589 0x1401583b00000000, 0x3aa880ed00000000, 0x5890a8c700000000,
8590 0xfed8d0b900000000, 0x9ce0f89300000000, 0x871f504500000000,
8591 0xe527786f00000000, 0x436f001100000000, 0x2157283b00000000,
8592 0x0ffef0ed00000000, 0x6dc6d8c700000000, 0xcb8ea0b900000000,
8593 0xa9b6889300000000, 0xd6da60cf00000000, 0xb4e248e500000000,
8594 0x12aa309b00000000, 0x709218b100000000, 0x5e3bc06700000000,
8595 0x3c03e84d00000000, 0x9a4b903300000000, 0xf873b81900000000,
8596 0x6493408a00000000, 0x06ab68a000000000, 0xa0e310de00000000,
8597 0xc2db38f400000000, 0xec72e02200000000, 0x8e4ac80800000000,
8598 0x2802b07600000000, 0x4a3a985c00000000, 0x3556700000000000,
8599 0x576e582a00000000, 0xf126205400000000, 0x931e087e00000000,
8600 0xbdb7d0a800000000, 0xdf8ff88200000000, 0x79c780fc00000000,
8601 0x1bffa8d600000000, 0x0e3fa08a00000000, 0x6c0788a000000000,
8602 0xca4ff0de00000000, 0xa877d8f400000000, 0x86de002200000000,
8603 0xe4e6280800000000, 0x42ae507600000000, 0x2096785c00000000,
8604 0x5ffa900000000000, 0x3dc2b82a00000000, 0x9b8ac05400000000,
8605 0xf9b2e87e00000000, 0xd71b30a800000000, 0xb523188200000000,
8606 0x136b60fc00000000, 0x715348d600000000, 0xedb3b04500000000,
8607 0x8f8b986f00000000, 0x29c3e01100000000, 0x4bfbc83b00000000,
8608 0x655210ed00000000, 0x076a38c700000000, 0xa12240b900000000,
8609 0xc31a689300000000, 0xbc7680cf00000000, 0xde4ea8e500000000,
8610 0x7806d09b00000000, 0x1a3ef8b100000000, 0x3497206700000000,
8611 0x56af084d00000000, 0xf0e7703300000000, 0x92df581900000000,
8612 0x8920f0cf00000000, 0xeb18d8e500000000, 0x4d50a09b00000000,
8613 0x2f6888b100000000, 0x01c1506700000000, 0x63f9784d00000000,
8614 0xc5b1003300000000, 0xa789281900000000, 0xd8e5c04500000000,
8615 0xbadde86f00000000, 0x1c95901100000000, 0x7eadb83b00000000,
8616 0x500460ed00000000, 0x323c48c700000000, 0x947430b900000000,
8617 0xf64c189300000000, 0x6aace00000000000, 0x0894c82a00000000,
8618 0xaedcb05400000000, 0xcce4987e00000000, 0xe24d40a800000000,
8619 0x8075688200000000, 0x263d10fc00000000, 0x440538d600000000,
8620 0x3b69d08a00000000, 0x5951f8a000000000, 0xff1980de00000000,
8621 0x9d21a8f400000000, 0xb388702200000000, 0xd1b0580800000000,
8622 0x77f8207600000000, 0x15c0085c00000000, 0x5d7831ce00000000,
8623 0x3f4019e400000000, 0x9908619a00000000, 0xfb3049b000000000,
8624 0xd599916600000000, 0xb7a1b94c00000000, 0x11e9c13200000000,
8625 0x73d1e91800000000, 0x0cbd014400000000, 0x6e85296e00000000,
8626 0xc8cd511000000000, 0xaaf5793a00000000, 0x845ca1ec00000000,
8627 0xe66489c600000000, 0x402cf1b800000000, 0x2214d99200000000,
8628 0xbef4210100000000, 0xdccc092b00000000, 0x7a84715500000000,
8629 0x18bc597f00000000, 0x361581a900000000, 0x542da98300000000,
8630 0xf265d1fd00000000, 0x905df9d700000000, 0xef31118b00000000,
8631 0x8d0939a100000000, 0x2b4141df00000000, 0x497969f500000000,
8632 0x67d0b12300000000, 0x05e8990900000000, 0xa3a0e17700000000,
8633 0xc198c95d00000000, 0xda67618b00000000, 0xb85f49a100000000,
8634 0x1e1731df00000000, 0x7c2f19f500000000, 0x5286c12300000000,
8635 0x30bee90900000000, 0x96f6917700000000, 0xf4ceb95d00000000,
8636 0x8ba2510100000000, 0xe99a792b00000000, 0x4fd2015500000000,
8637 0x2dea297f00000000, 0x0343f1a900000000, 0x617bd98300000000,
8638 0xc733a1fd00000000, 0xa50b89d700000000, 0x39eb714400000000,
8639 0x5bd3596e00000000, 0xfd9b211000000000, 0x9fa3093a00000000,
8640 0xb10ad1ec00000000, 0xd332f9c600000000, 0x757a81b800000000,
8641 0x1742a99200000000, 0x682e41ce00000000, 0x0a1669e400000000,
8642 0xac5e119a00000000, 0xce6639b000000000, 0xe0cfe16600000000,
8643 0x82f7c94c00000000, 0x24bfb13200000000, 0x4687991800000000,
8644 0x5347914400000000, 0x317fb96e00000000, 0x9737c11000000000,
8645 0xf50fe93a00000000, 0xdba631ec00000000, 0xb99e19c600000000,
8646 0x1fd661b800000000, 0x7dee499200000000, 0x0282a1ce00000000,
8647 0x60ba89e400000000, 0xc6f2f19a00000000, 0xa4cad9b000000000,
8648 0x8a63016600000000, 0xe85b294c00000000, 0x4e13513200000000,
8649 0x2c2b791800000000, 0xb0cb818b00000000, 0xd2f3a9a100000000,
8650 0x74bbd1df00000000, 0x1683f9f500000000, 0x382a212300000000,
8651 0x5a12090900000000, 0xfc5a717700000000, 0x9e62595d00000000,
8652 0xe10eb10100000000, 0x8336992b00000000, 0x257ee15500000000,
8653 0x4746c97f00000000, 0x69ef11a900000000, 0x0bd7398300000000,
8654 0xad9f41fd00000000, 0xcfa769d700000000, 0xd458c10100000000,
8655 0xb660e92b00000000, 0x1028915500000000, 0x7210b97f00000000,
8656 0x5cb961a900000000, 0x3e81498300000000, 0x98c931fd00000000,
8657 0xfaf119d700000000, 0x859df18b00000000, 0xe7a5d9a100000000,
8658 0x41eda1df00000000, 0x23d589f500000000, 0x0d7c512300000000,
8659 0x6f44790900000000, 0xc90c017700000000, 0xab34295d00000000,
8660 0x37d4d1ce00000000, 0x55ecf9e400000000, 0xf3a4819a00000000,
8661 0x919ca9b000000000, 0xbf35716600000000, 0xdd0d594c00000000,
8662 0x7b45213200000000, 0x197d091800000000, 0x6611e14400000000,
8663 0x0429c96e00000000, 0xa261b11000000000, 0xc059993a00000000,
8664 0xeef041ec00000000, 0x8cc869c600000000, 0x2a8011b800000000,
8665 0x48b8399200000000},
8666 {0x0000000000000000, 0x4c2896a300000000, 0xd9565d9c00000000,
8667 0x957ecb3f00000000, 0xf3abcbe300000000, 0xbf835d4000000000,
8668 0x2afd967f00000000, 0x66d500dc00000000, 0xa751e61c00000000,
8669 0xeb7970bf00000000, 0x7e07bb8000000000, 0x322f2d2300000000,
8670 0x54fa2dff00000000, 0x18d2bb5c00000000, 0x8dac706300000000,
8671 0xc184e6c000000000, 0x4ea3cc3900000000, 0x028b5a9a00000000,
8672 0x97f591a500000000, 0xdbdd070600000000, 0xbd0807da00000000,
8673 0xf120917900000000, 0x645e5a4600000000, 0x2876cce500000000,
8674 0xe9f22a2500000000, 0xa5dabc8600000000, 0x30a477b900000000,
8675 0x7c8ce11a00000000, 0x1a59e1c600000000, 0x5671776500000000,
8676 0xc30fbc5a00000000, 0x8f272af900000000, 0x9c46997300000000,
8677 0xd06e0fd000000000, 0x4510c4ef00000000, 0x0938524c00000000,
8678 0x6fed529000000000, 0x23c5c43300000000, 0xb6bb0f0c00000000,
8679 0xfa9399af00000000, 0x3b177f6f00000000, 0x773fe9cc00000000,
8680 0xe24122f300000000, 0xae69b45000000000, 0xc8bcb48c00000000,
8681 0x8494222f00000000, 0x11eae91000000000, 0x5dc27fb300000000,
8682 0xd2e5554a00000000, 0x9ecdc3e900000000, 0x0bb308d600000000,
8683 0x479b9e7500000000, 0x214e9ea900000000, 0x6d66080a00000000,
8684 0xf818c33500000000, 0xb430559600000000, 0x75b4b35600000000,
8685 0x399c25f500000000, 0xace2eeca00000000, 0xe0ca786900000000,
8686 0x861f78b500000000, 0xca37ee1600000000, 0x5f49252900000000,
8687 0x1361b38a00000000, 0x388d32e700000000, 0x74a5a44400000000,
8688 0xe1db6f7b00000000, 0xadf3f9d800000000, 0xcb26f90400000000,
8689 0x870e6fa700000000, 0x1270a49800000000, 0x5e58323b00000000,
8690 0x9fdcd4fb00000000, 0xd3f4425800000000, 0x468a896700000000,
8691 0x0aa21fc400000000, 0x6c771f1800000000, 0x205f89bb00000000,
8692 0xb521428400000000, 0xf909d42700000000, 0x762efede00000000,
8693 0x3a06687d00000000, 0xaf78a34200000000, 0xe35035e100000000,
8694 0x8585353d00000000, 0xc9ada39e00000000, 0x5cd368a100000000,
8695 0x10fbfe0200000000, 0xd17f18c200000000, 0x9d578e6100000000,
8696 0x0829455e00000000, 0x4401d3fd00000000, 0x22d4d32100000000,
8697 0x6efc458200000000, 0xfb828ebd00000000, 0xb7aa181e00000000,
8698 0xa4cbab9400000000, 0xe8e33d3700000000, 0x7d9df60800000000,
8699 0x31b560ab00000000, 0x5760607700000000, 0x1b48f6d400000000,
8700 0x8e363deb00000000, 0xc21eab4800000000, 0x039a4d8800000000,
8701 0x4fb2db2b00000000, 0xdacc101400000000, 0x96e486b700000000,
8702 0xf031866b00000000, 0xbc1910c800000000, 0x2967dbf700000000,
8703 0x654f4d5400000000, 0xea6867ad00000000, 0xa640f10e00000000,
8704 0x333e3a3100000000, 0x7f16ac9200000000, 0x19c3ac4e00000000,
8705 0x55eb3aed00000000, 0xc095f1d200000000, 0x8cbd677100000000,
8706 0x4d3981b100000000, 0x0111171200000000, 0x946fdc2d00000000,
8707 0xd8474a8e00000000, 0xbe924a5200000000, 0xf2badcf100000000,
8708 0x67c417ce00000000, 0x2bec816d00000000, 0x311c141500000000,
8709 0x7d3482b600000000, 0xe84a498900000000, 0xa462df2a00000000,
8710 0xc2b7dff600000000, 0x8e9f495500000000, 0x1be1826a00000000,
8711 0x57c914c900000000, 0x964df20900000000, 0xda6564aa00000000,
8712 0x4f1baf9500000000, 0x0333393600000000, 0x65e639ea00000000,
8713 0x29ceaf4900000000, 0xbcb0647600000000, 0xf098f2d500000000,
8714 0x7fbfd82c00000000, 0x33974e8f00000000, 0xa6e985b000000000,
8715 0xeac1131300000000, 0x8c1413cf00000000, 0xc03c856c00000000,
8716 0x55424e5300000000, 0x196ad8f000000000, 0xd8ee3e3000000000,
8717 0x94c6a89300000000, 0x01b863ac00000000, 0x4d90f50f00000000,
8718 0x2b45f5d300000000, 0x676d637000000000, 0xf213a84f00000000,
8719 0xbe3b3eec00000000, 0xad5a8d6600000000, 0xe1721bc500000000,
8720 0x740cd0fa00000000, 0x3824465900000000, 0x5ef1468500000000,
8721 0x12d9d02600000000, 0x87a71b1900000000, 0xcb8f8dba00000000,
8722 0x0a0b6b7a00000000, 0x4623fdd900000000, 0xd35d36e600000000,
8723 0x9f75a04500000000, 0xf9a0a09900000000, 0xb588363a00000000,
8724 0x20f6fd0500000000, 0x6cde6ba600000000, 0xe3f9415f00000000,
8725 0xafd1d7fc00000000, 0x3aaf1cc300000000, 0x76878a6000000000,
8726 0x10528abc00000000, 0x5c7a1c1f00000000, 0xc904d72000000000,
8727 0x852c418300000000, 0x44a8a74300000000, 0x088031e000000000,
8728 0x9dfefadf00000000, 0xd1d66c7c00000000, 0xb7036ca000000000,
8729 0xfb2bfa0300000000, 0x6e55313c00000000, 0x227da79f00000000,
8730 0x099126f200000000, 0x45b9b05100000000, 0xd0c77b6e00000000,
8731 0x9cefedcd00000000, 0xfa3aed1100000000, 0xb6127bb200000000,
8732 0x236cb08d00000000, 0x6f44262e00000000, 0xaec0c0ee00000000,
8733 0xe2e8564d00000000, 0x77969d7200000000, 0x3bbe0bd100000000,
8734 0x5d6b0b0d00000000, 0x11439dae00000000, 0x843d569100000000,
8735 0xc815c03200000000, 0x4732eacb00000000, 0x0b1a7c6800000000,
8736 0x9e64b75700000000, 0xd24c21f400000000, 0xb499212800000000,
8737 0xf8b1b78b00000000, 0x6dcf7cb400000000, 0x21e7ea1700000000,
8738 0xe0630cd700000000, 0xac4b9a7400000000, 0x3935514b00000000,
8739 0x751dc7e800000000, 0x13c8c73400000000, 0x5fe0519700000000,
8740 0xca9e9aa800000000, 0x86b60c0b00000000, 0x95d7bf8100000000,
8741 0xd9ff292200000000, 0x4c81e21d00000000, 0x00a974be00000000,
8742 0x667c746200000000, 0x2a54e2c100000000, 0xbf2a29fe00000000,
8743 0xf302bf5d00000000, 0x3286599d00000000, 0x7eaecf3e00000000,
8744 0xebd0040100000000, 0xa7f892a200000000, 0xc12d927e00000000,
8745 0x8d0504dd00000000, 0x187bcfe200000000, 0x5453594100000000,
8746 0xdb7473b800000000, 0x975ce51b00000000, 0x02222e2400000000,
8747 0x4e0ab88700000000, 0x28dfb85b00000000, 0x64f72ef800000000,
8748 0xf189e5c700000000, 0xbda1736400000000, 0x7c2595a400000000,
8749 0x300d030700000000, 0xa573c83800000000, 0xe95b5e9b00000000,
8750 0x8f8e5e4700000000, 0xc3a6c8e400000000, 0x56d803db00000000,
8751 0x1af0957800000000},
8752 {0x0000000000000000, 0x939bc97f00000000, 0x263793ff00000000,
8753 0xb5ac5a8000000000, 0x0d68572400000000, 0x9ef39e5b00000000,
8754 0x2b5fc4db00000000, 0xb8c40da400000000, 0x1ad0ae4800000000,
8755 0x894b673700000000, 0x3ce73db700000000, 0xaf7cf4c800000000,
8756 0x17b8f96c00000000, 0x8423301300000000, 0x318f6a9300000000,
8757 0xa214a3ec00000000, 0x34a05d9100000000, 0xa73b94ee00000000,
8758 0x1297ce6e00000000, 0x810c071100000000, 0x39c80ab500000000,
8759 0xaa53c3ca00000000, 0x1fff994a00000000, 0x8c64503500000000,
8760 0x2e70f3d900000000, 0xbdeb3aa600000000, 0x0847602600000000,
8761 0x9bdca95900000000, 0x2318a4fd00000000, 0xb0836d8200000000,
8762 0x052f370200000000, 0x96b4fe7d00000000, 0x2946caf900000000,
8763 0xbadd038600000000, 0x0f71590600000000, 0x9cea907900000000,
8764 0x242e9ddd00000000, 0xb7b554a200000000, 0x02190e2200000000,
8765 0x9182c75d00000000, 0x339664b100000000, 0xa00dadce00000000,
8766 0x15a1f74e00000000, 0x863a3e3100000000, 0x3efe339500000000,
8767 0xad65faea00000000, 0x18c9a06a00000000, 0x8b52691500000000,
8768 0x1de6976800000000, 0x8e7d5e1700000000, 0x3bd1049700000000,
8769 0xa84acde800000000, 0x108ec04c00000000, 0x8315093300000000,
8770 0x36b953b300000000, 0xa5229acc00000000, 0x0736392000000000,
8771 0x94adf05f00000000, 0x2101aadf00000000, 0xb29a63a000000000,
8772 0x0a5e6e0400000000, 0x99c5a77b00000000, 0x2c69fdfb00000000,
8773 0xbff2348400000000, 0x138ae52800000000, 0x80112c5700000000,
8774 0x35bd76d700000000, 0xa626bfa800000000, 0x1ee2b20c00000000,
8775 0x8d797b7300000000, 0x38d521f300000000, 0xab4ee88c00000000,
8776 0x095a4b6000000000, 0x9ac1821f00000000, 0x2f6dd89f00000000,
8777 0xbcf611e000000000, 0x04321c4400000000, 0x97a9d53b00000000,
8778 0x22058fbb00000000, 0xb19e46c400000000, 0x272ab8b900000000,
8779 0xb4b171c600000000, 0x011d2b4600000000, 0x9286e23900000000,
8780 0x2a42ef9d00000000, 0xb9d926e200000000, 0x0c757c6200000000,
8781 0x9feeb51d00000000, 0x3dfa16f100000000, 0xae61df8e00000000,
8782 0x1bcd850e00000000, 0x88564c7100000000, 0x309241d500000000,
8783 0xa30988aa00000000, 0x16a5d22a00000000, 0x853e1b5500000000,
8784 0x3acc2fd100000000, 0xa957e6ae00000000, 0x1cfbbc2e00000000,
8785 0x8f60755100000000, 0x37a478f500000000, 0xa43fb18a00000000,
8786 0x1193eb0a00000000, 0x8208227500000000, 0x201c819900000000,
8787 0xb38748e600000000, 0x062b126600000000, 0x95b0db1900000000,
8788 0x2d74d6bd00000000, 0xbeef1fc200000000, 0x0b43454200000000,
8789 0x98d88c3d00000000, 0x0e6c724000000000, 0x9df7bb3f00000000,
8790 0x285be1bf00000000, 0xbbc028c000000000, 0x0304256400000000,
8791 0x909fec1b00000000, 0x2533b69b00000000, 0xb6a87fe400000000,
8792 0x14bcdc0800000000, 0x8727157700000000, 0x328b4ff700000000,
8793 0xa110868800000000, 0x19d48b2c00000000, 0x8a4f425300000000,
8794 0x3fe318d300000000, 0xac78d1ac00000000, 0x2614cb5100000000,
8795 0xb58f022e00000000, 0x002358ae00000000, 0x93b891d100000000,
8796 0x2b7c9c7500000000, 0xb8e7550a00000000, 0x0d4b0f8a00000000,
8797 0x9ed0c6f500000000, 0x3cc4651900000000, 0xaf5fac6600000000,
8798 0x1af3f6e600000000, 0x89683f9900000000, 0x31ac323d00000000,
8799 0xa237fb4200000000, 0x179ba1c200000000, 0x840068bd00000000,
8800 0x12b496c000000000, 0x812f5fbf00000000, 0x3483053f00000000,
8801 0xa718cc4000000000, 0x1fdcc1e400000000, 0x8c47089b00000000,
8802 0x39eb521b00000000, 0xaa709b6400000000, 0x0864388800000000,
8803 0x9bfff1f700000000, 0x2e53ab7700000000, 0xbdc8620800000000,
8804 0x050c6fac00000000, 0x9697a6d300000000, 0x233bfc5300000000,
8805 0xb0a0352c00000000, 0x0f5201a800000000, 0x9cc9c8d700000000,
8806 0x2965925700000000, 0xbafe5b2800000000, 0x023a568c00000000,
8807 0x91a19ff300000000, 0x240dc57300000000, 0xb7960c0c00000000,
8808 0x1582afe000000000, 0x8619669f00000000, 0x33b53c1f00000000,
8809 0xa02ef56000000000, 0x18eaf8c400000000, 0x8b7131bb00000000,
8810 0x3edd6b3b00000000, 0xad46a24400000000, 0x3bf25c3900000000,
8811 0xa869954600000000, 0x1dc5cfc600000000, 0x8e5e06b900000000,
8812 0x369a0b1d00000000, 0xa501c26200000000, 0x10ad98e200000000,
8813 0x8336519d00000000, 0x2122f27100000000, 0xb2b93b0e00000000,
8814 0x0715618e00000000, 0x948ea8f100000000, 0x2c4aa55500000000,
8815 0xbfd16c2a00000000, 0x0a7d36aa00000000, 0x99e6ffd500000000,
8816 0x359e2e7900000000, 0xa605e70600000000, 0x13a9bd8600000000,
8817 0x803274f900000000, 0x38f6795d00000000, 0xab6db02200000000,
8818 0x1ec1eaa200000000, 0x8d5a23dd00000000, 0x2f4e803100000000,
8819 0xbcd5494e00000000, 0x097913ce00000000, 0x9ae2dab100000000,
8820 0x2226d71500000000, 0xb1bd1e6a00000000, 0x041144ea00000000,
8821 0x978a8d9500000000, 0x013e73e800000000, 0x92a5ba9700000000,
8822 0x2709e01700000000, 0xb492296800000000, 0x0c5624cc00000000,
8823 0x9fcdedb300000000, 0x2a61b73300000000, 0xb9fa7e4c00000000,
8824 0x1beedda000000000, 0x887514df00000000, 0x3dd94e5f00000000,
8825 0xae42872000000000, 0x16868a8400000000, 0x851d43fb00000000,
8826 0x30b1197b00000000, 0xa32ad00400000000, 0x1cd8e48000000000,
8827 0x8f432dff00000000, 0x3aef777f00000000, 0xa974be0000000000,
8828 0x11b0b3a400000000, 0x822b7adb00000000, 0x3787205b00000000,
8829 0xa41ce92400000000, 0x06084ac800000000, 0x959383b700000000,
8830 0x203fd93700000000, 0xb3a4104800000000, 0x0b601dec00000000,
8831 0x98fbd49300000000, 0x2d578e1300000000, 0xbecc476c00000000,
8832 0x2878b91100000000, 0xbbe3706e00000000, 0x0e4f2aee00000000,
8833 0x9dd4e39100000000, 0x2510ee3500000000, 0xb68b274a00000000,
8834 0x03277dca00000000, 0x90bcb4b500000000, 0x32a8175900000000,
8835 0xa133de2600000000, 0x149f84a600000000, 0x87044dd900000000,
8836 0x3fc0407d00000000, 0xac5b890200000000, 0x19f7d38200000000,
8837 0x8a6c1afd00000000},
8838 {0x0000000000000000, 0x650b796900000000, 0xca16f2d200000000,
8839 0xaf1d8bbb00000000, 0xd52b957e00000000, 0xb020ec1700000000,
8840 0x1f3d67ac00000000, 0x7a361ec500000000, 0xaa572afd00000000,
8841 0xcf5c539400000000, 0x6041d82f00000000, 0x054aa14600000000,
8842 0x7f7cbf8300000000, 0x1a77c6ea00000000, 0xb56a4d5100000000,
8843 0xd061343800000000, 0x15a9252100000000, 0x70a25c4800000000,
8844 0xdfbfd7f300000000, 0xbab4ae9a00000000, 0xc082b05f00000000,
8845 0xa589c93600000000, 0x0a94428d00000000, 0x6f9f3be400000000,
8846 0xbffe0fdc00000000, 0xdaf576b500000000, 0x75e8fd0e00000000,
8847 0x10e3846700000000, 0x6ad59aa200000000, 0x0fdee3cb00000000,
8848 0xa0c3687000000000, 0xc5c8111900000000, 0x2a524b4200000000,
8849 0x4f59322b00000000, 0xe044b99000000000, 0x854fc0f900000000,
8850 0xff79de3c00000000, 0x9a72a75500000000, 0x356f2cee00000000,
8851 0x5064558700000000, 0x800561bf00000000, 0xe50e18d600000000,
8852 0x4a13936d00000000, 0x2f18ea0400000000, 0x552ef4c100000000,
8853 0x30258da800000000, 0x9f38061300000000, 0xfa337f7a00000000,
8854 0x3ffb6e6300000000, 0x5af0170a00000000, 0xf5ed9cb100000000,
8855 0x90e6e5d800000000, 0xead0fb1d00000000, 0x8fdb827400000000,
8856 0x20c609cf00000000, 0x45cd70a600000000, 0x95ac449e00000000,
8857 0xf0a73df700000000, 0x5fbab64c00000000, 0x3ab1cf2500000000,
8858 0x4087d1e000000000, 0x258ca88900000000, 0x8a91233200000000,
8859 0xef9a5a5b00000000, 0x54a4968400000000, 0x31afefed00000000,
8860 0x9eb2645600000000, 0xfbb91d3f00000000, 0x818f03fa00000000,
8861 0xe4847a9300000000, 0x4b99f12800000000, 0x2e92884100000000,
8862 0xfef3bc7900000000, 0x9bf8c51000000000, 0x34e54eab00000000,
8863 0x51ee37c200000000, 0x2bd8290700000000, 0x4ed3506e00000000,
8864 0xe1cedbd500000000, 0x84c5a2bc00000000, 0x410db3a500000000,
8865 0x2406cacc00000000, 0x8b1b417700000000, 0xee10381e00000000,
8866 0x942626db00000000, 0xf12d5fb200000000, 0x5e30d40900000000,
8867 0x3b3bad6000000000, 0xeb5a995800000000, 0x8e51e03100000000,
8868 0x214c6b8a00000000, 0x444712e300000000, 0x3e710c2600000000,
8869 0x5b7a754f00000000, 0xf467fef400000000, 0x916c879d00000000,
8870 0x7ef6ddc600000000, 0x1bfda4af00000000, 0xb4e02f1400000000,
8871 0xd1eb567d00000000, 0xabdd48b800000000, 0xced631d100000000,
8872 0x61cbba6a00000000, 0x04c0c30300000000, 0xd4a1f73b00000000,
8873 0xb1aa8e5200000000, 0x1eb705e900000000, 0x7bbc7c8000000000,
8874 0x018a624500000000, 0x64811b2c00000000, 0xcb9c909700000000,
8875 0xae97e9fe00000000, 0x6b5ff8e700000000, 0x0e54818e00000000,
8876 0xa1490a3500000000, 0xc442735c00000000, 0xbe746d9900000000,
8877 0xdb7f14f000000000, 0x74629f4b00000000, 0x1169e62200000000,
8878 0xc108d21a00000000, 0xa403ab7300000000, 0x0b1e20c800000000,
8879 0x6e1559a100000000, 0x1423476400000000, 0x71283e0d00000000,
8880 0xde35b5b600000000, 0xbb3eccdf00000000, 0xe94e5cd200000000,
8881 0x8c4525bb00000000, 0x2358ae0000000000, 0x4653d76900000000,
8882 0x3c65c9ac00000000, 0x596eb0c500000000, 0xf6733b7e00000000,
8883 0x9378421700000000, 0x4319762f00000000, 0x26120f4600000000,
8884 0x890f84fd00000000, 0xec04fd9400000000, 0x9632e35100000000,
8885 0xf3399a3800000000, 0x5c24118300000000, 0x392f68ea00000000,
8886 0xfce779f300000000, 0x99ec009a00000000, 0x36f18b2100000000,
8887 0x53faf24800000000, 0x29ccec8d00000000, 0x4cc795e400000000,
8888 0xe3da1e5f00000000, 0x86d1673600000000, 0x56b0530e00000000,
8889 0x33bb2a6700000000, 0x9ca6a1dc00000000, 0xf9add8b500000000,
8890 0x839bc67000000000, 0xe690bf1900000000, 0x498d34a200000000,
8891 0x2c864dcb00000000, 0xc31c179000000000, 0xa6176ef900000000,
8892 0x090ae54200000000, 0x6c019c2b00000000, 0x163782ee00000000,
8893 0x733cfb8700000000, 0xdc21703c00000000, 0xb92a095500000000,
8894 0x694b3d6d00000000, 0x0c40440400000000, 0xa35dcfbf00000000,
8895 0xc656b6d600000000, 0xbc60a81300000000, 0xd96bd17a00000000,
8896 0x76765ac100000000, 0x137d23a800000000, 0xd6b532b100000000,
8897 0xb3be4bd800000000, 0x1ca3c06300000000, 0x79a8b90a00000000,
8898 0x039ea7cf00000000, 0x6695dea600000000, 0xc988551d00000000,
8899 0xac832c7400000000, 0x7ce2184c00000000, 0x19e9612500000000,
8900 0xb6f4ea9e00000000, 0xd3ff93f700000000, 0xa9c98d3200000000,
8901 0xccc2f45b00000000, 0x63df7fe000000000, 0x06d4068900000000,
8902 0xbdeaca5600000000, 0xd8e1b33f00000000, 0x77fc388400000000,
8903 0x12f741ed00000000, 0x68c15f2800000000, 0x0dca264100000000,
8904 0xa2d7adfa00000000, 0xc7dcd49300000000, 0x17bde0ab00000000,
8905 0x72b699c200000000, 0xddab127900000000, 0xb8a06b1000000000,
8906 0xc29675d500000000, 0xa79d0cbc00000000, 0x0880870700000000,
8907 0x6d8bfe6e00000000, 0xa843ef7700000000, 0xcd48961e00000000,
8908 0x62551da500000000, 0x075e64cc00000000, 0x7d687a0900000000,
8909 0x1863036000000000, 0xb77e88db00000000, 0xd275f1b200000000,
8910 0x0214c58a00000000, 0x671fbce300000000, 0xc802375800000000,
8911 0xad094e3100000000, 0xd73f50f400000000, 0xb234299d00000000,
8912 0x1d29a22600000000, 0x7822db4f00000000, 0x97b8811400000000,
8913 0xf2b3f87d00000000, 0x5dae73c600000000, 0x38a50aaf00000000,
8914 0x4293146a00000000, 0x27986d0300000000, 0x8885e6b800000000,
8915 0xed8e9fd100000000, 0x3defabe900000000, 0x58e4d28000000000,
8916 0xf7f9593b00000000, 0x92f2205200000000, 0xe8c43e9700000000,
8917 0x8dcf47fe00000000, 0x22d2cc4500000000, 0x47d9b52c00000000,
8918 0x8211a43500000000, 0xe71add5c00000000, 0x480756e700000000,
8919 0x2d0c2f8e00000000, 0x573a314b00000000, 0x3231482200000000,
8920 0x9d2cc39900000000, 0xf827baf000000000, 0x28468ec800000000,
8921 0x4d4df7a100000000, 0xe2507c1a00000000, 0x875b057300000000,
8922 0xfd6d1bb600000000, 0x986662df00000000, 0x377be96400000000,
8923 0x5270900d00000000},
8924 {0x0000000000000000, 0xdcecb13d00000000, 0xb8d9637b00000000,
8925 0x6435d24600000000, 0x70b3c7f600000000, 0xac5f76cb00000000,
8926 0xc86aa48d00000000, 0x148615b000000000, 0xa160fe3600000000,
8927 0x7d8c4f0b00000000, 0x19b99d4d00000000, 0xc5552c7000000000,
8928 0xd1d339c000000000, 0x0d3f88fd00000000, 0x690a5abb00000000,
8929 0xb5e6eb8600000000, 0x42c1fc6d00000000, 0x9e2d4d5000000000,
8930 0xfa189f1600000000, 0x26f42e2b00000000, 0x32723b9b00000000,
8931 0xee9e8aa600000000, 0x8aab58e000000000, 0x5647e9dd00000000,
8932 0xe3a1025b00000000, 0x3f4db36600000000, 0x5b78612000000000,
8933 0x8794d01d00000000, 0x9312c5ad00000000, 0x4ffe749000000000,
8934 0x2bcba6d600000000, 0xf72717eb00000000, 0x8482f9db00000000,
8935 0x586e48e600000000, 0x3c5b9aa000000000, 0xe0b72b9d00000000,
8936 0xf4313e2d00000000, 0x28dd8f1000000000, 0x4ce85d5600000000,
8937 0x9004ec6b00000000, 0x25e207ed00000000, 0xf90eb6d000000000,
8938 0x9d3b649600000000, 0x41d7d5ab00000000, 0x5551c01b00000000,
8939 0x89bd712600000000, 0xed88a36000000000, 0x3164125d00000000,
8940 0xc64305b600000000, 0x1aafb48b00000000, 0x7e9a66cd00000000,
8941 0xa276d7f000000000, 0xb6f0c24000000000, 0x6a1c737d00000000,
8942 0x0e29a13b00000000, 0xd2c5100600000000, 0x6723fb8000000000,
8943 0xbbcf4abd00000000, 0xdffa98fb00000000, 0x031629c600000000,
8944 0x17903c7600000000, 0xcb7c8d4b00000000, 0xaf495f0d00000000,
8945 0x73a5ee3000000000, 0x4903826c00000000, 0x95ef335100000000,
8946 0xf1dae11700000000, 0x2d36502a00000000, 0x39b0459a00000000,
8947 0xe55cf4a700000000, 0x816926e100000000, 0x5d8597dc00000000,
8948 0xe8637c5a00000000, 0x348fcd6700000000, 0x50ba1f2100000000,
8949 0x8c56ae1c00000000, 0x98d0bbac00000000, 0x443c0a9100000000,
8950 0x2009d8d700000000, 0xfce569ea00000000, 0x0bc27e0100000000,
8951 0xd72ecf3c00000000, 0xb31b1d7a00000000, 0x6ff7ac4700000000,
8952 0x7b71b9f700000000, 0xa79d08ca00000000, 0xc3a8da8c00000000,
8953 0x1f446bb100000000, 0xaaa2803700000000, 0x764e310a00000000,
8954 0x127be34c00000000, 0xce97527100000000, 0xda1147c100000000,
8955 0x06fdf6fc00000000, 0x62c824ba00000000, 0xbe24958700000000,
8956 0xcd817bb700000000, 0x116dca8a00000000, 0x755818cc00000000,
8957 0xa9b4a9f100000000, 0xbd32bc4100000000, 0x61de0d7c00000000,
8958 0x05ebdf3a00000000, 0xd9076e0700000000, 0x6ce1858100000000,
8959 0xb00d34bc00000000, 0xd438e6fa00000000, 0x08d457c700000000,
8960 0x1c52427700000000, 0xc0bef34a00000000, 0xa48b210c00000000,
8961 0x7867903100000000, 0x8f4087da00000000, 0x53ac36e700000000,
8962 0x3799e4a100000000, 0xeb75559c00000000, 0xfff3402c00000000,
8963 0x231ff11100000000, 0x472a235700000000, 0x9bc6926a00000000,
8964 0x2e2079ec00000000, 0xf2ccc8d100000000, 0x96f91a9700000000,
8965 0x4a15abaa00000000, 0x5e93be1a00000000, 0x827f0f2700000000,
8966 0xe64add6100000000, 0x3aa66c5c00000000, 0x920604d900000000,
8967 0x4eeab5e400000000, 0x2adf67a200000000, 0xf633d69f00000000,
8968 0xe2b5c32f00000000, 0x3e59721200000000, 0x5a6ca05400000000,
8969 0x8680116900000000, 0x3366faef00000000, 0xef8a4bd200000000,
8970 0x8bbf999400000000, 0x575328a900000000, 0x43d53d1900000000,
8971 0x9f398c2400000000, 0xfb0c5e6200000000, 0x27e0ef5f00000000,
8972 0xd0c7f8b400000000, 0x0c2b498900000000, 0x681e9bcf00000000,
8973 0xb4f22af200000000, 0xa0743f4200000000, 0x7c988e7f00000000,
8974 0x18ad5c3900000000, 0xc441ed0400000000, 0x71a7068200000000,
8975 0xad4bb7bf00000000, 0xc97e65f900000000, 0x1592d4c400000000,
8976 0x0114c17400000000, 0xddf8704900000000, 0xb9cda20f00000000,
8977 0x6521133200000000, 0x1684fd0200000000, 0xca684c3f00000000,
8978 0xae5d9e7900000000, 0x72b12f4400000000, 0x66373af400000000,
8979 0xbadb8bc900000000, 0xdeee598f00000000, 0x0202e8b200000000,
8980 0xb7e4033400000000, 0x6b08b20900000000, 0x0f3d604f00000000,
8981 0xd3d1d17200000000, 0xc757c4c200000000, 0x1bbb75ff00000000,
8982 0x7f8ea7b900000000, 0xa362168400000000, 0x5445016f00000000,
8983 0x88a9b05200000000, 0xec9c621400000000, 0x3070d32900000000,
8984 0x24f6c69900000000, 0xf81a77a400000000, 0x9c2fa5e200000000,
8985 0x40c314df00000000, 0xf525ff5900000000, 0x29c94e6400000000,
8986 0x4dfc9c2200000000, 0x91102d1f00000000, 0x859638af00000000,
8987 0x597a899200000000, 0x3d4f5bd400000000, 0xe1a3eae900000000,
8988 0xdb0586b500000000, 0x07e9378800000000, 0x63dce5ce00000000,
8989 0xbf3054f300000000, 0xabb6414300000000, 0x775af07e00000000,
8990 0x136f223800000000, 0xcf83930500000000, 0x7a65788300000000,
8991 0xa689c9be00000000, 0xc2bc1bf800000000, 0x1e50aac500000000,
8992 0x0ad6bf7500000000, 0xd63a0e4800000000, 0xb20fdc0e00000000,
8993 0x6ee36d3300000000, 0x99c47ad800000000, 0x4528cbe500000000,
8994 0x211d19a300000000, 0xfdf1a89e00000000, 0xe977bd2e00000000,
8995 0x359b0c1300000000, 0x51aede5500000000, 0x8d426f6800000000,
8996 0x38a484ee00000000, 0xe44835d300000000, 0x807de79500000000,
8997 0x5c9156a800000000, 0x4817431800000000, 0x94fbf22500000000,
8998 0xf0ce206300000000, 0x2c22915e00000000, 0x5f877f6e00000000,
8999 0x836bce5300000000, 0xe75e1c1500000000, 0x3bb2ad2800000000,
9000 0x2f34b89800000000, 0xf3d809a500000000, 0x97eddbe300000000,
9001 0x4b016ade00000000, 0xfee7815800000000, 0x220b306500000000,
9002 0x463ee22300000000, 0x9ad2531e00000000, 0x8e5446ae00000000,
9003 0x52b8f79300000000, 0x368d25d500000000, 0xea6194e800000000,
9004 0x1d46830300000000, 0xc1aa323e00000000, 0xa59fe07800000000,
9005 0x7973514500000000, 0x6df544f500000000, 0xb119f5c800000000,
9006 0xd52c278e00000000, 0x09c096b300000000, 0xbc267d3500000000,
9007 0x60cacc0800000000, 0x04ff1e4e00000000, 0xd813af7300000000,
9008 0xcc95bac300000000, 0x10790bfe00000000, 0x744cd9b800000000,
9009 0xa8a0688500000000}};
9010
9011 #else /* W == 4 */
9012
9013 local const z_crc_t FAR crc_braid_table[][256] = {
9014 {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f,
9015 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999,
9016 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee,
9017 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615,
9018 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383,
9019 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb,
9020 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275,
9021 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d,
9022 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b,
9023 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460,
9024 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317,
9025 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1,
9026 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5,
9027 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd,
9028 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04,
9029 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c,
9030 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7,
9031 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11,
9032 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66,
9033 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7,
9034 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871,
9035 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309,
9036 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd,
9037 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85,
9038 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913,
9039 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d,
9040 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a,
9041 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc,
9042 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57,
9043 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f,
9044 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6,
9045 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e,
9046 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f,
9047 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289,
9048 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe,
9049 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05,
9050 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893,
9051 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb,
9052 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0,
9053 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8,
9054 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e,
9055 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5,
9056 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2,
9057 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574,
9058 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5,
9059 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add,
9060 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114,
9061 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c,
9062 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7,
9063 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701,
9064 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076,
9065 0x09cd8551},
9066 {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193,
9067 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2,
9068 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c,
9069 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71,
9070 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a,
9071 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d,
9072 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71,
9073 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436,
9074 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d,
9075 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000,
9076 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae,
9077 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf,
9078 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930,
9079 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277,
9080 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff,
9081 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8,
9082 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef,
9083 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e,
9084 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20,
9085 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95,
9086 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e,
9087 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9,
9088 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d,
9089 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a,
9090 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151,
9091 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4,
9092 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a,
9093 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b,
9094 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c,
9095 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b,
9096 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3,
9097 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4,
9098 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b,
9099 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a,
9100 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4,
9101 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189,
9102 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92,
9103 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5,
9104 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9,
9105 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe,
9106 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5,
9107 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8,
9108 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66,
9109 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707,
9110 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8,
9111 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f,
9112 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707,
9113 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40,
9114 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017,
9115 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876,
9116 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8,
9117 0x7bc97a0c},
9118 {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300,
9119 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0,
9120 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80,
9121 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701,
9122 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41,
9123 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81,
9124 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43,
9125 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83,
9126 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3,
9127 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42,
9128 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202,
9129 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2,
9130 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7,
9131 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407,
9132 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47,
9133 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87,
9134 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86,
9135 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46,
9136 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506,
9137 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44,
9138 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704,
9139 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4,
9140 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5,
9141 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505,
9142 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45,
9143 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f,
9144 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f,
9145 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f,
9146 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e,
9147 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e,
9148 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e,
9149 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce,
9150 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c,
9151 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc,
9152 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c,
9153 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d,
9154 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d,
9155 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d,
9156 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88,
9157 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48,
9158 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708,
9159 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89,
9160 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9,
9161 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309,
9162 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb,
9163 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b,
9164 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b,
9165 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b,
9166 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a,
9167 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a,
9168 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a,
9169 0x7851a2ca},
9170 {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb,
9171 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8,
9172 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0,
9173 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f,
9174 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a,
9175 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf,
9176 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5,
9177 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380,
9178 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815,
9179 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa,
9180 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2,
9181 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1,
9182 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1,
9183 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4,
9184 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa,
9185 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df,
9186 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6,
9187 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5,
9188 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad,
9189 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca,
9190 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f,
9191 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a,
9192 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8,
9193 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d,
9194 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708,
9195 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d,
9196 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865,
9197 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636,
9198 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f,
9199 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a,
9200 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744,
9201 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061,
9202 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0,
9203 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293,
9204 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb,
9205 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874,
9206 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1,
9207 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4,
9208 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f,
9209 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a,
9210 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f,
9211 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120,
9212 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778,
9213 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b,
9214 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a,
9215 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af,
9216 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81,
9217 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4,
9218 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd,
9219 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e,
9220 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6,
9221 0x566b6848}};
9222
9223 local const z_word_t FAR crc_braid_big_table[][256] = {
9224 {0x00000000, 0x9e83da9f, 0x7d01c4e4, 0xe3821e7b, 0xbb04f912,
9225 0x2587238d, 0xc6053df6, 0x5886e769, 0x7609f225, 0xe88a28ba,
9226 0x0b0836c1, 0x958bec5e, 0xcd0d0b37, 0x538ed1a8, 0xb00ccfd3,
9227 0x2e8f154c, 0xec12e44b, 0x72913ed4, 0x911320af, 0x0f90fa30,
9228 0x57161d59, 0xc995c7c6, 0x2a17d9bd, 0xb4940322, 0x9a1b166e,
9229 0x0498ccf1, 0xe71ad28a, 0x79990815, 0x211fef7c, 0xbf9c35e3,
9230 0x5c1e2b98, 0xc29df107, 0xd825c897, 0x46a61208, 0xa5240c73,
9231 0x3ba7d6ec, 0x63213185, 0xfda2eb1a, 0x1e20f561, 0x80a32ffe,
9232 0xae2c3ab2, 0x30afe02d, 0xd32dfe56, 0x4dae24c9, 0x1528c3a0,
9233 0x8bab193f, 0x68290744, 0xf6aadddb, 0x34372cdc, 0xaab4f643,
9234 0x4936e838, 0xd7b532a7, 0x8f33d5ce, 0x11b00f51, 0xf232112a,
9235 0x6cb1cbb5, 0x423edef9, 0xdcbd0466, 0x3f3f1a1d, 0xa1bcc082,
9236 0xf93a27eb, 0x67b9fd74, 0x843be30f, 0x1ab83990, 0xf14de1f4,
9237 0x6fce3b6b, 0x8c4c2510, 0x12cfff8f, 0x4a4918e6, 0xd4cac279,
9238 0x3748dc02, 0xa9cb069d, 0x874413d1, 0x19c7c94e, 0xfa45d735,
9239 0x64c60daa, 0x3c40eac3, 0xa2c3305c, 0x41412e27, 0xdfc2f4b8,
9240 0x1d5f05bf, 0x83dcdf20, 0x605ec15b, 0xfedd1bc4, 0xa65bfcad,
9241 0x38d82632, 0xdb5a3849, 0x45d9e2d6, 0x6b56f79a, 0xf5d52d05,
9242 0x1657337e, 0x88d4e9e1, 0xd0520e88, 0x4ed1d417, 0xad53ca6c,
9243 0x33d010f3, 0x29682963, 0xb7ebf3fc, 0x5469ed87, 0xcaea3718,
9244 0x926cd071, 0x0cef0aee, 0xef6d1495, 0x71eece0a, 0x5f61db46,
9245 0xc1e201d9, 0x22601fa2, 0xbce3c53d, 0xe4652254, 0x7ae6f8cb,
9246 0x9964e6b0, 0x07e73c2f, 0xc57acd28, 0x5bf917b7, 0xb87b09cc,
9247 0x26f8d353, 0x7e7e343a, 0xe0fdeea5, 0x037ff0de, 0x9dfc2a41,
9248 0xb3733f0d, 0x2df0e592, 0xce72fbe9, 0x50f12176, 0x0877c61f,
9249 0x96f41c80, 0x757602fb, 0xebf5d864, 0xa39db332, 0x3d1e69ad,
9250 0xde9c77d6, 0x401fad49, 0x18994a20, 0x861a90bf, 0x65988ec4,
9251 0xfb1b545b, 0xd5944117, 0x4b179b88, 0xa89585f3, 0x36165f6c,
9252 0x6e90b805, 0xf013629a, 0x13917ce1, 0x8d12a67e, 0x4f8f5779,
9253 0xd10c8de6, 0x328e939d, 0xac0d4902, 0xf48bae6b, 0x6a0874f4,
9254 0x898a6a8f, 0x1709b010, 0x3986a55c, 0xa7057fc3, 0x448761b8,
9255 0xda04bb27, 0x82825c4e, 0x1c0186d1, 0xff8398aa, 0x61004235,
9256 0x7bb87ba5, 0xe53ba13a, 0x06b9bf41, 0x983a65de, 0xc0bc82b7,
9257 0x5e3f5828, 0xbdbd4653, 0x233e9ccc, 0x0db18980, 0x9332531f,
9258 0x70b04d64, 0xee3397fb, 0xb6b57092, 0x2836aa0d, 0xcbb4b476,
9259 0x55376ee9, 0x97aa9fee, 0x09294571, 0xeaab5b0a, 0x74288195,
9260 0x2cae66fc, 0xb22dbc63, 0x51afa218, 0xcf2c7887, 0xe1a36dcb,
9261 0x7f20b754, 0x9ca2a92f, 0x022173b0, 0x5aa794d9, 0xc4244e46,
9262 0x27a6503d, 0xb9258aa2, 0x52d052c6, 0xcc538859, 0x2fd19622,
9263 0xb1524cbd, 0xe9d4abd4, 0x7757714b, 0x94d56f30, 0x0a56b5af,
9264 0x24d9a0e3, 0xba5a7a7c, 0x59d86407, 0xc75bbe98, 0x9fdd59f1,
9265 0x015e836e, 0xe2dc9d15, 0x7c5f478a, 0xbec2b68d, 0x20416c12,
9266 0xc3c37269, 0x5d40a8f6, 0x05c64f9f, 0x9b459500, 0x78c78b7b,
9267 0xe64451e4, 0xc8cb44a8, 0x56489e37, 0xb5ca804c, 0x2b495ad3,
9268 0x73cfbdba, 0xed4c6725, 0x0ece795e, 0x904da3c1, 0x8af59a51,
9269 0x147640ce, 0xf7f45eb5, 0x6977842a, 0x31f16343, 0xaf72b9dc,
9270 0x4cf0a7a7, 0xd2737d38, 0xfcfc6874, 0x627fb2eb, 0x81fdac90,
9271 0x1f7e760f, 0x47f89166, 0xd97b4bf9, 0x3af95582, 0xa47a8f1d,
9272 0x66e77e1a, 0xf864a485, 0x1be6bafe, 0x85656061, 0xdde38708,
9273 0x43605d97, 0xa0e243ec, 0x3e619973, 0x10ee8c3f, 0x8e6d56a0,
9274 0x6def48db, 0xf36c9244, 0xabea752d, 0x3569afb2, 0xd6ebb1c9,
9275 0x48686b56},
9276 {0x00000000, 0xc0642817, 0x80c9502e, 0x40ad7839, 0x0093a15c,
9277 0xc0f7894b, 0x805af172, 0x403ed965, 0x002643b9, 0xc0426bae,
9278 0x80ef1397, 0x408b3b80, 0x00b5e2e5, 0xc0d1caf2, 0x807cb2cb,
9279 0x40189adc, 0x414af7a9, 0x812edfbe, 0xc183a787, 0x01e78f90,
9280 0x41d956f5, 0x81bd7ee2, 0xc11006db, 0x01742ecc, 0x416cb410,
9281 0x81089c07, 0xc1a5e43e, 0x01c1cc29, 0x41ff154c, 0x819b3d5b,
9282 0xc1364562, 0x01526d75, 0xc3929f88, 0x03f6b79f, 0x435bcfa6,
9283 0x833fe7b1, 0xc3013ed4, 0x036516c3, 0x43c86efa, 0x83ac46ed,
9284 0xc3b4dc31, 0x03d0f426, 0x437d8c1f, 0x8319a408, 0xc3277d6d,
9285 0x0343557a, 0x43ee2d43, 0x838a0554, 0x82d86821, 0x42bc4036,
9286 0x0211380f, 0xc2751018, 0x824bc97d, 0x422fe16a, 0x02829953,
9287 0xc2e6b144, 0x82fe2b98, 0x429a038f, 0x02377bb6, 0xc25353a1,
9288 0x826d8ac4, 0x4209a2d3, 0x02a4daea, 0xc2c0f2fd, 0xc7234eca,
9289 0x074766dd, 0x47ea1ee4, 0x878e36f3, 0xc7b0ef96, 0x07d4c781,
9290 0x4779bfb8, 0x871d97af, 0xc7050d73, 0x07612564, 0x47cc5d5d,
9291 0x87a8754a, 0xc796ac2f, 0x07f28438, 0x475ffc01, 0x873bd416,
9292 0x8669b963, 0x460d9174, 0x06a0e94d, 0xc6c4c15a, 0x86fa183f,
9293 0x469e3028, 0x06334811, 0xc6576006, 0x864ffada, 0x462bd2cd,
9294 0x0686aaf4, 0xc6e282e3, 0x86dc5b86, 0x46b87391, 0x06150ba8,
9295 0xc67123bf, 0x04b1d142, 0xc4d5f955, 0x8478816c, 0x441ca97b,
9296 0x0422701e, 0xc4465809, 0x84eb2030, 0x448f0827, 0x049792fb,
9297 0xc4f3baec, 0x845ec2d5, 0x443aeac2, 0x040433a7, 0xc4601bb0,
9298 0x84cd6389, 0x44a94b9e, 0x45fb26eb, 0x859f0efc, 0xc53276c5,
9299 0x05565ed2, 0x456887b7, 0x850cafa0, 0xc5a1d799, 0x05c5ff8e,
9300 0x45dd6552, 0x85b94d45, 0xc514357c, 0x05701d6b, 0x454ec40e,
9301 0x852aec19, 0xc5879420, 0x05e3bc37, 0xcf41ed4f, 0x0f25c558,
9302 0x4f88bd61, 0x8fec9576, 0xcfd24c13, 0x0fb66404, 0x4f1b1c3d,
9303 0x8f7f342a, 0xcf67aef6, 0x0f0386e1, 0x4faefed8, 0x8fcad6cf,
9304 0xcff40faa, 0x0f9027bd, 0x4f3d5f84, 0x8f597793, 0x8e0b1ae6,
9305 0x4e6f32f1, 0x0ec24ac8, 0xcea662df, 0x8e98bbba, 0x4efc93ad,
9306 0x0e51eb94, 0xce35c383, 0x8e2d595f, 0x4e497148, 0x0ee40971,
9307 0xce802166, 0x8ebef803, 0x4edad014, 0x0e77a82d, 0xce13803a,
9308 0x0cd372c7, 0xccb75ad0, 0x8c1a22e9, 0x4c7e0afe, 0x0c40d39b,
9309 0xcc24fb8c, 0x8c8983b5, 0x4cedaba2, 0x0cf5317e, 0xcc911969,
9310 0x8c3c6150, 0x4c584947, 0x0c669022, 0xcc02b835, 0x8cafc00c,
9311 0x4ccbe81b, 0x4d99856e, 0x8dfdad79, 0xcd50d540, 0x0d34fd57,
9312 0x4d0a2432, 0x8d6e0c25, 0xcdc3741c, 0x0da75c0b, 0x4dbfc6d7,
9313 0x8ddbeec0, 0xcd7696f9, 0x0d12beee, 0x4d2c678b, 0x8d484f9c,
9314 0xcde537a5, 0x0d811fb2, 0x0862a385, 0xc8068b92, 0x88abf3ab,
9315 0x48cfdbbc, 0x08f102d9, 0xc8952ace, 0x883852f7, 0x485c7ae0,
9316 0x0844e03c, 0xc820c82b, 0x888db012, 0x48e99805, 0x08d74160,
9317 0xc8b36977, 0x881e114e, 0x487a3959, 0x4928542c, 0x894c7c3b,
9318 0xc9e10402, 0x09852c15, 0x49bbf570, 0x89dfdd67, 0xc972a55e,
9319 0x09168d49, 0x490e1795, 0x896a3f82, 0xc9c747bb, 0x09a36fac,
9320 0x499db6c9, 0x89f99ede, 0xc954e6e7, 0x0930cef0, 0xcbf03c0d,
9321 0x0b94141a, 0x4b396c23, 0x8b5d4434, 0xcb639d51, 0x0b07b546,
9322 0x4baacd7f, 0x8bcee568, 0xcbd67fb4, 0x0bb257a3, 0x4b1f2f9a,
9323 0x8b7b078d, 0xcb45dee8, 0x0b21f6ff, 0x4b8c8ec6, 0x8be8a6d1,
9324 0x8abacba4, 0x4adee3b3, 0x0a739b8a, 0xca17b39d, 0x8a296af8,
9325 0x4a4d42ef, 0x0ae03ad6, 0xca8412c1, 0x8a9c881d, 0x4af8a00a,
9326 0x0a55d833, 0xca31f024, 0x8a0f2941, 0x4a6b0156, 0x0ac6796f,
9327 0xcaa25178},
9328 {0x00000000, 0xd4ea739b, 0xe9d396ed, 0x3d39e576, 0x93a15c00,
9329 0x474b2f9b, 0x7a72caed, 0xae98b976, 0x2643b900, 0xf2a9ca9b,
9330 0xcf902fed, 0x1b7a5c76, 0xb5e2e500, 0x6108969b, 0x5c3173ed,
9331 0x88db0076, 0x4c867201, 0x986c019a, 0xa555e4ec, 0x71bf9777,
9332 0xdf272e01, 0x0bcd5d9a, 0x36f4b8ec, 0xe21ecb77, 0x6ac5cb01,
9333 0xbe2fb89a, 0x83165dec, 0x57fc2e77, 0xf9649701, 0x2d8ee49a,
9334 0x10b701ec, 0xc45d7277, 0x980ce502, 0x4ce69699, 0x71df73ef,
9335 0xa5350074, 0x0badb902, 0xdf47ca99, 0xe27e2fef, 0x36945c74,
9336 0xbe4f5c02, 0x6aa52f99, 0x579ccaef, 0x8376b974, 0x2dee0002,
9337 0xf9047399, 0xc43d96ef, 0x10d7e574, 0xd48a9703, 0x0060e498,
9338 0x3d5901ee, 0xe9b37275, 0x472bcb03, 0x93c1b898, 0xaef85dee,
9339 0x7a122e75, 0xf2c92e03, 0x26235d98, 0x1b1ab8ee, 0xcff0cb75,
9340 0x61687203, 0xb5820198, 0x88bbe4ee, 0x5c519775, 0x3019ca05,
9341 0xe4f3b99e, 0xd9ca5ce8, 0x0d202f73, 0xa3b89605, 0x7752e59e,
9342 0x4a6b00e8, 0x9e817373, 0x165a7305, 0xc2b0009e, 0xff89e5e8,
9343 0x2b639673, 0x85fb2f05, 0x51115c9e, 0x6c28b9e8, 0xb8c2ca73,
9344 0x7c9fb804, 0xa875cb9f, 0x954c2ee9, 0x41a65d72, 0xef3ee404,
9345 0x3bd4979f, 0x06ed72e9, 0xd2070172, 0x5adc0104, 0x8e36729f,
9346 0xb30f97e9, 0x67e5e472, 0xc97d5d04, 0x1d972e9f, 0x20aecbe9,
9347 0xf444b872, 0xa8152f07, 0x7cff5c9c, 0x41c6b9ea, 0x952cca71,
9348 0x3bb47307, 0xef5e009c, 0xd267e5ea, 0x068d9671, 0x8e569607,
9349 0x5abce59c, 0x678500ea, 0xb36f7371, 0x1df7ca07, 0xc91db99c,
9350 0xf4245cea, 0x20ce2f71, 0xe4935d06, 0x30792e9d, 0x0d40cbeb,
9351 0xd9aab870, 0x77320106, 0xa3d8729d, 0x9ee197eb, 0x4a0be470,
9352 0xc2d0e406, 0x163a979d, 0x2b0372eb, 0xffe90170, 0x5171b806,
9353 0x859bcb9d, 0xb8a22eeb, 0x6c485d70, 0x6032940b, 0xb4d8e790,
9354 0x89e102e6, 0x5d0b717d, 0xf393c80b, 0x2779bb90, 0x1a405ee6,
9355 0xceaa2d7d, 0x46712d0b, 0x929b5e90, 0xafa2bbe6, 0x7b48c87d,
9356 0xd5d0710b, 0x013a0290, 0x3c03e7e6, 0xe8e9947d, 0x2cb4e60a,
9357 0xf85e9591, 0xc56770e7, 0x118d037c, 0xbf15ba0a, 0x6bffc991,
9358 0x56c62ce7, 0x822c5f7c, 0x0af75f0a, 0xde1d2c91, 0xe324c9e7,
9359 0x37ceba7c, 0x9956030a, 0x4dbc7091, 0x708595e7, 0xa46fe67c,
9360 0xf83e7109, 0x2cd40292, 0x11ede7e4, 0xc507947f, 0x6b9f2d09,
9361 0xbf755e92, 0x824cbbe4, 0x56a6c87f, 0xde7dc809, 0x0a97bb92,
9362 0x37ae5ee4, 0xe3442d7f, 0x4ddc9409, 0x9936e792, 0xa40f02e4,
9363 0x70e5717f, 0xb4b80308, 0x60527093, 0x5d6b95e5, 0x8981e67e,
9364 0x27195f08, 0xf3f32c93, 0xcecac9e5, 0x1a20ba7e, 0x92fbba08,
9365 0x4611c993, 0x7b282ce5, 0xafc25f7e, 0x015ae608, 0xd5b09593,
9366 0xe88970e5, 0x3c63037e, 0x502b5e0e, 0x84c12d95, 0xb9f8c8e3,
9367 0x6d12bb78, 0xc38a020e, 0x17607195, 0x2a5994e3, 0xfeb3e778,
9368 0x7668e70e, 0xa2829495, 0x9fbb71e3, 0x4b510278, 0xe5c9bb0e,
9369 0x3123c895, 0x0c1a2de3, 0xd8f05e78, 0x1cad2c0f, 0xc8475f94,
9370 0xf57ebae2, 0x2194c979, 0x8f0c700f, 0x5be60394, 0x66dfe6e2,
9371 0xb2359579, 0x3aee950f, 0xee04e694, 0xd33d03e2, 0x07d77079,
9372 0xa94fc90f, 0x7da5ba94, 0x409c5fe2, 0x94762c79, 0xc827bb0c,
9373 0x1ccdc897, 0x21f42de1, 0xf51e5e7a, 0x5b86e70c, 0x8f6c9497,
9374 0xb25571e1, 0x66bf027a, 0xee64020c, 0x3a8e7197, 0x07b794e1,
9375 0xd35de77a, 0x7dc55e0c, 0xa92f2d97, 0x9416c8e1, 0x40fcbb7a,
9376 0x84a1c90d, 0x504bba96, 0x6d725fe0, 0xb9982c7b, 0x1700950d,
9377 0xc3eae696, 0xfed303e0, 0x2a39707b, 0xa2e2700d, 0x76080396,
9378 0x4b31e6e0, 0x9fdb957b, 0x31432c0d, 0xe5a95f96, 0xd890bae0,
9379 0x0c7ac97b},
9380 {0x00000000, 0x27652581, 0x0fcc3bd9, 0x28a91e58, 0x5f9e0669,
9381 0x78fb23e8, 0x50523db0, 0x77371831, 0xbe3c0dd2, 0x99592853,
9382 0xb1f0360b, 0x9695138a, 0xe1a20bbb, 0xc6c72e3a, 0xee6e3062,
9383 0xc90b15e3, 0x3d7f6b7f, 0x1a1a4efe, 0x32b350a6, 0x15d67527,
9384 0x62e16d16, 0x45844897, 0x6d2d56cf, 0x4a48734e, 0x834366ad,
9385 0xa426432c, 0x8c8f5d74, 0xabea78f5, 0xdcdd60c4, 0xfbb84545,
9386 0xd3115b1d, 0xf4747e9c, 0x7afed6fe, 0x5d9bf37f, 0x7532ed27,
9387 0x5257c8a6, 0x2560d097, 0x0205f516, 0x2aaceb4e, 0x0dc9cecf,
9388 0xc4c2db2c, 0xe3a7fead, 0xcb0ee0f5, 0xec6bc574, 0x9b5cdd45,
9389 0xbc39f8c4, 0x9490e69c, 0xb3f5c31d, 0x4781bd81, 0x60e49800,
9390 0x484d8658, 0x6f28a3d9, 0x181fbbe8, 0x3f7a9e69, 0x17d38031,
9391 0x30b6a5b0, 0xf9bdb053, 0xded895d2, 0xf6718b8a, 0xd114ae0b,
9392 0xa623b63a, 0x814693bb, 0xa9ef8de3, 0x8e8aa862, 0xb5fadc26,
9393 0x929ff9a7, 0xba36e7ff, 0x9d53c27e, 0xea64da4f, 0xcd01ffce,
9394 0xe5a8e196, 0xc2cdc417, 0x0bc6d1f4, 0x2ca3f475, 0x040aea2d,
9395 0x236fcfac, 0x5458d79d, 0x733df21c, 0x5b94ec44, 0x7cf1c9c5,
9396 0x8885b759, 0xafe092d8, 0x87498c80, 0xa02ca901, 0xd71bb130,
9397 0xf07e94b1, 0xd8d78ae9, 0xffb2af68, 0x36b9ba8b, 0x11dc9f0a,
9398 0x39758152, 0x1e10a4d3, 0x6927bce2, 0x4e429963, 0x66eb873b,
9399 0x418ea2ba, 0xcf040ad8, 0xe8612f59, 0xc0c83101, 0xe7ad1480,
9400 0x909a0cb1, 0xb7ff2930, 0x9f563768, 0xb83312e9, 0x7138070a,
9401 0x565d228b, 0x7ef43cd3, 0x59911952, 0x2ea60163, 0x09c324e2,
9402 0x216a3aba, 0x060f1f3b, 0xf27b61a7, 0xd51e4426, 0xfdb75a7e,
9403 0xdad27fff, 0xade567ce, 0x8a80424f, 0xa2295c17, 0x854c7996,
9404 0x4c476c75, 0x6b2249f4, 0x438b57ac, 0x64ee722d, 0x13d96a1c,
9405 0x34bc4f9d, 0x1c1551c5, 0x3b707444, 0x6af5b94d, 0x4d909ccc,
9406 0x65398294, 0x425ca715, 0x356bbf24, 0x120e9aa5, 0x3aa784fd,
9407 0x1dc2a17c, 0xd4c9b49f, 0xf3ac911e, 0xdb058f46, 0xfc60aac7,
9408 0x8b57b2f6, 0xac329777, 0x849b892f, 0xa3feacae, 0x578ad232,
9409 0x70eff7b3, 0x5846e9eb, 0x7f23cc6a, 0x0814d45b, 0x2f71f1da,
9410 0x07d8ef82, 0x20bdca03, 0xe9b6dfe0, 0xced3fa61, 0xe67ae439,
9411 0xc11fc1b8, 0xb628d989, 0x914dfc08, 0xb9e4e250, 0x9e81c7d1,
9412 0x100b6fb3, 0x376e4a32, 0x1fc7546a, 0x38a271eb, 0x4f9569da,
9413 0x68f04c5b, 0x40595203, 0x673c7782, 0xae376261, 0x895247e0,
9414 0xa1fb59b8, 0x869e7c39, 0xf1a96408, 0xd6cc4189, 0xfe655fd1,
9415 0xd9007a50, 0x2d7404cc, 0x0a11214d, 0x22b83f15, 0x05dd1a94,
9416 0x72ea02a5, 0x558f2724, 0x7d26397c, 0x5a431cfd, 0x9348091e,
9417 0xb42d2c9f, 0x9c8432c7, 0xbbe11746, 0xccd60f77, 0xebb32af6,
9418 0xc31a34ae, 0xe47f112f, 0xdf0f656b, 0xf86a40ea, 0xd0c35eb2,
9419 0xf7a67b33, 0x80916302, 0xa7f44683, 0x8f5d58db, 0xa8387d5a,
9420 0x613368b9, 0x46564d38, 0x6eff5360, 0x499a76e1, 0x3ead6ed0,
9421 0x19c84b51, 0x31615509, 0x16047088, 0xe2700e14, 0xc5152b95,
9422 0xedbc35cd, 0xcad9104c, 0xbdee087d, 0x9a8b2dfc, 0xb22233a4,
9423 0x95471625, 0x5c4c03c6, 0x7b292647, 0x5380381f, 0x74e51d9e,
9424 0x03d205af, 0x24b7202e, 0x0c1e3e76, 0x2b7b1bf7, 0xa5f1b395,
9425 0x82949614, 0xaa3d884c, 0x8d58adcd, 0xfa6fb5fc, 0xdd0a907d,
9426 0xf5a38e25, 0xd2c6aba4, 0x1bcdbe47, 0x3ca89bc6, 0x1401859e,
9427 0x3364a01f, 0x4453b82e, 0x63369daf, 0x4b9f83f7, 0x6cfaa676,
9428 0x988ed8ea, 0xbfebfd6b, 0x9742e333, 0xb027c6b2, 0xc710de83,
9429 0xe075fb02, 0xc8dce55a, 0xefb9c0db, 0x26b2d538, 0x01d7f0b9,
9430 0x297eeee1, 0x0e1bcb60, 0x792cd351, 0x5e49f6d0, 0x76e0e888,
9431 0x5185cd09}};
9432
9433 #endif
9434
9435 #endif
9436
9437 #endif
9438
9439 local const z_crc_t FAR x2n_table[] = {
9440 0x40000000, 0x20000000, 0x08000000, 0x00800000, 0x00008000,
9441 0xedb88320, 0xb1e6b092, 0xa06a2517, 0xed627dae, 0x88d14467,
9442 0xd7bbfe6a, 0xec447f11, 0x8e7ea170, 0x6427800e, 0x4d47bae0,
9443 0x09fe548f, 0x83852d0f, 0x30362f1a, 0x7b5a9cc3, 0x31fec169,
9444 0x9fec022a, 0x6c8dedc4, 0x15d6874d, 0x5fde7a4e, 0xbad90e37,
9445 0x2e4e5eef, 0x4eaba214, 0xa8a472c0, 0x429a969e, 0x148d302a,
9446 0xc40ba6d0, 0xc4e22c3c};
9447
--- compat/zlib/deflate.c
+++ compat/zlib/deflate.c
@@ -1,7 +1,7 @@
11
/* deflate.c -- compress data using the deflation algorithm
2
- * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
2
+ * Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
33
* For conditions of distribution and use, see copyright notice in zlib.h
44
*/
55
66
/*
77
* ALGORITHM
@@ -50,11 +50,11 @@
5050
/* @(#) $Id$ */
5151
5252
#include "deflate.h"
5353
5454
const char deflate_copyright[] =
55
- " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler ";
55
+ " deflate 1.2.12 Copyright 1995-2022 Jean-loup Gailly and Mark Adler ";
5656
/*
5757
If you use the zlib library in a product, an acknowledgment is welcome
5858
in the documentation of your product. If for some reason you cannot
5959
include such an acknowledgment, I would appreciate that you keep this
6060
copyright string in the executable of your product.
@@ -188,12 +188,15 @@
188188
/* ===========================================================================
189189
* Initialize the hash table (avoiding 64K overflow for 16 bit systems).
190190
* prev[] will be initialized on the fly.
191191
*/
192192
#define CLEAR_HASH(s) \
193
- s->head[s->hash_size-1] = NIL; \
194
- zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
193
+ do { \
194
+ s->head[s->hash_size-1] = NIL; \
195
+ zmemzero((Bytef *)s->head, \
196
+ (unsigned)(s->hash_size-1)*sizeof(*s->head)); \
197
+ } while (0)
195198
196199
/* ===========================================================================
197200
* Slide the hash table when sliding the window down (could be avoided with 32
198201
* bit values at the expense of memory usage). We slide even when level == 0 to
199202
* keep the hash table consistent if we switch back to level > 0 later.
@@ -250,15 +253,10 @@
250253
{
251254
deflate_state *s;
252255
int wrap = 1;
253256
static const char my_version[] = ZLIB_VERSION;
254257
255
- ushf *overlay;
256
- /* We overlay pending_buf and d_buf+l_buf. This works since the average
257
- * output size for (length,distance) codes is <= 24 bits.
258
- */
259
-
260258
if (version == Z_NULL || version[0] != my_version[0] ||
261259
stream_size != sizeof(z_stream)) {
262260
return Z_VERSION_ERROR;
263261
}
264262
if (strm == Z_NULL) return Z_STREAM_ERROR;
@@ -324,23 +322,65 @@
324322
325323
s->high_water = 0; /* nothing written to s->window yet */
326324
327325
s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
328326
329
- overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
330
- s->pending_buf = (uchf *) overlay;
331
- s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
327
+ /* We overlay pending_buf and sym_buf. This works since the average size
328
+ * for length/distance pairs over any compressed block is assured to be 31
329
+ * bits or less.
330
+ *
331
+ * Analysis: The longest fixed codes are a length code of 8 bits plus 5
332
+ * extra bits, for lengths 131 to 257. The longest fixed distance codes are
333
+ * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest
334
+ * possible fixed-codes length/distance pair is then 31 bits total.
335
+ *
336
+ * sym_buf starts one-fourth of the way into pending_buf. So there are
337
+ * three bytes in sym_buf for every four bytes in pending_buf. Each symbol
338
+ * in sym_buf is three bytes -- two for the distance and one for the
339
+ * literal/length. As each symbol is consumed, the pointer to the next
340
+ * sym_buf value to read moves forward three bytes. From that symbol, up to
341
+ * 31 bits are written to pending_buf. The closest the written pending_buf
342
+ * bits gets to the next sym_buf symbol to read is just before the last
343
+ * code is written. At that time, 31*(n-2) bits have been written, just
344
+ * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at
345
+ * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1
346
+ * symbols are written.) The closest the writing gets to what is unread is
347
+ * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and
348
+ * can range from 128 to 32768.
349
+ *
350
+ * Therefore, at a minimum, there are 142 bits of space between what is
351
+ * written and what is read in the overlain buffers, so the symbols cannot
352
+ * be overwritten by the compressed data. That space is actually 139 bits,
353
+ * due to the three-bit fixed-code block header.
354
+ *
355
+ * That covers the case where either Z_FIXED is specified, forcing fixed
356
+ * codes, or when the use of fixed codes is chosen, because that choice
357
+ * results in a smaller compressed block than dynamic codes. That latter
358
+ * condition then assures that the above analysis also covers all dynamic
359
+ * blocks. A dynamic-code block will only be chosen to be emitted if it has
360
+ * fewer bits than a fixed-code block would for the same set of symbols.
361
+ * Therefore its average symbol length is assured to be less than 31. So
362
+ * the compressed data for a dynamic block also cannot overwrite the
363
+ * symbols from which it is being constructed.
364
+ */
365
+
366
+ s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, 4);
367
+ s->pending_buf_size = (ulg)s->lit_bufsize * 4;
332368
333369
if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
334370
s->pending_buf == Z_NULL) {
335371
s->status = FINISH_STATE;
336372
strm->msg = ERR_MSG(Z_MEM_ERROR);
337373
deflateEnd (strm);
338374
return Z_MEM_ERROR;
339375
}
340
- s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
341
- s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
376
+ s->sym_buf = s->pending_buf + s->lit_bufsize;
377
+ s->sym_end = (s->lit_bufsize - 1) * 3;
378
+ /* We avoid equality with lit_bufsize*3 because of wraparound at 64K
379
+ * on 16 bit machines and because stored blocks are restricted to
380
+ * 64K-1 bytes.
381
+ */
342382
343383
s->level = level;
344384
s->strategy = strategy;
345385
s->method = (Byte)method;
346386
@@ -486,17 +526,17 @@
486526
}
487527
s->status =
488528
#ifdef GZIP
489529
s->wrap == 2 ? GZIP_STATE :
490530
#endif
491
- s->wrap ? INIT_STATE : BUSY_STATE;
531
+ INIT_STATE;
492532
strm->adler =
493533
#ifdef GZIP
494534
s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
495535
#endif
496536
adler32(0L, Z_NULL, 0);
497
- s->last_flush = Z_NO_FLUSH;
537
+ s->last_flush = -2;
498538
499539
_tr_init(s);
500540
501541
return Z_OK;
502542
}
@@ -547,11 +587,12 @@
547587
deflate_state *s;
548588
int put;
549589
550590
if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
551591
s = strm->state;
552
- if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
592
+ if (bits < 0 || bits > 16 ||
593
+ s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3))
553594
return Z_BUF_ERROR;
554595
do {
555596
put = Buf_size - s->bi_valid;
556597
if (put > bits)
557598
put = bits;
@@ -585,16 +626,16 @@
585626
return Z_STREAM_ERROR;
586627
}
587628
func = configuration_table[s->level].func;
588629
589630
if ((strategy != s->strategy || func != configuration_table[level].func) &&
590
- s->high_water) {
631
+ s->last_flush != -2) {
591632
/* Flush the last buffer: */
592633
int err = deflate(strm, Z_BLOCK);
593634
if (err == Z_STREAM_ERROR)
594635
return err;
595
- if (strm->avail_out == 0)
636
+ if (strm->avail_in || (s->strstart - s->block_start) + s->lookahead)
596637
return Z_BUF_ERROR;
597638
}
598639
if (s->level != level) {
599640
if (s->level == 0 && s->matches != 0) {
600641
if (s->matches == 1)
@@ -809,10 +850,12 @@
809850
if (s->status == FINISH_STATE && strm->avail_in != 0) {
810851
ERR_RETURN(strm, Z_BUF_ERROR);
811852
}
812853
813854
/* Write the header */
855
+ if (s->status == INIT_STATE && s->wrap == 0)
856
+ s->status = BUSY_STATE;
814857
if (s->status == INIT_STATE) {
815858
/* zlib header */
816859
uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
817860
uInt level_flags;
818861
@@ -1106,11 +1149,10 @@
11061149
#ifdef MAXSEG_64K
11071150
return Z_STREAM_ERROR;
11081151
#else
11091152
deflate_state *ds;
11101153
deflate_state *ss;
1111
- ushf *overlay;
11121154
11131155
11141156
if (deflateStateCheck(source) || dest == Z_NULL) {
11151157
return Z_STREAM_ERROR;
11161158
}
@@ -1126,12 +1168,11 @@
11261168
ds->strm = dest;
11271169
11281170
ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
11291171
ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos));
11301172
ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos));
1131
- overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
1132
- ds->pending_buf = (uchf *) overlay;
1173
+ ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, 4);
11331174
11341175
if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
11351176
ds->pending_buf == Z_NULL) {
11361177
deflateEnd (dest);
11371178
return Z_MEM_ERROR;
@@ -1141,12 +1182,11 @@
11411182
zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos));
11421183
zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos));
11431184
zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
11441185
11451186
ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
1146
- ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
1147
- ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
1187
+ ds->sym_buf = ds->pending_buf + ds->lit_bufsize;
11481188
11491189
ds->l_desc.dyn_tree = ds->dyn_ltree;
11501190
ds->d_desc.dyn_tree = ds->dyn_dtree;
11511191
ds->bl_desc.dyn_tree = ds->bl_tree;
11521192
@@ -1511,10 +1551,12 @@
15111551
15121552
zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more);
15131553
s->match_start -= wsize;
15141554
s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
15151555
s->block_start -= (long) wsize;
1556
+ if (s->insert > s->strstart)
1557
+ s->insert = s->strstart;
15161558
slide_hash(s);
15171559
more += wsize;
15181560
}
15191561
if (s->strm->avail_in == 0) break;
15201562
@@ -1740,24 +1782,27 @@
17401782
*/
17411783
if (used >= s->w_size) { /* supplant the previous history */
17421784
s->matches = 2; /* clear hash */
17431785
zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);
17441786
s->strstart = s->w_size;
1787
+ s->insert = s->strstart;
17451788
}
17461789
else {
17471790
if (s->window_size - s->strstart <= used) {
17481791
/* Slide the window down. */
17491792
s->strstart -= s->w_size;
17501793
zmemcpy(s->window, s->window + s->w_size, s->strstart);
17511794
if (s->matches < 2)
17521795
s->matches++; /* add a pending slide_hash() */
1796
+ if (s->insert > s->strstart)
1797
+ s->insert = s->strstart;
17531798
}
17541799
zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);
17551800
s->strstart += used;
1801
+ s->insert += MIN(used, s->w_size - s->insert);
17561802
}
17571803
s->block_start = s->strstart;
1758
- s->insert += MIN(used, s->w_size - s->insert);
17591804
}
17601805
if (s->high_water < s->strstart)
17611806
s->high_water = s->strstart;
17621807
17631808
/* If the last block was written to next_out, then done. */
@@ -1768,25 +1813,28 @@
17681813
if (flush != Z_NO_FLUSH && flush != Z_FINISH &&
17691814
s->strm->avail_in == 0 && (long)s->strstart == s->block_start)
17701815
return block_done;
17711816
17721817
/* Fill the window with any remaining input. */
1773
- have = s->window_size - s->strstart - 1;
1818
+ have = s->window_size - s->strstart;
17741819
if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) {
17751820
/* Slide the window down. */
17761821
s->block_start -= s->w_size;
17771822
s->strstart -= s->w_size;
17781823
zmemcpy(s->window, s->window + s->w_size, s->strstart);
17791824
if (s->matches < 2)
17801825
s->matches++; /* add a pending slide_hash() */
17811826
have += s->w_size; /* more space now */
1827
+ if (s->insert > s->strstart)
1828
+ s->insert = s->strstart;
17821829
}
17831830
if (have > s->strm->avail_in)
17841831
have = s->strm->avail_in;
17851832
if (have) {
17861833
read_buf(s->strm, s->window + s->strstart, have);
17871834
s->strstart += have;
1835
+ s->insert += MIN(have, s->w_size - s->insert);
17881836
}
17891837
if (s->high_water < s->strstart)
17901838
s->high_water = s->strstart;
17911839
17921840
/* There was not enough avail_out to write a complete worthy or flushed
@@ -1910,11 +1958,11 @@
19101958
s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
19111959
if (flush == Z_FINISH) {
19121960
FLUSH_BLOCK(s, 1);
19131961
return finish_done;
19141962
}
1915
- if (s->last_lit)
1963
+ if (s->sym_next)
19161964
FLUSH_BLOCK(s, 0);
19171965
return block_done;
19181966
}
19191967
19201968
#ifndef FASTEST
@@ -2041,11 +2089,11 @@
20412089
s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
20422090
if (flush == Z_FINISH) {
20432091
FLUSH_BLOCK(s, 1);
20442092
return finish_done;
20452093
}
2046
- if (s->last_lit)
2094
+ if (s->sym_next)
20472095
FLUSH_BLOCK(s, 0);
20482096
return block_done;
20492097
}
20502098
#endif /* FASTEST */
20512099
@@ -2116,11 +2164,11 @@
21162164
s->insert = 0;
21172165
if (flush == Z_FINISH) {
21182166
FLUSH_BLOCK(s, 1);
21192167
return finish_done;
21202168
}
2121
- if (s->last_lit)
2169
+ if (s->sym_next)
21222170
FLUSH_BLOCK(s, 0);
21232171
return block_done;
21242172
}
21252173
21262174
/* ===========================================================================
@@ -2155,9 +2203,9 @@
21552203
s->insert = 0;
21562204
if (flush == Z_FINISH) {
21572205
FLUSH_BLOCK(s, 1);
21582206
return finish_done;
21592207
}
2160
- if (s->last_lit)
2208
+ if (s->sym_next)
21612209
FLUSH_BLOCK(s, 0);
21622210
return block_done;
21632211
}
21642212
--- compat/zlib/deflate.c
+++ compat/zlib/deflate.c
@@ -1,7 +1,7 @@
1 /* deflate.c -- compress data using the deflation algorithm
2 * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 /*
7 * ALGORITHM
@@ -50,11 +50,11 @@
50 /* @(#) $Id$ */
51
52 #include "deflate.h"
53
54 const char deflate_copyright[] =
55 " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler ";
56 /*
57 If you use the zlib library in a product, an acknowledgment is welcome
58 in the documentation of your product. If for some reason you cannot
59 include such an acknowledgment, I would appreciate that you keep this
60 copyright string in the executable of your product.
@@ -188,12 +188,15 @@
188 /* ===========================================================================
189 * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
190 * prev[] will be initialized on the fly.
191 */
192 #define CLEAR_HASH(s) \
193 s->head[s->hash_size-1] = NIL; \
194 zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
 
 
 
195
196 /* ===========================================================================
197 * Slide the hash table when sliding the window down (could be avoided with 32
198 * bit values at the expense of memory usage). We slide even when level == 0 to
199 * keep the hash table consistent if we switch back to level > 0 later.
@@ -250,15 +253,10 @@
250 {
251 deflate_state *s;
252 int wrap = 1;
253 static const char my_version[] = ZLIB_VERSION;
254
255 ushf *overlay;
256 /* We overlay pending_buf and d_buf+l_buf. This works since the average
257 * output size for (length,distance) codes is <= 24 bits.
258 */
259
260 if (version == Z_NULL || version[0] != my_version[0] ||
261 stream_size != sizeof(z_stream)) {
262 return Z_VERSION_ERROR;
263 }
264 if (strm == Z_NULL) return Z_STREAM_ERROR;
@@ -324,23 +322,65 @@
324
325 s->high_water = 0; /* nothing written to s->window yet */
326
327 s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
328
329 overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
330 s->pending_buf = (uchf *) overlay;
331 s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
332
333 if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
334 s->pending_buf == Z_NULL) {
335 s->status = FINISH_STATE;
336 strm->msg = ERR_MSG(Z_MEM_ERROR);
337 deflateEnd (strm);
338 return Z_MEM_ERROR;
339 }
340 s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
341 s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
 
 
 
 
342
343 s->level = level;
344 s->strategy = strategy;
345 s->method = (Byte)method;
346
@@ -486,17 +526,17 @@
486 }
487 s->status =
488 #ifdef GZIP
489 s->wrap == 2 ? GZIP_STATE :
490 #endif
491 s->wrap ? INIT_STATE : BUSY_STATE;
492 strm->adler =
493 #ifdef GZIP
494 s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
495 #endif
496 adler32(0L, Z_NULL, 0);
497 s->last_flush = Z_NO_FLUSH;
498
499 _tr_init(s);
500
501 return Z_OK;
502 }
@@ -547,11 +587,12 @@
547 deflate_state *s;
548 int put;
549
550 if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
551 s = strm->state;
552 if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
 
553 return Z_BUF_ERROR;
554 do {
555 put = Buf_size - s->bi_valid;
556 if (put > bits)
557 put = bits;
@@ -585,16 +626,16 @@
585 return Z_STREAM_ERROR;
586 }
587 func = configuration_table[s->level].func;
588
589 if ((strategy != s->strategy || func != configuration_table[level].func) &&
590 s->high_water) {
591 /* Flush the last buffer: */
592 int err = deflate(strm, Z_BLOCK);
593 if (err == Z_STREAM_ERROR)
594 return err;
595 if (strm->avail_out == 0)
596 return Z_BUF_ERROR;
597 }
598 if (s->level != level) {
599 if (s->level == 0 && s->matches != 0) {
600 if (s->matches == 1)
@@ -809,10 +850,12 @@
809 if (s->status == FINISH_STATE && strm->avail_in != 0) {
810 ERR_RETURN(strm, Z_BUF_ERROR);
811 }
812
813 /* Write the header */
 
 
814 if (s->status == INIT_STATE) {
815 /* zlib header */
816 uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
817 uInt level_flags;
818
@@ -1106,11 +1149,10 @@
1106 #ifdef MAXSEG_64K
1107 return Z_STREAM_ERROR;
1108 #else
1109 deflate_state *ds;
1110 deflate_state *ss;
1111 ushf *overlay;
1112
1113
1114 if (deflateStateCheck(source) || dest == Z_NULL) {
1115 return Z_STREAM_ERROR;
1116 }
@@ -1126,12 +1168,11 @@
1126 ds->strm = dest;
1127
1128 ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
1129 ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos));
1130 ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos));
1131 overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
1132 ds->pending_buf = (uchf *) overlay;
1133
1134 if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
1135 ds->pending_buf == Z_NULL) {
1136 deflateEnd (dest);
1137 return Z_MEM_ERROR;
@@ -1141,12 +1182,11 @@
1141 zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos));
1142 zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos));
1143 zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
1144
1145 ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
1146 ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
1147 ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
1148
1149 ds->l_desc.dyn_tree = ds->dyn_ltree;
1150 ds->d_desc.dyn_tree = ds->dyn_dtree;
1151 ds->bl_desc.dyn_tree = ds->bl_tree;
1152
@@ -1511,10 +1551,12 @@
1511
1512 zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more);
1513 s->match_start -= wsize;
1514 s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
1515 s->block_start -= (long) wsize;
 
 
1516 slide_hash(s);
1517 more += wsize;
1518 }
1519 if (s->strm->avail_in == 0) break;
1520
@@ -1740,24 +1782,27 @@
1740 */
1741 if (used >= s->w_size) { /* supplant the previous history */
1742 s->matches = 2; /* clear hash */
1743 zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);
1744 s->strstart = s->w_size;
 
1745 }
1746 else {
1747 if (s->window_size - s->strstart <= used) {
1748 /* Slide the window down. */
1749 s->strstart -= s->w_size;
1750 zmemcpy(s->window, s->window + s->w_size, s->strstart);
1751 if (s->matches < 2)
1752 s->matches++; /* add a pending slide_hash() */
 
 
1753 }
1754 zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);
1755 s->strstart += used;
 
1756 }
1757 s->block_start = s->strstart;
1758 s->insert += MIN(used, s->w_size - s->insert);
1759 }
1760 if (s->high_water < s->strstart)
1761 s->high_water = s->strstart;
1762
1763 /* If the last block was written to next_out, then done. */
@@ -1768,25 +1813,28 @@
1768 if (flush != Z_NO_FLUSH && flush != Z_FINISH &&
1769 s->strm->avail_in == 0 && (long)s->strstart == s->block_start)
1770 return block_done;
1771
1772 /* Fill the window with any remaining input. */
1773 have = s->window_size - s->strstart - 1;
1774 if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) {
1775 /* Slide the window down. */
1776 s->block_start -= s->w_size;
1777 s->strstart -= s->w_size;
1778 zmemcpy(s->window, s->window + s->w_size, s->strstart);
1779 if (s->matches < 2)
1780 s->matches++; /* add a pending slide_hash() */
1781 have += s->w_size; /* more space now */
 
 
1782 }
1783 if (have > s->strm->avail_in)
1784 have = s->strm->avail_in;
1785 if (have) {
1786 read_buf(s->strm, s->window + s->strstart, have);
1787 s->strstart += have;
 
1788 }
1789 if (s->high_water < s->strstart)
1790 s->high_water = s->strstart;
1791
1792 /* There was not enough avail_out to write a complete worthy or flushed
@@ -1910,11 +1958,11 @@
1910 s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
1911 if (flush == Z_FINISH) {
1912 FLUSH_BLOCK(s, 1);
1913 return finish_done;
1914 }
1915 if (s->last_lit)
1916 FLUSH_BLOCK(s, 0);
1917 return block_done;
1918 }
1919
1920 #ifndef FASTEST
@@ -2041,11 +2089,11 @@
2041 s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
2042 if (flush == Z_FINISH) {
2043 FLUSH_BLOCK(s, 1);
2044 return finish_done;
2045 }
2046 if (s->last_lit)
2047 FLUSH_BLOCK(s, 0);
2048 return block_done;
2049 }
2050 #endif /* FASTEST */
2051
@@ -2116,11 +2164,11 @@
2116 s->insert = 0;
2117 if (flush == Z_FINISH) {
2118 FLUSH_BLOCK(s, 1);
2119 return finish_done;
2120 }
2121 if (s->last_lit)
2122 FLUSH_BLOCK(s, 0);
2123 return block_done;
2124 }
2125
2126 /* ===========================================================================
@@ -2155,9 +2203,9 @@
2155 s->insert = 0;
2156 if (flush == Z_FINISH) {
2157 FLUSH_BLOCK(s, 1);
2158 return finish_done;
2159 }
2160 if (s->last_lit)
2161 FLUSH_BLOCK(s, 0);
2162 return block_done;
2163 }
2164
--- compat/zlib/deflate.c
+++ compat/zlib/deflate.c
@@ -1,7 +1,7 @@
1 /* deflate.c -- compress data using the deflation algorithm
2 * Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 /*
7 * ALGORITHM
@@ -50,11 +50,11 @@
50 /* @(#) $Id$ */
51
52 #include "deflate.h"
53
54 const char deflate_copyright[] =
55 " deflate 1.2.12 Copyright 1995-2022 Jean-loup Gailly and Mark Adler ";
56 /*
57 If you use the zlib library in a product, an acknowledgment is welcome
58 in the documentation of your product. If for some reason you cannot
59 include such an acknowledgment, I would appreciate that you keep this
60 copyright string in the executable of your product.
@@ -188,12 +188,15 @@
188 /* ===========================================================================
189 * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
190 * prev[] will be initialized on the fly.
191 */
192 #define CLEAR_HASH(s) \
193 do { \
194 s->head[s->hash_size-1] = NIL; \
195 zmemzero((Bytef *)s->head, \
196 (unsigned)(s->hash_size-1)*sizeof(*s->head)); \
197 } while (0)
198
199 /* ===========================================================================
200 * Slide the hash table when sliding the window down (could be avoided with 32
201 * bit values at the expense of memory usage). We slide even when level == 0 to
202 * keep the hash table consistent if we switch back to level > 0 later.
@@ -250,15 +253,10 @@
253 {
254 deflate_state *s;
255 int wrap = 1;
256 static const char my_version[] = ZLIB_VERSION;
257
 
 
 
 
 
258 if (version == Z_NULL || version[0] != my_version[0] ||
259 stream_size != sizeof(z_stream)) {
260 return Z_VERSION_ERROR;
261 }
262 if (strm == Z_NULL) return Z_STREAM_ERROR;
@@ -324,23 +322,65 @@
322
323 s->high_water = 0; /* nothing written to s->window yet */
324
325 s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
326
327 /* We overlay pending_buf and sym_buf. This works since the average size
328 * for length/distance pairs over any compressed block is assured to be 31
329 * bits or less.
330 *
331 * Analysis: The longest fixed codes are a length code of 8 bits plus 5
332 * extra bits, for lengths 131 to 257. The longest fixed distance codes are
333 * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest
334 * possible fixed-codes length/distance pair is then 31 bits total.
335 *
336 * sym_buf starts one-fourth of the way into pending_buf. So there are
337 * three bytes in sym_buf for every four bytes in pending_buf. Each symbol
338 * in sym_buf is three bytes -- two for the distance and one for the
339 * literal/length. As each symbol is consumed, the pointer to the next
340 * sym_buf value to read moves forward three bytes. From that symbol, up to
341 * 31 bits are written to pending_buf. The closest the written pending_buf
342 * bits gets to the next sym_buf symbol to read is just before the last
343 * code is written. At that time, 31*(n-2) bits have been written, just
344 * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at
345 * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1
346 * symbols are written.) The closest the writing gets to what is unread is
347 * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and
348 * can range from 128 to 32768.
349 *
350 * Therefore, at a minimum, there are 142 bits of space between what is
351 * written and what is read in the overlain buffers, so the symbols cannot
352 * be overwritten by the compressed data. That space is actually 139 bits,
353 * due to the three-bit fixed-code block header.
354 *
355 * That covers the case where either Z_FIXED is specified, forcing fixed
356 * codes, or when the use of fixed codes is chosen, because that choice
357 * results in a smaller compressed block than dynamic codes. That latter
358 * condition then assures that the above analysis also covers all dynamic
359 * blocks. A dynamic-code block will only be chosen to be emitted if it has
360 * fewer bits than a fixed-code block would for the same set of symbols.
361 * Therefore its average symbol length is assured to be less than 31. So
362 * the compressed data for a dynamic block also cannot overwrite the
363 * symbols from which it is being constructed.
364 */
365
366 s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, 4);
367 s->pending_buf_size = (ulg)s->lit_bufsize * 4;
368
369 if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
370 s->pending_buf == Z_NULL) {
371 s->status = FINISH_STATE;
372 strm->msg = ERR_MSG(Z_MEM_ERROR);
373 deflateEnd (strm);
374 return Z_MEM_ERROR;
375 }
376 s->sym_buf = s->pending_buf + s->lit_bufsize;
377 s->sym_end = (s->lit_bufsize - 1) * 3;
378 /* We avoid equality with lit_bufsize*3 because of wraparound at 64K
379 * on 16 bit machines and because stored blocks are restricted to
380 * 64K-1 bytes.
381 */
382
383 s->level = level;
384 s->strategy = strategy;
385 s->method = (Byte)method;
386
@@ -486,17 +526,17 @@
526 }
527 s->status =
528 #ifdef GZIP
529 s->wrap == 2 ? GZIP_STATE :
530 #endif
531 INIT_STATE;
532 strm->adler =
533 #ifdef GZIP
534 s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
535 #endif
536 adler32(0L, Z_NULL, 0);
537 s->last_flush = -2;
538
539 _tr_init(s);
540
541 return Z_OK;
542 }
@@ -547,11 +587,12 @@
587 deflate_state *s;
588 int put;
589
590 if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
591 s = strm->state;
592 if (bits < 0 || bits > 16 ||
593 s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3))
594 return Z_BUF_ERROR;
595 do {
596 put = Buf_size - s->bi_valid;
597 if (put > bits)
598 put = bits;
@@ -585,16 +626,16 @@
626 return Z_STREAM_ERROR;
627 }
628 func = configuration_table[s->level].func;
629
630 if ((strategy != s->strategy || func != configuration_table[level].func) &&
631 s->last_flush != -2) {
632 /* Flush the last buffer: */
633 int err = deflate(strm, Z_BLOCK);
634 if (err == Z_STREAM_ERROR)
635 return err;
636 if (strm->avail_in || (s->strstart - s->block_start) + s->lookahead)
637 return Z_BUF_ERROR;
638 }
639 if (s->level != level) {
640 if (s->level == 0 && s->matches != 0) {
641 if (s->matches == 1)
@@ -809,10 +850,12 @@
850 if (s->status == FINISH_STATE && strm->avail_in != 0) {
851 ERR_RETURN(strm, Z_BUF_ERROR);
852 }
853
854 /* Write the header */
855 if (s->status == INIT_STATE && s->wrap == 0)
856 s->status = BUSY_STATE;
857 if (s->status == INIT_STATE) {
858 /* zlib header */
859 uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
860 uInt level_flags;
861
@@ -1106,11 +1149,10 @@
1149 #ifdef MAXSEG_64K
1150 return Z_STREAM_ERROR;
1151 #else
1152 deflate_state *ds;
1153 deflate_state *ss;
 
1154
1155
1156 if (deflateStateCheck(source) || dest == Z_NULL) {
1157 return Z_STREAM_ERROR;
1158 }
@@ -1126,12 +1168,11 @@
1168 ds->strm = dest;
1169
1170 ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
1171 ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos));
1172 ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos));
1173 ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, 4);
 
1174
1175 if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
1176 ds->pending_buf == Z_NULL) {
1177 deflateEnd (dest);
1178 return Z_MEM_ERROR;
@@ -1141,12 +1182,11 @@
1182 zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos));
1183 zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos));
1184 zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
1185
1186 ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
1187 ds->sym_buf = ds->pending_buf + ds->lit_bufsize;
 
1188
1189 ds->l_desc.dyn_tree = ds->dyn_ltree;
1190 ds->d_desc.dyn_tree = ds->dyn_dtree;
1191 ds->bl_desc.dyn_tree = ds->bl_tree;
1192
@@ -1511,10 +1551,12 @@
1551
1552 zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more);
1553 s->match_start -= wsize;
1554 s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
1555 s->block_start -= (long) wsize;
1556 if (s->insert > s->strstart)
1557 s->insert = s->strstart;
1558 slide_hash(s);
1559 more += wsize;
1560 }
1561 if (s->strm->avail_in == 0) break;
1562
@@ -1740,24 +1782,27 @@
1782 */
1783 if (used >= s->w_size) { /* supplant the previous history */
1784 s->matches = 2; /* clear hash */
1785 zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);
1786 s->strstart = s->w_size;
1787 s->insert = s->strstart;
1788 }
1789 else {
1790 if (s->window_size - s->strstart <= used) {
1791 /* Slide the window down. */
1792 s->strstart -= s->w_size;
1793 zmemcpy(s->window, s->window + s->w_size, s->strstart);
1794 if (s->matches < 2)
1795 s->matches++; /* add a pending slide_hash() */
1796 if (s->insert > s->strstart)
1797 s->insert = s->strstart;
1798 }
1799 zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);
1800 s->strstart += used;
1801 s->insert += MIN(used, s->w_size - s->insert);
1802 }
1803 s->block_start = s->strstart;
 
1804 }
1805 if (s->high_water < s->strstart)
1806 s->high_water = s->strstart;
1807
1808 /* If the last block was written to next_out, then done. */
@@ -1768,25 +1813,28 @@
1813 if (flush != Z_NO_FLUSH && flush != Z_FINISH &&
1814 s->strm->avail_in == 0 && (long)s->strstart == s->block_start)
1815 return block_done;
1816
1817 /* Fill the window with any remaining input. */
1818 have = s->window_size - s->strstart;
1819 if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) {
1820 /* Slide the window down. */
1821 s->block_start -= s->w_size;
1822 s->strstart -= s->w_size;
1823 zmemcpy(s->window, s->window + s->w_size, s->strstart);
1824 if (s->matches < 2)
1825 s->matches++; /* add a pending slide_hash() */
1826 have += s->w_size; /* more space now */
1827 if (s->insert > s->strstart)
1828 s->insert = s->strstart;
1829 }
1830 if (have > s->strm->avail_in)
1831 have = s->strm->avail_in;
1832 if (have) {
1833 read_buf(s->strm, s->window + s->strstart, have);
1834 s->strstart += have;
1835 s->insert += MIN(have, s->w_size - s->insert);
1836 }
1837 if (s->high_water < s->strstart)
1838 s->high_water = s->strstart;
1839
1840 /* There was not enough avail_out to write a complete worthy or flushed
@@ -1910,11 +1958,11 @@
1958 s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
1959 if (flush == Z_FINISH) {
1960 FLUSH_BLOCK(s, 1);
1961 return finish_done;
1962 }
1963 if (s->sym_next)
1964 FLUSH_BLOCK(s, 0);
1965 return block_done;
1966 }
1967
1968 #ifndef FASTEST
@@ -2041,11 +2089,11 @@
2089 s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
2090 if (flush == Z_FINISH) {
2091 FLUSH_BLOCK(s, 1);
2092 return finish_done;
2093 }
2094 if (s->sym_next)
2095 FLUSH_BLOCK(s, 0);
2096 return block_done;
2097 }
2098 #endif /* FASTEST */
2099
@@ -2116,11 +2164,11 @@
2164 s->insert = 0;
2165 if (flush == Z_FINISH) {
2166 FLUSH_BLOCK(s, 1);
2167 return finish_done;
2168 }
2169 if (s->sym_next)
2170 FLUSH_BLOCK(s, 0);
2171 return block_done;
2172 }
2173
2174 /* ===========================================================================
@@ -2155,9 +2203,9 @@
2203 s->insert = 0;
2204 if (flush == Z_FINISH) {
2205 FLUSH_BLOCK(s, 1);
2206 return finish_done;
2207 }
2208 if (s->sym_next)
2209 FLUSH_BLOCK(s, 0);
2210 return block_done;
2211 }
2212
--- compat/zlib/deflate.h
+++ compat/zlib/deflate.h
@@ -1,7 +1,7 @@
11
/* deflate.h -- internal compression state
2
- * Copyright (C) 1995-2016 Jean-loup Gailly
2
+ * Copyright (C) 1995-2018 Jean-loup Gailly
33
* For conditions of distribution and use, see copyright notice in zlib.h
44
*/
55
66
/* WARNING: this file should *not* be used by applications. It is
77
part of the implementation of the compression library and is
@@ -215,11 +215,11 @@
215215
216216
uch depth[2*L_CODES+1];
217217
/* Depth of each subtree used as tie breaker for trees of equal frequency
218218
*/
219219
220
- uchf *l_buf; /* buffer for literals or lengths */
220
+ uchf *sym_buf; /* buffer for distances and literals/lengths */
221221
222222
uInt lit_bufsize;
223223
/* Size of match buffer for literals/lengths. There are 4 reasons for
224224
* limiting lit_bufsize to 64K:
225225
* - frequencies can be kept in 16 bit counters
@@ -237,17 +237,12 @@
237237
* fast adaptation but have of course the overhead of transmitting
238238
* trees more frequently.
239239
* - I can't count above 4
240240
*/
241241
242
- uInt last_lit; /* running index in l_buf */
243
-
244
- ushf *d_buf;
245
- /* Buffer for distances. To simplify the code, d_buf and l_buf have
246
- * the same number of elements. To use different lengths, an extra flag
247
- * array would be necessary.
248
- */
242
+ uInt sym_next; /* running index in sym_buf */
243
+ uInt sym_end; /* symbol table full when sym_next reaches this */
249244
250245
ulg opt_len; /* bit length of current block with optimal trees */
251246
ulg static_len; /* bit length of current block with static trees */
252247
uInt matches; /* number of string matches in current block */
253248
uInt insert; /* bytes at end of window left to insert */
@@ -323,27 +318,29 @@
323318
extern const uch ZLIB_INTERNAL _dist_code[];
324319
#endif
325320
326321
# define _tr_tally_lit(s, c, flush) \
327322
{ uch cc = (c); \
328
- s->d_buf[s->last_lit] = 0; \
329
- s->l_buf[s->last_lit++] = cc; \
323
+ s->sym_buf[s->sym_next++] = 0; \
324
+ s->sym_buf[s->sym_next++] = 0; \
325
+ s->sym_buf[s->sym_next++] = cc; \
330326
s->dyn_ltree[cc].Freq++; \
331
- flush = (s->last_lit == s->lit_bufsize-1); \
327
+ flush = (s->sym_next == s->sym_end); \
332328
}
333329
# define _tr_tally_dist(s, distance, length, flush) \
334330
{ uch len = (uch)(length); \
335331
ush dist = (ush)(distance); \
336
- s->d_buf[s->last_lit] = dist; \
337
- s->l_buf[s->last_lit++] = len; \
332
+ s->sym_buf[s->sym_next++] = dist; \
333
+ s->sym_buf[s->sym_next++] = dist >> 8; \
334
+ s->sym_buf[s->sym_next++] = len; \
338335
dist--; \
339336
s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
340337
s->dyn_dtree[d_code(dist)].Freq++; \
341
- flush = (s->last_lit == s->lit_bufsize-1); \
338
+ flush = (s->sym_next == s->sym_end); \
342339
}
343340
#else
344341
# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
345342
# define _tr_tally_dist(s, distance, length, flush) \
346343
flush = _tr_tally(s, distance, length)
347344
#endif
348345
349346
#endif /* DEFLATE_H */
350347
--- compat/zlib/deflate.h
+++ compat/zlib/deflate.h
@@ -1,7 +1,7 @@
1 /* deflate.h -- internal compression state
2 * Copyright (C) 1995-2016 Jean-loup Gailly
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 /* WARNING: this file should *not* be used by applications. It is
7 part of the implementation of the compression library and is
@@ -215,11 +215,11 @@
215
216 uch depth[2*L_CODES+1];
217 /* Depth of each subtree used as tie breaker for trees of equal frequency
218 */
219
220 uchf *l_buf; /* buffer for literals or lengths */
221
222 uInt lit_bufsize;
223 /* Size of match buffer for literals/lengths. There are 4 reasons for
224 * limiting lit_bufsize to 64K:
225 * - frequencies can be kept in 16 bit counters
@@ -237,17 +237,12 @@
237 * fast adaptation but have of course the overhead of transmitting
238 * trees more frequently.
239 * - I can't count above 4
240 */
241
242 uInt last_lit; /* running index in l_buf */
243
244 ushf *d_buf;
245 /* Buffer for distances. To simplify the code, d_buf and l_buf have
246 * the same number of elements. To use different lengths, an extra flag
247 * array would be necessary.
248 */
249
250 ulg opt_len; /* bit length of current block with optimal trees */
251 ulg static_len; /* bit length of current block with static trees */
252 uInt matches; /* number of string matches in current block */
253 uInt insert; /* bytes at end of window left to insert */
@@ -323,27 +318,29 @@
323 extern const uch ZLIB_INTERNAL _dist_code[];
324 #endif
325
326 # define _tr_tally_lit(s, c, flush) \
327 { uch cc = (c); \
328 s->d_buf[s->last_lit] = 0; \
329 s->l_buf[s->last_lit++] = cc; \
 
330 s->dyn_ltree[cc].Freq++; \
331 flush = (s->last_lit == s->lit_bufsize-1); \
332 }
333 # define _tr_tally_dist(s, distance, length, flush) \
334 { uch len = (uch)(length); \
335 ush dist = (ush)(distance); \
336 s->d_buf[s->last_lit] = dist; \
337 s->l_buf[s->last_lit++] = len; \
 
338 dist--; \
339 s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
340 s->dyn_dtree[d_code(dist)].Freq++; \
341 flush = (s->last_lit == s->lit_bufsize-1); \
342 }
343 #else
344 # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
345 # define _tr_tally_dist(s, distance, length, flush) \
346 flush = _tr_tally(s, distance, length)
347 #endif
348
349 #endif /* DEFLATE_H */
350
--- compat/zlib/deflate.h
+++ compat/zlib/deflate.h
@@ -1,7 +1,7 @@
1 /* deflate.h -- internal compression state
2 * Copyright (C) 1995-2018 Jean-loup Gailly
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 /* WARNING: this file should *not* be used by applications. It is
7 part of the implementation of the compression library and is
@@ -215,11 +215,11 @@
215
216 uch depth[2*L_CODES+1];
217 /* Depth of each subtree used as tie breaker for trees of equal frequency
218 */
219
220 uchf *sym_buf; /* buffer for distances and literals/lengths */
221
222 uInt lit_bufsize;
223 /* Size of match buffer for literals/lengths. There are 4 reasons for
224 * limiting lit_bufsize to 64K:
225 * - frequencies can be kept in 16 bit counters
@@ -237,17 +237,12 @@
237 * fast adaptation but have of course the overhead of transmitting
238 * trees more frequently.
239 * - I can't count above 4
240 */
241
242 uInt sym_next; /* running index in sym_buf */
243 uInt sym_end; /* symbol table full when sym_next reaches this */
 
 
 
 
 
244
245 ulg opt_len; /* bit length of current block with optimal trees */
246 ulg static_len; /* bit length of current block with static trees */
247 uInt matches; /* number of string matches in current block */
248 uInt insert; /* bytes at end of window left to insert */
@@ -323,27 +318,29 @@
318 extern const uch ZLIB_INTERNAL _dist_code[];
319 #endif
320
321 # define _tr_tally_lit(s, c, flush) \
322 { uch cc = (c); \
323 s->sym_buf[s->sym_next++] = 0; \
324 s->sym_buf[s->sym_next++] = 0; \
325 s->sym_buf[s->sym_next++] = cc; \
326 s->dyn_ltree[cc].Freq++; \
327 flush = (s->sym_next == s->sym_end); \
328 }
329 # define _tr_tally_dist(s, distance, length, flush) \
330 { uch len = (uch)(length); \
331 ush dist = (ush)(distance); \
332 s->sym_buf[s->sym_next++] = dist; \
333 s->sym_buf[s->sym_next++] = dist >> 8; \
334 s->sym_buf[s->sym_next++] = len; \
335 dist--; \
336 s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
337 s->dyn_dtree[d_code(dist)].Freq++; \
338 flush = (s->sym_next == s->sym_end); \
339 }
340 #else
341 # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
342 # define _tr_tally_dist(s, distance, length, flush) \
343 flush = _tr_tally(s, distance, length)
344 #endif
345
346 #endif /* DEFLATE_H */
347
--- compat/zlib/examples/README.examples
+++ compat/zlib/examples/README.examples
@@ -32,10 +32,14 @@
3232
efficiently and robustly maintain a message log file in gzip format
3333
- illustrates use of raw deflate, Z_PARTIAL_FLUSH, deflatePrime(),
3434
and deflateSetDictionary()
3535
- illustrates use of a gzip header extra field
3636
37
+gznorm.c
38
+ normalize a gzip file by combining members into a single member
39
+ - demonstrates how to concatenate deflate streams using Z_BLOCK
40
+
3741
zlib_how.html
3842
painfully comprehensive description of zpipe.c (see below)
3943
- describes in excruciating detail the use of deflate() and inflate()
4044
4145
zpipe.c
@@ -42,8 +46,9 @@
4246
reads and writes zlib streams from stdin to stdout
4347
- illustrates the proper use of deflate() and inflate()
4448
- deeply commented in zlib_how.html (see above)
4549
4650
zran.c
51
+zran.h
4752
index a zlib or gzip stream and randomly access it
4853
- illustrates the use of Z_BLOCK, inflatePrime(), and
4954
inflateSetDictionary() to provide random access
5055
--- compat/zlib/examples/README.examples
+++ compat/zlib/examples/README.examples
@@ -32,10 +32,14 @@
32 efficiently and robustly maintain a message log file in gzip format
33 - illustrates use of raw deflate, Z_PARTIAL_FLUSH, deflatePrime(),
34 and deflateSetDictionary()
35 - illustrates use of a gzip header extra field
36
 
 
 
 
37 zlib_how.html
38 painfully comprehensive description of zpipe.c (see below)
39 - describes in excruciating detail the use of deflate() and inflate()
40
41 zpipe.c
@@ -42,8 +46,9 @@
42 reads and writes zlib streams from stdin to stdout
43 - illustrates the proper use of deflate() and inflate()
44 - deeply commented in zlib_how.html (see above)
45
46 zran.c
 
47 index a zlib or gzip stream and randomly access it
48 - illustrates the use of Z_BLOCK, inflatePrime(), and
49 inflateSetDictionary() to provide random access
50
--- compat/zlib/examples/README.examples
+++ compat/zlib/examples/README.examples
@@ -32,10 +32,14 @@
32 efficiently and robustly maintain a message log file in gzip format
33 - illustrates use of raw deflate, Z_PARTIAL_FLUSH, deflatePrime(),
34 and deflateSetDictionary()
35 - illustrates use of a gzip header extra field
36
37 gznorm.c
38 normalize a gzip file by combining members into a single member
39 - demonstrates how to concatenate deflate streams using Z_BLOCK
40
41 zlib_how.html
42 painfully comprehensive description of zpipe.c (see below)
43 - describes in excruciating detail the use of deflate() and inflate()
44
45 zpipe.c
@@ -42,8 +46,9 @@
46 reads and writes zlib streams from stdin to stdout
47 - illustrates the proper use of deflate() and inflate()
48 - deeply commented in zlib_how.html (see above)
49
50 zran.c
51 zran.h
52 index a zlib or gzip stream and randomly access it
53 - illustrates the use of Z_BLOCK, inflatePrime(), and
54 inflateSetDictionary() to provide random access
55
--- compat/zlib/examples/enough.c
+++ compat/zlib/examples/enough.c
@@ -1,9 +1,9 @@
11
/* enough.c -- determine the maximum size of inflate's Huffman code tables over
2
- * all possible valid and complete Huffman codes, subject to a length limit.
3
- * Copyright (C) 2007, 2008, 2012 Mark Adler
4
- * Version 1.4 18 August 2012 Mark Adler
2
+ * all possible valid and complete prefix codes, subject to a length limit.
3
+ * Copyright (C) 2007, 2008, 2012, 2018 Mark Adler
4
+ * Version 1.5 5 August 2018 Mark Adler
55
*/
66
77
/* Version history:
88
1.0 3 Jan 2007 First version (derived from codecount.c version 1.4)
99
1.1 4 Jan 2007 Use faster incremental table usage computation
@@ -15,105 +15,111 @@
1515
Fix bug for initial root table size == max - 1
1616
Use a macro to compute the history index
1717
1.4 18 Aug 2012 Avoid shifts more than bits in type (caused endless loop!)
1818
Clean up comparisons of different types
1919
Clean up code indentation
20
+ 1.5 5 Aug 2018 Clean up code style, formatting, and comments
21
+ Show all the codes for the maximum, and only the maximum
2022
*/
2123
2224
/*
23
- Examine all possible Huffman codes for a given number of symbols and a
24
- maximum code length in bits to determine the maximum table size for zilb's
25
- inflate. Only complete Huffman codes are counted.
25
+ Examine all possible prefix codes for a given number of symbols and a
26
+ maximum code length in bits to determine the maximum table size for zlib's
27
+ inflate. Only complete prefix codes are counted.
2628
2729
Two codes are considered distinct if the vectors of the number of codes per
28
- length are not identical. So permutations of the symbol assignments result
30
+ length are not identical. So permutations of the symbol assignments result
2931
in the same code for the counting, as do permutations of the assignments of
3032
the bit values to the codes (i.e. only canonical codes are counted).
3133
3234
We build a code from shorter to longer lengths, determining how many symbols
33
- are coded at each length. At each step, we have how many symbols remain to
35
+ are coded at each length. At each step, we have how many symbols remain to
3436
be coded, what the last code length used was, and how many bit patterns of
3537
that length remain unused. Then we add one to the code length and double the
36
- number of unused patterns to graduate to the next code length. We then
38
+ number of unused patterns to graduate to the next code length. We then
3739
assign all portions of the remaining symbols to that code length that
38
- preserve the properties of a correct and eventually complete code. Those
40
+ preserve the properties of a correct and eventually complete code. Those
3941
properties are: we cannot use more bit patterns than are available; and when
40
- all the symbols are used, there are exactly zero possible bit patterns
41
- remaining.
42
+ all the symbols are used, there are exactly zero possible bit patterns left
43
+ unused.
4244
4345
The inflate Huffman decoding algorithm uses two-level lookup tables for
44
- speed. There is a single first-level table to decode codes up to root bits
45
- in length (root == 9 in the current inflate implementation). The table
46
- has 1 << root entries and is indexed by the next root bits of input. Codes
47
- shorter than root bits have replicated table entries, so that the correct
48
- entry is pointed to regardless of the bits that follow the short code. If
49
- the code is longer than root bits, then the table entry points to a second-
50
- level table. The size of that table is determined by the longest code with
51
- that root-bit prefix. If that longest code has length len, then the table
52
- has size 1 << (len - root), to index the remaining bits in that set of
53
- codes. Each subsequent root-bit prefix then has its own sub-table. The
54
- total number of table entries required by the code is calculated
55
- incrementally as the number of codes at each bit length is populated. When
56
- all of the codes are shorter than root bits, then root is reduced to the
57
- longest code length, resulting in a single, smaller, one-level table.
46
+ speed. There is a single first-level table to decode codes up to root bits
47
+ in length (root == 9 for literal/length codes and root == 6 for distance
48
+ codes, in the current inflate implementation). The base table has 1 << root
49
+ entries and is indexed by the next root bits of input. Codes shorter than
50
+ root bits have replicated table entries, so that the correct entry is
51
+ pointed to regardless of the bits that follow the short code. If the code is
52
+ longer than root bits, then the table entry points to a second-level table.
53
+ The size of that table is determined by the longest code with that root-bit
54
+ prefix. If that longest code has length len, then the table has size 1 <<
55
+ (len - root), to index the remaining bits in that set of codes. Each
56
+ subsequent root-bit prefix then has its own sub-table. The total number of
57
+ table entries required by the code is calculated incrementally as the number
58
+ of codes at each bit length is populated. When all of the codes are shorter
59
+ than root bits, then root is reduced to the longest code length, resulting
60
+ in a single, smaller, one-level table.
5861
5962
The inflate algorithm also provides for small values of root (relative to
6063
the log2 of the number of symbols), where the shortest code has more bits
61
- than root. In that case, root is increased to the length of the shortest
62
- code. This program, by design, does not handle that case, so it is verified
63
- that the number of symbols is less than 2^(root + 1).
64
+ than root. In that case, root is increased to the length of the shortest
65
+ code. This program, by design, does not handle that case, so it is verified
66
+ that the number of symbols is less than 1 << (root + 1).
6467
6568
In order to speed up the examination (by about ten orders of magnitude for
6669
the default arguments), the intermediate states in the build-up of a code
67
- are remembered and previously visited branches are pruned. The memory
70
+ are remembered and previously visited branches are pruned. The memory
6871
required for this will increase rapidly with the total number of symbols and
69
- the maximum code length in bits. However this is a very small price to pay
72
+ the maximum code length in bits. However this is a very small price to pay
7073
for the vast speedup.
7174
72
- First, all of the possible Huffman codes are counted, and reachable
75
+ First, all of the possible prefix codes are counted, and reachable
7376
intermediate states are noted by a non-zero count in a saved-results array.
7477
Second, the intermediate states that lead to (root + 1) bit or longer codes
7578
are used to look at all sub-codes from those junctures for their inflate
76
- memory usage. (The amount of memory used is not affected by the number of
79
+ memory usage. (The amount of memory used is not affected by the number of
7780
codes of root bits or less in length.) Third, the visited states in the
7881
construction of those sub-codes and the associated calculation of the table
7982
size is recalled in order to avoid recalculating from the same juncture.
8083
Beginning the code examination at (root + 1) bit codes, which is enabled by
8184
identifying the reachable nodes, accounts for about six of the orders of
82
- magnitude of improvement for the default arguments. About another four
83
- orders of magnitude come from not revisiting previous states. Out of
84
- approximately 2x10^16 possible Huffman codes, only about 2x10^6 sub-codes
85
+ magnitude of improvement for the default arguments. About another four
86
+ orders of magnitude come from not revisiting previous states. Out of
87
+ approximately 2x10^16 possible prefix codes, only about 2x10^6 sub-codes
8588
need to be examined to cover all of the possible table memory usage cases
8689
for the default arguments of 286 symbols limited to 15-bit codes.
8790
88
- Note that an unsigned long long type is used for counting. It is quite easy
89
- to exceed the capacity of an eight-byte integer with a large number of
90
- symbols and a large maximum code length, so multiple-precision arithmetic
91
- would need to replace the unsigned long long arithmetic in that case. This
92
- program will abort if an overflow occurs. The big_t type identifies where
93
- the counting takes place.
94
-
95
- An unsigned long long type is also used for calculating the number of
96
- possible codes remaining at the maximum length. This limits the maximum
97
- code length to the number of bits in a long long minus the number of bits
98
- needed to represent the symbols in a flat code. The code_t type identifies
99
- where the bit pattern counting takes place.
91
+ Note that the uintmax_t type is used for counting. It is quite easy to
92
+ exceed the capacity of an eight-byte integer with a large number of symbols
93
+ and a large maximum code length, so multiple-precision arithmetic would need
94
+ to replace the integer arithmetic in that case. This program will abort if
95
+ an overflow occurs. The big_t type identifies where the counting takes
96
+ place.
97
+
98
+ The uintmax_t type is also used for calculating the number of possible codes
99
+ remaining at the maximum length. This limits the maximum code length to the
100
+ number of bits in a long long minus the number of bits needed to represent
101
+ the symbols in a flat code. The code_t type identifies where the bit-pattern
102
+ counting takes place.
100103
*/
101104
102105
#include <stdio.h>
103106
#include <stdlib.h>
104107
#include <string.h>
108
+#include <stdarg.h>
109
+#include <stdint.h>
105110
#include <assert.h>
106111
107112
#define local static
108113
109
-/* special data types */
110
-typedef unsigned long long big_t; /* type for code counting */
111
-typedef unsigned long long code_t; /* type for bit pattern counting */
112
-struct tab { /* type for been here check */
113
- size_t len; /* length of bit vector in char's */
114
- char *vec; /* allocated bit vector */
114
+// Special data types.
115
+typedef uintmax_t big_t; // type for code counting
116
+#define PRIbig "ju" // printf format for big_t
117
+typedef uintmax_t code_t; // type for bit pattern counting
118
+struct tab { // type for been-here check
119
+ size_t len; // allocated length of bit vector in octets
120
+ char *vec; // allocated bit vector
115121
};
116122
117123
/* The array for saving results, num[], is indexed with this triplet:
118124
119125
syms: number of symbols remaining to code
@@ -124,449 +130,468 @@
124130
125131
syms: 3..totsym (totsym == total symbols to code)
126132
left: 2..syms - 1, but only the evens (so syms == 8 -> 2, 4, 6)
127133
len: 1..max - 1 (max == maximum code length in bits)
128134
129
- syms == 2 is not saved since that immediately leads to a single code. left
135
+ syms == 2 is not saved since that immediately leads to a single code. left
130136
must be even, since it represents the number of available bit patterns at
131
- the current length, which is double the number at the previous length.
132
- left ends at syms-1 since left == syms immediately results in a single code.
137
+ the current length, which is double the number at the previous length. left
138
+ ends at syms-1 since left == syms immediately results in a single code.
133139
(left > sym is not allowed since that would result in an incomplete code.)
134140
len is less than max, since the code completes immediately when len == max.
135141
136
- The offset into the array is calculated for the three indices with the
137
- first one (syms) being outermost, and the last one (len) being innermost.
138
- We build the array with length max-1 lists for the len index, with syms-3
139
- of those for each symbol. There are totsym-2 of those, with each one
140
- varying in length as a function of sym. See the calculation of index in
141
- count() for the index, and the calculation of size in main() for the size
142
- of the array.
142
+ The offset into the array is calculated for the three indices with the first
143
+ one (syms) being outermost, and the last one (len) being innermost. We build
144
+ the array with length max-1 lists for the len index, with syms-3 of those
145
+ for each symbol. There are totsym-2 of those, with each one varying in
146
+ length as a function of sym. See the calculation of index in map() for the
147
+ index, and the calculation of size in main() for the size of the array.
143148
144149
For the deflate example of 286 symbols limited to 15-bit codes, the array
145
- has 284,284 entries, taking up 2.17 MB for an 8-byte big_t. More than
146
- half of the space allocated for saved results is actually used -- not all
147
- possible triplets are reached in the generation of valid Huffman codes.
150
+ has 284,284 entries, taking up 2.17 MB for an 8-byte big_t. More than half
151
+ of the space allocated for saved results is actually used -- not all
152
+ possible triplets are reached in the generation of valid prefix codes.
148153
*/
149154
150155
/* The array for tracking visited states, done[], is itself indexed identically
151156
to the num[] array as described above for the (syms, left, len) triplet.
152157
Each element in the array is further indexed by the (mem, rem) doublet,
153158
where mem is the amount of inflate table space used so far, and rem is the
154
- remaining unused entries in the current inflate sub-table. Each indexed
159
+ remaining unused entries in the current inflate sub-table. Each indexed
155160
element is simply one bit indicating whether the state has been visited or
156
- not. Since the ranges for mem and rem are not known a priori, each bit
161
+ not. Since the ranges for mem and rem are not known a priori, each bit
157162
vector is of a variable size, and grows as needed to accommodate the visited
158
- states. mem and rem are used to calculate a single index in a triangular
159
- array. Since the range of mem is expected in the default case to be about
163
+ states. mem and rem are used to calculate a single index in a triangular
164
+ array. Since the range of mem is expected in the default case to be about
160165
ten times larger than the range of rem, the array is skewed to reduce the
161
- memory usage, with eight times the range for mem than for rem. See the
162
- calculations for offset and bit in beenhere() for the details.
166
+ memory usage, with eight times the range for mem than for rem. See the
167
+ calculations for offset and bit in been_here() for the details.
163168
164169
For the deflate example of 286 symbols limited to 15-bit codes, the bit
165
- vectors grow to total approximately 21 MB, in addition to the 4.3 MB done[]
166
- array itself.
170
+ vectors grow to total 5.5 MB, in addition to the 4.3 MB done array itself.
167171
*/
168172
169
-/* Globals to avoid propagating constants or constant pointers recursively */
170
-local int max; /* maximum allowed bit length for the codes */
171
-local int root; /* size of base code table in bits */
172
-local int large; /* largest code table so far */
173
-local size_t size; /* number of elements in num and done */
174
-local int *code; /* number of symbols assigned to each bit length */
175
-local big_t *num; /* saved results array for code counting */
176
-local struct tab *done; /* states already evaluated array */
177
-
178
-/* Index function for num[] and done[] */
179
-#define INDEX(i,j,k) (((size_t)((i-1)>>1)*((i-2)>>1)+(j>>1)-1)*(max-1)+k-1)
180
-
181
-/* Free allocated space. Uses globals code, num, and done. */
182
-local void cleanup(void)
183
-{
184
- size_t n;
185
-
186
- if (done != NULL) {
187
- for (n = 0; n < size; n++)
188
- if (done[n].len)
189
- free(done[n].vec);
190
- free(done);
191
- }
192
- if (num != NULL)
193
- free(num);
194
- if (code != NULL)
195
- free(code);
196
-}
197
-
198
-/* Return the number of possible Huffman codes using bit patterns of lengths
199
- len through max inclusive, coding syms symbols, with left bit patterns of
200
- length len unused -- return -1 if there is an overflow in the counting.
201
- Keep a record of previous results in num to prevent repeating the same
202
- calculation. Uses the globals max and num. */
203
-local big_t count(int syms, int len, int left)
204
-{
205
- big_t sum; /* number of possible codes from this juncture */
206
- big_t got; /* value returned from count() */
207
- int least; /* least number of syms to use at this juncture */
208
- int most; /* most number of syms to use at this juncture */
209
- int use; /* number of bit patterns to use in next call */
210
- size_t index; /* index of this case in *num */
211
-
212
- /* see if only one possible code */
173
+// Type for a variable-length, allocated string.
174
+typedef struct {
175
+ char *str; // pointer to allocated string
176
+ size_t size; // size of allocation
177
+ size_t len; // length of string, not including terminating zero
178
+} string_t;
179
+
180
+// Clear a string_t.
181
+local void string_clear(string_t *s) {
182
+ s->str[0] = 0;
183
+ s->len = 0;
184
+}
185
+
186
+// Initialize a string_t.
187
+local void string_init(string_t *s) {
188
+ s->size = 16;
189
+ s->str = malloc(s->size);
190
+ assert(s->str != NULL && "out of memory");
191
+ string_clear(s);
192
+}
193
+
194
+// Release the allocation of a string_t.
195
+local void string_free(string_t *s) {
196
+ free(s->str);
197
+ s->str = NULL;
198
+ s->size = 0;
199
+ s->len = 0;
200
+}
201
+
202
+// Save the results of printf with fmt and the subsequent argument list to s.
203
+// Each call appends to s. The allocated space for s is increased as needed.
204
+local void string_printf(string_t *s, char *fmt, ...) {
205
+ va_list ap;
206
+ va_start(ap, fmt);
207
+ size_t len = s->len;
208
+ int ret = vsnprintf(s->str + len, s->size - len, fmt, ap);
209
+ assert(ret >= 0 && "out of memory");
210
+ s->len += ret;
211
+ if (s->size < s->len + 1) {
212
+ do {
213
+ s->size <<= 1;
214
+ assert(s->size != 0 && "overflow");
215
+ } while (s->size < s->len + 1);
216
+ s->str = realloc(s->str, s->size);
217
+ assert(s->str != NULL && "out of memory");
218
+ vsnprintf(s->str + len, s->size - len, fmt, ap);
219
+ }
220
+ va_end(ap);
221
+}
222
+
223
+// Globals to avoid propagating constants or constant pointers recursively.
224
+struct {
225
+ int max; // maximum allowed bit length for the codes
226
+ int root; // size of base code table in bits
227
+ int large; // largest code table so far
228
+ size_t size; // number of elements in num and done
229
+ big_t tot; // total number of codes with maximum tables size
230
+ string_t out; // display of subcodes for maximum tables size
231
+ int *code; // number of symbols assigned to each bit length
232
+ big_t *num; // saved results array for code counting
233
+ struct tab *done; // states already evaluated array
234
+} g;
235
+
236
+// Index function for num[] and done[].
237
+local inline size_t map(int syms, int left, int len) {
238
+ return ((size_t)((syms - 1) >> 1) * ((syms - 2) >> 1) +
239
+ (left >> 1) - 1) * (g.max - 1) +
240
+ len - 1;
241
+}
242
+
243
+// Free allocated space in globals.
244
+local void cleanup(void) {
245
+ if (g.done != NULL) {
246
+ for (size_t n = 0; n < g.size; n++)
247
+ if (g.done[n].len)
248
+ free(g.done[n].vec);
249
+ g.size = 0;
250
+ free(g.done); g.done = NULL;
251
+ }
252
+ free(g.num); g.num = NULL;
253
+ free(g.code); g.code = NULL;
254
+ string_free(&g.out);
255
+}
256
+
257
+// Return the number of possible prefix codes using bit patterns of lengths len
258
+// through max inclusive, coding syms symbols, with left bit patterns of length
259
+// len unused -- return -1 if there is an overflow in the counting. Keep a
260
+// record of previous results in num to prevent repeating the same calculation.
261
+local big_t count(int syms, int left, int len) {
262
+ // see if only one possible code
213263
if (syms == left)
214264
return 1;
215265
216
- /* note and verify the expected state */
217
- assert(syms > left && left > 0 && len < max);
266
+ // note and verify the expected state
267
+ assert(syms > left && left > 0 && len < g.max);
218268
219
- /* see if we've done this one already */
220
- index = INDEX(syms, left, len);
221
- got = num[index];
269
+ // see if we've done this one already
270
+ size_t index = map(syms, left, len);
271
+ big_t got = g.num[index];
222272
if (got)
223
- return got; /* we have -- return the saved result */
273
+ return got; // we have -- return the saved result
224274
225
- /* we need to use at least this many bit patterns so that the code won't be
226
- incomplete at the next length (more bit patterns than symbols) */
227
- least = (left << 1) - syms;
275
+ // we need to use at least this many bit patterns so that the code won't be
276
+ // incomplete at the next length (more bit patterns than symbols)
277
+ int least = (left << 1) - syms;
228278
if (least < 0)
229279
least = 0;
230280
231
- /* we can use at most this many bit patterns, lest there not be enough
232
- available for the remaining symbols at the maximum length (if there were
233
- no limit to the code length, this would become: most = left - 1) */
234
- most = (((code_t)left << (max - len)) - syms) /
235
- (((code_t)1 << (max - len)) - 1);
236
-
237
- /* count all possible codes from this juncture and add them up */
238
- sum = 0;
239
- for (use = least; use <= most; use++) {
240
- got = count(syms - use, len + 1, (left - use) << 1);
281
+ // we can use at most this many bit patterns, lest there not be enough
282
+ // available for the remaining symbols at the maximum length (if there were
283
+ // no limit to the code length, this would become: most = left - 1)
284
+ int most = (((code_t)left << (g.max - len)) - syms) /
285
+ (((code_t)1 << (g.max - len)) - 1);
286
+
287
+ // count all possible codes from this juncture and add them up
288
+ big_t sum = 0;
289
+ for (int use = least; use <= most; use++) {
290
+ got = count(syms - use, (left - use) << 1, len + 1);
241291
sum += got;
242
- if (got == (big_t)0 - 1 || sum < got) /* overflow */
243
- return (big_t)0 - 1;
292
+ if (got == (big_t)-1 || sum < got) // overflow
293
+ return (big_t)-1;
244294
}
245295
246
- /* verify that all recursive calls are productive */
296
+ // verify that all recursive calls are productive
247297
assert(sum != 0);
248298
249
- /* save the result and return it */
250
- num[index] = sum;
299
+ // save the result and return it
300
+ g.num[index] = sum;
251301
return sum;
252302
}
253303
254
-/* Return true if we've been here before, set to true if not. Set a bit in a
255
- bit vector to indicate visiting this state. Each (syms,len,left) state
256
- has a variable size bit vector indexed by (mem,rem). The bit vector is
257
- lengthened if needed to allow setting the (mem,rem) bit. */
258
-local int beenhere(int syms, int len, int left, int mem, int rem)
259
-{
260
- size_t index; /* index for this state's bit vector */
261
- size_t offset; /* offset in this state's bit vector */
262
- int bit; /* mask for this state's bit */
263
- size_t length; /* length of the bit vector in bytes */
264
- char *vector; /* new or enlarged bit vector */
265
-
266
- /* point to vector for (syms,left,len), bit in vector for (mem,rem) */
267
- index = INDEX(syms, left, len);
268
- mem -= 1 << root;
269
- offset = (mem >> 3) + rem;
304
+// Return true if we've been here before, set to true if not. Set a bit in a
305
+// bit vector to indicate visiting this state. Each (syms,len,left) state has a
306
+// variable size bit vector indexed by (mem,rem). The bit vector is lengthened
307
+// as needed to allow setting the (mem,rem) bit.
308
+local int been_here(int syms, int left, int len, int mem, int rem) {
309
+ // point to vector for (syms,left,len), bit in vector for (mem,rem)
310
+ size_t index = map(syms, left, len);
311
+ mem -= 1 << g.root; // mem always includes the root table
312
+ mem >>= 1; // mem and rem are always even
313
+ rem >>= 1;
314
+ size_t offset = (mem >> 3) + rem;
270315
offset = ((offset * (offset + 1)) >> 1) + rem;
271
- bit = 1 << (mem & 7);
272
-
273
- /* see if we've been here */
274
- length = done[index].len;
275
- if (offset < length && (done[index].vec[offset] & bit) != 0)
276
- return 1; /* done this! */
277
-
278
- /* we haven't been here before -- set the bit to show we have now */
279
-
280
- /* see if we need to lengthen the vector in order to set the bit */
316
+ int bit = 1 << (mem & 7);
317
+
318
+ // see if we've been here
319
+ size_t length = g.done[index].len;
320
+ if (offset < length && (g.done[index].vec[offset] & bit) != 0)
321
+ return 1; // done this!
322
+
323
+ // we haven't been here before -- set the bit to show we have now
324
+
325
+ // see if we need to lengthen the vector in order to set the bit
281326
if (length <= offset) {
282
- /* if we have one already, enlarge it, zero out the appended space */
327
+ // if we have one already, enlarge it, zero out the appended space
328
+ char *vector;
283329
if (length) {
284330
do {
285331
length <<= 1;
286332
} while (length <= offset);
287
- vector = realloc(done[index].vec, length);
288
- if (vector != NULL)
289
- memset(vector + done[index].len, 0, length - done[index].len);
290
- }
291
-
292
- /* otherwise we need to make a new vector and zero it out */
293
- else {
294
- length = 1 << (len - root);
295
- while (length <= offset)
296
- length <<= 1;
297
- vector = calloc(length, sizeof(char));
298
- }
299
-
300
- /* in either case, bail if we can't get the memory */
301
- if (vector == NULL) {
302
- fputs("abort: unable to allocate enough memory\n", stderr);
303
- cleanup();
304
- exit(1);
305
- }
306
-
307
- /* install the new vector */
308
- done[index].len = length;
309
- done[index].vec = vector;
310
- }
311
-
312
- /* set the bit */
313
- done[index].vec[offset] |= bit;
333
+ vector = realloc(g.done[index].vec, length);
334
+ assert(vector != NULL && "out of memory");
335
+ memset(vector + g.done[index].len, 0, length - g.done[index].len);
336
+ }
337
+
338
+ // otherwise we need to make a new vector and zero it out
339
+ else {
340
+ length = 16;
341
+ while (length <= offset)
342
+ length <<= 1;
343
+ vector = calloc(length, 1);
344
+ assert(vector != NULL && "out of memory");
345
+ }
346
+
347
+ // install the new vector
348
+ g.done[index].len = length;
349
+ g.done[index].vec = vector;
350
+ }
351
+
352
+ // set the bit
353
+ g.done[index].vec[offset] |= bit;
314354
return 0;
315355
}
316356
317
-/* Examine all possible codes from the given node (syms, len, left). Compute
318
- the amount of memory required to build inflate's decoding tables, where the
319
- number of code structures used so far is mem, and the number remaining in
320
- the current sub-table is rem. Uses the globals max, code, root, large, and
321
- done. */
322
-local void examine(int syms, int len, int left, int mem, int rem)
323
-{
324
- int least; /* least number of syms to use at this juncture */
325
- int most; /* most number of syms to use at this juncture */
326
- int use; /* number of bit patterns to use in next call */
327
-
328
- /* see if we have a complete code */
357
+// Examine all possible codes from the given node (syms, len, left). Compute
358
+// the amount of memory required to build inflate's decoding tables, where the
359
+// number of code structures used so far is mem, and the number remaining in
360
+// the current sub-table is rem.
361
+local void examine(int syms, int left, int len, int mem, int rem) {
362
+ // see if we have a complete code
329363
if (syms == left) {
330
- /* set the last code entry */
331
- code[len] = left;
364
+ // set the last code entry
365
+ g.code[len] = left;
332366
333
- /* complete computation of memory used by this code */
367
+ // complete computation of memory used by this code
334368
while (rem < left) {
335369
left -= rem;
336
- rem = 1 << (len - root);
370
+ rem = 1 << (len - g.root);
337371
mem += rem;
338372
}
339373
assert(rem == left);
340374
341
- /* if this is a new maximum, show the entries used and the sub-code */
342
- if (mem > large) {
343
- large = mem;
344
- printf("max %d: ", mem);
345
- for (use = root + 1; use <= max; use++)
346
- if (code[use])
347
- printf("%d[%d] ", code[use], use);
348
- putchar('\n');
349
- fflush(stdout);
350
- }
351
-
352
- /* remove entries as we drop back down in the recursion */
353
- code[len] = 0;
354
- return;
355
- }
356
-
357
- /* prune the tree if we can */
358
- if (beenhere(syms, len, left, mem, rem))
359
- return;
360
-
361
- /* we need to use at least this many bit patterns so that the code won't be
362
- incomplete at the next length (more bit patterns than symbols) */
363
- least = (left << 1) - syms;
375
+ // if this is at the maximum, show the sub-code
376
+ if (mem >= g.large) {
377
+ // if this is a new maximum, update the maximum and clear out the
378
+ // printed sub-codes from the previous maximum
379
+ if (mem > g.large) {
380
+ g.large = mem;
381
+ string_clear(&g.out);
382
+ }
383
+
384
+ // compute the starting state for this sub-code
385
+ syms = 0;
386
+ left = 1 << g.max;
387
+ for (int bits = g.max; bits > g.root; bits--) {
388
+ syms += g.code[bits];
389
+ left -= g.code[bits];
390
+ assert((left & 1) == 0);
391
+ left >>= 1;
392
+ }
393
+
394
+ // print the starting state and the resulting sub-code to g.out
395
+ string_printf(&g.out, "<%u, %u, %u>:",
396
+ syms, g.root + 1, ((1 << g.root) - left) << 1);
397
+ for (int bits = g.root + 1; bits <= g.max; bits++)
398
+ if (g.code[bits])
399
+ string_printf(&g.out, " %d[%d]", g.code[bits], bits);
400
+ string_printf(&g.out, "\n");
401
+ }
402
+
403
+ // remove entries as we drop back down in the recursion
404
+ g.code[len] = 0;
405
+ return;
406
+ }
407
+
408
+ // prune the tree if we can
409
+ if (been_here(syms, left, len, mem, rem))
410
+ return;
411
+
412
+ // we need to use at least this many bit patterns so that the code won't be
413
+ // incomplete at the next length (more bit patterns than symbols)
414
+ int least = (left << 1) - syms;
364415
if (least < 0)
365416
least = 0;
366417
367
- /* we can use at most this many bit patterns, lest there not be enough
368
- available for the remaining symbols at the maximum length (if there were
369
- no limit to the code length, this would become: most = left - 1) */
370
- most = (((code_t)left << (max - len)) - syms) /
371
- (((code_t)1 << (max - len)) - 1);
372
-
373
- /* occupy least table spaces, creating new sub-tables as needed */
374
- use = least;
418
+ // we can use at most this many bit patterns, lest there not be enough
419
+ // available for the remaining symbols at the maximum length (if there were
420
+ // no limit to the code length, this would become: most = left - 1)
421
+ int most = (((code_t)left << (g.max - len)) - syms) /
422
+ (((code_t)1 << (g.max - len)) - 1);
423
+
424
+ // occupy least table spaces, creating new sub-tables as needed
425
+ int use = least;
375426
while (rem < use) {
376427
use -= rem;
377
- rem = 1 << (len - root);
428
+ rem = 1 << (len - g.root);
378429
mem += rem;
379430
}
380431
rem -= use;
381432
382
- /* examine codes from here, updating table space as we go */
433
+ // examine codes from here, updating table space as we go
383434
for (use = least; use <= most; use++) {
384
- code[len] = use;
385
- examine(syms - use, len + 1, (left - use) << 1,
386
- mem + (rem ? 1 << (len - root) : 0), rem << 1);
435
+ g.code[len] = use;
436
+ examine(syms - use, (left - use) << 1, len + 1,
437
+ mem + (rem ? 1 << (len - g.root) : 0), rem << 1);
387438
if (rem == 0) {
388
- rem = 1 << (len - root);
439
+ rem = 1 << (len - g.root);
389440
mem += rem;
390441
}
391442
rem--;
392443
}
393444
394
- /* remove entries as we drop back down in the recursion */
395
- code[len] = 0;
396
-}
397
-
398
-/* Look at all sub-codes starting with root + 1 bits. Look at only the valid
399
- intermediate code states (syms, left, len). For each completed code,
400
- calculate the amount of memory required by inflate to build the decoding
401
- tables. Find the maximum amount of memory required and show the code that
402
- requires that maximum. Uses the globals max, root, and num. */
403
-local void enough(int syms)
404
-{
405
- int n; /* number of remaing symbols for this node */
406
- int left; /* number of unused bit patterns at this length */
407
- size_t index; /* index of this case in *num */
408
-
409
- /* clear code */
410
- for (n = 0; n <= max; n++)
411
- code[n] = 0;
412
-
413
- /* look at all (root + 1) bit and longer codes */
414
- large = 1 << root; /* base table */
415
- if (root < max) /* otherwise, there's only a base table */
416
- for (n = 3; n <= syms; n++)
417
- for (left = 2; left < n; left += 2)
418
- {
419
- /* look at all reachable (root + 1) bit nodes, and the
420
- resulting codes (complete at root + 2 or more) */
421
- index = INDEX(n, left, root + 1);
422
- if (root + 1 < max && num[index]) /* reachable node */
423
- examine(n, root + 1, left, 1 << root, 0);
424
-
425
- /* also look at root bit codes with completions at root + 1
426
- bits (not saved in num, since complete), just in case */
427
- if (num[index - 1] && n <= left << 1)
428
- examine((n - left) << 1, root + 1, (n - left) << 1,
429
- 1 << root, 0);
430
- }
431
-
432
- /* done */
433
- printf("done: maximum of %d table entries\n", large);
434
-}
435
-
436
-/*
437
- Examine and show the total number of possible Huffman codes for a given
438
- maximum number of symbols, initial root table size, and maximum code length
439
- in bits -- those are the command arguments in that order. The default
440
- values are 286, 9, and 15 respectively, for the deflate literal/length code.
441
- The possible codes are counted for each number of coded symbols from two to
442
- the maximum. The counts for each of those and the total number of codes are
443
- shown. The maximum number of inflate table entires is then calculated
444
- across all possible codes. Each new maximum number of table entries and the
445
- associated sub-code (starting at root + 1 == 10 bits) is shown.
446
-
447
- To count and examine Huffman codes that are not length-limited, provide a
448
- maximum length equal to the number of symbols minus one.
449
-
450
- For the deflate literal/length code, use "enough". For the deflate distance
451
- code, use "enough 30 6".
452
-
453
- This uses the %llu printf format to print big_t numbers, which assumes that
454
- big_t is an unsigned long long. If the big_t type is changed (for example
455
- to a multiple precision type), the method of printing will also need to be
456
- updated.
457
- */
458
-int main(int argc, char **argv)
459
-{
460
- int syms; /* total number of symbols to code */
461
- int n; /* number of symbols to code for this run */
462
- big_t got; /* return value of count() */
463
- big_t sum; /* accumulated number of codes over n */
464
- code_t word; /* for counting bits in code_t */
465
-
466
- /* set up globals for cleanup() */
467
- code = NULL;
468
- num = NULL;
469
- done = NULL;
470
-
471
- /* get arguments -- default to the deflate literal/length code */
472
- syms = 286;
473
- root = 9;
474
- max = 15;
445
+ // remove entries as we drop back down in the recursion
446
+ g.code[len] = 0;
447
+}
448
+
449
+// Look at all sub-codes starting with root + 1 bits. Look at only the valid
450
+// intermediate code states (syms, left, len). For each completed code,
451
+// calculate the amount of memory required by inflate to build the decoding
452
+// tables. Find the maximum amount of memory required and show the codes that
453
+// require that maximum.
454
+local void enough(int syms) {
455
+ // clear code
456
+ for (int n = 0; n <= g.max; n++)
457
+ g.code[n] = 0;
458
+
459
+ // look at all (root + 1) bit and longer codes
460
+ string_clear(&g.out); // empty saved results
461
+ g.large = 1 << g.root; // base table
462
+ if (g.root < g.max) // otherwise, there's only a base table
463
+ for (int n = 3; n <= syms; n++)
464
+ for (int left = 2; left < n; left += 2) {
465
+ // look at all reachable (root + 1) bit nodes, and the
466
+ // resulting codes (complete at root + 2 or more)
467
+ size_t index = map(n, left, g.root + 1);
468
+ if (g.root + 1 < g.max && g.num[index]) // reachable node
469
+ examine(n, left, g.root + 1, 1 << g.root, 0);
470
+
471
+ // also look at root bit codes with completions at root + 1
472
+ // bits (not saved in num, since complete), just in case
473
+ if (g.num[index - 1] && n <= left << 1)
474
+ examine((n - left) << 1, (n - left) << 1, g.root + 1,
475
+ 1 << g.root, 0);
476
+ }
477
+
478
+ // done
479
+ printf("maximum of %d table entries for root = %d\n", g.large, g.root);
480
+ fputs(g.out.str, stdout);
481
+}
482
+
483
+// Examine and show the total number of possible prefix codes for a given
484
+// maximum number of symbols, initial root table size, and maximum code length
485
+// in bits -- those are the command arguments in that order. The default values
486
+// are 286, 9, and 15 respectively, for the deflate literal/length code. The
487
+// possible codes are counted for each number of coded symbols from two to the
488
+// maximum. The counts for each of those and the total number of codes are
489
+// shown. The maximum number of inflate table entires is then calculated across
490
+// all possible codes. Each new maximum number of table entries and the
491
+// associated sub-code (starting at root + 1 == 10 bits) is shown.
492
+//
493
+// To count and examine prefix codes that are not length-limited, provide a
494
+// maximum length equal to the number of symbols minus one.
495
+//
496
+// For the deflate literal/length code, use "enough". For the deflate distance
497
+// code, use "enough 30 6".
498
+int main(int argc, char **argv) {
499
+ // set up globals for cleanup()
500
+ g.code = NULL;
501
+ g.num = NULL;
502
+ g.done = NULL;
503
+ string_init(&g.out);
504
+
505
+ // get arguments -- default to the deflate literal/length code
506
+ int syms = 286;
507
+ g.root = 9;
508
+ g.max = 15;
475509
if (argc > 1) {
476510
syms = atoi(argv[1]);
477511
if (argc > 2) {
478
- root = atoi(argv[2]);
512
+ g.root = atoi(argv[2]);
479513
if (argc > 3)
480
- max = atoi(argv[3]);
514
+ g.max = atoi(argv[3]);
481515
}
482516
}
483
- if (argc > 4 || syms < 2 || root < 1 || max < 1) {
517
+ if (argc > 4 || syms < 2 || g.root < 1 || g.max < 1) {
484518
fputs("invalid arguments, need: [sym >= 2 [root >= 1 [max >= 1]]]\n",
485519
stderr);
486520
return 1;
487521
}
488522
489
- /* if not restricting the code length, the longest is syms - 1 */
490
- if (max > syms - 1)
491
- max = syms - 1;
492
-
493
- /* determine the number of bits in a code_t */
494
- for (n = 0, word = 1; word; n++, word <<= 1)
495
- ;
496
-
497
- /* make sure that the calculation of most will not overflow */
498
- if (max > n || (code_t)(syms - 2) >= (((code_t)0 - 1) >> (max - 1))) {
523
+ // if not restricting the code length, the longest is syms - 1
524
+ if (g.max > syms - 1)
525
+ g.max = syms - 1;
526
+
527
+ // determine the number of bits in a code_t
528
+ int bits = 0;
529
+ for (code_t word = 1; word; word <<= 1)
530
+ bits++;
531
+
532
+ // make sure that the calculation of most will not overflow
533
+ if (g.max > bits || (code_t)(syms - 2) >= ((code_t)-1 >> (g.max - 1))) {
499534
fputs("abort: code length too long for internal types\n", stderr);
500535
return 1;
501536
}
502537
503
- /* reject impossible code requests */
504
- if ((code_t)(syms - 1) > ((code_t)1 << max) - 1) {
505
- fprintf(stderr, "%d symbols cannot be coded in %d bits\n",
506
- syms, max);
507
- return 1;
508
- }
509
-
510
- /* allocate code vector */
511
- code = calloc(max + 1, sizeof(int));
512
- if (code == NULL) {
513
- fputs("abort: unable to allocate enough memory\n", stderr);
514
- return 1;
515
- }
516
-
517
- /* determine size of saved results array, checking for overflows,
518
- allocate and clear the array (set all to zero with calloc()) */
519
- if (syms == 2) /* iff max == 1 */
520
- num = NULL; /* won't be saving any results */
521
- else {
522
- size = syms >> 1;
523
- if (size > ((size_t)0 - 1) / (n = (syms - 1) >> 1) ||
524
- (size *= n, size > ((size_t)0 - 1) / (n = max - 1)) ||
525
- (size *= n, size > ((size_t)0 - 1) / sizeof(big_t)) ||
526
- (num = calloc(size, sizeof(big_t))) == NULL) {
527
- fputs("abort: unable to allocate enough memory\n", stderr);
528
- cleanup();
529
- return 1;
530
- }
531
- }
532
-
533
- /* count possible codes for all numbers of symbols, add up counts */
534
- sum = 0;
535
- for (n = 2; n <= syms; n++) {
536
- got = count(n, 1, 2);
537
- sum += got;
538
- if (got == (big_t)0 - 1 || sum < got) { /* overflow */
539
- fputs("abort: can't count that high!\n", stderr);
540
- cleanup();
541
- return 1;
542
- }
543
- printf("%llu %d-codes\n", got, n);
544
- }
545
- printf("%llu total codes for 2 to %d symbols", sum, syms);
546
- if (max < syms - 1)
547
- printf(" (%d-bit length limit)\n", max);
538
+ // reject impossible code requests
539
+ if ((code_t)(syms - 1) > ((code_t)1 << g.max) - 1) {
540
+ fprintf(stderr, "%d symbols cannot be coded in %d bits\n",
541
+ syms, g.max);
542
+ return 1;
543
+ }
544
+
545
+ // allocate code vector
546
+ g.code = calloc(g.max + 1, sizeof(int));
547
+ assert(g.code != NULL && "out of memory");
548
+
549
+ // determine size of saved results array, checking for overflows,
550
+ // allocate and clear the array (set all to zero with calloc())
551
+ if (syms == 2) // iff max == 1
552
+ g.num = NULL; // won't be saving any results
553
+ else {
554
+ g.size = syms >> 1;
555
+ int n = (syms - 1) >> 1;
556
+ assert(g.size <= (size_t)-1 / n && "overflow");
557
+ g.size *= n;
558
+ n = g.max - 1;
559
+ assert(g.size <= (size_t)-1 / n && "overflow");
560
+ g.size *= n;
561
+ g.num = calloc(g.size, sizeof(big_t));
562
+ assert(g.num != NULL && "out of memory");
563
+ }
564
+
565
+ // count possible codes for all numbers of symbols, add up counts
566
+ big_t sum = 0;
567
+ for (int n = 2; n <= syms; n++) {
568
+ big_t got = count(n, 2, 1);
569
+ sum += got;
570
+ assert(got != (big_t)-1 && sum >= got && "overflow");
571
+ }
572
+ printf("%"PRIbig" total codes for 2 to %d symbols", sum, syms);
573
+ if (g.max < syms - 1)
574
+ printf(" (%d-bit length limit)\n", g.max);
548575
else
549576
puts(" (no length limit)");
550577
551
- /* allocate and clear done array for beenhere() */
552
- if (syms == 2)
553
- done = NULL;
554
- else if (size > ((size_t)0 - 1) / sizeof(struct tab) ||
555
- (done = calloc(size, sizeof(struct tab))) == NULL) {
556
- fputs("abort: unable to allocate enough memory\n", stderr);
557
- cleanup();
558
- return 1;
559
- }
560
-
561
- /* find and show maximum inflate table usage */
562
- if (root > max) /* reduce root to max length */
563
- root = max;
564
- if ((code_t)syms < ((code_t)1 << (root + 1)))
565
- enough(syms);
566
- else
567
- puts("cannot handle minimum code lengths > root");
568
-
569
- /* done */
578
+ // allocate and clear done array for been_here()
579
+ if (syms == 2)
580
+ g.done = NULL;
581
+ else {
582
+ g.done = calloc(g.size, sizeof(struct tab));
583
+ assert(g.done != NULL && "out of memory");
584
+ }
585
+
586
+ // find and show maximum inflate table usage
587
+ if (g.root > g.max) // reduce root to max length
588
+ g.root = g.max;
589
+ if ((code_t)syms < ((code_t)1 << (g.root + 1)))
590
+ enough(syms);
591
+ else
592
+ fputs("cannot handle minimum code lengths > root", stderr);
593
+
594
+ // done
570595
cleanup();
571596
return 0;
572597
}
573598
--- compat/zlib/examples/enough.c
+++ compat/zlib/examples/enough.c
@@ -1,9 +1,9 @@
1 /* enough.c -- determine the maximum size of inflate's Huffman code tables over
2 * all possible valid and complete Huffman codes, subject to a length limit.
3 * Copyright (C) 2007, 2008, 2012 Mark Adler
4 * Version 1.4 18 August 2012 Mark Adler
5 */
6
7 /* Version history:
8 1.0 3 Jan 2007 First version (derived from codecount.c version 1.4)
9 1.1 4 Jan 2007 Use faster incremental table usage computation
@@ -15,105 +15,111 @@
15 Fix bug for initial root table size == max - 1
16 Use a macro to compute the history index
17 1.4 18 Aug 2012 Avoid shifts more than bits in type (caused endless loop!)
18 Clean up comparisons of different types
19 Clean up code indentation
 
 
20 */
21
22 /*
23 Examine all possible Huffman codes for a given number of symbols and a
24 maximum code length in bits to determine the maximum table size for zilb's
25 inflate. Only complete Huffman codes are counted.
26
27 Two codes are considered distinct if the vectors of the number of codes per
28 length are not identical. So permutations of the symbol assignments result
29 in the same code for the counting, as do permutations of the assignments of
30 the bit values to the codes (i.e. only canonical codes are counted).
31
32 We build a code from shorter to longer lengths, determining how many symbols
33 are coded at each length. At each step, we have how many symbols remain to
34 be coded, what the last code length used was, and how many bit patterns of
35 that length remain unused. Then we add one to the code length and double the
36 number of unused patterns to graduate to the next code length. We then
37 assign all portions of the remaining symbols to that code length that
38 preserve the properties of a correct and eventually complete code. Those
39 properties are: we cannot use more bit patterns than are available; and when
40 all the symbols are used, there are exactly zero possible bit patterns
41 remaining.
42
43 The inflate Huffman decoding algorithm uses two-level lookup tables for
44 speed. There is a single first-level table to decode codes up to root bits
45 in length (root == 9 in the current inflate implementation). The table
46 has 1 << root entries and is indexed by the next root bits of input. Codes
47 shorter than root bits have replicated table entries, so that the correct
48 entry is pointed to regardless of the bits that follow the short code. If
49 the code is longer than root bits, then the table entry points to a second-
50 level table. The size of that table is determined by the longest code with
51 that root-bit prefix. If that longest code has length len, then the table
52 has size 1 << (len - root), to index the remaining bits in that set of
53 codes. Each subsequent root-bit prefix then has its own sub-table. The
54 total number of table entries required by the code is calculated
55 incrementally as the number of codes at each bit length is populated. When
56 all of the codes are shorter than root bits, then root is reduced to the
57 longest code length, resulting in a single, smaller, one-level table.
 
58
59 The inflate algorithm also provides for small values of root (relative to
60 the log2 of the number of symbols), where the shortest code has more bits
61 than root. In that case, root is increased to the length of the shortest
62 code. This program, by design, does not handle that case, so it is verified
63 that the number of symbols is less than 2^(root + 1).
64
65 In order to speed up the examination (by about ten orders of magnitude for
66 the default arguments), the intermediate states in the build-up of a code
67 are remembered and previously visited branches are pruned. The memory
68 required for this will increase rapidly with the total number of symbols and
69 the maximum code length in bits. However this is a very small price to pay
70 for the vast speedup.
71
72 First, all of the possible Huffman codes are counted, and reachable
73 intermediate states are noted by a non-zero count in a saved-results array.
74 Second, the intermediate states that lead to (root + 1) bit or longer codes
75 are used to look at all sub-codes from those junctures for their inflate
76 memory usage. (The amount of memory used is not affected by the number of
77 codes of root bits or less in length.) Third, the visited states in the
78 construction of those sub-codes and the associated calculation of the table
79 size is recalled in order to avoid recalculating from the same juncture.
80 Beginning the code examination at (root + 1) bit codes, which is enabled by
81 identifying the reachable nodes, accounts for about six of the orders of
82 magnitude of improvement for the default arguments. About another four
83 orders of magnitude come from not revisiting previous states. Out of
84 approximately 2x10^16 possible Huffman codes, only about 2x10^6 sub-codes
85 need to be examined to cover all of the possible table memory usage cases
86 for the default arguments of 286 symbols limited to 15-bit codes.
87
88 Note that an unsigned long long type is used for counting. It is quite easy
89 to exceed the capacity of an eight-byte integer with a large number of
90 symbols and a large maximum code length, so multiple-precision arithmetic
91 would need to replace the unsigned long long arithmetic in that case. This
92 program will abort if an overflow occurs. The big_t type identifies where
93 the counting takes place.
94
95 An unsigned long long type is also used for calculating the number of
96 possible codes remaining at the maximum length. This limits the maximum
97 code length to the number of bits in a long long minus the number of bits
98 needed to represent the symbols in a flat code. The code_t type identifies
99 where the bit pattern counting takes place.
100 */
101
102 #include <stdio.h>
103 #include <stdlib.h>
104 #include <string.h>
 
 
105 #include <assert.h>
106
107 #define local static
108
109 /* special data types */
110 typedef unsigned long long big_t; /* type for code counting */
111 typedef unsigned long long code_t; /* type for bit pattern counting */
112 struct tab { /* type for been here check */
113 size_t len; /* length of bit vector in char's */
114 char *vec; /* allocated bit vector */
 
115 };
116
117 /* The array for saving results, num[], is indexed with this triplet:
118
119 syms: number of symbols remaining to code
@@ -124,449 +130,468 @@
124
125 syms: 3..totsym (totsym == total symbols to code)
126 left: 2..syms - 1, but only the evens (so syms == 8 -> 2, 4, 6)
127 len: 1..max - 1 (max == maximum code length in bits)
128
129 syms == 2 is not saved since that immediately leads to a single code. left
130 must be even, since it represents the number of available bit patterns at
131 the current length, which is double the number at the previous length.
132 left ends at syms-1 since left == syms immediately results in a single code.
133 (left > sym is not allowed since that would result in an incomplete code.)
134 len is less than max, since the code completes immediately when len == max.
135
136 The offset into the array is calculated for the three indices with the
137 first one (syms) being outermost, and the last one (len) being innermost.
138 We build the array with length max-1 lists for the len index, with syms-3
139 of those for each symbol. There are totsym-2 of those, with each one
140 varying in length as a function of sym. See the calculation of index in
141 count() for the index, and the calculation of size in main() for the size
142 of the array.
143
144 For the deflate example of 286 symbols limited to 15-bit codes, the array
145 has 284,284 entries, taking up 2.17 MB for an 8-byte big_t. More than
146 half of the space allocated for saved results is actually used -- not all
147 possible triplets are reached in the generation of valid Huffman codes.
148 */
149
150 /* The array for tracking visited states, done[], is itself indexed identically
151 to the num[] array as described above for the (syms, left, len) triplet.
152 Each element in the array is further indexed by the (mem, rem) doublet,
153 where mem is the amount of inflate table space used so far, and rem is the
154 remaining unused entries in the current inflate sub-table. Each indexed
155 element is simply one bit indicating whether the state has been visited or
156 not. Since the ranges for mem and rem are not known a priori, each bit
157 vector is of a variable size, and grows as needed to accommodate the visited
158 states. mem and rem are used to calculate a single index in a triangular
159 array. Since the range of mem is expected in the default case to be about
160 ten times larger than the range of rem, the array is skewed to reduce the
161 memory usage, with eight times the range for mem than for rem. See the
162 calculations for offset and bit in beenhere() for the details.
163
164 For the deflate example of 286 symbols limited to 15-bit codes, the bit
165 vectors grow to total approximately 21 MB, in addition to the 4.3 MB done[]
166 array itself.
167 */
168
169 /* Globals to avoid propagating constants or constant pointers recursively */
170 local int max; /* maximum allowed bit length for the codes */
171 local int root; /* size of base code table in bits */
172 local int large; /* largest code table so far */
173 local size_t size; /* number of elements in num and done */
174 local int *code; /* number of symbols assigned to each bit length */
175 local big_t *num; /* saved results array for code counting */
176 local struct tab *done; /* states already evaluated array */
177
178 /* Index function for num[] and done[] */
179 #define INDEX(i,j,k) (((size_t)((i-1)>>1)*((i-2)>>1)+(j>>1)-1)*(max-1)+k-1)
180
181 /* Free allocated space. Uses globals code, num, and done. */
182 local void cleanup(void)
183 {
184 size_t n;
185
186 if (done != NULL) {
187 for (n = 0; n < size; n++)
188 if (done[n].len)
189 free(done[n].vec);
190 free(done);
191 }
192 if (num != NULL)
193 free(num);
194 if (code != NULL)
195 free(code);
196 }
197
198 /* Return the number of possible Huffman codes using bit patterns of lengths
199 len through max inclusive, coding syms symbols, with left bit patterns of
200 length len unused -- return -1 if there is an overflow in the counting.
201 Keep a record of previous results in num to prevent repeating the same
202 calculation. Uses the globals max and num. */
203 local big_t count(int syms, int len, int left)
204 {
205 big_t sum; /* number of possible codes from this juncture */
206 big_t got; /* value returned from count() */
207 int least; /* least number of syms to use at this juncture */
208 int most; /* most number of syms to use at this juncture */
209 int use; /* number of bit patterns to use in next call */
210 size_t index; /* index of this case in *num */
211
212 /* see if only one possible code */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
213 if (syms == left)
214 return 1;
215
216 /* note and verify the expected state */
217 assert(syms > left && left > 0 && len < max);
218
219 /* see if we've done this one already */
220 index = INDEX(syms, left, len);
221 got = num[index];
222 if (got)
223 return got; /* we have -- return the saved result */
224
225 /* we need to use at least this many bit patterns so that the code won't be
226 incomplete at the next length (more bit patterns than symbols) */
227 least = (left << 1) - syms;
228 if (least < 0)
229 least = 0;
230
231 /* we can use at most this many bit patterns, lest there not be enough
232 available for the remaining symbols at the maximum length (if there were
233 no limit to the code length, this would become: most = left - 1) */
234 most = (((code_t)left << (max - len)) - syms) /
235 (((code_t)1 << (max - len)) - 1);
236
237 /* count all possible codes from this juncture and add them up */
238 sum = 0;
239 for (use = least; use <= most; use++) {
240 got = count(syms - use, len + 1, (left - use) << 1);
241 sum += got;
242 if (got == (big_t)0 - 1 || sum < got) /* overflow */
243 return (big_t)0 - 1;
244 }
245
246 /* verify that all recursive calls are productive */
247 assert(sum != 0);
248
249 /* save the result and return it */
250 num[index] = sum;
251 return sum;
252 }
253
254 /* Return true if we've been here before, set to true if not. Set a bit in a
255 bit vector to indicate visiting this state. Each (syms,len,left) state
256 has a variable size bit vector indexed by (mem,rem). The bit vector is
257 lengthened if needed to allow setting the (mem,rem) bit. */
258 local int beenhere(int syms, int len, int left, int mem, int rem)
259 {
260 size_t index; /* index for this state's bit vector */
261 size_t offset; /* offset in this state's bit vector */
262 int bit; /* mask for this state's bit */
263 size_t length; /* length of the bit vector in bytes */
264 char *vector; /* new or enlarged bit vector */
265
266 /* point to vector for (syms,left,len), bit in vector for (mem,rem) */
267 index = INDEX(syms, left, len);
268 mem -= 1 << root;
269 offset = (mem >> 3) + rem;
270 offset = ((offset * (offset + 1)) >> 1) + rem;
271 bit = 1 << (mem & 7);
272
273 /* see if we've been here */
274 length = done[index].len;
275 if (offset < length && (done[index].vec[offset] & bit) != 0)
276 return 1; /* done this! */
277
278 /* we haven't been here before -- set the bit to show we have now */
279
280 /* see if we need to lengthen the vector in order to set the bit */
281 if (length <= offset) {
282 /* if we have one already, enlarge it, zero out the appended space */
 
283 if (length) {
284 do {
285 length <<= 1;
286 } while (length <= offset);
287 vector = realloc(done[index].vec, length);
288 if (vector != NULL)
289 memset(vector + done[index].len, 0, length - done[index].len);
290 }
291
292 /* otherwise we need to make a new vector and zero it out */
293 else {
294 length = 1 << (len - root);
295 while (length <= offset)
296 length <<= 1;
297 vector = calloc(length, sizeof(char));
298 }
299
300 /* in either case, bail if we can't get the memory */
301 if (vector == NULL) {
302 fputs("abort: unable to allocate enough memory\n", stderr);
303 cleanup();
304 exit(1);
305 }
306
307 /* install the new vector */
308 done[index].len = length;
309 done[index].vec = vector;
310 }
311
312 /* set the bit */
313 done[index].vec[offset] |= bit;
314 return 0;
315 }
316
317 /* Examine all possible codes from the given node (syms, len, left). Compute
318 the amount of memory required to build inflate's decoding tables, where the
319 number of code structures used so far is mem, and the number remaining in
320 the current sub-table is rem. Uses the globals max, code, root, large, and
321 done. */
322 local void examine(int syms, int len, int left, int mem, int rem)
323 {
324 int least; /* least number of syms to use at this juncture */
325 int most; /* most number of syms to use at this juncture */
326 int use; /* number of bit patterns to use in next call */
327
328 /* see if we have a complete code */
329 if (syms == left) {
330 /* set the last code entry */
331 code[len] = left;
332
333 /* complete computation of memory used by this code */
334 while (rem < left) {
335 left -= rem;
336 rem = 1 << (len - root);
337 mem += rem;
338 }
339 assert(rem == left);
340
341 /* if this is a new maximum, show the entries used and the sub-code */
342 if (mem > large) {
343 large = mem;
344 printf("max %d: ", mem);
345 for (use = root + 1; use <= max; use++)
346 if (code[use])
347 printf("%d[%d] ", code[use], use);
348 putchar('\n');
349 fflush(stdout);
350 }
351
352 /* remove entries as we drop back down in the recursion */
353 code[len] = 0;
354 return;
355 }
356
357 /* prune the tree if we can */
358 if (beenhere(syms, len, left, mem, rem))
359 return;
360
361 /* we need to use at least this many bit patterns so that the code won't be
362 incomplete at the next length (more bit patterns than symbols) */
363 least = (left << 1) - syms;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
364 if (least < 0)
365 least = 0;
366
367 /* we can use at most this many bit patterns, lest there not be enough
368 available for the remaining symbols at the maximum length (if there were
369 no limit to the code length, this would become: most = left - 1) */
370 most = (((code_t)left << (max - len)) - syms) /
371 (((code_t)1 << (max - len)) - 1);
372
373 /* occupy least table spaces, creating new sub-tables as needed */
374 use = least;
375 while (rem < use) {
376 use -= rem;
377 rem = 1 << (len - root);
378 mem += rem;
379 }
380 rem -= use;
381
382 /* examine codes from here, updating table space as we go */
383 for (use = least; use <= most; use++) {
384 code[len] = use;
385 examine(syms - use, len + 1, (left - use) << 1,
386 mem + (rem ? 1 << (len - root) : 0), rem << 1);
387 if (rem == 0) {
388 rem = 1 << (len - root);
389 mem += rem;
390 }
391 rem--;
392 }
393
394 /* remove entries as we drop back down in the recursion */
395 code[len] = 0;
396 }
397
398 /* Look at all sub-codes starting with root + 1 bits. Look at only the valid
399 intermediate code states (syms, left, len). For each completed code,
400 calculate the amount of memory required by inflate to build the decoding
401 tables. Find the maximum amount of memory required and show the code that
402 requires that maximum. Uses the globals max, root, and num. */
403 local void enough(int syms)
404 {
405 int n; /* number of remaing symbols for this node */
406 int left; /* number of unused bit patterns at this length */
407 size_t index; /* index of this case in *num */
408
409 /* clear code */
410 for (n = 0; n <= max; n++)
411 code[n] = 0;
412
413 /* look at all (root + 1) bit and longer codes */
414 large = 1 << root; /* base table */
415 if (root < max) /* otherwise, there's only a base table */
416 for (n = 3; n <= syms; n++)
417 for (left = 2; left < n; left += 2)
418 {
419 /* look at all reachable (root + 1) bit nodes, and the
420 resulting codes (complete at root + 2 or more) */
421 index = INDEX(n, left, root + 1);
422 if (root + 1 < max && num[index]) /* reachable node */
423 examine(n, root + 1, left, 1 << root, 0);
424
425 /* also look at root bit codes with completions at root + 1
426 bits (not saved in num, since complete), just in case */
427 if (num[index - 1] && n <= left << 1)
428 examine((n - left) << 1, root + 1, (n - left) << 1,
429 1 << root, 0);
430 }
431
432 /* done */
433 printf("done: maximum of %d table entries\n", large);
434 }
435
436 /*
437 Examine and show the total number of possible Huffman codes for a given
438 maximum number of symbols, initial root table size, and maximum code length
439 in bits -- those are the command arguments in that order. The default
440 values are 286, 9, and 15 respectively, for the deflate literal/length code.
441 The possible codes are counted for each number of coded symbols from two to
442 the maximum. The counts for each of those and the total number of codes are
443 shown. The maximum number of inflate table entires is then calculated
444 across all possible codes. Each new maximum number of table entries and the
445 associated sub-code (starting at root + 1 == 10 bits) is shown.
446
447 To count and examine Huffman codes that are not length-limited, provide a
448 maximum length equal to the number of symbols minus one.
449
450 For the deflate literal/length code, use "enough". For the deflate distance
451 code, use "enough 30 6".
452
453 This uses the %llu printf format to print big_t numbers, which assumes that
454 big_t is an unsigned long long. If the big_t type is changed (for example
455 to a multiple precision type), the method of printing will also need to be
456 updated.
457 */
458 int main(int argc, char **argv)
459 {
460 int syms; /* total number of symbols to code */
461 int n; /* number of symbols to code for this run */
462 big_t got; /* return value of count() */
463 big_t sum; /* accumulated number of codes over n */
464 code_t word; /* for counting bits in code_t */
465
466 /* set up globals for cleanup() */
467 code = NULL;
468 num = NULL;
469 done = NULL;
470
471 /* get arguments -- default to the deflate literal/length code */
472 syms = 286;
473 root = 9;
474 max = 15;
475 if (argc > 1) {
476 syms = atoi(argv[1]);
477 if (argc > 2) {
478 root = atoi(argv[2]);
479 if (argc > 3)
480 max = atoi(argv[3]);
481 }
482 }
483 if (argc > 4 || syms < 2 || root < 1 || max < 1) {
484 fputs("invalid arguments, need: [sym >= 2 [root >= 1 [max >= 1]]]\n",
485 stderr);
486 return 1;
487 }
488
489 /* if not restricting the code length, the longest is syms - 1 */
490 if (max > syms - 1)
491 max = syms - 1;
492
493 /* determine the number of bits in a code_t */
494 for (n = 0, word = 1; word; n++, word <<= 1)
495 ;
496
497 /* make sure that the calculation of most will not overflow */
498 if (max > n || (code_t)(syms - 2) >= (((code_t)0 - 1) >> (max - 1))) {
 
499 fputs("abort: code length too long for internal types\n", stderr);
500 return 1;
501 }
502
503 /* reject impossible code requests */
504 if ((code_t)(syms - 1) > ((code_t)1 << max) - 1) {
505 fprintf(stderr, "%d symbols cannot be coded in %d bits\n",
506 syms, max);
507 return 1;
508 }
509
510 /* allocate code vector */
511 code = calloc(max + 1, sizeof(int));
512 if (code == NULL) {
513 fputs("abort: unable to allocate enough memory\n", stderr);
514 return 1;
515 }
516
517 /* determine size of saved results array, checking for overflows,
518 allocate and clear the array (set all to zero with calloc()) */
519 if (syms == 2) /* iff max == 1 */
520 num = NULL; /* won't be saving any results */
521 else {
522 size = syms >> 1;
523 if (size > ((size_t)0 - 1) / (n = (syms - 1) >> 1) ||
524 (size *= n, size > ((size_t)0 - 1) / (n = max - 1)) ||
525 (size *= n, size > ((size_t)0 - 1) / sizeof(big_t)) ||
526 (num = calloc(size, sizeof(big_t))) == NULL) {
527 fputs("abort: unable to allocate enough memory\n", stderr);
528 cleanup();
529 return 1;
530 }
531 }
532
533 /* count possible codes for all numbers of symbols, add up counts */
534 sum = 0;
535 for (n = 2; n <= syms; n++) {
536 got = count(n, 1, 2);
537 sum += got;
538 if (got == (big_t)0 - 1 || sum < got) { /* overflow */
539 fputs("abort: can't count that high!\n", stderr);
540 cleanup();
541 return 1;
542 }
543 printf("%llu %d-codes\n", got, n);
544 }
545 printf("%llu total codes for 2 to %d symbols", sum, syms);
546 if (max < syms - 1)
547 printf(" (%d-bit length limit)\n", max);
548 else
549 puts(" (no length limit)");
550
551 /* allocate and clear done array for beenhere() */
552 if (syms == 2)
553 done = NULL;
554 else if (size > ((size_t)0 - 1) / sizeof(struct tab) ||
555 (done = calloc(size, sizeof(struct tab))) == NULL) {
556 fputs("abort: unable to allocate enough memory\n", stderr);
557 cleanup();
558 return 1;
559 }
560
561 /* find and show maximum inflate table usage */
562 if (root > max) /* reduce root to max length */
563 root = max;
564 if ((code_t)syms < ((code_t)1 << (root + 1)))
565 enough(syms);
566 else
567 puts("cannot handle minimum code lengths > root");
568
569 /* done */
570 cleanup();
571 return 0;
572 }
573
--- compat/zlib/examples/enough.c
+++ compat/zlib/examples/enough.c
@@ -1,9 +1,9 @@
1 /* enough.c -- determine the maximum size of inflate's Huffman code tables over
2 * all possible valid and complete prefix codes, subject to a length limit.
3 * Copyright (C) 2007, 2008, 2012, 2018 Mark Adler
4 * Version 1.5 5 August 2018 Mark Adler
5 */
6
7 /* Version history:
8 1.0 3 Jan 2007 First version (derived from codecount.c version 1.4)
9 1.1 4 Jan 2007 Use faster incremental table usage computation
@@ -15,105 +15,111 @@
15 Fix bug for initial root table size == max - 1
16 Use a macro to compute the history index
17 1.4 18 Aug 2012 Avoid shifts more than bits in type (caused endless loop!)
18 Clean up comparisons of different types
19 Clean up code indentation
20 1.5 5 Aug 2018 Clean up code style, formatting, and comments
21 Show all the codes for the maximum, and only the maximum
22 */
23
24 /*
25 Examine all possible prefix codes for a given number of symbols and a
26 maximum code length in bits to determine the maximum table size for zlib's
27 inflate. Only complete prefix codes are counted.
28
29 Two codes are considered distinct if the vectors of the number of codes per
30 length are not identical. So permutations of the symbol assignments result
31 in the same code for the counting, as do permutations of the assignments of
32 the bit values to the codes (i.e. only canonical codes are counted).
33
34 We build a code from shorter to longer lengths, determining how many symbols
35 are coded at each length. At each step, we have how many symbols remain to
36 be coded, what the last code length used was, and how many bit patterns of
37 that length remain unused. Then we add one to the code length and double the
38 number of unused patterns to graduate to the next code length. We then
39 assign all portions of the remaining symbols to that code length that
40 preserve the properties of a correct and eventually complete code. Those
41 properties are: we cannot use more bit patterns than are available; and when
42 all the symbols are used, there are exactly zero possible bit patterns left
43 unused.
44
45 The inflate Huffman decoding algorithm uses two-level lookup tables for
46 speed. There is a single first-level table to decode codes up to root bits
47 in length (root == 9 for literal/length codes and root == 6 for distance
48 codes, in the current inflate implementation). The base table has 1 << root
49 entries and is indexed by the next root bits of input. Codes shorter than
50 root bits have replicated table entries, so that the correct entry is
51 pointed to regardless of the bits that follow the short code. If the code is
52 longer than root bits, then the table entry points to a second-level table.
53 The size of that table is determined by the longest code with that root-bit
54 prefix. If that longest code has length len, then the table has size 1 <<
55 (len - root), to index the remaining bits in that set of codes. Each
56 subsequent root-bit prefix then has its own sub-table. The total number of
57 table entries required by the code is calculated incrementally as the number
58 of codes at each bit length is populated. When all of the codes are shorter
59 than root bits, then root is reduced to the longest code length, resulting
60 in a single, smaller, one-level table.
61
62 The inflate algorithm also provides for small values of root (relative to
63 the log2 of the number of symbols), where the shortest code has more bits
64 than root. In that case, root is increased to the length of the shortest
65 code. This program, by design, does not handle that case, so it is verified
66 that the number of symbols is less than 1 << (root + 1).
67
68 In order to speed up the examination (by about ten orders of magnitude for
69 the default arguments), the intermediate states in the build-up of a code
70 are remembered and previously visited branches are pruned. The memory
71 required for this will increase rapidly with the total number of symbols and
72 the maximum code length in bits. However this is a very small price to pay
73 for the vast speedup.
74
75 First, all of the possible prefix codes are counted, and reachable
76 intermediate states are noted by a non-zero count in a saved-results array.
77 Second, the intermediate states that lead to (root + 1) bit or longer codes
78 are used to look at all sub-codes from those junctures for their inflate
79 memory usage. (The amount of memory used is not affected by the number of
80 codes of root bits or less in length.) Third, the visited states in the
81 construction of those sub-codes and the associated calculation of the table
82 size is recalled in order to avoid recalculating from the same juncture.
83 Beginning the code examination at (root + 1) bit codes, which is enabled by
84 identifying the reachable nodes, accounts for about six of the orders of
85 magnitude of improvement for the default arguments. About another four
86 orders of magnitude come from not revisiting previous states. Out of
87 approximately 2x10^16 possible prefix codes, only about 2x10^6 sub-codes
88 need to be examined to cover all of the possible table memory usage cases
89 for the default arguments of 286 symbols limited to 15-bit codes.
90
91 Note that the uintmax_t type is used for counting. It is quite easy to
92 exceed the capacity of an eight-byte integer with a large number of symbols
93 and a large maximum code length, so multiple-precision arithmetic would need
94 to replace the integer arithmetic in that case. This program will abort if
95 an overflow occurs. The big_t type identifies where the counting takes
96 place.
97
98 The uintmax_t type is also used for calculating the number of possible codes
99 remaining at the maximum length. This limits the maximum code length to the
100 number of bits in a long long minus the number of bits needed to represent
101 the symbols in a flat code. The code_t type identifies where the bit-pattern
102 counting takes place.
103 */
104
105 #include <stdio.h>
106 #include <stdlib.h>
107 #include <string.h>
108 #include <stdarg.h>
109 #include <stdint.h>
110 #include <assert.h>
111
112 #define local static
113
114 // Special data types.
115 typedef uintmax_t big_t; // type for code counting
116 #define PRIbig "ju" // printf format for big_t
117 typedef uintmax_t code_t; // type for bit pattern counting
118 struct tab { // type for been-here check
119 size_t len; // allocated length of bit vector in octets
120 char *vec; // allocated bit vector
121 };
122
123 /* The array for saving results, num[], is indexed with this triplet:
124
125 syms: number of symbols remaining to code
@@ -124,449 +130,468 @@
130
131 syms: 3..totsym (totsym == total symbols to code)
132 left: 2..syms - 1, but only the evens (so syms == 8 -> 2, 4, 6)
133 len: 1..max - 1 (max == maximum code length in bits)
134
135 syms == 2 is not saved since that immediately leads to a single code. left
136 must be even, since it represents the number of available bit patterns at
137 the current length, which is double the number at the previous length. left
138 ends at syms-1 since left == syms immediately results in a single code.
139 (left > sym is not allowed since that would result in an incomplete code.)
140 len is less than max, since the code completes immediately when len == max.
141
142 The offset into the array is calculated for the three indices with the first
143 one (syms) being outermost, and the last one (len) being innermost. We build
144 the array with length max-1 lists for the len index, with syms-3 of those
145 for each symbol. There are totsym-2 of those, with each one varying in
146 length as a function of sym. See the calculation of index in map() for the
147 index, and the calculation of size in main() for the size of the array.
 
148
149 For the deflate example of 286 symbols limited to 15-bit codes, the array
150 has 284,284 entries, taking up 2.17 MB for an 8-byte big_t. More than half
151 of the space allocated for saved results is actually used -- not all
152 possible triplets are reached in the generation of valid prefix codes.
153 */
154
155 /* The array for tracking visited states, done[], is itself indexed identically
156 to the num[] array as described above for the (syms, left, len) triplet.
157 Each element in the array is further indexed by the (mem, rem) doublet,
158 where mem is the amount of inflate table space used so far, and rem is the
159 remaining unused entries in the current inflate sub-table. Each indexed
160 element is simply one bit indicating whether the state has been visited or
161 not. Since the ranges for mem and rem are not known a priori, each bit
162 vector is of a variable size, and grows as needed to accommodate the visited
163 states. mem and rem are used to calculate a single index in a triangular
164 array. Since the range of mem is expected in the default case to be about
165 ten times larger than the range of rem, the array is skewed to reduce the
166 memory usage, with eight times the range for mem than for rem. See the
167 calculations for offset and bit in been_here() for the details.
168
169 For the deflate example of 286 symbols limited to 15-bit codes, the bit
170 vectors grow to total 5.5 MB, in addition to the 4.3 MB done array itself.
 
171 */
172
173 // Type for a variable-length, allocated string.
174 typedef struct {
175 char *str; // pointer to allocated string
176 size_t size; // size of allocation
177 size_t len; // length of string, not including terminating zero
178 } string_t;
179
180 // Clear a string_t.
181 local void string_clear(string_t *s) {
182 s->str[0] = 0;
183 s->len = 0;
184 }
185
186 // Initialize a string_t.
187 local void string_init(string_t *s) {
188 s->size = 16;
189 s->str = malloc(s->size);
190 assert(s->str != NULL && "out of memory");
191 string_clear(s);
192 }
193
194 // Release the allocation of a string_t.
195 local void string_free(string_t *s) {
196 free(s->str);
197 s->str = NULL;
198 s->size = 0;
199 s->len = 0;
200 }
201
202 // Save the results of printf with fmt and the subsequent argument list to s.
203 // Each call appends to s. The allocated space for s is increased as needed.
204 local void string_printf(string_t *s, char *fmt, ...) {
205 va_list ap;
206 va_start(ap, fmt);
207 size_t len = s->len;
208 int ret = vsnprintf(s->str + len, s->size - len, fmt, ap);
209 assert(ret >= 0 && "out of memory");
210 s->len += ret;
211 if (s->size < s->len + 1) {
212 do {
213 s->size <<= 1;
214 assert(s->size != 0 && "overflow");
215 } while (s->size < s->len + 1);
216 s->str = realloc(s->str, s->size);
217 assert(s->str != NULL && "out of memory");
218 vsnprintf(s->str + len, s->size - len, fmt, ap);
219 }
220 va_end(ap);
221 }
222
223 // Globals to avoid propagating constants or constant pointers recursively.
224 struct {
225 int max; // maximum allowed bit length for the codes
226 int root; // size of base code table in bits
227 int large; // largest code table so far
228 size_t size; // number of elements in num and done
229 big_t tot; // total number of codes with maximum tables size
230 string_t out; // display of subcodes for maximum tables size
231 int *code; // number of symbols assigned to each bit length
232 big_t *num; // saved results array for code counting
233 struct tab *done; // states already evaluated array
234 } g;
235
236 // Index function for num[] and done[].
237 local inline size_t map(int syms, int left, int len) {
238 return ((size_t)((syms - 1) >> 1) * ((syms - 2) >> 1) +
239 (left >> 1) - 1) * (g.max - 1) +
240 len - 1;
241 }
242
243 // Free allocated space in globals.
244 local void cleanup(void) {
245 if (g.done != NULL) {
246 for (size_t n = 0; n < g.size; n++)
247 if (g.done[n].len)
248 free(g.done[n].vec);
249 g.size = 0;
250 free(g.done); g.done = NULL;
251 }
252 free(g.num); g.num = NULL;
253 free(g.code); g.code = NULL;
254 string_free(&g.out);
255 }
256
257 // Return the number of possible prefix codes using bit patterns of lengths len
258 // through max inclusive, coding syms symbols, with left bit patterns of length
259 // len unused -- return -1 if there is an overflow in the counting. Keep a
260 // record of previous results in num to prevent repeating the same calculation.
261 local big_t count(int syms, int left, int len) {
262 // see if only one possible code
263 if (syms == left)
264 return 1;
265
266 // note and verify the expected state
267 assert(syms > left && left > 0 && len < g.max);
268
269 // see if we've done this one already
270 size_t index = map(syms, left, len);
271 big_t got = g.num[index];
272 if (got)
273 return got; // we have -- return the saved result
274
275 // we need to use at least this many bit patterns so that the code won't be
276 // incomplete at the next length (more bit patterns than symbols)
277 int least = (left << 1) - syms;
278 if (least < 0)
279 least = 0;
280
281 // we can use at most this many bit patterns, lest there not be enough
282 // available for the remaining symbols at the maximum length (if there were
283 // no limit to the code length, this would become: most = left - 1)
284 int most = (((code_t)left << (g.max - len)) - syms) /
285 (((code_t)1 << (g.max - len)) - 1);
286
287 // count all possible codes from this juncture and add them up
288 big_t sum = 0;
289 for (int use = least; use <= most; use++) {
290 got = count(syms - use, (left - use) << 1, len + 1);
291 sum += got;
292 if (got == (big_t)-1 || sum < got) // overflow
293 return (big_t)-1;
294 }
295
296 // verify that all recursive calls are productive
297 assert(sum != 0);
298
299 // save the result and return it
300 g.num[index] = sum;
301 return sum;
302 }
303
304 // Return true if we've been here before, set to true if not. Set a bit in a
305 // bit vector to indicate visiting this state. Each (syms,len,left) state has a
306 // variable size bit vector indexed by (mem,rem). The bit vector is lengthened
307 // as needed to allow setting the (mem,rem) bit.
308 local int been_here(int syms, int left, int len, int mem, int rem) {
309 // point to vector for (syms,left,len), bit in vector for (mem,rem)
310 size_t index = map(syms, left, len);
311 mem -= 1 << g.root; // mem always includes the root table
312 mem >>= 1; // mem and rem are always even
313 rem >>= 1;
314 size_t offset = (mem >> 3) + rem;
 
 
 
 
 
315 offset = ((offset * (offset + 1)) >> 1) + rem;
316 int bit = 1 << (mem & 7);
317
318 // see if we've been here
319 size_t length = g.done[index].len;
320 if (offset < length && (g.done[index].vec[offset] & bit) != 0)
321 return 1; // done this!
322
323 // we haven't been here before -- set the bit to show we have now
324
325 // see if we need to lengthen the vector in order to set the bit
326 if (length <= offset) {
327 // if we have one already, enlarge it, zero out the appended space
328 char *vector;
329 if (length) {
330 do {
331 length <<= 1;
332 } while (length <= offset);
333 vector = realloc(g.done[index].vec, length);
334 assert(vector != NULL && "out of memory");
335 memset(vector + g.done[index].len, 0, length - g.done[index].len);
336 }
337
338 // otherwise we need to make a new vector and zero it out
339 else {
340 length = 16;
341 while (length <= offset)
342 length <<= 1;
343 vector = calloc(length, 1);
344 assert(vector != NULL && "out of memory");
345 }
346
347 // install the new vector
348 g.done[index].len = length;
349 g.done[index].vec = vector;
350 }
351
352 // set the bit
353 g.done[index].vec[offset] |= bit;
 
 
 
 
 
 
354 return 0;
355 }
356
357 // Examine all possible codes from the given node (syms, len, left). Compute
358 // the amount of memory required to build inflate's decoding tables, where the
359 // number of code structures used so far is mem, and the number remaining in
360 // the current sub-table is rem.
361 local void examine(int syms, int left, int len, int mem, int rem) {
362 // see if we have a complete code
 
 
 
 
 
 
363 if (syms == left) {
364 // set the last code entry
365 g.code[len] = left;
366
367 // complete computation of memory used by this code
368 while (rem < left) {
369 left -= rem;
370 rem = 1 << (len - g.root);
371 mem += rem;
372 }
373 assert(rem == left);
374
375 // if this is at the maximum, show the sub-code
376 if (mem >= g.large) {
377 // if this is a new maximum, update the maximum and clear out the
378 // printed sub-codes from the previous maximum
379 if (mem > g.large) {
380 g.large = mem;
381 string_clear(&g.out);
382 }
383
384 // compute the starting state for this sub-code
385 syms = 0;
386 left = 1 << g.max;
387 for (int bits = g.max; bits > g.root; bits--) {
388 syms += g.code[bits];
389 left -= g.code[bits];
390 assert((left & 1) == 0);
391 left >>= 1;
392 }
393
394 // print the starting state and the resulting sub-code to g.out
395 string_printf(&g.out, "<%u, %u, %u>:",
396 syms, g.root + 1, ((1 << g.root) - left) << 1);
397 for (int bits = g.root + 1; bits <= g.max; bits++)
398 if (g.code[bits])
399 string_printf(&g.out, " %d[%d]", g.code[bits], bits);
400 string_printf(&g.out, "\n");
401 }
402
403 // remove entries as we drop back down in the recursion
404 g.code[len] = 0;
405 return;
406 }
407
408 // prune the tree if we can
409 if (been_here(syms, left, len, mem, rem))
410 return;
411
412 // we need to use at least this many bit patterns so that the code won't be
413 // incomplete at the next length (more bit patterns than symbols)
414 int least = (left << 1) - syms;
415 if (least < 0)
416 least = 0;
417
418 // we can use at most this many bit patterns, lest there not be enough
419 // available for the remaining symbols at the maximum length (if there were
420 // no limit to the code length, this would become: most = left - 1)
421 int most = (((code_t)left << (g.max - len)) - syms) /
422 (((code_t)1 << (g.max - len)) - 1);
423
424 // occupy least table spaces, creating new sub-tables as needed
425 int use = least;
426 while (rem < use) {
427 use -= rem;
428 rem = 1 << (len - g.root);
429 mem += rem;
430 }
431 rem -= use;
432
433 // examine codes from here, updating table space as we go
434 for (use = least; use <= most; use++) {
435 g.code[len] = use;
436 examine(syms - use, (left - use) << 1, len + 1,
437 mem + (rem ? 1 << (len - g.root) : 0), rem << 1);
438 if (rem == 0) {
439 rem = 1 << (len - g.root);
440 mem += rem;
441 }
442 rem--;
443 }
444
445 // remove entries as we drop back down in the recursion
446 g.code[len] = 0;
447 }
448
449 // Look at all sub-codes starting with root + 1 bits. Look at only the valid
450 // intermediate code states (syms, left, len). For each completed code,
451 // calculate the amount of memory required by inflate to build the decoding
452 // tables. Find the maximum amount of memory required and show the codes that
453 // require that maximum.
454 local void enough(int syms) {
455 // clear code
456 for (int n = 0; n <= g.max; n++)
457 g.code[n] = 0;
458
459 // look at all (root + 1) bit and longer codes
460 string_clear(&g.out); // empty saved results
461 g.large = 1 << g.root; // base table
462 if (g.root < g.max) // otherwise, there's only a base table
463 for (int n = 3; n <= syms; n++)
464 for (int left = 2; left < n; left += 2) {
465 // look at all reachable (root + 1) bit nodes, and the
466 // resulting codes (complete at root + 2 or more)
467 size_t index = map(n, left, g.root + 1);
468 if (g.root + 1 < g.max && g.num[index]) // reachable node
469 examine(n, left, g.root + 1, 1 << g.root, 0);
470
471 // also look at root bit codes with completions at root + 1
472 // bits (not saved in num, since complete), just in case
473 if (g.num[index - 1] && n <= left << 1)
474 examine((n - left) << 1, (n - left) << 1, g.root + 1,
475 1 << g.root, 0);
476 }
477
478 // done
479 printf("maximum of %d table entries for root = %d\n", g.large, g.root);
480 fputs(g.out.str, stdout);
481 }
482
483 // Examine and show the total number of possible prefix codes for a given
484 // maximum number of symbols, initial root table size, and maximum code length
485 // in bits -- those are the command arguments in that order. The default values
486 // are 286, 9, and 15 respectively, for the deflate literal/length code. The
487 // possible codes are counted for each number of coded symbols from two to the
488 // maximum. The counts for each of those and the total number of codes are
489 // shown. The maximum number of inflate table entires is then calculated across
490 // all possible codes. Each new maximum number of table entries and the
491 // associated sub-code (starting at root + 1 == 10 bits) is shown.
492 //
493 // To count and examine prefix codes that are not length-limited, provide a
494 // maximum length equal to the number of symbols minus one.
495 //
496 // For the deflate literal/length code, use "enough". For the deflate distance
497 // code, use "enough 30 6".
498 int main(int argc, char **argv) {
499 // set up globals for cleanup()
500 g.code = NULL;
501 g.num = NULL;
502 g.done = NULL;
503 string_init(&g.out);
504
505 // get arguments -- default to the deflate literal/length code
506 int syms = 286;
507 g.root = 9;
508 g.max = 15;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
509 if (argc > 1) {
510 syms = atoi(argv[1]);
511 if (argc > 2) {
512 g.root = atoi(argv[2]);
513 if (argc > 3)
514 g.max = atoi(argv[3]);
515 }
516 }
517 if (argc > 4 || syms < 2 || g.root < 1 || g.max < 1) {
518 fputs("invalid arguments, need: [sym >= 2 [root >= 1 [max >= 1]]]\n",
519 stderr);
520 return 1;
521 }
522
523 // if not restricting the code length, the longest is syms - 1
524 if (g.max > syms - 1)
525 g.max = syms - 1;
526
527 // determine the number of bits in a code_t
528 int bits = 0;
529 for (code_t word = 1; word; word <<= 1)
530 bits++;
531
532 // make sure that the calculation of most will not overflow
533 if (g.max > bits || (code_t)(syms - 2) >= ((code_t)-1 >> (g.max - 1))) {
534 fputs("abort: code length too long for internal types\n", stderr);
535 return 1;
536 }
537
538 // reject impossible code requests
539 if ((code_t)(syms - 1) > ((code_t)1 << g.max) - 1) {
540 fprintf(stderr, "%d symbols cannot be coded in %d bits\n",
541 syms, g.max);
542 return 1;
543 }
544
545 // allocate code vector
546 g.code = calloc(g.max + 1, sizeof(int));
547 assert(g.code != NULL && "out of memory");
548
549 // determine size of saved results array, checking for overflows,
550 // allocate and clear the array (set all to zero with calloc())
551 if (syms == 2) // iff max == 1
552 g.num = NULL; // won't be saving any results
553 else {
554 g.size = syms >> 1;
555 int n = (syms - 1) >> 1;
556 assert(g.size <= (size_t)-1 / n && "overflow");
557 g.size *= n;
558 n = g.max - 1;
559 assert(g.size <= (size_t)-1 / n && "overflow");
560 g.size *= n;
561 g.num = calloc(g.size, sizeof(big_t));
562 assert(g.num != NULL && "out of memory");
563 }
564
565 // count possible codes for all numbers of symbols, add up counts
566 big_t sum = 0;
567 for (int n = 2; n <= syms; n++) {
568 big_t got = count(n, 2, 1);
569 sum += got;
570 assert(got != (big_t)-1 && sum >= got && "overflow");
571 }
572 printf("%"PRIbig" total codes for 2 to %d symbols", sum, syms);
573 if (g.max < syms - 1)
574 printf(" (%d-bit length limit)\n", g.max);
 
 
 
 
 
 
 
 
575 else
576 puts(" (no length limit)");
577
578 // allocate and clear done array for been_here()
579 if (syms == 2)
580 g.done = NULL;
581 else {
582 g.done = calloc(g.size, sizeof(struct tab));
583 assert(g.done != NULL && "out of memory");
584 }
585
586 // find and show maximum inflate table usage
587 if (g.root > g.max) // reduce root to max length
588 g.root = g.max;
589 if ((code_t)syms < ((code_t)1 << (g.root + 1)))
590 enough(syms);
591 else
592 fputs("cannot handle minimum code lengths > root", stderr);
593
594 // done
 
 
595 cleanup();
596 return 0;
597 }
598
--- compat/zlib/examples/gzappend.c
+++ compat/zlib/examples/gzappend.c
@@ -135,11 +135,11 @@
135135
last = list + (len - 1);
136136
137137
/* do simple left shift by one */
138138
if (rot == 1) {
139139
tmp = *list;
140
- memcpy(list, list + 1, len - 1);
140
+ memmove(list, list + 1, len - 1);
141141
*last = tmp;
142142
return;
143143
}
144144
145145
/* do simple right shift by one */
146146
--- compat/zlib/examples/gzappend.c
+++ compat/zlib/examples/gzappend.c
@@ -135,11 +135,11 @@
135 last = list + (len - 1);
136
137 /* do simple left shift by one */
138 if (rot == 1) {
139 tmp = *list;
140 memcpy(list, list + 1, len - 1);
141 *last = tmp;
142 return;
143 }
144
145 /* do simple right shift by one */
146
--- compat/zlib/examples/gzappend.c
+++ compat/zlib/examples/gzappend.c
@@ -135,11 +135,11 @@
135 last = list + (len - 1);
136
137 /* do simple left shift by one */
138 if (rot == 1) {
139 tmp = *list;
140 memmove(list, list + 1, len - 1);
141 *last = tmp;
142 return;
143 }
144
145 /* do simple right shift by one */
146
--- compat/zlib/examples/gzlog.c
+++ compat/zlib/examples/gzlog.c
@@ -1,10 +1,10 @@
11
/*
22
* gzlog.c
3
- * Copyright (C) 2004, 2008, 2012, 2016 Mark Adler, all rights reserved
3
+ * Copyright (C) 2004, 2008, 2012, 2016, 2019 Mark Adler, all rights reserved
44
* For conditions of distribution and use, see copyright notice in gzlog.h
5
- * version 2.2, 14 Aug 2012
5
+ * version 2.3, 25 May 2019
66
*/
77
88
/*
99
gzlog provides a mechanism for frequently appending short strings to a gzip
1010
file that is efficient both in execution time and compression ratio. The
@@ -754,16 +754,18 @@
754754
(data = malloc(st.st_size)) == NULL) {
755755
log_log(log, op, "allocation failure");
756756
return -2;
757757
}
758758
if ((fd = open(log->path, O_RDONLY, 0)) < 0) {
759
+ free(data);
759760
log_log(log, op, ".add file read failure");
760761
return -1;
761762
}
762763
ret = (size_t)read(fd, data, len) != len;
763764
close(fd);
764765
if (ret) {
766
+ free(data);
765767
log_log(log, op, ".add file read failure");
766768
return -1;
767769
}
768770
log_log(log, op, "loaded .add file");
769771
}
770772
771773
ADDED compat/zlib/examples/gznorm.c
--- compat/zlib/examples/gzlog.c
+++ compat/zlib/examples/gzlog.c
@@ -1,10 +1,10 @@
1 /*
2 * gzlog.c
3 * Copyright (C) 2004, 2008, 2012, 2016 Mark Adler, all rights reserved
4 * For conditions of distribution and use, see copyright notice in gzlog.h
5 * version 2.2, 14 Aug 2012
6 */
7
8 /*
9 gzlog provides a mechanism for frequently appending short strings to a gzip
10 file that is efficient both in execution time and compression ratio. The
@@ -754,16 +754,18 @@
754 (data = malloc(st.st_size)) == NULL) {
755 log_log(log, op, "allocation failure");
756 return -2;
757 }
758 if ((fd = open(log->path, O_RDONLY, 0)) < 0) {
 
759 log_log(log, op, ".add file read failure");
760 return -1;
761 }
762 ret = (size_t)read(fd, data, len) != len;
763 close(fd);
764 if (ret) {
 
765 log_log(log, op, ".add file read failure");
766 return -1;
767 }
768 log_log(log, op, "loaded .add file");
769 }
770
771 DDED compat/zlib/examples/gznorm.c
--- compat/zlib/examples/gzlog.c
+++ compat/zlib/examples/gzlog.c
@@ -1,10 +1,10 @@
1 /*
2 * gzlog.c
3 * Copyright (C) 2004, 2008, 2012, 2016, 2019 Mark Adler, all rights reserved
4 * For conditions of distribution and use, see copyright notice in gzlog.h
5 * version 2.3, 25 May 2019
6 */
7
8 /*
9 gzlog provides a mechanism for frequently appending short strings to a gzip
10 file that is efficient both in execution time and compression ratio. The
@@ -754,16 +754,18 @@
754 (data = malloc(st.st_size)) == NULL) {
755 log_log(log, op, "allocation failure");
756 return -2;
757 }
758 if ((fd = open(log->path, O_RDONLY, 0)) < 0) {
759 free(data);
760 log_log(log, op, ".add file read failure");
761 return -1;
762 }
763 ret = (size_t)read(fd, data, len) != len;
764 close(fd);
765 if (ret) {
766 free(data);
767 log_log(log, op, ".add file read failure");
768 return -1;
769 }
770 log_log(log, op, "loaded .add file");
771 }
772
773 DDED compat/zlib/examples/gznorm.c
--- a/compat/zlib/examples/gznorm.c
+++ b/compat/zlib/examples/gznorm.c
@@ -0,0 +1,466 @@
1
+/* gznorm.c -- normalize a gzip stream
2
+ * Copyright (C) 2018 Mark Adler
3
+ * For conditions of distribution and use, see copyright notice in zlib.h
4
+ * Version 1.0 7 Oct 2018 Mark Adler */
5
+
6
+// gznorm takes a gzip stream, potentially containing multiple members, and
7
+// converts it to a gzip stream with a single member. In addition the gzip
8
+// header is normalized, removing the file name and time stamp, and setting the
9
+// other header contents (XFL, OS) to fixed values. gznorm does not recompress
10
+// the data, so it is fast, but no advantage is gained from the history that
11
+// could be available acnclude <stdio.h> // fread, fwrite, putc, fflush, ferror, fprintf,
12
+ // vsnprintf, stdout, stderr, NULL, FILE
13
+#include <stdlib.h> // malloc, free
14
+#include <string.h> // strerror
15
+#include <errno.h> // errno
16
+#include <stdarg.h> // va_list, va_start, va_end
17
+#include "zlib.h" // inflateInit2, inflate, inflateReset, inflateEnd,
18
+ // z_stream, z_off_t, crc32_combine, Z_NULL, Z_BLOCK,
19
+ // Z_OK, Z_STREAM_END, Z_BUF_ERROR, Z_DATA_ERROR,
20
+ // Z_MEM_ERROR
21
+
22
+#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
23
+# include <fcntl.h>
24
+# include <io.h>
25
+# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
26
+#else
27
+# define SET_BINARY_MODE(file)
28
+#endif
29
+
30
+#define local static
31
+
32
+// printf to an allocated string. Return the string, or NULL if the printf or
33
+// allocation fails.
34
+local char *aprintf(char *fmt, ...) {
35
+ // Get the length of the result of the printf.
36
+ va_list args;
37
+ va_start(args, fmt);
38
+ int len = vsnprintf(NULL, 0, fmt, args);
39
+ va_end(args);
40
+ if (len < 0)
41
+ return NULL;
42
+
43
+ // Allocate the required space and printf to it.
44
+ char *str = malloc(len + 1);
45
+ if (str == NULL)
46
+ return NULL;
47
+ va_start(args, fmt);
48
+ vsnprintf(str, len + 1, fmt, args);
49
+ va_end(args);
50
+ return str;
51
+}
52
+
53
+// Return with an error, putting an allocated error message in *err. Doing an
54
+// inflateEnd() on an already ended state, or one with state set to Z_NULL, is
55
+// permitted.
56
+#define BYE(...) \
57
+ do { \
58
+ inflateEnd(&strm); \
59
+ *err = aprintf(__VA_ARGS__); \
60
+ return 1; \
61
+ } while (0)
62
+
63
+// Chunk size for buffered reads and for decompression. Twice this many bytes
64
+// will be allocated on the stack by gzip_normalize(). Must fit in an unsigned.
65
+#define CHUNK 16384
66
+
67
+// Read a gzip stream from in and write an equivalent normalized gzip stream to
68
+// out. If given no input, an empty gzip stream will be written. If successful,
69
+// 0 is returned, and *err is set to NULL. On error, 1 is returned, where the
70
+// details of the error are returned in *err, a pointer to an allocated string.
71
+//
72
+// The input may be a stream with multiple gzip members, which is converted to
73
+// a single gzip member on the output. Each gzip member is decompressed at the
74
+// level of deflate blocks. This enables clearing the last-block bit, shifting
75
+// the compressed data to concatenate to the previous member's compressed data,
76
+// which can end at an arbitrary bit boundary, and identifying stored blocks in
77
+// order to resynchronize those to byte boundaries. The deflate compressed data
78
+// is terminated with a 10-bit empty fixed block. If any members on the input
79
+// end with a 10-bit empty fixed block, then that block is excised from the
80
+// stream. This avoids appending empty fixed blocks for every normalization,
81
+// and assures that gzip_normalize applied a second time will not change the
82
+// input. The pad bits after stored block headers and after the final deflate
83
+// block are all forced to zeros.
84
+local int gzip_normalize(FILE *in, FILE *out, char **err) {
85
+ // initialize the inflate engine to process a gzip member
86
+ z_stream strm;
87
+ strm.zalloc = Z_NULL;
88
+ strm.zfree = Z_NULL;
89
+ strm.opaque = Z_NULL;
90
+ strm.avail_in = 0;
91
+ strm.next_in = Z_NULL;
92
+ if (inflateInit2(&strm, 15 + 16) != Z_OK)
93
+ BYE("out of memory");
94
+
95
+ // State while processing the input gzip stream.
96
+ enum { // BETWEEN -> HEAD -> BLOCK -> TAIL -> BETWEEN -> ...
97
+ BETWEEN, // between gzip members (must end in this state)
98
+ HEAD, // reading a gzip header
99
+ BLOCK, // reading deflate blocks
100
+ TAIL // reading a gzip trailer
101
+ } state = BETWEEN; // current component being processed
102
+ unsigned long crc = 0; // accumulated CRC of uncompressed data
103
+ unsigned long len = 0; // accumulated length of uncompressed data
104
+ unsigned long buf = 0; // deflate stream bit buffer of num bits
105
+ int num = 0; // number of bits in buf (at bottom)
106
+
107
+ // Write a canonical gzip header (no mod time, file name, comment, extra
108
+ // block, or extra flags, and OS is marked as unknown).
109
+ fwrite("\x1f\x8b\x08\0\0\0\0\0\0\xff", 1, 10, out);
110
+
111
+ // Process the gzip stream from in until reaching the end of the input,
112
+ // encountering invalid input, or experiencing an i/o error.
113
+ int more; // true if not at the end of the input
114
+ do {
115
+ // State inside this loop.
116
+ unsigned char *put; // next input buffer location to process
117
+ int prev; // number of bits from previous block in
118
+ // the bit buffer, or -1 if not at the
119
+ // start of a block
120
+ unsigned long long memb; // uncompressed length of member
121
+ size_t tail; // number of trailer bytes read (0..8)
122
+ unsigned long part; // accumulated trailer component
123
+
124
+ // Get the next chunk of input from in.
125
+ unsigned char dat[CHUNK];
126
+ strm.avail_in = fread(dat, 1, CHUNK, in);
127
+ if (strm.avail_in == 0)
128
+ break;
129
+ more = strm.avail_in == CHUNK;
130
+ strm.next_in = put = dat;
131
+
132
+ // Run that chunk of input through the inflate engine to exhaustion.
133
+ do {
134
+ // At this point it is assured that strm.avail_in > 0.
135
+
136
+ // Inflate until the end of a gzip component (header, deflate
137
+ // block, trailer) is reached, or until all of the chunk is
138
+ // consumed. The resulting decompressed data is discarded, though
139
+ // the total size of the decompressed data in each member is
140
+ // tracked, for the calculation of the total CRC.
141
+ do {
142
+ // inflate and handle any errors
143
+ unsigned char scrap[CHUNK];
144
+ strm.avail_out = CHUNK;
145
+ strm.next_out = scrap;
146
+ int ret = inflate(&strm, Z_BLOCK);
147
+ if (ret == Z_MEM_ERROR)
148
+ BYE("out of memory");
149
+ if (ret == Z_DATA_ERROR)
150
+ BYE("input invalid: %s", strm.msg);
151
+ if (ret != Z_OK && ret != Z_BUF_ERROR && ret != Z_STREAM_END)
152
+ BYE("internal error");
153
+
154
+ // Update the number of uncompressed bytes generated in this
155
+ // member. The actual count (not modulo 2^32) is required to
156
+ // correctly compute the total CRC.
157
+ unsigned got = CHUNK - strm.avail_out;
158
+ memb += got;
159
+ if (memb < got)
160
+ BYE("overflow error");
161
+
162
+ // Continue to process this chunk until it is consumed, or
163
+ // until the end of a component (header, deflate block, or
164
+ // trailer) is reached.
165
+ } while (strm.avail_out == 0 && (strm.data_type & 0x80) == 0);
166
+
167
+ // Since strm.avail_in was > 0 for the inflate call, some input was
168
+ // just consumed. It is therefore assured that put < strm.next_in.
169
+
170
+ // Disposition the consumed component or part of a component.
171
+ switch (state) {
172
+ case BETWEEN:
173
+ state = HEAD;
174
+ // Fall through to HEAD when some or all of the header is
175
+ // processed.
176
+
177
+ case HEAD:
178
+ // Discard the header.
179
+ if (strm.data_type & 0x80) {
180
+ // End of header reached -- deflate blocks follow.
181
+ put = strm.next_in;
182
+ prev = num;
183
+ memb = 0;
184
+ state = BLOCK;
185
+ }
186
+ break;
187
+
188
+ case BLOCK:
189
+ // Copy the deflate stream to the output, but with the
190
+ // last-block-bit cleared. Re-synchronize stored block
191
+ // headers to the output byte boundaries. The bytes at
192
+ // put..strm.next_in-1 is the compressed data that has been
193
+ // processed and is ready to be copied to the output.
194
+
195
+ // At this point, it is assured that new compressed data is
196
+ // available, i.e., put < strm.next_in. If prev is -1, then
197
+ // that compressed data starts in the middle of a deflate
198
+ // block. If prev is not -1, then the bits in the bit
199
+ // buffer, possibly combined with the bits in *put, contain
200
+ // the three-bit header of the new deflate block. In that
201
+ // case, prev is the number of bits from the previous block
202
+ // that remain in the bit buffer. Since num is the number
203
+ // of bits in the bit buffer, we have that num - prev is
204
+ // the number of bits from the new block currently in the
205
+ // bit buffer.
206
+
207
+ // If strm.data_type & 0xc0 is 0x80, then the last byte of
208
+ // the available compressed data includes the last bits of
209
+ // the end of a deflate block. In that case, that last byte
210
+ // also has strm.data_type & 0x1f bits of the next deflate
211
+ // block, in the range 0..7. If strm.data_type & 0xc0 is
212
+ // 0xc0, then the last byte of the compressed data is the
213
+ // end of the deflate stream, followed by strm.data_type &
214
+ // 0x1f pad bits, also in the range 0..7.
215
+
216
+ // Set bits to the number of bits not yet consumed from the
217
+ // last byte. If we are at the end of the block, bits is
218
+ // either the number of bits in the last byte belonging to
219
+ // the next block, or the number of pad bits after the
220
+ // final block. In either of those cases, bits is in the
221
+ // range 0..7.
222
+ ; // (required due to C syntax oddity)
223
+ int bits = strm.data_type & 0x1f;
224
+
225
+ if (prev != -1) {
226
+ // We are at the start of a new block. Clear the last
227
+ // block bit, and check for special cases. If it is a
228
+ // stored block, then emit the header and pad to the
229
+ // next byte boundary. If it is a final, empty fixed
230
+ // block, then excise it.
231
+
232
+ // Some or all of the three header bits for this block
233
+ // may already be in the bit buffer. Load any remaining
234
+ // header bits into the bit buffer.
235
+ if (num - prev < 3) {
236
+ buf += (unsigned long)*put++ << num;
237
+ num += 8;
238
+ }
239
+
240
+ // Set last to have a 1 in the position of the last
241
+ // block bit in the bit buffer.
242
+ unsigned long last = (unsigned long)1 << prev;
243
+
244
+ if (((buf >> prev) & 7) == 3) {
245
+ // This is a final fixed block. Load at least ten
246
+ // bits from this block, including the header, into
247
+ // the bit buffer. We already have at least three,
248
+ // so at most one more byte needs to be loaded.
249
+ if (num - prev < 10) {
250
+ if (put == strm.next_in)
251
+ // Need to go get and process more input.
252
+ // We'll end up back here to finish this.
253
+ break;
254
+ buf += (unsigned long)*put++ << num;
255
+ num += 8;
256
+ }
257
+ if (((buf >> prev) & 0x3ff) == 3) {
258
+ // That final fixed block is empty. Delete it
259
+ // to avoid adding an empty block every time a
260
+ // gzip stream is normalized.
261
+ num = prev;
262
+ buf &= last - 1; // zero the pad bits
263
+ }
264
+ }
265
+ else if (((buf >> prev) & 6) == 0) {
266
+ // This is a stored block. Flush to the next
267
+ // byte boundary after the three-bit header.
268
+ num = (prev + 10) & ~7;
269
+ buf &= last - 1; // zero the pad bits
270
+ }
271
+
272
+ // Clear the last block bit.
273
+ buf &= ~last;
274
+
275
+ // Write out complete bytes in the bit buffer.
276
+ while (num >= 8) {
277
+ putc(buf, out);
278
+ buf >>= 8;
279
+ num -= 8;
280
+ }
281
+
282
+ // If no more bytes left to process, then we have
283
+ // consumed the byte that had bits from the next block.
284
+ if (put == strm.next_in)
285
+ bits = 0;
286
+ }
287
+
288
+ // We are done handling the deflate block header. Now copy
289
+ // all or almost all of the remaining compressed data that
290
+ // has been processed so far. Don't copy one byte at the
291
+ // end if it contains bits from the next deflate block or
292
+ // pad bits at the end of a deflate block.
293
+
294
+ // mix is 1 if we are at the end of a deflate block, and if
295
+ // some of the bits in the last byte follow this block. mix
296
+ // is 0 if we are in the middle of a deflate block, if the
297
+ // deflate block ended on a byte boundary, or if all of the
298
+ // compressed data processed so far has been consumed.
299
+ int mix = (strm.data_type & 0x80) && bits;
300
+
301
+ // Copy all of the processed compressed data to the output,
302
+ // except for the last byte if it contains bits from the
303
+ // next deflate block or pad bits at the end of the deflate
304
+ // stream. Copy the data after shifting in num bits from
305
+ // buf in front of it, leaving num bits from the end of the
306
+ // compressed data in buf when done.
307
+ unsigned char *end = strm.next_in - mix;
308
+ if (put < end) {
309
+ if (num)
310
+ // Insert num bits from buf before the data being
311
+ // copied.
312
+ do {
313
+ buf += (unsigned)(*put++) << num;
314
+ putc(buf, out);
315
+ buf >>= 8;
316
+ } while (put < end);
317
+ else {
318
+ // No shifting needed -- write directly.
319
+ fwrite(put, 1, end - put, out);
320
+ put = end;
321
+ }
322
+ }
323
+
324
+ // Process the last processed byte if it wasn't written.
325
+ if (mix) {
326
+ // Load the last byte into the bit buffer.
327
+ buf += (unsigned)(*put++) << num;
328
+ num += 8;
329
+
330
+ if (strm.data_type & 0x40) {
331
+ // We are at the end of the deflate stream and
332
+ // there are bits pad bits. Discard the pad bits
333
+ // and write a byte to the output, if available.
334
+ // Leave the num bits left over in buf to prepend
335
+ // to the next deflate stream.
336
+ num -= bits;
337
+ if (num >= 8) {
338
+ putc(buf, out);
339
+ num -= 8;
340
+ buf >>= 8;
341
+ }
342
+
343
+ // Force the pad bits in the bit buffer to zeros.
344
+ buf &= ((unsigned long)1 << num) - 1;
345
+
346
+ // Don't need to set prev here since going to TAIL.
347
+ }
348
+ else
349
+ // At the end of an internal deflate block. Leave
350
+ // the last byte in the bit buffer to examine on
351
+ // the next entry to BLOCK, when more bits from the
352
+ // next block will be available.
353
+ prev = num - bits; // number of bits in buffer
354
+ // from current block
355
+ }
356
+
357
+ // Don't have a byte left over, so we are in the middle of
358
+ // a deflate block, or the deflate block ended on a byte
359
+ // boundary. Set prev appropriately for the next entry into
360
+ // BLOCK.
361
+ else if (strm.data_type & 0x80)
362
+ // The block ended on a byte boundary, so no header
363
+ // bits are in the bit buffer.
364
+ prev = num;
365
+ else
366
+ // In the middle of a deflate block, so no header here.
367
+ prev = -1;
368
+
369
+ // Check for the end of the deflate stream.
370
+ if ((strm.data_type & 0xc0) == 0xc0) {
371
+ // That ends the deflate stream on the input side, the
372
+ // pad bits were discarded, and any remaining bits from
373
+ // the last block in the stream are saved in the bit
374
+ // buffer to prepend to the next stream. Process the
375
+ // gzip trailer next.
376
+ tail = 0;
377
+ part = 0;
378
+ state = TAIL;
379
+ }
380
+ break;
381
+
382
+ case TAIL:
383
+ // Accumulate available trailer bytes to update the total
384
+ // CRC and the total uncompressed length.
385
+ do {
386
+ part = (part >> 8) + ((unsigned long)(*put++) << 24);
387
+ tail++;
388
+ if (tail == 4) {
389
+ // Update the total CRC.
390
+ z_off_t len2 = memb;
391
+ if (len2 < 0 || (unsigned long long)len2 != memb)
392
+ BYE("overflow error");
393
+ crc = crc ? crc32_combine(crc, part, len2) : part;
394
+ part = 0;
395
+ }
396
+ else if (tail == 8) {
397
+ // Update the total uncompressed length. (It's ok
398
+ // if this sum is done modulo 2^32.)
399
+ len += part;
400
+
401
+ // At the end of a member. Set up to inflate an
402
+ // immediately following gzip member. (If we made
403
+ // it this far, then the trailer was valid.)
404
+ if (inflateReset(&strm) != Z_OK)
405
+ BYE("internal error");
406
+ state = BETWEEN;
407
+ break;
408
+ }
409
+ } while (put < strm.next_in);
410
+ break;
411
+ }
412
+
413
+ // Process the input buffer until completely consumed.
414
+ } while (strm.avail_in > 0);
415
+
416
+ // Process input until end of file, invalid input, or i/o error.
417
+ } while (more);
418
+
419
+ // Done with the inflate engine.
420
+ inflateEnd(&strm);
421
+
422
+ // Verify the validity of the input.
423
+ if (state != BETWEEN)
424
+ BYE("input invalid: incomplete gzip stream");
425
+
426
+ // Write the remaining deflate stream bits, followed by a terminating
427
+ // deflate fixed block.
428
+ buf += (unsigned long)3 << num;
429
+ putc(buf, out);
430
+ putc(buf >> 8, out);
431
+ if (num > 6)
432
+ putc(0, out);
433
+
434
+ // Write the gzip trailer, which is the CRC and the uncompressed length
435
+ // modulo 2^32, both in little-endian order.
436
+ putc(crc, out);
437
+ putc(crc >> 8, out);
438
+ putc(crc >> 16, out);
439
+ putc(crc >> 24, out);
440
+ putc(len, out);
441
+ putc(len >> 8, out);
442
+ putc(len >> 16, out);
443
+ putc(len >> 24, out);
444
+ fflush(out);
445
+
446
+ // Check for any i/o errors.
447
+ if (ferror(in) || ferror(out))
448
+ BYE("i/o error: %s", strerror(errno));
449
+
450
+ // All good!
451
+ *err = NULL;
452
+ return 0;
453
+}
454
+
455
+// Normalize the gzip stream on stdin, writing the result to stdout.
456
+int main(void) {
457
+ // Avoid end-of-line conversions on evil operating systems.
458
+ SET_BINARY_MODE(stdin);
459
+ SET_BINARY_MODE(stdout);
460
+
461
+ // Normalize from stdin to stdout, returning 1 on error, 0 if ok.
462
+ char *err;
463
+ int ret = gzip_normalize(stdin, stdout, &err);
464
+ if (ret)
465
+ fprintf(stderr, "gznorm error: %s\n", err);
466
+ fr
--- a/compat/zlib/examples/gznorm.c
+++ b/compat/zlib/examples/gznorm.c
@@ -0,0 +1,466 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/compat/zlib/examples/gznorm.c
+++ b/compat/zlib/examples/gznorm.c
@@ -0,0 +1,466 @@
1 /* gznorm.c -- normalize a gzip stream
2 * Copyright (C) 2018 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 * Version 1.0 7 Oct 2018 Mark Adler */
5
6 // gznorm takes a gzip stream, potentially containing multiple members, and
7 // converts it to a gzip stream with a single member. In addition the gzip
8 // header is normalized, removing the file name and time stamp, and setting the
9 // other header contents (XFL, OS) to fixed values. gznorm does not recompress
10 // the data, so it is fast, but no advantage is gained from the history that
11 // could be available acnclude <stdio.h> // fread, fwrite, putc, fflush, ferror, fprintf,
12 // vsnprintf, stdout, stderr, NULL, FILE
13 #include <stdlib.h> // malloc, free
14 #include <string.h> // strerror
15 #include <errno.h> // errno
16 #include <stdarg.h> // va_list, va_start, va_end
17 #include "zlib.h" // inflateInit2, inflate, inflateReset, inflateEnd,
18 // z_stream, z_off_t, crc32_combine, Z_NULL, Z_BLOCK,
19 // Z_OK, Z_STREAM_END, Z_BUF_ERROR, Z_DATA_ERROR,
20 // Z_MEM_ERROR
21
22 #if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
23 # include <fcntl.h>
24 # include <io.h>
25 # define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
26 #else
27 # define SET_BINARY_MODE(file)
28 #endif
29
30 #define local static
31
32 // printf to an allocated string. Return the string, or NULL if the printf or
33 // allocation fails.
34 local char *aprintf(char *fmt, ...) {
35 // Get the length of the result of the printf.
36 va_list args;
37 va_start(args, fmt);
38 int len = vsnprintf(NULL, 0, fmt, args);
39 va_end(args);
40 if (len < 0)
41 return NULL;
42
43 // Allocate the required space and printf to it.
44 char *str = malloc(len + 1);
45 if (str == NULL)
46 return NULL;
47 va_start(args, fmt);
48 vsnprintf(str, len + 1, fmt, args);
49 va_end(args);
50 return str;
51 }
52
53 // Return with an error, putting an allocated error message in *err. Doing an
54 // inflateEnd() on an already ended state, or one with state set to Z_NULL, is
55 // permitted.
56 #define BYE(...) \
57 do { \
58 inflateEnd(&strm); \
59 *err = aprintf(__VA_ARGS__); \
60 return 1; \
61 } while (0)
62
63 // Chunk size for buffered reads and for decompression. Twice this many bytes
64 // will be allocated on the stack by gzip_normalize(). Must fit in an unsigned.
65 #define CHUNK 16384
66
67 // Read a gzip stream from in and write an equivalent normalized gzip stream to
68 // out. If given no input, an empty gzip stream will be written. If successful,
69 // 0 is returned, and *err is set to NULL. On error, 1 is returned, where the
70 // details of the error are returned in *err, a pointer to an allocated string.
71 //
72 // The input may be a stream with multiple gzip members, which is converted to
73 // a single gzip member on the output. Each gzip member is decompressed at the
74 // level of deflate blocks. This enables clearing the last-block bit, shifting
75 // the compressed data to concatenate to the previous member's compressed data,
76 // which can end at an arbitrary bit boundary, and identifying stored blocks in
77 // order to resynchronize those to byte boundaries. The deflate compressed data
78 // is terminated with a 10-bit empty fixed block. If any members on the input
79 // end with a 10-bit empty fixed block, then that block is excised from the
80 // stream. This avoids appending empty fixed blocks for every normalization,
81 // and assures that gzip_normalize applied a second time will not change the
82 // input. The pad bits after stored block headers and after the final deflate
83 // block are all forced to zeros.
84 local int gzip_normalize(FILE *in, FILE *out, char **err) {
85 // initialize the inflate engine to process a gzip member
86 z_stream strm;
87 strm.zalloc = Z_NULL;
88 strm.zfree = Z_NULL;
89 strm.opaque = Z_NULL;
90 strm.avail_in = 0;
91 strm.next_in = Z_NULL;
92 if (inflateInit2(&strm, 15 + 16) != Z_OK)
93 BYE("out of memory");
94
95 // State while processing the input gzip stream.
96 enum { // BETWEEN -> HEAD -> BLOCK -> TAIL -> BETWEEN -> ...
97 BETWEEN, // between gzip members (must end in this state)
98 HEAD, // reading a gzip header
99 BLOCK, // reading deflate blocks
100 TAIL // reading a gzip trailer
101 } state = BETWEEN; // current component being processed
102 unsigned long crc = 0; // accumulated CRC of uncompressed data
103 unsigned long len = 0; // accumulated length of uncompressed data
104 unsigned long buf = 0; // deflate stream bit buffer of num bits
105 int num = 0; // number of bits in buf (at bottom)
106
107 // Write a canonical gzip header (no mod time, file name, comment, extra
108 // block, or extra flags, and OS is marked as unknown).
109 fwrite("\x1f\x8b\x08\0\0\0\0\0\0\xff", 1, 10, out);
110
111 // Process the gzip stream from in until reaching the end of the input,
112 // encountering invalid input, or experiencing an i/o error.
113 int more; // true if not at the end of the input
114 do {
115 // State inside this loop.
116 unsigned char *put; // next input buffer location to process
117 int prev; // number of bits from previous block in
118 // the bit buffer, or -1 if not at the
119 // start of a block
120 unsigned long long memb; // uncompressed length of member
121 size_t tail; // number of trailer bytes read (0..8)
122 unsigned long part; // accumulated trailer component
123
124 // Get the next chunk of input from in.
125 unsigned char dat[CHUNK];
126 strm.avail_in = fread(dat, 1, CHUNK, in);
127 if (strm.avail_in == 0)
128 break;
129 more = strm.avail_in == CHUNK;
130 strm.next_in = put = dat;
131
132 // Run that chunk of input through the inflate engine to exhaustion.
133 do {
134 // At this point it is assured that strm.avail_in > 0.
135
136 // Inflate until the end of a gzip component (header, deflate
137 // block, trailer) is reached, or until all of the chunk is
138 // consumed. The resulting decompressed data is discarded, though
139 // the total size of the decompressed data in each member is
140 // tracked, for the calculation of the total CRC.
141 do {
142 // inflate and handle any errors
143 unsigned char scrap[CHUNK];
144 strm.avail_out = CHUNK;
145 strm.next_out = scrap;
146 int ret = inflate(&strm, Z_BLOCK);
147 if (ret == Z_MEM_ERROR)
148 BYE("out of memory");
149 if (ret == Z_DATA_ERROR)
150 BYE("input invalid: %s", strm.msg);
151 if (ret != Z_OK && ret != Z_BUF_ERROR && ret != Z_STREAM_END)
152 BYE("internal error");
153
154 // Update the number of uncompressed bytes generated in this
155 // member. The actual count (not modulo 2^32) is required to
156 // correctly compute the total CRC.
157 unsigned got = CHUNK - strm.avail_out;
158 memb += got;
159 if (memb < got)
160 BYE("overflow error");
161
162 // Continue to process this chunk until it is consumed, or
163 // until the end of a component (header, deflate block, or
164 // trailer) is reached.
165 } while (strm.avail_out == 0 && (strm.data_type & 0x80) == 0);
166
167 // Since strm.avail_in was > 0 for the inflate call, some input was
168 // just consumed. It is therefore assured that put < strm.next_in.
169
170 // Disposition the consumed component or part of a component.
171 switch (state) {
172 case BETWEEN:
173 state = HEAD;
174 // Fall through to HEAD when some or all of the header is
175 // processed.
176
177 case HEAD:
178 // Discard the header.
179 if (strm.data_type & 0x80) {
180 // End of header reached -- deflate blocks follow.
181 put = strm.next_in;
182 prev = num;
183 memb = 0;
184 state = BLOCK;
185 }
186 break;
187
188 case BLOCK:
189 // Copy the deflate stream to the output, but with the
190 // last-block-bit cleared. Re-synchronize stored block
191 // headers to the output byte boundaries. The bytes at
192 // put..strm.next_in-1 is the compressed data that has been
193 // processed and is ready to be copied to the output.
194
195 // At this point, it is assured that new compressed data is
196 // available, i.e., put < strm.next_in. If prev is -1, then
197 // that compressed data starts in the middle of a deflate
198 // block. If prev is not -1, then the bits in the bit
199 // buffer, possibly combined with the bits in *put, contain
200 // the three-bit header of the new deflate block. In that
201 // case, prev is the number of bits from the previous block
202 // that remain in the bit buffer. Since num is the number
203 // of bits in the bit buffer, we have that num - prev is
204 // the number of bits from the new block currently in the
205 // bit buffer.
206
207 // If strm.data_type & 0xc0 is 0x80, then the last byte of
208 // the available compressed data includes the last bits of
209 // the end of a deflate block. In that case, that last byte
210 // also has strm.data_type & 0x1f bits of the next deflate
211 // block, in the range 0..7. If strm.data_type & 0xc0 is
212 // 0xc0, then the last byte of the compressed data is the
213 // end of the deflate stream, followed by strm.data_type &
214 // 0x1f pad bits, also in the range 0..7.
215
216 // Set bits to the number of bits not yet consumed from the
217 // last byte. If we are at the end of the block, bits is
218 // either the number of bits in the last byte belonging to
219 // the next block, or the number of pad bits after the
220 // final block. In either of those cases, bits is in the
221 // range 0..7.
222 ; // (required due to C syntax oddity)
223 int bits = strm.data_type & 0x1f;
224
225 if (prev != -1) {
226 // We are at the start of a new block. Clear the last
227 // block bit, and check for special cases. If it is a
228 // stored block, then emit the header and pad to the
229 // next byte boundary. If it is a final, empty fixed
230 // block, then excise it.
231
232 // Some or all of the three header bits for this block
233 // may already be in the bit buffer. Load any remaining
234 // header bits into the bit buffer.
235 if (num - prev < 3) {
236 buf += (unsigned long)*put++ << num;
237 num += 8;
238 }
239
240 // Set last to have a 1 in the position of the last
241 // block bit in the bit buffer.
242 unsigned long last = (unsigned long)1 << prev;
243
244 if (((buf >> prev) & 7) == 3) {
245 // This is a final fixed block. Load at least ten
246 // bits from this block, including the header, into
247 // the bit buffer. We already have at least three,
248 // so at most one more byte needs to be loaded.
249 if (num - prev < 10) {
250 if (put == strm.next_in)
251 // Need to go get and process more input.
252 // We'll end up back here to finish this.
253 break;
254 buf += (unsigned long)*put++ << num;
255 num += 8;
256 }
257 if (((buf >> prev) & 0x3ff) == 3) {
258 // That final fixed block is empty. Delete it
259 // to avoid adding an empty block every time a
260 // gzip stream is normalized.
261 num = prev;
262 buf &= last - 1; // zero the pad bits
263 }
264 }
265 else if (((buf >> prev) & 6) == 0) {
266 // This is a stored block. Flush to the next
267 // byte boundary after the three-bit header.
268 num = (prev + 10) & ~7;
269 buf &= last - 1; // zero the pad bits
270 }
271
272 // Clear the last block bit.
273 buf &= ~last;
274
275 // Write out complete bytes in the bit buffer.
276 while (num >= 8) {
277 putc(buf, out);
278 buf >>= 8;
279 num -= 8;
280 }
281
282 // If no more bytes left to process, then we have
283 // consumed the byte that had bits from the next block.
284 if (put == strm.next_in)
285 bits = 0;
286 }
287
288 // We are done handling the deflate block header. Now copy
289 // all or almost all of the remaining compressed data that
290 // has been processed so far. Don't copy one byte at the
291 // end if it contains bits from the next deflate block or
292 // pad bits at the end of a deflate block.
293
294 // mix is 1 if we are at the end of a deflate block, and if
295 // some of the bits in the last byte follow this block. mix
296 // is 0 if we are in the middle of a deflate block, if the
297 // deflate block ended on a byte boundary, or if all of the
298 // compressed data processed so far has been consumed.
299 int mix = (strm.data_type & 0x80) && bits;
300
301 // Copy all of the processed compressed data to the output,
302 // except for the last byte if it contains bits from the
303 // next deflate block or pad bits at the end of the deflate
304 // stream. Copy the data after shifting in num bits from
305 // buf in front of it, leaving num bits from the end of the
306 // compressed data in buf when done.
307 unsigned char *end = strm.next_in - mix;
308 if (put < end) {
309 if (num)
310 // Insert num bits from buf before the data being
311 // copied.
312 do {
313 buf += (unsigned)(*put++) << num;
314 putc(buf, out);
315 buf >>= 8;
316 } while (put < end);
317 else {
318 // No shifting needed -- write directly.
319 fwrite(put, 1, end - put, out);
320 put = end;
321 }
322 }
323
324 // Process the last processed byte if it wasn't written.
325 if (mix) {
326 // Load the last byte into the bit buffer.
327 buf += (unsigned)(*put++) << num;
328 num += 8;
329
330 if (strm.data_type & 0x40) {
331 // We are at the end of the deflate stream and
332 // there are bits pad bits. Discard the pad bits
333 // and write a byte to the output, if available.
334 // Leave the num bits left over in buf to prepend
335 // to the next deflate stream.
336 num -= bits;
337 if (num >= 8) {
338 putc(buf, out);
339 num -= 8;
340 buf >>= 8;
341 }
342
343 // Force the pad bits in the bit buffer to zeros.
344 buf &= ((unsigned long)1 << num) - 1;
345
346 // Don't need to set prev here since going to TAIL.
347 }
348 else
349 // At the end of an internal deflate block. Leave
350 // the last byte in the bit buffer to examine on
351 // the next entry to BLOCK, when more bits from the
352 // next block will be available.
353 prev = num - bits; // number of bits in buffer
354 // from current block
355 }
356
357 // Don't have a byte left over, so we are in the middle of
358 // a deflate block, or the deflate block ended on a byte
359 // boundary. Set prev appropriately for the next entry into
360 // BLOCK.
361 else if (strm.data_type & 0x80)
362 // The block ended on a byte boundary, so no header
363 // bits are in the bit buffer.
364 prev = num;
365 else
366 // In the middle of a deflate block, so no header here.
367 prev = -1;
368
369 // Check for the end of the deflate stream.
370 if ((strm.data_type & 0xc0) == 0xc0) {
371 // That ends the deflate stream on the input side, the
372 // pad bits were discarded, and any remaining bits from
373 // the last block in the stream are saved in the bit
374 // buffer to prepend to the next stream. Process the
375 // gzip trailer next.
376 tail = 0;
377 part = 0;
378 state = TAIL;
379 }
380 break;
381
382 case TAIL:
383 // Accumulate available trailer bytes to update the total
384 // CRC and the total uncompressed length.
385 do {
386 part = (part >> 8) + ((unsigned long)(*put++) << 24);
387 tail++;
388 if (tail == 4) {
389 // Update the total CRC.
390 z_off_t len2 = memb;
391 if (len2 < 0 || (unsigned long long)len2 != memb)
392 BYE("overflow error");
393 crc = crc ? crc32_combine(crc, part, len2) : part;
394 part = 0;
395 }
396 else if (tail == 8) {
397 // Update the total uncompressed length. (It's ok
398 // if this sum is done modulo 2^32.)
399 len += part;
400
401 // At the end of a member. Set up to inflate an
402 // immediately following gzip member. (If we made
403 // it this far, then the trailer was valid.)
404 if (inflateReset(&strm) != Z_OK)
405 BYE("internal error");
406 state = BETWEEN;
407 break;
408 }
409 } while (put < strm.next_in);
410 break;
411 }
412
413 // Process the input buffer until completely consumed.
414 } while (strm.avail_in > 0);
415
416 // Process input until end of file, invalid input, or i/o error.
417 } while (more);
418
419 // Done with the inflate engine.
420 inflateEnd(&strm);
421
422 // Verify the validity of the input.
423 if (state != BETWEEN)
424 BYE("input invalid: incomplete gzip stream");
425
426 // Write the remaining deflate stream bits, followed by a terminating
427 // deflate fixed block.
428 buf += (unsigned long)3 << num;
429 putc(buf, out);
430 putc(buf >> 8, out);
431 if (num > 6)
432 putc(0, out);
433
434 // Write the gzip trailer, which is the CRC and the uncompressed length
435 // modulo 2^32, both in little-endian order.
436 putc(crc, out);
437 putc(crc >> 8, out);
438 putc(crc >> 16, out);
439 putc(crc >> 24, out);
440 putc(len, out);
441 putc(len >> 8, out);
442 putc(len >> 16, out);
443 putc(len >> 24, out);
444 fflush(out);
445
446 // Check for any i/o errors.
447 if (ferror(in) || ferror(out))
448 BYE("i/o error: %s", strerror(errno));
449
450 // All good!
451 *err = NULL;
452 return 0;
453 }
454
455 // Normalize the gzip stream on stdin, writing the result to stdout.
456 int main(void) {
457 // Avoid end-of-line conversions on evil operating systems.
458 SET_BINARY_MODE(stdin);
459 SET_BINARY_MODE(stdout);
460
461 // Normalize from stdin to stdout, returning 1 on error, 0 if ok.
462 char *err;
463 int ret = gzip_normalize(stdin, stdout, &err);
464 if (ret)
465 fprintf(stderr, "gznorm error: %s\n", err);
466 fr
--- compat/zlib/examples/zran.c
+++ compat/zlib/examples/zran.c
@@ -1,13 +1,15 @@
11
/* zran.c -- example of zlib/gzip stream indexing and random access
2
- * Copyright (C) 2005, 2012 Mark Adler
2
+ * Copyright (C) 2005, 2012, 2018 Mark Adler
33
* For conditions of distribution and use, see copyright notice in zlib.h
4
- Version 1.1 29 Sep 2012 Mark Adler */
4
+ * Version 1.2 14 Oct 2018 Mark Adler */
55
66
/* Version History:
77
1.0 29 May 2005 First version
88
1.1 29 Sep 2012 Fix memory reallocation error
9
+ 1.2 14 Oct 2018 Handle gzip streams with multiple members
10
+ Add a header file to facilitate usage in applications
911
*/
1012
1113
/* Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary()
1214
for random access of a compressed file. A file containing a zlib or gzip
1315
stream is provided on the command line. The compressed stream is decoded in
@@ -18,15 +20,15 @@
1820
1921
An access point can be created at the start of any deflate block, by saving
2022
the starting file offset and bit of that block, and the 32K bytes of
2123
uncompressed data that precede that block. Also the uncompressed offset of
2224
that block is saved to provide a referece for locating a desired starting
23
- point in the uncompressed stream. build_index() works by decompressing the
24
- input zlib or gzip stream a block at a time, and at the end of each block
25
- deciding if enough uncompressed data has gone by to justify the creation of
26
- a new access point. If so, that point is saved in a data structure that
27
- grows as needed to accommodate the points.
25
+ point in the uncompressed stream. deflate_index_build() works by
26
+ decompressing the input zlib or gzip stream a block at a time, and at the
27
+ end of each block deciding if enough uncompressed data has gone by to
28
+ justify the creation of a new access point. If so, that point is saved in a
29
+ data structure that grows as needed to accommodate the points.
2830
2931
To use the index, an offset in the uncompressed data is provided, for which
3032
the latest access point at or preceding that offset is located in the index.
3133
The input file is positioned to the specified location in the index, and if
3234
necessary the first few bits of the compressed data is read from the file.
@@ -41,11 +43,12 @@
4143
then further index entries would be generated and added.
4244
4345
There is some fair bit of overhead to starting inflation for the random
4446
access, mainly copying the 32K byte dictionary. So if small pieces of the
4547
file are being accessed, it would make sense to implement a cache to hold
46
- some lookahead and avoid many calls to extract() for small lengths.
48
+ some lookahead and avoid many calls to deflate_index_extract() for small
49
+ lengths.
4750
4851
Another way to build an index would be to use inflateCopy(). That would
4952
not be constrained to have access points at block boundaries, but requires
5053
more memory per access point, and also cannot be saved to file due to the
5154
use of pointers in the state. The approach here allows for storage of the
@@ -54,74 +57,69 @@
5457
5558
#include <stdio.h>
5659
#include <stdlib.h>
5760
#include <string.h>
5861
#include "zlib.h"
62
+#include "zran.h"
5963
60
-#define local static
61
-
62
-#define SPAN 1048576L /* desired distance between access points */
6364
#define WINSIZE 32768U /* sliding window size */
6465
#define CHUNK 16384 /* file input buffer size */
6566
66
-/* access point entry */
67
+/* Access point entry. */
6768
struct point {
6869
off_t out; /* corresponding offset in uncompressed data */
6970
off_t in; /* offset in input file of first full byte */
70
- int bits; /* number of bits (1-7) from byte at in - 1, or 0 */
71
+ int bits; /* number of bits (1-7) from byte at in-1, or 0 */
7172
unsigned char window[WINSIZE]; /* preceding 32K of uncompressed data */
7273
};
7374
74
-/* access point list */
75
-struct access {
76
- int have; /* number of list entries filled in */
77
- int size; /* number of list entries allocated */
78
- struct point *list; /* allocated list */
79
-};
80
-
81
-/* Deallocate an index built by build_index() */
82
-local void free_index(struct access *index)
75
+/* See comments in zran.h. */
76
+void deflate_index_free(struct deflate_index *index)
8377
{
8478
if (index != NULL) {
8579
free(index->list);
8680
free(index);
8781
}
8882
}
8983
90
-/* Add an entry to the access point list. If out of memory, deallocate the
91
- existing list and return NULL. */
92
-local struct access *addpoint(struct access *index, int bits,
93
- off_t in, off_t out, unsigned left, unsigned char *window)
84
+/* Add an entry to the access point list. If out of memory, deallocate the
85
+ existing list and return NULL. index->gzip is the allocated size of the
86
+ index in point entries, until it is time for deflate_index_build() to
87
+ return, at which point gzip is set to indicate a gzip file or not.
88
+ */
89
+static struct deflate_index *addpoint(struct deflate_index *index, int bits,
90
+ off_t in, off_t out, unsigned left,
91
+ unsigned char *window)
9492
{
9593
struct point *next;
9694
9795
/* if list is empty, create it (start with eight points) */
9896
if (index == NULL) {
99
- index = malloc(sizeof(struct access));
97
+ index = malloc(sizeof(struct deflate_index));
10098
if (index == NULL) return NULL;
10199
index->list = malloc(sizeof(struct point) << 3);
102100
if (index->list == NULL) {
103101
free(index);
104102
return NULL;
105103
}
106
- index->size = 8;
104
+ index->gzip = 8;
107105
index->have = 0;
108106
}
109107
110108
/* if list is full, make it bigger */
111
- else if (index->have == index->size) {
112
- index->size <<= 1;
113
- next = realloc(index->list, sizeof(struct point) * index->size);
109
+ else if (index->have == index->gzip) {
110
+ index->gzip <<= 1;
111
+ next = realloc(index->list, sizeof(struct point) * index->gzip);
114112
if (next == NULL) {
115
- free_index(index);
113
+ deflate_index_free(index);
116114
return NULL;
117115
}
118116
index->list = next;
119117
}
120118
121119
/* fill in entry and increment how many we have */
122
- next = index->list + index->have;
120
+ next = (struct point *)(index->list) + index->have;
123121
next->bits = bits;
124122
next->in = in;
125123
next->out = out;
126124
if (left)
127125
memcpy(next->window, window + WINSIZE - left, left);
@@ -131,24 +129,18 @@
131129
132130
/* return list, possibly reallocated */
133131
return index;
134132
}
135133
136
-/* Make one entire pass through the compressed stream and build an index, with
137
- access points about every span bytes of uncompressed output -- span is
138
- chosen to balance the speed of random access against the memory requirements
139
- of the list, about 32K bytes per access point. Note that data after the end
140
- of the first zlib or gzip stream in the file is ignored. build_index()
141
- returns the number of access points on success (>= 1), Z_MEM_ERROR for out
142
- of memory, Z_DATA_ERROR for an error in the input file, or Z_ERRNO for a
143
- file read error. On success, *built points to the resulting index. */
144
-local int build_index(FILE *in, off_t span, struct access **built)
134
+/* See comments in zran.h. */
135
+int deflate_index_build(FILE *in, off_t span, struct deflate_index **built)
145136
{
146137
int ret;
138
+ int gzip = 0; /* true if reading a gzip file */
147139
off_t totin, totout; /* our own total counters to avoid 4GB limit */
148140
off_t last; /* totout value of last access point */
149
- struct access *index; /* access points being generated */
141
+ struct deflate_index *index; /* access points being generated */
150142
z_stream strm;
151143
unsigned char input[CHUNK];
152144
unsigned char window[WINSIZE];
153145
154146
/* initialize inflate */
@@ -161,26 +153,31 @@
161153
if (ret != Z_OK)
162154
return ret;
163155
164156
/* inflate the input, maintain a sliding window, and build an index -- this
165157
also validates the integrity of the compressed data using the check
166
- information at the end of the gzip or zlib stream */
158
+ information in the gzip or zlib stream */
167159
totin = totout = last = 0;
168160
index = NULL; /* will be allocated by first addpoint() */
169161
strm.avail_out = 0;
170162
do {
171163
/* get some compressed data from input file */
172164
strm.avail_in = fread(input, 1, CHUNK, in);
173165
if (ferror(in)) {
174166
ret = Z_ERRNO;
175
- goto build_index_error;
167
+ goto deflate_index_build_error;
176168
}
177169
if (strm.avail_in == 0) {
178170
ret = Z_DATA_ERROR;
179
- goto build_index_error;
171
+ goto deflate_index_build_error;
180172
}
181173
strm.next_in = input;
174
+
175
+ /* check for a gzip stream */
176
+ if (totin == 0 && strm.avail_in >= 3 &&
177
+ input[0] == 31 && input[1] == 139 && input[2] == 8)
178
+ gzip = 1;
182179
183180
/* process all of that, or until end of stream */
184181
do {
185182
/* reset sliding window if necessary */
186183
if (strm.avail_out == 0) {
@@ -196,13 +193,21 @@
196193
totin -= strm.avail_in;
197194
totout -= strm.avail_out;
198195
if (ret == Z_NEED_DICT)
199196
ret = Z_DATA_ERROR;
200197
if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
201
- goto build_index_error;
202
- if (ret == Z_STREAM_END)
198
+ goto deflate_index_build_error;
199
+ if (ret == Z_STREAM_END) {
200
+ if (gzip &&
201
+ (strm.avail_in || ungetc(getc(in), in) != EOF)) {
202
+ ret = inflateReset(&strm);
203
+ if (ret != Z_OK)
204
+ goto deflate_index_build_error;
205
+ continue;
206
+ }
203207
break;
208
+ }
204209
205210
/* if at end of block, consider adding an index entry (note that if
206211
data_type indicates an end-of-block, then all of the
207212
uncompressed data from that block has been delivered, and none
208213
of the compressed data after that block has been consumed,
@@ -215,41 +220,35 @@
215220
(totout == 0 || totout - last > span)) {
216221
index = addpoint(index, strm.data_type & 7, totin,
217222
totout, strm.avail_out, window);
218223
if (index == NULL) {
219224
ret = Z_MEM_ERROR;
220
- goto build_index_error;
225
+ goto deflate_index_build_error;
221226
}
222227
last = totout;
223228
}
224229
} while (strm.avail_in != 0);
225230
} while (ret != Z_STREAM_END);
226231
227232
/* clean up and return index (release unused entries in list) */
228233
(void)inflateEnd(&strm);
229234
index->list = realloc(index->list, sizeof(struct point) * index->have);
230
- index->size = index->have;
235
+ index->gzip = gzip;
236
+ index->length = totout;
231237
*built = index;
232
- return index->size;
238
+ return index->have;
233239
234240
/* return error */
235
- build_index_error:
241
+ deflate_index_build_error:
236242
(void)inflateEnd(&strm);
237
- if (index != NULL)
238
- free_index(index);
243
+ deflate_index_free(index);
239244
return ret;
240245
}
241246
242
-/* Use the index to read len bytes from offset into buf, return bytes read or
243
- negative for error (Z_DATA_ERROR or Z_MEM_ERROR). If data is requested past
244
- the end of the uncompressed data, then extract() will return a value less
245
- than len, indicating how much as actually read into buf. This function
246
- should not return a data error unless the file was modified since the index
247
- was generated. extract() may also return Z_ERRNO if there is an error on
248
- reading or seeking the input file. */
249
-local int extract(FILE *in, struct access *index, off_t offset,
250
- unsigned char *buf, int len)
247
+/* See comments in zran.h. */
248
+int deflate_index_extract(FILE *in, struct deflate_index *index, off_t offset,
249
+ unsigned char *buf, int len)
251250
{
252251
int ret, skip;
253252
z_stream strm;
254253
struct point *here;
255254
unsigned char input[CHUNK];
@@ -274,16 +273,16 @@
274273
ret = inflateInit2(&strm, -15); /* raw inflate */
275274
if (ret != Z_OK)
276275
return ret;
277276
ret = fseeko(in, here->in - (here->bits ? 1 : 0), SEEK_SET);
278277
if (ret == -1)
279
- goto extract_ret;
278
+ goto deflate_index_extract_ret;
280279
if (here->bits) {
281280
ret = getc(in);
282281
if (ret == -1) {
283282
ret = ferror(in) ? Z_ERRNO : Z_DATA_ERROR;
284
- goto extract_ret;
283
+ goto deflate_index_extract_ret;
285284
}
286285
(void)inflatePrime(&strm, here->bits, ret >> (8 - here->bits));
287286
}
288287
(void)inflateSetDictionary(&strm, here->window, WINSIZE);
289288
@@ -291,89 +290,157 @@
291290
offset -= here->out;
292291
strm.avail_in = 0;
293292
skip = 1; /* while skipping to offset */
294293
do {
295294
/* define where to put uncompressed data, and how much */
296
- if (offset == 0 && skip) { /* at offset now */
297
- strm.avail_out = len;
298
- strm.next_out = buf;
299
- skip = 0; /* only do this once */
300
- }
301295
if (offset > WINSIZE) { /* skip WINSIZE bytes */
302296
strm.avail_out = WINSIZE;
303297
strm.next_out = discard;
304298
offset -= WINSIZE;
305299
}
306
- else if (offset != 0) { /* last skip */
300
+ else if (offset > 0) { /* last skip */
307301
strm.avail_out = (unsigned)offset;
308302
strm.next_out = discard;
309303
offset = 0;
310304
}
305
+ else if (skip) { /* at offset now */
306
+ strm.avail_out = len;
307
+ strm.next_out = buf;
308
+ skip = 0; /* only do this once */
309
+ }
311310
312311
/* uncompress until avail_out filled, or end of stream */
313312
do {
314313
if (strm.avail_in == 0) {
315314
strm.avail_in = fread(input, 1, CHUNK, in);
316315
if (ferror(in)) {
317316
ret = Z_ERRNO;
318
- goto extract_ret;
317
+ goto deflate_index_extract_ret;
319318
}
320319
if (strm.avail_in == 0) {
321320
ret = Z_DATA_ERROR;
322
- goto extract_ret;
321
+ goto deflate_index_extract_ret;
323322
}
324323
strm.next_in = input;
325324
}
326325
ret = inflate(&strm, Z_NO_FLUSH); /* normal inflate */
327326
if (ret == Z_NEED_DICT)
328327
ret = Z_DATA_ERROR;
329328
if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
330
- goto extract_ret;
331
- if (ret == Z_STREAM_END)
332
- break;
333
- } while (strm.avail_out != 0);
334
-
335
- /* if reach end of stream, then don't keep trying to get more */
336
- if (ret == Z_STREAM_END)
337
- break;
338
-
339
- /* do until offset reached and requested data read, or stream ends */
340
- } while (skip);
341
-
342
- /* compute number of uncompressed bytes read after offset */
343
- ret = skip ? 0 : len - strm.avail_out;
344
-
345
- /* clean up and return bytes read or error */
346
- extract_ret:
329
+ goto deflate_index_extract_ret;
330
+ if (ret == Z_STREAM_END) {
331
+ /* the raw deflate stream has ended */
332
+ if (index->gzip == 0)
333
+ /* this is a zlib stream that has ended -- done */
334
+ break;
335
+
336
+ /* near the end of a gzip member, which might be followed by
337
+ another gzip member -- skip the gzip trailer and see if
338
+ there is more input after it */
339
+ if (strm.avail_in < 8) {
340
+ fseeko(in, 8 - strm.avail_in, SEEK_CUR);
341
+ strm.avail_in = 0;
342
+ }
343
+ else {
344
+ strm.avail_in -= 8;
345
+ strm.next_in += 8;
346
+ }
347
+ if (strm.avail_in == 0 && ungetc(getc(in), in) == EOF)
348
+ /* the input ended after the gzip trailer -- done */
349
+ break;
350
+
351
+ /* there is more input, so another gzip member should follow --
352
+ validate and skip the gzip header */
353
+ ret = inflateReset2(&strm, 31);
354
+ if (ret != Z_OK)
355
+ goto deflate_index_extract_ret;
356
+ do {
357
+ if (strm.avail_in == 0) {
358
+ strm.avail_in = fread(input, 1, CHUNK, in);
359
+ if (ferror(in)) {
360
+ ret = Z_ERRNO;
361
+ goto deflate_index_extract_ret;
362
+ }
363
+ if (strm.avail_in == 0) {
364
+ ret = Z_DATA_ERROR;
365
+ goto deflate_index_extract_ret;
366
+ }
367
+ strm.next_in = input;
368
+ }
369
+ ret = inflate(&strm, Z_BLOCK);
370
+ if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
371
+ goto deflate_index_extract_ret;
372
+ } while ((strm.data_type & 128) == 0);
373
+
374
+ /* set up to continue decompression of the raw deflate stream
375
+ that follows the gzip header */
376
+ ret = inflateReset2(&strm, -15);
377
+ if (ret != Z_OK)
378
+ goto deflate_index_extract_ret;
379
+ }
380
+
381
+ /* continue to process the available input before reading more */
382
+ } while (strm.avail_out != 0);
383
+
384
+ if (ret == Z_STREAM_END)
385
+ /* reached the end of the compressed data -- return the data that
386
+ was available, possibly less than requested */
387
+ break;
388
+
389
+ /* do until offset reached and requested data read */
390
+ } while (skip);
391
+
392
+ /* compute the number of uncompressed bytes read after the offset */
393
+ ret = skip ? 0 : len - strm.avail_out;
394
+
395
+ /* clean up and return the bytes read, or the negative error */
396
+ deflate_index_extract_ret:
347397
(void)inflateEnd(&strm);
348398
return ret;
349399
}
350400
351
-/* Demonstrate the use of build_index() and extract() by processing the file
352
- provided on the command line, and the extracting 16K from about 2/3rds of
353
- the way through the uncompressed output, and writing that to stdout. */
401
+#ifdef TEST
402
+
403
+#define SPAN 1048576L /* desired distance between access points */
404
+#define LEN 16384 /* number of bytes to extract */
405
+
406
+/* Demonstrate the use of deflate_index_build() and deflate_index_extract() by
407
+ processing the file provided on the command line, and extracting LEN bytes
408
+ from 2/3rds of the way through the uncompressed output, writing that to
409
+ stdout. An offset can be provided as the second argument, in which case the
410
+ data is extracted from there instead. */
354411
int main(int argc, char **argv)
355412
{
356413
int len;
357
- off_t offset;
414
+ off_t offset = -1;
358415
FILE *in;
359
- struct access *index = NULL;
360
- unsigned char buf[CHUNK];
416
+ struct deflate_index *index = NULL;
417
+ unsigned char buf[LEN];
361418
362419
/* open input file */
363
- if (argc != 2) {
364
- fprintf(stderr, "usage: zran file.gz\n");
420
+ if (argc < 2 || argc > 3) {
421
+ fprintf(stderr, "usage: zran file.gz [offset]\n");
365422
return 1;
366423
}
367424
in = fopen(argv[1], "rb");
368425
if (in == NULL) {
369426
fprintf(stderr, "zran: could not open %s for reading\n", argv[1]);
370427
return 1;
371428
}
429
+
430
+ /* get optional offset */
431
+ if (argc == 3) {
432
+ char *end;
433
+ offset = strtoll(argv[2], &end, 10);
434
+ if (*end || offset < 0) {
435
+ fprintf(stderr, "zran: %s is not a valid offset\n", argv[2]);
436
+ return 1;
437
+ }
438
+ }
372439
373440
/* build index */
374
- len = build_index(in, SPAN, &index);
441
+ len = deflate_index_build(in, SPAN, &index);
375442
if (len < 0) {
376443
fclose(in);
377444
switch (len) {
378445
case Z_MEM_ERROR:
379446
fprintf(stderr, "zran: out of memory\n");
@@ -390,20 +457,23 @@
390457
return 1;
391458
}
392459
fprintf(stderr, "zran: built index with %d access points\n", len);
393460
394461
/* use index by reading some bytes from an arbitrary offset */
395
- offset = (index->list[index->have - 1].out << 1) / 3;
396
- len = extract(in, index, offset, buf, CHUNK);
462
+ if (offset == -1)
463
+ offset = (index->length << 1) / 3;
464
+ len = deflate_index_extract(in, index, offset, buf, LEN);
397465
if (len < 0)
398466
fprintf(stderr, "zran: extraction failed: %s error\n",
399467
len == Z_MEM_ERROR ? "out of memory" : "input corrupted");
400468
else {
401469
fwrite(buf, 1, len, stdout);
402470
fprintf(stderr, "zran: extracted %d bytes at %llu\n", len, offset);
403471
}
404472
405473
/* clean up and exit */
406
- free_index(index);
474
+ deflate_index_free(index);
407475
fclose(in);
408476
return 0;
409477
}
478
+
479
+#endif
410480
411481
ADDED compat/zlib/examples/zran.h
--- compat/zlib/examples/zran.c
+++ compat/zlib/examples/zran.c
@@ -1,13 +1,15 @@
1 /* zran.c -- example of zlib/gzip stream indexing and random access
2 * Copyright (C) 2005, 2012 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 Version 1.1 29 Sep 2012 Mark Adler */
5
6 /* Version History:
7 1.0 29 May 2005 First version
8 1.1 29 Sep 2012 Fix memory reallocation error
 
 
9 */
10
11 /* Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary()
12 for random access of a compressed file. A file containing a zlib or gzip
13 stream is provided on the command line. The compressed stream is decoded in
@@ -18,15 +20,15 @@
18
19 An access point can be created at the start of any deflate block, by saving
20 the starting file offset and bit of that block, and the 32K bytes of
21 uncompressed data that precede that block. Also the uncompressed offset of
22 that block is saved to provide a referece for locating a desired starting
23 point in the uncompressed stream. build_index() works by decompressing the
24 input zlib or gzip stream a block at a time, and at the end of each block
25 deciding if enough uncompressed data has gone by to justify the creation of
26 a new access point. If so, that point is saved in a data structure that
27 grows as needed to accommodate the points.
28
29 To use the index, an offset in the uncompressed data is provided, for which
30 the latest access point at or preceding that offset is located in the index.
31 The input file is positioned to the specified location in the index, and if
32 necessary the first few bits of the compressed data is read from the file.
@@ -41,11 +43,12 @@
41 then further index entries would be generated and added.
42
43 There is some fair bit of overhead to starting inflation for the random
44 access, mainly copying the 32K byte dictionary. So if small pieces of the
45 file are being accessed, it would make sense to implement a cache to hold
46 some lookahead and avoid many calls to extract() for small lengths.
 
47
48 Another way to build an index would be to use inflateCopy(). That would
49 not be constrained to have access points at block boundaries, but requires
50 more memory per access point, and also cannot be saved to file due to the
51 use of pointers in the state. The approach here allows for storage of the
@@ -54,74 +57,69 @@
54
55 #include <stdio.h>
56 #include <stdlib.h>
57 #include <string.h>
58 #include "zlib.h"
 
59
60 #define local static
61
62 #define SPAN 1048576L /* desired distance between access points */
63 #define WINSIZE 32768U /* sliding window size */
64 #define CHUNK 16384 /* file input buffer size */
65
66 /* access point entry */
67 struct point {
68 off_t out; /* corresponding offset in uncompressed data */
69 off_t in; /* offset in input file of first full byte */
70 int bits; /* number of bits (1-7) from byte at in - 1, or 0 */
71 unsigned char window[WINSIZE]; /* preceding 32K of uncompressed data */
72 };
73
74 /* access point list */
75 struct access {
76 int have; /* number of list entries filled in */
77 int size; /* number of list entries allocated */
78 struct point *list; /* allocated list */
79 };
80
81 /* Deallocate an index built by build_index() */
82 local void free_index(struct access *index)
83 {
84 if (index != NULL) {
85 free(index->list);
86 free(index);
87 }
88 }
89
90 /* Add an entry to the access point list. If out of memory, deallocate the
91 existing list and return NULL. */
92 local struct access *addpoint(struct access *index, int bits,
93 off_t in, off_t out, unsigned left, unsigned char *window)
 
 
 
 
94 {
95 struct point *next;
96
97 /* if list is empty, create it (start with eight points) */
98 if (index == NULL) {
99 index = malloc(sizeof(struct access));
100 if (index == NULL) return NULL;
101 index->list = malloc(sizeof(struct point) << 3);
102 if (index->list == NULL) {
103 free(index);
104 return NULL;
105 }
106 index->size = 8;
107 index->have = 0;
108 }
109
110 /* if list is full, make it bigger */
111 else if (index->have == index->size) {
112 index->size <<= 1;
113 next = realloc(index->list, sizeof(struct point) * index->size);
114 if (next == NULL) {
115 free_index(index);
116 return NULL;
117 }
118 index->list = next;
119 }
120
121 /* fill in entry and increment how many we have */
122 next = index->list + index->have;
123 next->bits = bits;
124 next->in = in;
125 next->out = out;
126 if (left)
127 memcpy(next->window, window + WINSIZE - left, left);
@@ -131,24 +129,18 @@
131
132 /* return list, possibly reallocated */
133 return index;
134 }
135
136 /* Make one entire pass through the compressed stream and build an index, with
137 access points about every span bytes of uncompressed output -- span is
138 chosen to balance the speed of random access against the memory requirements
139 of the list, about 32K bytes per access point. Note that data after the end
140 of the first zlib or gzip stream in the file is ignored. build_index()
141 returns the number of access points on success (>= 1), Z_MEM_ERROR for out
142 of memory, Z_DATA_ERROR for an error in the input file, or Z_ERRNO for a
143 file read error. On success, *built points to the resulting index. */
144 local int build_index(FILE *in, off_t span, struct access **built)
145 {
146 int ret;
 
147 off_t totin, totout; /* our own total counters to avoid 4GB limit */
148 off_t last; /* totout value of last access point */
149 struct access *index; /* access points being generated */
150 z_stream strm;
151 unsigned char input[CHUNK];
152 unsigned char window[WINSIZE];
153
154 /* initialize inflate */
@@ -161,26 +153,31 @@
161 if (ret != Z_OK)
162 return ret;
163
164 /* inflate the input, maintain a sliding window, and build an index -- this
165 also validates the integrity of the compressed data using the check
166 information at the end of the gzip or zlib stream */
167 totin = totout = last = 0;
168 index = NULL; /* will be allocated by first addpoint() */
169 strm.avail_out = 0;
170 do {
171 /* get some compressed data from input file */
172 strm.avail_in = fread(input, 1, CHUNK, in);
173 if (ferror(in)) {
174 ret = Z_ERRNO;
175 goto build_index_error;
176 }
177 if (strm.avail_in == 0) {
178 ret = Z_DATA_ERROR;
179 goto build_index_error;
180 }
181 strm.next_in = input;
 
 
 
 
 
182
183 /* process all of that, or until end of stream */
184 do {
185 /* reset sliding window if necessary */
186 if (strm.avail_out == 0) {
@@ -196,13 +193,21 @@
196 totin -= strm.avail_in;
197 totout -= strm.avail_out;
198 if (ret == Z_NEED_DICT)
199 ret = Z_DATA_ERROR;
200 if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
201 goto build_index_error;
202 if (ret == Z_STREAM_END)
 
 
 
 
 
 
 
203 break;
 
204
205 /* if at end of block, consider adding an index entry (note that if
206 data_type indicates an end-of-block, then all of the
207 uncompressed data from that block has been delivered, and none
208 of the compressed data after that block has been consumed,
@@ -215,41 +220,35 @@
215 (totout == 0 || totout - last > span)) {
216 index = addpoint(index, strm.data_type & 7, totin,
217 totout, strm.avail_out, window);
218 if (index == NULL) {
219 ret = Z_MEM_ERROR;
220 goto build_index_error;
221 }
222 last = totout;
223 }
224 } while (strm.avail_in != 0);
225 } while (ret != Z_STREAM_END);
226
227 /* clean up and return index (release unused entries in list) */
228 (void)inflateEnd(&strm);
229 index->list = realloc(index->list, sizeof(struct point) * index->have);
230 index->size = index->have;
 
231 *built = index;
232 return index->size;
233
234 /* return error */
235 build_index_error:
236 (void)inflateEnd(&strm);
237 if (index != NULL)
238 free_index(index);
239 return ret;
240 }
241
242 /* Use the index to read len bytes from offset into buf, return bytes read or
243 negative for error (Z_DATA_ERROR or Z_MEM_ERROR). If data is requested past
244 the end of the uncompressed data, then extract() will return a value less
245 than len, indicating how much as actually read into buf. This function
246 should not return a data error unless the file was modified since the index
247 was generated. extract() may also return Z_ERRNO if there is an error on
248 reading or seeking the input file. */
249 local int extract(FILE *in, struct access *index, off_t offset,
250 unsigned char *buf, int len)
251 {
252 int ret, skip;
253 z_stream strm;
254 struct point *here;
255 unsigned char input[CHUNK];
@@ -274,16 +273,16 @@
274 ret = inflateInit2(&strm, -15); /* raw inflate */
275 if (ret != Z_OK)
276 return ret;
277 ret = fseeko(in, here->in - (here->bits ? 1 : 0), SEEK_SET);
278 if (ret == -1)
279 goto extract_ret;
280 if (here->bits) {
281 ret = getc(in);
282 if (ret == -1) {
283 ret = ferror(in) ? Z_ERRNO : Z_DATA_ERROR;
284 goto extract_ret;
285 }
286 (void)inflatePrime(&strm, here->bits, ret >> (8 - here->bits));
287 }
288 (void)inflateSetDictionary(&strm, here->window, WINSIZE);
289
@@ -291,89 +290,157 @@
291 offset -= here->out;
292 strm.avail_in = 0;
293 skip = 1; /* while skipping to offset */
294 do {
295 /* define where to put uncompressed data, and how much */
296 if (offset == 0 && skip) { /* at offset now */
297 strm.avail_out = len;
298 strm.next_out = buf;
299 skip = 0; /* only do this once */
300 }
301 if (offset > WINSIZE) { /* skip WINSIZE bytes */
302 strm.avail_out = WINSIZE;
303 strm.next_out = discard;
304 offset -= WINSIZE;
305 }
306 else if (offset != 0) { /* last skip */
307 strm.avail_out = (unsigned)offset;
308 strm.next_out = discard;
309 offset = 0;
310 }
 
 
 
 
 
311
312 /* uncompress until avail_out filled, or end of stream */
313 do {
314 if (strm.avail_in == 0) {
315 strm.avail_in = fread(input, 1, CHUNK, in);
316 if (ferror(in)) {
317 ret = Z_ERRNO;
318 goto extract_ret;
319 }
320 if (strm.avail_in == 0) {
321 ret = Z_DATA_ERROR;
322 goto extract_ret;
323 }
324 strm.next_in = input;
325 }
326 ret = inflate(&strm, Z_NO_FLUSH); /* normal inflate */
327 if (ret == Z_NEED_DICT)
328 ret = Z_DATA_ERROR;
329 if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
330 goto extract_ret;
331 if (ret == Z_STREAM_END)
332 break;
333 } while (strm.avail_out != 0);
334
335 /* if reach end of stream, then don't keep trying to get more */
336 if (ret == Z_STREAM_END)
337 break;
338
339 /* do until offset reached and requested data read, or stream ends */
340 } while (skip);
341
342 /* compute number of uncompressed bytes read after offset */
343 ret = skip ? 0 : len - strm.avail_out;
344
345 /* clean up and return bytes read or error */
346 extract_ret:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
347 (void)inflateEnd(&strm);
348 return ret;
349 }
350
351 /* Demonstrate the use of build_index() and extract() by processing the file
352 provided on the command line, and the extracting 16K from about 2/3rds of
353 the way through the uncompressed output, and writing that to stdout. */
 
 
 
 
 
 
 
354 int main(int argc, char **argv)
355 {
356 int len;
357 off_t offset;
358 FILE *in;
359 struct access *index = NULL;
360 unsigned char buf[CHUNK];
361
362 /* open input file */
363 if (argc != 2) {
364 fprintf(stderr, "usage: zran file.gz\n");
365 return 1;
366 }
367 in = fopen(argv[1], "rb");
368 if (in == NULL) {
369 fprintf(stderr, "zran: could not open %s for reading\n", argv[1]);
370 return 1;
371 }
 
 
 
 
 
 
 
 
 
 
372
373 /* build index */
374 len = build_index(in, SPAN, &index);
375 if (len < 0) {
376 fclose(in);
377 switch (len) {
378 case Z_MEM_ERROR:
379 fprintf(stderr, "zran: out of memory\n");
@@ -390,20 +457,23 @@
390 return 1;
391 }
392 fprintf(stderr, "zran: built index with %d access points\n", len);
393
394 /* use index by reading some bytes from an arbitrary offset */
395 offset = (index->list[index->have - 1].out << 1) / 3;
396 len = extract(in, index, offset, buf, CHUNK);
 
397 if (len < 0)
398 fprintf(stderr, "zran: extraction failed: %s error\n",
399 len == Z_MEM_ERROR ? "out of memory" : "input corrupted");
400 else {
401 fwrite(buf, 1, len, stdout);
402 fprintf(stderr, "zran: extracted %d bytes at %llu\n", len, offset);
403 }
404
405 /* clean up and exit */
406 free_index(index);
407 fclose(in);
408 return 0;
409 }
 
 
410
411 DDED compat/zlib/examples/zran.h
--- compat/zlib/examples/zran.c
+++ compat/zlib/examples/zran.c
@@ -1,13 +1,15 @@
1 /* zran.c -- example of zlib/gzip stream indexing and random access
2 * Copyright (C) 2005, 2012, 2018 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 * Version 1.2 14 Oct 2018 Mark Adler */
5
6 /* Version History:
7 1.0 29 May 2005 First version
8 1.1 29 Sep 2012 Fix memory reallocation error
9 1.2 14 Oct 2018 Handle gzip streams with multiple members
10 Add a header file to facilitate usage in applications
11 */
12
13 /* Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary()
14 for random access of a compressed file. A file containing a zlib or gzip
15 stream is provided on the command line. The compressed stream is decoded in
@@ -18,15 +20,15 @@
20
21 An access point can be created at the start of any deflate block, by saving
22 the starting file offset and bit of that block, and the 32K bytes of
23 uncompressed data that precede that block. Also the uncompressed offset of
24 that block is saved to provide a referece for locating a desired starting
25 point in the uncompressed stream. deflate_index_build() works by
26 decompressing the input zlib or gzip stream a block at a time, and at the
27 end of each block deciding if enough uncompressed data has gone by to
28 justify the creation of a new access point. If so, that point is saved in a
29 data structure that grows as needed to accommodate the points.
30
31 To use the index, an offset in the uncompressed data is provided, for which
32 the latest access point at or preceding that offset is located in the index.
33 The input file is positioned to the specified location in the index, and if
34 necessary the first few bits of the compressed data is read from the file.
@@ -41,11 +43,12 @@
43 then further index entries would be generated and added.
44
45 There is some fair bit of overhead to starting inflation for the random
46 access, mainly copying the 32K byte dictionary. So if small pieces of the
47 file are being accessed, it would make sense to implement a cache to hold
48 some lookahead and avoid many calls to deflate_index_extract() for small
49 lengths.
50
51 Another way to build an index would be to use inflateCopy(). That would
52 not be constrained to have access points at block boundaries, but requires
53 more memory per access point, and also cannot be saved to file due to the
54 use of pointers in the state. The approach here allows for storage of the
@@ -54,74 +57,69 @@
57
58 #include <stdio.h>
59 #include <stdlib.h>
60 #include <string.h>
61 #include "zlib.h"
62 #include "zran.h"
63
 
 
 
64 #define WINSIZE 32768U /* sliding window size */
65 #define CHUNK 16384 /* file input buffer size */
66
67 /* Access point entry. */
68 struct point {
69 off_t out; /* corresponding offset in uncompressed data */
70 off_t in; /* offset in input file of first full byte */
71 int bits; /* number of bits (1-7) from byte at in-1, or 0 */
72 unsigned char window[WINSIZE]; /* preceding 32K of uncompressed data */
73 };
74
75 /* See comments in zran.h. */
76 void deflate_index_free(struct deflate_index *index)
 
 
 
 
 
 
 
77 {
78 if (index != NULL) {
79 free(index->list);
80 free(index);
81 }
82 }
83
84 /* Add an entry to the access point list. If out of memory, deallocate the
85 existing list and return NULL. index->gzip is the allocated size of the
86 index in point entries, until it is time for deflate_index_build() to
87 return, at which point gzip is set to indicate a gzip file or not.
88 */
89 static struct deflate_index *addpoint(struct deflate_index *index, int bits,
90 off_t in, off_t out, unsigned left,
91 unsigned char *window)
92 {
93 struct point *next;
94
95 /* if list is empty, create it (start with eight points) */
96 if (index == NULL) {
97 index = malloc(sizeof(struct deflate_index));
98 if (index == NULL) return NULL;
99 index->list = malloc(sizeof(struct point) << 3);
100 if (index->list == NULL) {
101 free(index);
102 return NULL;
103 }
104 index->gzip = 8;
105 index->have = 0;
106 }
107
108 /* if list is full, make it bigger */
109 else if (index->have == index->gzip) {
110 index->gzip <<= 1;
111 next = realloc(index->list, sizeof(struct point) * index->gzip);
112 if (next == NULL) {
113 deflate_index_free(index);
114 return NULL;
115 }
116 index->list = next;
117 }
118
119 /* fill in entry and increment how many we have */
120 next = (struct point *)(index->list) + index->have;
121 next->bits = bits;
122 next->in = in;
123 next->out = out;
124 if (left)
125 memcpy(next->window, window + WINSIZE - left, left);
@@ -131,24 +129,18 @@
129
130 /* return list, possibly reallocated */
131 return index;
132 }
133
134 /* See comments in zran.h. */
135 int deflate_index_build(FILE *in, off_t span, struct deflate_index **built)
 
 
 
 
 
 
 
136 {
137 int ret;
138 int gzip = 0; /* true if reading a gzip file */
139 off_t totin, totout; /* our own total counters to avoid 4GB limit */
140 off_t last; /* totout value of last access point */
141 struct deflate_index *index; /* access points being generated */
142 z_stream strm;
143 unsigned char input[CHUNK];
144 unsigned char window[WINSIZE];
145
146 /* initialize inflate */
@@ -161,26 +153,31 @@
153 if (ret != Z_OK)
154 return ret;
155
156 /* inflate the input, maintain a sliding window, and build an index -- this
157 also validates the integrity of the compressed data using the check
158 information in the gzip or zlib stream */
159 totin = totout = last = 0;
160 index = NULL; /* will be allocated by first addpoint() */
161 strm.avail_out = 0;
162 do {
163 /* get some compressed data from input file */
164 strm.avail_in = fread(input, 1, CHUNK, in);
165 if (ferror(in)) {
166 ret = Z_ERRNO;
167 goto deflate_index_build_error;
168 }
169 if (strm.avail_in == 0) {
170 ret = Z_DATA_ERROR;
171 goto deflate_index_build_error;
172 }
173 strm.next_in = input;
174
175 /* check for a gzip stream */
176 if (totin == 0 && strm.avail_in >= 3 &&
177 input[0] == 31 && input[1] == 139 && input[2] == 8)
178 gzip = 1;
179
180 /* process all of that, or until end of stream */
181 do {
182 /* reset sliding window if necessary */
183 if (strm.avail_out == 0) {
@@ -196,13 +193,21 @@
193 totin -= strm.avail_in;
194 totout -= strm.avail_out;
195 if (ret == Z_NEED_DICT)
196 ret = Z_DATA_ERROR;
197 if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
198 goto deflate_index_build_error;
199 if (ret == Z_STREAM_END) {
200 if (gzip &&
201 (strm.avail_in || ungetc(getc(in), in) != EOF)) {
202 ret = inflateReset(&strm);
203 if (ret != Z_OK)
204 goto deflate_index_build_error;
205 continue;
206 }
207 break;
208 }
209
210 /* if at end of block, consider adding an index entry (note that if
211 data_type indicates an end-of-block, then all of the
212 uncompressed data from that block has been delivered, and none
213 of the compressed data after that block has been consumed,
@@ -215,41 +220,35 @@
220 (totout == 0 || totout - last > span)) {
221 index = addpoint(index, strm.data_type & 7, totin,
222 totout, strm.avail_out, window);
223 if (index == NULL) {
224 ret = Z_MEM_ERROR;
225 goto deflate_index_build_error;
226 }
227 last = totout;
228 }
229 } while (strm.avail_in != 0);
230 } while (ret != Z_STREAM_END);
231
232 /* clean up and return index (release unused entries in list) */
233 (void)inflateEnd(&strm);
234 index->list = realloc(index->list, sizeof(struct point) * index->have);
235 index->gzip = gzip;
236 index->length = totout;
237 *built = index;
238 return index->have;
239
240 /* return error */
241 deflate_index_build_error:
242 (void)inflateEnd(&strm);
243 deflate_index_free(index);
 
244 return ret;
245 }
246
247 /* See comments in zran.h. */
248 int deflate_index_extract(FILE *in, struct deflate_index *index, off_t offset,
249 unsigned char *buf, int len)
 
 
 
 
 
 
250 {
251 int ret, skip;
252 z_stream strm;
253 struct point *here;
254 unsigned char input[CHUNK];
@@ -274,16 +273,16 @@
273 ret = inflateInit2(&strm, -15); /* raw inflate */
274 if (ret != Z_OK)
275 return ret;
276 ret = fseeko(in, here->in - (here->bits ? 1 : 0), SEEK_SET);
277 if (ret == -1)
278 goto deflate_index_extract_ret;
279 if (here->bits) {
280 ret = getc(in);
281 if (ret == -1) {
282 ret = ferror(in) ? Z_ERRNO : Z_DATA_ERROR;
283 goto deflate_index_extract_ret;
284 }
285 (void)inflatePrime(&strm, here->bits, ret >> (8 - here->bits));
286 }
287 (void)inflateSetDictionary(&strm, here->window, WINSIZE);
288
@@ -291,89 +290,157 @@
290 offset -= here->out;
291 strm.avail_in = 0;
292 skip = 1; /* while skipping to offset */
293 do {
294 /* define where to put uncompressed data, and how much */
 
 
 
 
 
295 if (offset > WINSIZE) { /* skip WINSIZE bytes */
296 strm.avail_out = WINSIZE;
297 strm.next_out = discard;
298 offset -= WINSIZE;
299 }
300 else if (offset > 0) { /* last skip */
301 strm.avail_out = (unsigned)offset;
302 strm.next_out = discard;
303 offset = 0;
304 }
305 else if (skip) { /* at offset now */
306 strm.avail_out = len;
307 strm.next_out = buf;
308 skip = 0; /* only do this once */
309 }
310
311 /* uncompress until avail_out filled, or end of stream */
312 do {
313 if (strm.avail_in == 0) {
314 strm.avail_in = fread(input, 1, CHUNK, in);
315 if (ferror(in)) {
316 ret = Z_ERRNO;
317 goto deflate_index_extract_ret;
318 }
319 if (strm.avail_in == 0) {
320 ret = Z_DATA_ERROR;
321 goto deflate_index_extract_ret;
322 }
323 strm.next_in = input;
324 }
325 ret = inflate(&strm, Z_NO_FLUSH); /* normal inflate */
326 if (ret == Z_NEED_DICT)
327 ret = Z_DATA_ERROR;
328 if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
329 goto deflate_index_extract_ret;
330 if (ret == Z_STREAM_END) {
331 /* the raw deflate stream has ended */
332 if (index->gzip == 0)
333 /* this is a zlib stream that has ended -- done */
334 break;
335
336 /* near the end of a gzip member, which might be followed by
337 another gzip member -- skip the gzip trailer and see if
338 there is more input after it */
339 if (strm.avail_in < 8) {
340 fseeko(in, 8 - strm.avail_in, SEEK_CUR);
341 strm.avail_in = 0;
342 }
343 else {
344 strm.avail_in -= 8;
345 strm.next_in += 8;
346 }
347 if (strm.avail_in == 0 && ungetc(getc(in), in) == EOF)
348 /* the input ended after the gzip trailer -- done */
349 break;
350
351 /* there is more input, so another gzip member should follow --
352 validate and skip the gzip header */
353 ret = inflateReset2(&strm, 31);
354 if (ret != Z_OK)
355 goto deflate_index_extract_ret;
356 do {
357 if (strm.avail_in == 0) {
358 strm.avail_in = fread(input, 1, CHUNK, in);
359 if (ferror(in)) {
360 ret = Z_ERRNO;
361 goto deflate_index_extract_ret;
362 }
363 if (strm.avail_in == 0) {
364 ret = Z_DATA_ERROR;
365 goto deflate_index_extract_ret;
366 }
367 strm.next_in = input;
368 }
369 ret = inflate(&strm, Z_BLOCK);
370 if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
371 goto deflate_index_extract_ret;
372 } while ((strm.data_type & 128) == 0);
373
374 /* set up to continue decompression of the raw deflate stream
375 that follows the gzip header */
376 ret = inflateReset2(&strm, -15);
377 if (ret != Z_OK)
378 goto deflate_index_extract_ret;
379 }
380
381 /* continue to process the available input before reading more */
382 } while (strm.avail_out != 0);
383
384 if (ret == Z_STREAM_END)
385 /* reached the end of the compressed data -- return the data that
386 was available, possibly less than requested */
387 break;
388
389 /* do until offset reached and requested data read */
390 } while (skip);
391
392 /* compute the number of uncompressed bytes read after the offset */
393 ret = skip ? 0 : len - strm.avail_out;
394
395 /* clean up and return the bytes read, or the negative error */
396 deflate_index_extract_ret:
397 (void)inflateEnd(&strm);
398 return ret;
399 }
400
401 #ifdef TEST
402
403 #define SPAN 1048576L /* desired distance between access points */
404 #define LEN 16384 /* number of bytes to extract */
405
406 /* Demonstrate the use of deflate_index_build() and deflate_index_extract() by
407 processing the file provided on the command line, and extracting LEN bytes
408 from 2/3rds of the way through the uncompressed output, writing that to
409 stdout. An offset can be provided as the second argument, in which case the
410 data is extracted from there instead. */
411 int main(int argc, char **argv)
412 {
413 int len;
414 off_t offset = -1;
415 FILE *in;
416 struct deflate_index *index = NULL;
417 unsigned char buf[LEN];
418
419 /* open input file */
420 if (argc < 2 || argc > 3) {
421 fprintf(stderr, "usage: zran file.gz [offset]\n");
422 return 1;
423 }
424 in = fopen(argv[1], "rb");
425 if (in == NULL) {
426 fprintf(stderr, "zran: could not open %s for reading\n", argv[1]);
427 return 1;
428 }
429
430 /* get optional offset */
431 if (argc == 3) {
432 char *end;
433 offset = strtoll(argv[2], &end, 10);
434 if (*end || offset < 0) {
435 fprintf(stderr, "zran: %s is not a valid offset\n", argv[2]);
436 return 1;
437 }
438 }
439
440 /* build index */
441 len = deflate_index_build(in, SPAN, &index);
442 if (len < 0) {
443 fclose(in);
444 switch (len) {
445 case Z_MEM_ERROR:
446 fprintf(stderr, "zran: out of memory\n");
@@ -390,20 +457,23 @@
457 return 1;
458 }
459 fprintf(stderr, "zran: built index with %d access points\n", len);
460
461 /* use index by reading some bytes from an arbitrary offset */
462 if (offset == -1)
463 offset = (index->length << 1) / 3;
464 len = deflate_index_extract(in, index, offset, buf, LEN);
465 if (len < 0)
466 fprintf(stderr, "zran: extraction failed: %s error\n",
467 len == Z_MEM_ERROR ? "out of memory" : "input corrupted");
468 else {
469 fwrite(buf, 1, len, stdout);
470 fprintf(stderr, "zran: extracted %d bytes at %llu\n", len, offset);
471 }
472
473 /* clean up and exit */
474 deflate_index_free(index);
475 fclose(in);
476 return 0;
477 }
478
479 #endif
480
481 DDED compat/zlib/examples/zran.h
--- a/compat/zlib/examples/zran.h
+++ b/compat/zlib/examples/zran.h
@@ -0,0 +1,7 @@
1
+/* zran.h -- example of zlib/gzip stream indexing and random access
2
+ * Copyright (C) 2005, 2012, 2018 (C) 2005, 2012, 2018, 2023012, 2018, 2023, 2024, 2025 Mark Adler
3
+ * For conditions of distribution2 14 Oct 2018 * Version 1.7 16 May 2025 * Access point list. */
4
+{
5
+ int have; /* number of list entries */
6
+ int gzip; /* 1 if the index is of a gzip file, 0 if it is of a
7
+ zlib stream */
--- a/compat/zlib/examples/zran.h
+++ b/compat/zlib/examples/zran.h
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
--- a/compat/zlib/examples/zran.h
+++ b/compat/zlib/examples/zran.h
@@ -0,0 +1,7 @@
1 /* zran.h -- example of zlib/gzip stream indexing and random access
2 * Copyright (C) 2005, 2012, 2018 (C) 2005, 2012, 2018, 2023012, 2018, 2023, 2024, 2025 Mark Adler
3 * For conditions of distribution2 14 Oct 2018 * Version 1.7 16 May 2025 * Access point list. */
4 {
5 int have; /* number of list entries */
6 int gzip; /* 1 if the index is of a gzip file, 0 if it is of a
7 zlib stream */
--- compat/zlib/gzguts.h
+++ compat/zlib/gzguts.h
@@ -1,7 +1,7 @@
11
/* gzguts.h -- zlib internal header definitions for gz* operations
2
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
2
+ * Copyright (C) 2004-2019 Mark Adler
33
* For conditions of distribution and use, see copyright notice in zlib.h
44
*/
55
66
#ifdef _LARGEFILE64_SOURCE
77
# ifndef _LARGEFILE_SOURCE
@@ -37,11 +37,11 @@
3737
3838
#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
3939
# include <io.h>
4040
#endif
4141
42
-#if defined(_WIN32) || defined(__CYGWIN__)
42
+#if defined(_WIN32)
4343
# define WIDECHAR
4444
#endif
4545
4646
#ifdef WINAPI_FAMILY
4747
# define open _open
@@ -188,10 +188,11 @@
188188
int eof; /* true if end of input file reached */
189189
int past; /* true if read requested past end */
190190
/* just for writing */
191191
int level; /* compression level */
192192
int strategy; /* compression strategy */
193
+ int reset; /* true if a reset is pending after a Z_FINISH */
193194
/* seek request */
194195
z_off64_t skip; /* amount to skip (already rewound if backwards) */
195196
int seek; /* true if seek request pending */
196197
/* error information */
197198
int err; /* error code */
198199
--- compat/zlib/gzguts.h
+++ compat/zlib/gzguts.h
@@ -1,7 +1,7 @@
1 /* gzguts.h -- zlib internal header definitions for gz* operations
2 * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 #ifdef _LARGEFILE64_SOURCE
7 # ifndef _LARGEFILE_SOURCE
@@ -37,11 +37,11 @@
37
38 #if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
39 # include <io.h>
40 #endif
41
42 #if defined(_WIN32) || defined(__CYGWIN__)
43 # define WIDECHAR
44 #endif
45
46 #ifdef WINAPI_FAMILY
47 # define open _open
@@ -188,10 +188,11 @@
188 int eof; /* true if end of input file reached */
189 int past; /* true if read requested past end */
190 /* just for writing */
191 int level; /* compression level */
192 int strategy; /* compression strategy */
 
193 /* seek request */
194 z_off64_t skip; /* amount to skip (already rewound if backwards) */
195 int seek; /* true if seek request pending */
196 /* error information */
197 int err; /* error code */
198
--- compat/zlib/gzguts.h
+++ compat/zlib/gzguts.h
@@ -1,7 +1,7 @@
1 /* gzguts.h -- zlib internal header definitions for gz* operations
2 * Copyright (C) 2004-2019 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 #ifdef _LARGEFILE64_SOURCE
7 # ifndef _LARGEFILE_SOURCE
@@ -37,11 +37,11 @@
37
38 #if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
39 # include <io.h>
40 #endif
41
42 #if defined(_WIN32)
43 # define WIDECHAR
44 #endif
45
46 #ifdef WINAPI_FAMILY
47 # define open _open
@@ -188,10 +188,11 @@
188 int eof; /* true if end of input file reached */
189 int past; /* true if read requested past end */
190 /* just for writing */
191 int level; /* compression level */
192 int strategy; /* compression strategy */
193 int reset; /* true if a reset is pending after a Z_FINISH */
194 /* seek request */
195 z_off64_t skip; /* amount to skip (already rewound if backwards) */
196 int seek; /* true if seek request pending */
197 /* error information */
198 int err; /* error code */
199
--- compat/zlib/gzlib.c
+++ compat/zlib/gzlib.c
@@ -1,13 +1,13 @@
11
/* gzlib.c -- zlib functions common to reading and writing gzip files
2
- * Copyright (C) 2004-2017 Mark Adler
2
+ * Copyright (C) 2004-2019 Mark Adler
33
* For conditions of distribution and use, see copyright notice in zlib.h
44
*/
55
66
#include "gzguts.h"
77
8
-#if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__)
8
+#if defined(_WIN32) && !defined(__BORLANDC__)
99
# define LSEEK _lseeki64
1010
#else
1111
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
1212
# define LSEEK lseek64
1313
#else
@@ -79,10 +79,12 @@
7979
if (state->mode == GZ_READ) { /* for reading ... */
8080
state->eof = 0; /* not at end of file */
8181
state->past = 0; /* have not read past end yet */
8282
state->how = LOOK; /* look for gzip header */
8383
}
84
+ else /* for writing ... */
85
+ state->reset = 0; /* no deflateReset pending */
8486
state->seek = 0; /* no seek request pending */
8587
gz_error(state, Z_OK, NULL); /* clear error */
8688
state->x.pos = 0; /* no uncompressed data yet */
8789
state->strm.avail_in = 0; /* no input data yet */
8890
}
@@ -395,11 +397,11 @@
395397
state->seek = 0;
396398
397399
/* if within raw area while reading, just go there */
398400
if (state->mode == GZ_READ && state->how == COPY &&
399401
state->x.pos + offset >= 0) {
400
- ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
402
+ ret = LSEEK(state->fd, offset - (z_off64_t)state->x.have, SEEK_CUR);
401403
if (ret == -1)
402404
return -1;
403405
state->x.have = 0;
404406
state->eof = 0;
405407
state->past = 0;
406408
--- compat/zlib/gzlib.c
+++ compat/zlib/gzlib.c
@@ -1,13 +1,13 @@
1 /* gzlib.c -- zlib functions common to reading and writing gzip files
2 * Copyright (C) 2004-2017 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 #include "gzguts.h"
7
8 #if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__)
9 # define LSEEK _lseeki64
10 #else
11 #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
12 # define LSEEK lseek64
13 #else
@@ -79,10 +79,12 @@
79 if (state->mode == GZ_READ) { /* for reading ... */
80 state->eof = 0; /* not at end of file */
81 state->past = 0; /* have not read past end yet */
82 state->how = LOOK; /* look for gzip header */
83 }
 
 
84 state->seek = 0; /* no seek request pending */
85 gz_error(state, Z_OK, NULL); /* clear error */
86 state->x.pos = 0; /* no uncompressed data yet */
87 state->strm.avail_in = 0; /* no input data yet */
88 }
@@ -395,11 +397,11 @@
395 state->seek = 0;
396
397 /* if within raw area while reading, just go there */
398 if (state->mode == GZ_READ && state->how == COPY &&
399 state->x.pos + offset >= 0) {
400 ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
401 if (ret == -1)
402 return -1;
403 state->x.have = 0;
404 state->eof = 0;
405 state->past = 0;
406
--- compat/zlib/gzlib.c
+++ compat/zlib/gzlib.c
@@ -1,13 +1,13 @@
1 /* gzlib.c -- zlib functions common to reading and writing gzip files
2 * Copyright (C) 2004-2019 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 #include "gzguts.h"
7
8 #if defined(_WIN32) && !defined(__BORLANDC__)
9 # define LSEEK _lseeki64
10 #else
11 #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
12 # define LSEEK lseek64
13 #else
@@ -79,10 +79,12 @@
79 if (state->mode == GZ_READ) { /* for reading ... */
80 state->eof = 0; /* not at end of file */
81 state->past = 0; /* have not read past end yet */
82 state->how = LOOK; /* look for gzip header */
83 }
84 else /* for writing ... */
85 state->reset = 0; /* no deflateReset pending */
86 state->seek = 0; /* no seek request pending */
87 gz_error(state, Z_OK, NULL); /* clear error */
88 state->x.pos = 0; /* no uncompressed data yet */
89 state->strm.avail_in = 0; /* no input data yet */
90 }
@@ -395,11 +397,11 @@
397 state->seek = 0;
398
399 /* if within raw area while reading, just go there */
400 if (state->mode == GZ_READ && state->how == COPY &&
401 state->x.pos + offset >= 0) {
402 ret = LSEEK(state->fd, offset - (z_off64_t)state->x.have, SEEK_CUR);
403 if (ret == -1)
404 return -1;
405 state->x.have = 0;
406 state->eof = 0;
407 state->past = 0;
408
--- compat/zlib/gzread.c
+++ compat/zlib/gzread.c
@@ -1,7 +1,7 @@
11
/* gzread.c -- zlib functions for reading gzip files
2
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
2
+ * Copyright (C) 2004-2017 Mark Adler
33
* For conditions of distribution and use, see copyright notice in zlib.h
44
*/
55
66
#include "gzguts.h"
77
@@ -312,13 +312,13 @@
312312
313313
/* get len bytes to buf, or less than len if at the end */
314314
got = 0;
315315
do {
316316
/* set n to the maximum amount of len that fits in an unsigned int */
317
- n = -1;
317
+ n = (unsigned)-1;
318318
if (n > len)
319
- n = len;
319
+ n = (unsigned)len;
320320
321321
/* first just try copying data from the output buffer */
322322
if (state->x.have) {
323323
if (state->x.have < n)
324324
n = state->x.have;
@@ -395,11 +395,11 @@
395395
gz_error(state, Z_STREAM_ERROR, "request does not fit in an int");
396396
return -1;
397397
}
398398
399399
/* read len or fewer bytes to buf */
400
- len = gz_read(state, buf, len);
400
+ len = (unsigned)gz_read(state, buf, len);
401401
402402
/* check for an error */
403403
if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR)
404404
return -1;
405405
@@ -445,11 +445,10 @@
445445
# undef gzgetc
446446
#endif
447447
int ZEXPORT gzgetc(file)
448448
gzFile file;
449449
{
450
- int ret;
451450
unsigned char buf[1];
452451
gz_statep state;
453452
454453
/* get internal structure */
455454
if (file == NULL)
@@ -467,12 +466,11 @@
467466
state->x.pos++;
468467
return *(state->x.next)++;
469468
}
470469
471470
/* nothing there -- try gz_read() */
472
- ret = gz_read(state, buf, 1);
473
- return ret < 1 ? -1 : buf[0];
471
+ return gz_read(state, buf, 1) < 1 ? -1 : buf[0];
474472
}
475473
476474
int ZEXPORT gzgetc_(file)
477475
gzFile file;
478476
{
479477
--- compat/zlib/gzread.c
+++ compat/zlib/gzread.c
@@ -1,7 +1,7 @@
1 /* gzread.c -- zlib functions for reading gzip files
2 * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 #include "gzguts.h"
7
@@ -312,13 +312,13 @@
312
313 /* get len bytes to buf, or less than len if at the end */
314 got = 0;
315 do {
316 /* set n to the maximum amount of len that fits in an unsigned int */
317 n = -1;
318 if (n > len)
319 n = len;
320
321 /* first just try copying data from the output buffer */
322 if (state->x.have) {
323 if (state->x.have < n)
324 n = state->x.have;
@@ -395,11 +395,11 @@
395 gz_error(state, Z_STREAM_ERROR, "request does not fit in an int");
396 return -1;
397 }
398
399 /* read len or fewer bytes to buf */
400 len = gz_read(state, buf, len);
401
402 /* check for an error */
403 if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR)
404 return -1;
405
@@ -445,11 +445,10 @@
445 # undef gzgetc
446 #endif
447 int ZEXPORT gzgetc(file)
448 gzFile file;
449 {
450 int ret;
451 unsigned char buf[1];
452 gz_statep state;
453
454 /* get internal structure */
455 if (file == NULL)
@@ -467,12 +466,11 @@
467 state->x.pos++;
468 return *(state->x.next)++;
469 }
470
471 /* nothing there -- try gz_read() */
472 ret = gz_read(state, buf, 1);
473 return ret < 1 ? -1 : buf[0];
474 }
475
476 int ZEXPORT gzgetc_(file)
477 gzFile file;
478 {
479
--- compat/zlib/gzread.c
+++ compat/zlib/gzread.c
@@ -1,7 +1,7 @@
1 /* gzread.c -- zlib functions for reading gzip files
2 * Copyright (C) 2004-2017 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 #include "gzguts.h"
7
@@ -312,13 +312,13 @@
312
313 /* get len bytes to buf, or less than len if at the end */
314 got = 0;
315 do {
316 /* set n to the maximum amount of len that fits in an unsigned int */
317 n = (unsigned)-1;
318 if (n > len)
319 n = (unsigned)len;
320
321 /* first just try copying data from the output buffer */
322 if (state->x.have) {
323 if (state->x.have < n)
324 n = state->x.have;
@@ -395,11 +395,11 @@
395 gz_error(state, Z_STREAM_ERROR, "request does not fit in an int");
396 return -1;
397 }
398
399 /* read len or fewer bytes to buf */
400 len = (unsigned)gz_read(state, buf, len);
401
402 /* check for an error */
403 if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR)
404 return -1;
405
@@ -445,11 +445,10 @@
445 # undef gzgetc
446 #endif
447 int ZEXPORT gzgetc(file)
448 gzFile file;
449 {
 
450 unsigned char buf[1];
451 gz_statep state;
452
453 /* get internal structure */
454 if (file == NULL)
@@ -467,12 +466,11 @@
466 state->x.pos++;
467 return *(state->x.next)++;
468 }
469
470 /* nothing there -- try gz_read() */
471 return gz_read(state, buf, 1) < 1 ? -1 : buf[0];
 
472 }
473
474 int ZEXPORT gzgetc_(file)
475 gzFile file;
476 {
477
--- compat/zlib/gzwrite.c
+++ compat/zlib/gzwrite.c
@@ -1,7 +1,7 @@
11
/* gzwrite.c -- zlib functions for writing gzip files
2
- * Copyright (C) 2004-2017 Mark Adler
2
+ * Copyright (C) 2004-2019 Mark Adler
33
* For conditions of distribution and use, see copyright notice in zlib.h
44
*/
55
66
#include "gzguts.h"
77
@@ -94,10 +94,19 @@
9494
strm->avail_in -= (unsigned)writ;
9595
strm->next_in += writ;
9696
}
9797
return 0;
9898
}
99
+
100
+ /* check for a pending reset */
101
+ if (state->reset) {
102
+ /* don't start a new gzip member unless there is data to write */
103
+ if (strm->avail_in == 0)
104
+ return 0;
105
+ deflateReset(strm);
106
+ state->reset = 0;
107
+ }
99108
100109
/* run deflate() on provided input until it produces no more output */
101110
ret = Z_OK;
102111
do {
103112
/* write out current buffer contents if full, or if flushing, but if
@@ -132,11 +141,11 @@
132141
have -= strm->avail_out;
133142
} while (have);
134143
135144
/* if that completed a deflate stream, allow another to start */
136145
if (flush == Z_FINISH)
137
- deflateReset(strm);
146
+ state->reset = 1;
138147
139148
/* all done, no errors */
140149
return 0;
141150
}
142151
@@ -207,11 +216,11 @@
207216
state->strm.next_in = state->in;
208217
have = (unsigned)((state->strm.next_in + state->strm.avail_in) -
209218
state->in);
210219
copy = state->size - have;
211220
if (copy > len)
212
- copy = len;
221
+ copy = (unsigned)len;
213222
memcpy(state->in + have, buf, copy);
214223
state->strm.avail_in += copy;
215224
state->x.pos += copy;
216225
buf = (const char *)buf + copy;
217226
len -= copy;
@@ -227,11 +236,11 @@
227236
/* directly compress user buffer to file */
228237
state->strm.next_in = (z_const Bytef *)buf;
229238
do {
230239
unsigned n = (unsigned)-1;
231240
if (n > len)
232
- n = len;
241
+ n = (unsigned)len;
233242
state->strm.avail_in = n;
234243
state->x.pos += n;
235244
if (gz_comp(state, Z_NO_FLUSH) == -1)
236245
return 0;
237246
len -= n;
@@ -347,16 +356,15 @@
347356
return -1;
348357
return c & 0xff;
349358
}
350359
351360
/* -- see zlib.h -- */
352
-int ZEXPORT gzputs(file, str)
361
+int ZEXPORT gzputs(file, s)
353362
gzFile file;
354
- const char *str;
363
+ const char *s;
355364
{
356
- int ret;
357
- z_size_t len;
365
+ z_size_t len, put;
358366
gz_statep state;
359367
360368
/* get internal structure */
361369
if (file == NULL)
362370
return -1;
@@ -365,13 +373,17 @@
365373
/* check that we're writing and that there's no error */
366374
if (state->mode != GZ_WRITE || state->err != Z_OK)
367375
return -1;
368376
369377
/* write string */
370
- len = strlen(str);
371
- ret = gz_write(state, str, len);
372
- return ret == 0 && len != 0 ? -1 : ret;
378
+ len = strlen(s);
379
+ if ((int)len < 0 || (unsigned)len != len) {
380
+ gz_error(state, Z_STREAM_ERROR, "string length does not fit in int");
381
+ return -1;
382
+ }
383
+ put = gz_write(state, s, len);
384
+ return put < len ? -1 : (int)len;
373385
}
374386
375387
#if defined(STDC) || defined(Z_HAVE_STDARG_H)
376388
#include <stdarg.h>
377389
@@ -439,11 +451,11 @@
439451
if (strm->avail_in >= state->size) {
440452
left = strm->avail_in - state->size;
441453
strm->avail_in = state->size;
442454
if (gz_comp(state, Z_NO_FLUSH) == -1)
443455
return state->err;
444
- memcpy(state->in, state->in + state->size, left);
456
+ memmove(state->in, state->in + state->size, left);
445457
strm->next_in = state->in;
446458
strm->avail_in = left;
447459
}
448460
return len;
449461
}
@@ -538,11 +550,11 @@
538550
if (strm->avail_in >= state->size) {
539551
left = strm->avail_in - state->size;
540552
strm->avail_in = state->size;
541553
if (gz_comp(state, Z_NO_FLUSH) == -1)
542554
return state->err;
543
- memcpy(state->in, state->in + state->size, left);
555
+ memmove(state->in, state->in + state->size, left);
544556
strm->next_in = state->in;
545557
strm->avail_in = left;
546558
}
547559
return (int)len;
548560
}
549561
--- compat/zlib/gzwrite.c
+++ compat/zlib/gzwrite.c
@@ -1,7 +1,7 @@
1 /* gzwrite.c -- zlib functions for writing gzip files
2 * Copyright (C) 2004-2017 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 #include "gzguts.h"
7
@@ -94,10 +94,19 @@
94 strm->avail_in -= (unsigned)writ;
95 strm->next_in += writ;
96 }
97 return 0;
98 }
 
 
 
 
 
 
 
 
 
99
100 /* run deflate() on provided input until it produces no more output */
101 ret = Z_OK;
102 do {
103 /* write out current buffer contents if full, or if flushing, but if
@@ -132,11 +141,11 @@
132 have -= strm->avail_out;
133 } while (have);
134
135 /* if that completed a deflate stream, allow another to start */
136 if (flush == Z_FINISH)
137 deflateReset(strm);
138
139 /* all done, no errors */
140 return 0;
141 }
142
@@ -207,11 +216,11 @@
207 state->strm.next_in = state->in;
208 have = (unsigned)((state->strm.next_in + state->strm.avail_in) -
209 state->in);
210 copy = state->size - have;
211 if (copy > len)
212 copy = len;
213 memcpy(state->in + have, buf, copy);
214 state->strm.avail_in += copy;
215 state->x.pos += copy;
216 buf = (const char *)buf + copy;
217 len -= copy;
@@ -227,11 +236,11 @@
227 /* directly compress user buffer to file */
228 state->strm.next_in = (z_const Bytef *)buf;
229 do {
230 unsigned n = (unsigned)-1;
231 if (n > len)
232 n = len;
233 state->strm.avail_in = n;
234 state->x.pos += n;
235 if (gz_comp(state, Z_NO_FLUSH) == -1)
236 return 0;
237 len -= n;
@@ -347,16 +356,15 @@
347 return -1;
348 return c & 0xff;
349 }
350
351 /* -- see zlib.h -- */
352 int ZEXPORT gzputs(file, str)
353 gzFile file;
354 const char *str;
355 {
356 int ret;
357 z_size_t len;
358 gz_statep state;
359
360 /* get internal structure */
361 if (file == NULL)
362 return -1;
@@ -365,13 +373,17 @@
365 /* check that we're writing and that there's no error */
366 if (state->mode != GZ_WRITE || state->err != Z_OK)
367 return -1;
368
369 /* write string */
370 len = strlen(str);
371 ret = gz_write(state, str, len);
372 return ret == 0 && len != 0 ? -1 : ret;
 
 
 
 
373 }
374
375 #if defined(STDC) || defined(Z_HAVE_STDARG_H)
376 #include <stdarg.h>
377
@@ -439,11 +451,11 @@
439 if (strm->avail_in >= state->size) {
440 left = strm->avail_in - state->size;
441 strm->avail_in = state->size;
442 if (gz_comp(state, Z_NO_FLUSH) == -1)
443 return state->err;
444 memcpy(state->in, state->in + state->size, left);
445 strm->next_in = state->in;
446 strm->avail_in = left;
447 }
448 return len;
449 }
@@ -538,11 +550,11 @@
538 if (strm->avail_in >= state->size) {
539 left = strm->avail_in - state->size;
540 strm->avail_in = state->size;
541 if (gz_comp(state, Z_NO_FLUSH) == -1)
542 return state->err;
543 memcpy(state->in, state->in + state->size, left);
544 strm->next_in = state->in;
545 strm->avail_in = left;
546 }
547 return (int)len;
548 }
549
--- compat/zlib/gzwrite.c
+++ compat/zlib/gzwrite.c
@@ -1,7 +1,7 @@
1 /* gzwrite.c -- zlib functions for writing gzip files
2 * Copyright (C) 2004-2019 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 #include "gzguts.h"
7
@@ -94,10 +94,19 @@
94 strm->avail_in -= (unsigned)writ;
95 strm->next_in += writ;
96 }
97 return 0;
98 }
99
100 /* check for a pending reset */
101 if (state->reset) {
102 /* don't start a new gzip member unless there is data to write */
103 if (strm->avail_in == 0)
104 return 0;
105 deflateReset(strm);
106 state->reset = 0;
107 }
108
109 /* run deflate() on provided input until it produces no more output */
110 ret = Z_OK;
111 do {
112 /* write out current buffer contents if full, or if flushing, but if
@@ -132,11 +141,11 @@
141 have -= strm->avail_out;
142 } while (have);
143
144 /* if that completed a deflate stream, allow another to start */
145 if (flush == Z_FINISH)
146 state->reset = 1;
147
148 /* all done, no errors */
149 return 0;
150 }
151
@@ -207,11 +216,11 @@
216 state->strm.next_in = state->in;
217 have = (unsigned)((state->strm.next_in + state->strm.avail_in) -
218 state->in);
219 copy = state->size - have;
220 if (copy > len)
221 copy = (unsigned)len;
222 memcpy(state->in + have, buf, copy);
223 state->strm.avail_in += copy;
224 state->x.pos += copy;
225 buf = (const char *)buf + copy;
226 len -= copy;
@@ -227,11 +236,11 @@
236 /* directly compress user buffer to file */
237 state->strm.next_in = (z_const Bytef *)buf;
238 do {
239 unsigned n = (unsigned)-1;
240 if (n > len)
241 n = (unsigned)len;
242 state->strm.avail_in = n;
243 state->x.pos += n;
244 if (gz_comp(state, Z_NO_FLUSH) == -1)
245 return 0;
246 len -= n;
@@ -347,16 +356,15 @@
356 return -1;
357 return c & 0xff;
358 }
359
360 /* -- see zlib.h -- */
361 int ZEXPORT gzputs(file, s)
362 gzFile file;
363 const char *s;
364 {
365 z_size_t len, put;
 
366 gz_statep state;
367
368 /* get internal structure */
369 if (file == NULL)
370 return -1;
@@ -365,13 +373,17 @@
373 /* check that we're writing and that there's no error */
374 if (state->mode != GZ_WRITE || state->err != Z_OK)
375 return -1;
376
377 /* write string */
378 len = strlen(s);
379 if ((int)len < 0 || (unsigned)len != len) {
380 gz_error(state, Z_STREAM_ERROR, "string length does not fit in int");
381 return -1;
382 }
383 put = gz_write(state, s, len);
384 return put < len ? -1 : (int)len;
385 }
386
387 #if defined(STDC) || defined(Z_HAVE_STDARG_H)
388 #include <stdarg.h>
389
@@ -439,11 +451,11 @@
451 if (strm->avail_in >= state->size) {
452 left = strm->avail_in - state->size;
453 strm->avail_in = state->size;
454 if (gz_comp(state, Z_NO_FLUSH) == -1)
455 return state->err;
456 memmove(state->in, state->in + state->size, left);
457 strm->next_in = state->in;
458 strm->avail_in = left;
459 }
460 return len;
461 }
@@ -538,11 +550,11 @@
550 if (strm->avail_in >= state->size) {
551 left = strm->avail_in - state->size;
552 strm->avail_in = state->size;
553 if (gz_comp(state, Z_NO_FLUSH) == -1)
554 return state->err;
555 memmove(state->in, state->in + state->size, left);
556 strm->next_in = state->in;
557 strm->avail_in = left;
558 }
559 return (int)len;
560 }
561
--- compat/zlib/infback.c
+++ compat/zlib/infback.c
@@ -1,7 +1,7 @@
11
/* infback.c -- inflate using a call-back interface
2
- * Copyright (C) 1995-2016 Mark Adler
2
+ * Copyright (C) 1995-2022 Mark Adler
33
* For conditions of distribution and use, see copyright notice in zlib.h
44
*/
55
66
/*
77
This code is largely copied from inflate.c. Normally either infback.o or
@@ -475,10 +475,11 @@
475475
state->mode = BAD;
476476
break;
477477
}
478478
Tracev((stderr, "inflate: codes ok\n"));
479479
state->mode = LEN;
480
+ /* fallthrough */
480481
481482
case LEN:
482483
/* use inflate_fast() if we have enough input and output */
483484
if (have >= 6 && left >= 258) {
484485
RESTORE();
485486
--- compat/zlib/infback.c
+++ compat/zlib/infback.c
@@ -1,7 +1,7 @@
1 /* infback.c -- inflate using a call-back interface
2 * Copyright (C) 1995-2016 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 /*
7 This code is largely copied from inflate.c. Normally either infback.o or
@@ -475,10 +475,11 @@
475 state->mode = BAD;
476 break;
477 }
478 Tracev((stderr, "inflate: codes ok\n"));
479 state->mode = LEN;
 
480
481 case LEN:
482 /* use inflate_fast() if we have enough input and output */
483 if (have >= 6 && left >= 258) {
484 RESTORE();
485
--- compat/zlib/infback.c
+++ compat/zlib/infback.c
@@ -1,7 +1,7 @@
1 /* infback.c -- inflate using a call-back interface
2 * Copyright (C) 1995-2022 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 /*
7 This code is largely copied from inflate.c. Normally either infback.o or
@@ -475,10 +475,11 @@
475 state->mode = BAD;
476 break;
477 }
478 Tracev((stderr, "inflate: codes ok\n"));
479 state->mode = LEN;
480 /* fallthrough */
481
482 case LEN:
483 /* use inflate_fast() if we have enough input and output */
484 if (have >= 6 && left >= 258) {
485 RESTORE();
486
--- compat/zlib/inffast.c
+++ compat/zlib/inffast.c
@@ -68,11 +68,11 @@
6868
unsigned bits; /* local strm->bits */
6969
code const FAR *lcode; /* local strm->lencode */
7070
code const FAR *dcode; /* local strm->distcode */
7171
unsigned lmask; /* mask for first level of length codes */
7272
unsigned dmask; /* mask for first level of distance codes */
73
- code here; /* retrieved table entry */
73
+ code const *here; /* retrieved table entry */
7474
unsigned op; /* code bits, operation, extra bits, or */
7575
/* window position, window bytes to copy */
7676
unsigned len; /* match length, unused bytes */
7777
unsigned dist; /* match distance */
7878
unsigned char FAR *from; /* where to copy match from */
@@ -105,24 +105,24 @@
105105
hold += (unsigned long)(*in++) << bits;
106106
bits += 8;
107107
hold += (unsigned long)(*in++) << bits;
108108
bits += 8;
109109
}
110
- here = lcode[hold & lmask];
110
+ here = lcode + (hold & lmask);
111111
dolen:
112
- op = (unsigned)(here.bits);
112
+ op = (unsigned)(here->bits);
113113
hold >>= op;
114114
bits -= op;
115
- op = (unsigned)(here.op);
115
+ op = (unsigned)(here->op);
116116
if (op == 0) { /* literal */
117
- Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
117
+ Tracevv((stderr, here->val >= 0x20 && here->val < 0x7f ?
118118
"inflate: literal '%c'\n" :
119
- "inflate: literal 0x%02x\n", here.val));
120
- *out++ = (unsigned char)(here.val);
119
+ "inflate: literal 0x%02x\n", here->val));
120
+ *out++ = (unsigned char)(here->val);
121121
}
122122
else if (op & 16) { /* length base */
123
- len = (unsigned)(here.val);
123
+ len = (unsigned)(here->val);
124124
op &= 15; /* number of extra bits */
125125
if (op) {
126126
if (bits < op) {
127127
hold += (unsigned long)(*in++) << bits;
128128
bits += 8;
@@ -136,18 +136,18 @@
136136
hold += (unsigned long)(*in++) << bits;
137137
bits += 8;
138138
hold += (unsigned long)(*in++) << bits;
139139
bits += 8;
140140
}
141
- here = dcode[hold & dmask];
141
+ here = dcode + (hold & dmask);
142142
dodist:
143
- op = (unsigned)(here.bits);
143
+ op = (unsigned)(here->bits);
144144
hold >>= op;
145145
bits -= op;
146
- op = (unsigned)(here.op);
146
+ op = (unsigned)(here->op);
147147
if (op & 16) { /* distance base */
148
- dist = (unsigned)(here.val);
148
+ dist = (unsigned)(here->val);
149149
op &= 15; /* number of extra bits */
150150
if (bits < op) {
151151
hold += (unsigned long)(*in++) << bits;
152152
bits += 8;
153153
if (bits < op) {
@@ -262,21 +262,21 @@
262262
*out++ = *from++;
263263
}
264264
}
265265
}
266266
else if ((op & 64) == 0) { /* 2nd level distance code */
267
- here = dcode[here.val + (hold & ((1U << op) - 1))];
267
+ here = dcode + here->val + (hold & ((1U << op) - 1));
268268
goto dodist;
269269
}
270270
else {
271271
strm->msg = (char *)"invalid distance code";
272272
state->mode = BAD;
273273
break;
274274
}
275275
}
276276
else if ((op & 64) == 0) { /* 2nd level length code */
277
- here = lcode[here.val + (hold & ((1U << op) - 1))];
277
+ here = lcode + here->val + (hold & ((1U << op) - 1));
278278
goto dolen;
279279
}
280280
else if (op & 32) { /* end-of-block */
281281
Tracevv((stderr, "inflate: end of block\n"));
282282
state->mode = TYPE;
283283
--- compat/zlib/inffast.c
+++ compat/zlib/inffast.c
@@ -68,11 +68,11 @@
68 unsigned bits; /* local strm->bits */
69 code const FAR *lcode; /* local strm->lencode */
70 code const FAR *dcode; /* local strm->distcode */
71 unsigned lmask; /* mask for first level of length codes */
72 unsigned dmask; /* mask for first level of distance codes */
73 code here; /* retrieved table entry */
74 unsigned op; /* code bits, operation, extra bits, or */
75 /* window position, window bytes to copy */
76 unsigned len; /* match length, unused bytes */
77 unsigned dist; /* match distance */
78 unsigned char FAR *from; /* where to copy match from */
@@ -105,24 +105,24 @@
105 hold += (unsigned long)(*in++) << bits;
106 bits += 8;
107 hold += (unsigned long)(*in++) << bits;
108 bits += 8;
109 }
110 here = lcode[hold & lmask];
111 dolen:
112 op = (unsigned)(here.bits);
113 hold >>= op;
114 bits -= op;
115 op = (unsigned)(here.op);
116 if (op == 0) { /* literal */
117 Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
118 "inflate: literal '%c'\n" :
119 "inflate: literal 0x%02x\n", here.val));
120 *out++ = (unsigned char)(here.val);
121 }
122 else if (op & 16) { /* length base */
123 len = (unsigned)(here.val);
124 op &= 15; /* number of extra bits */
125 if (op) {
126 if (bits < op) {
127 hold += (unsigned long)(*in++) << bits;
128 bits += 8;
@@ -136,18 +136,18 @@
136 hold += (unsigned long)(*in++) << bits;
137 bits += 8;
138 hold += (unsigned long)(*in++) << bits;
139 bits += 8;
140 }
141 here = dcode[hold & dmask];
142 dodist:
143 op = (unsigned)(here.bits);
144 hold >>= op;
145 bits -= op;
146 op = (unsigned)(here.op);
147 if (op & 16) { /* distance base */
148 dist = (unsigned)(here.val);
149 op &= 15; /* number of extra bits */
150 if (bits < op) {
151 hold += (unsigned long)(*in++) << bits;
152 bits += 8;
153 if (bits < op) {
@@ -262,21 +262,21 @@
262 *out++ = *from++;
263 }
264 }
265 }
266 else if ((op & 64) == 0) { /* 2nd level distance code */
267 here = dcode[here.val + (hold & ((1U << op) - 1))];
268 goto dodist;
269 }
270 else {
271 strm->msg = (char *)"invalid distance code";
272 state->mode = BAD;
273 break;
274 }
275 }
276 else if ((op & 64) == 0) { /* 2nd level length code */
277 here = lcode[here.val + (hold & ((1U << op) - 1))];
278 goto dolen;
279 }
280 else if (op & 32) { /* end-of-block */
281 Tracevv((stderr, "inflate: end of block\n"));
282 state->mode = TYPE;
283
--- compat/zlib/inffast.c
+++ compat/zlib/inffast.c
@@ -68,11 +68,11 @@
68 unsigned bits; /* local strm->bits */
69 code const FAR *lcode; /* local strm->lencode */
70 code const FAR *dcode; /* local strm->distcode */
71 unsigned lmask; /* mask for first level of length codes */
72 unsigned dmask; /* mask for first level of distance codes */
73 code const *here; /* retrieved table entry */
74 unsigned op; /* code bits, operation, extra bits, or */
75 /* window position, window bytes to copy */
76 unsigned len; /* match length, unused bytes */
77 unsigned dist; /* match distance */
78 unsigned char FAR *from; /* where to copy match from */
@@ -105,24 +105,24 @@
105 hold += (unsigned long)(*in++) << bits;
106 bits += 8;
107 hold += (unsigned long)(*in++) << bits;
108 bits += 8;
109 }
110 here = lcode + (hold & lmask);
111 dolen:
112 op = (unsigned)(here->bits);
113 hold >>= op;
114 bits -= op;
115 op = (unsigned)(here->op);
116 if (op == 0) { /* literal */
117 Tracevv((stderr, here->val >= 0x20 && here->val < 0x7f ?
118 "inflate: literal '%c'\n" :
119 "inflate: literal 0x%02x\n", here->val));
120 *out++ = (unsigned char)(here->val);
121 }
122 else if (op & 16) { /* length base */
123 len = (unsigned)(here->val);
124 op &= 15; /* number of extra bits */
125 if (op) {
126 if (bits < op) {
127 hold += (unsigned long)(*in++) << bits;
128 bits += 8;
@@ -136,18 +136,18 @@
136 hold += (unsigned long)(*in++) << bits;
137 bits += 8;
138 hold += (unsigned long)(*in++) << bits;
139 bits += 8;
140 }
141 here = dcode + (hold & dmask);
142 dodist:
143 op = (unsigned)(here->bits);
144 hold >>= op;
145 bits -= op;
146 op = (unsigned)(here->op);
147 if (op & 16) { /* distance base */
148 dist = (unsigned)(here->val);
149 op &= 15; /* number of extra bits */
150 if (bits < op) {
151 hold += (unsigned long)(*in++) << bits;
152 bits += 8;
153 if (bits < op) {
@@ -262,21 +262,21 @@
262 *out++ = *from++;
263 }
264 }
265 }
266 else if ((op & 64) == 0) { /* 2nd level distance code */
267 here = dcode + here->val + (hold & ((1U << op) - 1));
268 goto dodist;
269 }
270 else {
271 strm->msg = (char *)"invalid distance code";
272 state->mode = BAD;
273 break;
274 }
275 }
276 else if ((op & 64) == 0) { /* 2nd level length code */
277 here = lcode + here->val + (hold & ((1U << op) - 1));
278 goto dolen;
279 }
280 else if (op & 32) { /* end-of-block */
281 Tracevv((stderr, "inflate: end of block\n"));
282 state->mode = TYPE;
283
--- compat/zlib/inflate.c
+++ compat/zlib/inflate.c
@@ -1,7 +1,7 @@
11
/* inflate.c -- zlib decompression
2
- * Copyright (C) 1995-2016 Mark Adler
2
+ * Copyright (C) 1995-2022 Mark Adler
33
* For conditions of distribution and use, see copyright notice in zlib.h
44
*/
55
66
/*
77
* Change history:
@@ -128,10 +128,11 @@
128128
if (state->wrap) /* to support ill-conceived Java test suite */
129129
strm->adler = state->wrap & 1;
130130
state->mode = HEAD;
131131
state->last = 0;
132132
state->havedict = 0;
133
+ state->flags = -1;
133134
state->dmax = 32768U;
134135
state->head = Z_NULL;
135136
state->hold = 0;
136137
state->bits = 0;
137138
state->lencode = state->distcode = state->next = state->codes;
@@ -445,14 +446,14 @@
445446
446447
/* Macros for inflate(): */
447448
448449
/* check function to use adler32() for zlib or crc32() for gzip */
449450
#ifdef GUNZIP
450
-# define UPDATE(check, buf, len) \
451
+# define UPDATE_CHECK(check, buf, len) \
451452
(state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
452453
#else
453
-# define UPDATE(check, buf, len) adler32(check, buf, len)
454
+# define UPDATE_CHECK(check, buf, len) adler32(check, buf, len)
454455
#endif
455456
456457
/* check macros for header crc */
457458
#ifdef GUNZIP
458459
# define CRC2(check, word) \
@@ -668,11 +669,10 @@
668669
CRC2(state->check, hold);
669670
INITBITS();
670671
state->mode = FLAGS;
671672
break;
672673
}
673
- state->flags = 0; /* expect zlib header */
674674
if (state->head != Z_NULL)
675675
state->head->done = -1;
676676
if (!(state->wrap & 1) || /* check if zlib header allowed */
677677
#else
678678
if (
@@ -695,10 +695,11 @@
695695
strm->msg = (char *)"invalid window size";
696696
state->mode = BAD;
697697
break;
698698
}
699699
state->dmax = 1U << len;
700
+ state->flags = 0; /* indicate zlib header */
700701
Tracev((stderr, "inflate: zlib header ok\n"));
701702
strm->adler = state->check = adler32(0L, Z_NULL, 0);
702703
state->mode = hold & 0x200 ? DICTID : TYPE;
703704
INITBITS();
704705
break;
@@ -720,18 +721,20 @@
720721
state->head->text = (int)((hold >> 8) & 1);
721722
if ((state->flags & 0x0200) && (state->wrap & 4))
722723
CRC2(state->check, hold);
723724
INITBITS();
724725
state->mode = TIME;
726
+ /* fallthrough */
725727
case TIME:
726728
NEEDBITS(32);
727729
if (state->head != Z_NULL)
728730
state->head->time = hold;
729731
if ((state->flags & 0x0200) && (state->wrap & 4))
730732
CRC4(state->check, hold);
731733
INITBITS();
732734
state->mode = OS;
735
+ /* fallthrough */
733736
case OS:
734737
NEEDBITS(16);
735738
if (state->head != Z_NULL) {
736739
state->head->xflags = (int)(hold & 0xff);
737740
state->head->os = (int)(hold >> 8);
@@ -738,10 +741,11 @@
738741
}
739742
if ((state->flags & 0x0200) && (state->wrap & 4))
740743
CRC2(state->check, hold);
741744
INITBITS();
742745
state->mode = EXLEN;
746
+ /* fallthrough */
743747
case EXLEN:
744748
if (state->flags & 0x0400) {
745749
NEEDBITS(16);
746750
state->length = (unsigned)(hold);
747751
if (state->head != Z_NULL)
@@ -751,10 +755,11 @@
751755
INITBITS();
752756
}
753757
else if (state->head != Z_NULL)
754758
state->head->extra = Z_NULL;
755759
state->mode = EXTRA;
760
+ /* fallthrough */
756761
case EXTRA:
757762
if (state->flags & 0x0400) {
758763
copy = state->length;
759764
if (copy > have) copy = have;
760765
if (copy) {
@@ -773,10 +778,11 @@
773778
}
774779
if (state->length) goto inf_leave;
775780
}
776781
state->length = 0;
777782
state->mode = NAME;
783
+ /* fallthrough */
778784
case NAME:
779785
if (state->flags & 0x0800) {
780786
if (have == 0) goto inf_leave;
781787
copy = 0;
782788
do {
@@ -794,10 +800,11 @@
794800
}
795801
else if (state->head != Z_NULL)
796802
state->head->name = Z_NULL;
797803
state->length = 0;
798804
state->mode = COMMENT;
805
+ /* fallthrough */
799806
case COMMENT:
800807
if (state->flags & 0x1000) {
801808
if (have == 0) goto inf_leave;
802809
copy = 0;
803810
do {
@@ -814,10 +821,11 @@
814821
if (len) goto inf_leave;
815822
}
816823
else if (state->head != Z_NULL)
817824
state->head->comment = Z_NULL;
818825
state->mode = HCRC;
826
+ /* fallthrough */
819827
case HCRC:
820828
if (state->flags & 0x0200) {
821829
NEEDBITS(16);
822830
if ((state->wrap & 4) && hold != (state->check & 0xffff)) {
823831
strm->msg = (char *)"header crc mismatch";
@@ -837,19 +845,22 @@
837845
case DICTID:
838846
NEEDBITS(32);
839847
strm->adler = state->check = ZSWAP32(hold);
840848
INITBITS();
841849
state->mode = DICT;
850
+ /* fallthrough */
842851
case DICT:
843852
if (state->havedict == 0) {
844853
RESTORE();
845854
return Z_NEED_DICT;
846855
}
847856
strm->adler = state->check = adler32(0L, Z_NULL, 0);
848857
state->mode = TYPE;
858
+ /* fallthrough */
849859
case TYPE:
850860
if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
861
+ /* fallthrough */
851862
case TYPEDO:
852863
if (state->last) {
853864
BYTEBITS();
854865
state->mode = CHECK;
855866
break;
@@ -896,12 +907,14 @@
896907
Tracev((stderr, "inflate: stored length %u\n",
897908
state->length));
898909
INITBITS();
899910
state->mode = COPY_;
900911
if (flush == Z_TREES) goto inf_leave;
912
+ /* fallthrough */
901913
case COPY_:
902914
state->mode = COPY;
915
+ /* fallthrough */
903916
case COPY:
904917
copy = state->length;
905918
if (copy) {
906919
if (copy > have) copy = have;
907920
if (copy > left) copy = left;
@@ -933,10 +946,11 @@
933946
}
934947
#endif
935948
Tracev((stderr, "inflate: table sizes ok\n"));
936949
state->have = 0;
937950
state->mode = LENLENS;
951
+ /* fallthrough */
938952
case LENLENS:
939953
while (state->have < state->ncode) {
940954
NEEDBITS(3);
941955
state->lens[order[state->have++]] = (unsigned short)BITS(3);
942956
DROPBITS(3);
@@ -954,10 +968,11 @@
954968
break;
955969
}
956970
Tracev((stderr, "inflate: code lengths ok\n"));
957971
state->have = 0;
958972
state->mode = CODELENS;
973
+ /* fallthrough */
959974
case CODELENS:
960975
while (state->have < state->nlen + state->ndist) {
961976
for (;;) {
962977
here = state->lencode[BITS(state->lenbits)];
963978
if ((unsigned)(here.bits) <= bits) break;
@@ -1037,12 +1052,14 @@
10371052
break;
10381053
}
10391054
Tracev((stderr, "inflate: codes ok\n"));
10401055
state->mode = LEN_;
10411056
if (flush == Z_TREES) goto inf_leave;
1057
+ /* fallthrough */
10421058
case LEN_:
10431059
state->mode = LEN;
1060
+ /* fallthrough */
10441061
case LEN:
10451062
if (have >= 6 && left >= 258) {
10461063
RESTORE();
10471064
inflate_fast(strm, out);
10481065
LOAD();
@@ -1088,10 +1105,11 @@
10881105
state->mode = BAD;
10891106
break;
10901107
}
10911108
state->extra = (unsigned)(here.op) & 15;
10921109
state->mode = LENEXT;
1110
+ /* fallthrough */
10931111
case LENEXT:
10941112
if (state->extra) {
10951113
NEEDBITS(state->extra);
10961114
state->length += BITS(state->extra);
10971115
DROPBITS(state->extra);
@@ -1098,10 +1116,11 @@
10981116
state->back += state->extra;
10991117
}
11001118
Tracevv((stderr, "inflate: length %u\n", state->length));
11011119
state->was = state->length;
11021120
state->mode = DIST;
1121
+ /* fallthrough */
11031122
case DIST:
11041123
for (;;) {
11051124
here = state->distcode[BITS(state->distbits)];
11061125
if ((unsigned)(here.bits) <= bits) break;
11071126
PULLBYTE();
@@ -1125,10 +1144,11 @@
11251144
break;
11261145
}
11271146
state->offset = (unsigned)here.val;
11281147
state->extra = (unsigned)(here.op) & 15;
11291148
state->mode = DISTEXT;
1149
+ /* fallthrough */
11301150
case DISTEXT:
11311151
if (state->extra) {
11321152
NEEDBITS(state->extra);
11331153
state->offset += BITS(state->extra);
11341154
DROPBITS(state->extra);
@@ -1141,10 +1161,11 @@
11411161
break;
11421162
}
11431163
#endif
11441164
Tracevv((stderr, "inflate: distance %u\n", state->offset));
11451165
state->mode = MATCH;
1166
+ /* fallthrough */
11461167
case MATCH:
11471168
if (left == 0) goto inf_leave;
11481169
copy = out - left;
11491170
if (state->offset > copy) { /* copy from window */
11501171
copy = state->offset - copy;
@@ -1200,11 +1221,11 @@
12001221
out -= left;
12011222
strm->total_out += out;
12021223
state->total += out;
12031224
if ((state->wrap & 4) && out)
12041225
strm->adler = state->check =
1205
- UPDATE(state->check, put - out, out);
1226
+ UPDATE_CHECK(state->check, put - out, out);
12061227
out = left;
12071228
if ((state->wrap & 4) && (
12081229
#ifdef GUNZIP
12091230
state->flags ? hold :
12101231
#endif
@@ -1216,32 +1237,35 @@
12161237
INITBITS();
12171238
Tracev((stderr, "inflate: check matches trailer\n"));
12181239
}
12191240
#ifdef GUNZIP
12201241
state->mode = LENGTH;
1242
+ /* fallthrough */
12211243
case LENGTH:
12221244
if (state->wrap && state->flags) {
12231245
NEEDBITS(32);
1224
- if (hold != (state->total & 0xffffffffUL)) {
1246
+ if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) {
12251247
strm->msg = (char *)"incorrect length check";
12261248
state->mode = BAD;
12271249
break;
12281250
}
12291251
INITBITS();
12301252
Tracev((stderr, "inflate: length matches trailer\n"));
12311253
}
12321254
#endif
12331255
state->mode = DONE;
1256
+ /* fallthrough */
12341257
case DONE:
12351258
ret = Z_STREAM_END;
12361259
goto inf_leave;
12371260
case BAD:
12381261
ret = Z_DATA_ERROR;
12391262
goto inf_leave;
12401263
case MEM:
12411264
return Z_MEM_ERROR;
12421265
case SYNC:
1266
+ /* fallthrough */
12431267
default:
12441268
return Z_STREAM_ERROR;
12451269
}
12461270
12471271
/*
@@ -1263,11 +1287,11 @@
12631287
strm->total_in += in;
12641288
strm->total_out += out;
12651289
state->total += out;
12661290
if ((state->wrap & 4) && out)
12671291
strm->adler = state->check =
1268
- UPDATE(state->check, strm->next_out - out, out);
1292
+ UPDATE_CHECK(state->check, strm->next_out - out, out);
12691293
strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
12701294
(state->mode == TYPE ? 128 : 0) +
12711295
(state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
12721296
if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
12731297
ret = Z_BUF_ERROR;
@@ -1399,10 +1423,11 @@
13991423
14001424
int ZEXPORT inflateSync(strm)
14011425
z_streamp strm;
14021426
{
14031427
unsigned len; /* number of bytes to look at or looked at */
1428
+ int flags; /* temporary to save header status */
14041429
unsigned long in, out; /* temporary to save total_in and total_out */
14051430
unsigned char buf[4]; /* to restore bit buffer to byte string */
14061431
struct inflate_state FAR *state;
14071432
14081433
/* check parameters */
@@ -1431,13 +1456,19 @@
14311456
strm->next_in += len;
14321457
strm->total_in += len;
14331458
14341459
/* return no joy or set up to restart inflate() on a new block */
14351460
if (state->have != 4) return Z_DATA_ERROR;
1461
+ if (state->flags == -1)
1462
+ state->wrap = 0; /* if no header yet, treat as raw */
1463
+ else
1464
+ state->wrap &= ~4; /* no point in computing a check value now */
1465
+ flags = state->flags;
14361466
in = strm->total_in; out = strm->total_out;
14371467
inflateReset(strm);
14381468
strm->total_in = in; strm->total_out = out;
1469
+ state->flags = flags;
14391470
state->mode = TYPE;
14401471
return Z_OK;
14411472
}
14421473
14431474
/*
@@ -1529,11 +1560,11 @@
15291560
{
15301561
struct inflate_state FAR *state;
15311562
15321563
if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
15331564
state = (struct inflate_state FAR *)strm->state;
1534
- if (check)
1565
+ if (check && state->wrap)
15351566
state->wrap |= 4;
15361567
else
15371568
state->wrap &= ~4;
15381569
return Z_OK;
15391570
}
15401571
--- compat/zlib/inflate.c
+++ compat/zlib/inflate.c
@@ -1,7 +1,7 @@
1 /* inflate.c -- zlib decompression
2 * Copyright (C) 1995-2016 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 /*
7 * Change history:
@@ -128,10 +128,11 @@
128 if (state->wrap) /* to support ill-conceived Java test suite */
129 strm->adler = state->wrap & 1;
130 state->mode = HEAD;
131 state->last = 0;
132 state->havedict = 0;
 
133 state->dmax = 32768U;
134 state->head = Z_NULL;
135 state->hold = 0;
136 state->bits = 0;
137 state->lencode = state->distcode = state->next = state->codes;
@@ -445,14 +446,14 @@
445
446 /* Macros for inflate(): */
447
448 /* check function to use adler32() for zlib or crc32() for gzip */
449 #ifdef GUNZIP
450 # define UPDATE(check, buf, len) \
451 (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
452 #else
453 # define UPDATE(check, buf, len) adler32(check, buf, len)
454 #endif
455
456 /* check macros for header crc */
457 #ifdef GUNZIP
458 # define CRC2(check, word) \
@@ -668,11 +669,10 @@
668 CRC2(state->check, hold);
669 INITBITS();
670 state->mode = FLAGS;
671 break;
672 }
673 state->flags = 0; /* expect zlib header */
674 if (state->head != Z_NULL)
675 state->head->done = -1;
676 if (!(state->wrap & 1) || /* check if zlib header allowed */
677 #else
678 if (
@@ -695,10 +695,11 @@
695 strm->msg = (char *)"invalid window size";
696 state->mode = BAD;
697 break;
698 }
699 state->dmax = 1U << len;
 
700 Tracev((stderr, "inflate: zlib header ok\n"));
701 strm->adler = state->check = adler32(0L, Z_NULL, 0);
702 state->mode = hold & 0x200 ? DICTID : TYPE;
703 INITBITS();
704 break;
@@ -720,18 +721,20 @@
720 state->head->text = (int)((hold >> 8) & 1);
721 if ((state->flags & 0x0200) && (state->wrap & 4))
722 CRC2(state->check, hold);
723 INITBITS();
724 state->mode = TIME;
 
725 case TIME:
726 NEEDBITS(32);
727 if (state->head != Z_NULL)
728 state->head->time = hold;
729 if ((state->flags & 0x0200) && (state->wrap & 4))
730 CRC4(state->check, hold);
731 INITBITS();
732 state->mode = OS;
 
733 case OS:
734 NEEDBITS(16);
735 if (state->head != Z_NULL) {
736 state->head->xflags = (int)(hold & 0xff);
737 state->head->os = (int)(hold >> 8);
@@ -738,10 +741,11 @@
738 }
739 if ((state->flags & 0x0200) && (state->wrap & 4))
740 CRC2(state->check, hold);
741 INITBITS();
742 state->mode = EXLEN;
 
743 case EXLEN:
744 if (state->flags & 0x0400) {
745 NEEDBITS(16);
746 state->length = (unsigned)(hold);
747 if (state->head != Z_NULL)
@@ -751,10 +755,11 @@
751 INITBITS();
752 }
753 else if (state->head != Z_NULL)
754 state->head->extra = Z_NULL;
755 state->mode = EXTRA;
 
756 case EXTRA:
757 if (state->flags & 0x0400) {
758 copy = state->length;
759 if (copy > have) copy = have;
760 if (copy) {
@@ -773,10 +778,11 @@
773 }
774 if (state->length) goto inf_leave;
775 }
776 state->length = 0;
777 state->mode = NAME;
 
778 case NAME:
779 if (state->flags & 0x0800) {
780 if (have == 0) goto inf_leave;
781 copy = 0;
782 do {
@@ -794,10 +800,11 @@
794 }
795 else if (state->head != Z_NULL)
796 state->head->name = Z_NULL;
797 state->length = 0;
798 state->mode = COMMENT;
 
799 case COMMENT:
800 if (state->flags & 0x1000) {
801 if (have == 0) goto inf_leave;
802 copy = 0;
803 do {
@@ -814,10 +821,11 @@
814 if (len) goto inf_leave;
815 }
816 else if (state->head != Z_NULL)
817 state->head->comment = Z_NULL;
818 state->mode = HCRC;
 
819 case HCRC:
820 if (state->flags & 0x0200) {
821 NEEDBITS(16);
822 if ((state->wrap & 4) && hold != (state->check & 0xffff)) {
823 strm->msg = (char *)"header crc mismatch";
@@ -837,19 +845,22 @@
837 case DICTID:
838 NEEDBITS(32);
839 strm->adler = state->check = ZSWAP32(hold);
840 INITBITS();
841 state->mode = DICT;
 
842 case DICT:
843 if (state->havedict == 0) {
844 RESTORE();
845 return Z_NEED_DICT;
846 }
847 strm->adler = state->check = adler32(0L, Z_NULL, 0);
848 state->mode = TYPE;
 
849 case TYPE:
850 if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
 
851 case TYPEDO:
852 if (state->last) {
853 BYTEBITS();
854 state->mode = CHECK;
855 break;
@@ -896,12 +907,14 @@
896 Tracev((stderr, "inflate: stored length %u\n",
897 state->length));
898 INITBITS();
899 state->mode = COPY_;
900 if (flush == Z_TREES) goto inf_leave;
 
901 case COPY_:
902 state->mode = COPY;
 
903 case COPY:
904 copy = state->length;
905 if (copy) {
906 if (copy > have) copy = have;
907 if (copy > left) copy = left;
@@ -933,10 +946,11 @@
933 }
934 #endif
935 Tracev((stderr, "inflate: table sizes ok\n"));
936 state->have = 0;
937 state->mode = LENLENS;
 
938 case LENLENS:
939 while (state->have < state->ncode) {
940 NEEDBITS(3);
941 state->lens[order[state->have++]] = (unsigned short)BITS(3);
942 DROPBITS(3);
@@ -954,10 +968,11 @@
954 break;
955 }
956 Tracev((stderr, "inflate: code lengths ok\n"));
957 state->have = 0;
958 state->mode = CODELENS;
 
959 case CODELENS:
960 while (state->have < state->nlen + state->ndist) {
961 for (;;) {
962 here = state->lencode[BITS(state->lenbits)];
963 if ((unsigned)(here.bits) <= bits) break;
@@ -1037,12 +1052,14 @@
1037 break;
1038 }
1039 Tracev((stderr, "inflate: codes ok\n"));
1040 state->mode = LEN_;
1041 if (flush == Z_TREES) goto inf_leave;
 
1042 case LEN_:
1043 state->mode = LEN;
 
1044 case LEN:
1045 if (have >= 6 && left >= 258) {
1046 RESTORE();
1047 inflate_fast(strm, out);
1048 LOAD();
@@ -1088,10 +1105,11 @@
1088 state->mode = BAD;
1089 break;
1090 }
1091 state->extra = (unsigned)(here.op) & 15;
1092 state->mode = LENEXT;
 
1093 case LENEXT:
1094 if (state->extra) {
1095 NEEDBITS(state->extra);
1096 state->length += BITS(state->extra);
1097 DROPBITS(state->extra);
@@ -1098,10 +1116,11 @@
1098 state->back += state->extra;
1099 }
1100 Tracevv((stderr, "inflate: length %u\n", state->length));
1101 state->was = state->length;
1102 state->mode = DIST;
 
1103 case DIST:
1104 for (;;) {
1105 here = state->distcode[BITS(state->distbits)];
1106 if ((unsigned)(here.bits) <= bits) break;
1107 PULLBYTE();
@@ -1125,10 +1144,11 @@
1125 break;
1126 }
1127 state->offset = (unsigned)here.val;
1128 state->extra = (unsigned)(here.op) & 15;
1129 state->mode = DISTEXT;
 
1130 case DISTEXT:
1131 if (state->extra) {
1132 NEEDBITS(state->extra);
1133 state->offset += BITS(state->extra);
1134 DROPBITS(state->extra);
@@ -1141,10 +1161,11 @@
1141 break;
1142 }
1143 #endif
1144 Tracevv((stderr, "inflate: distance %u\n", state->offset));
1145 state->mode = MATCH;
 
1146 case MATCH:
1147 if (left == 0) goto inf_leave;
1148 copy = out - left;
1149 if (state->offset > copy) { /* copy from window */
1150 copy = state->offset - copy;
@@ -1200,11 +1221,11 @@
1200 out -= left;
1201 strm->total_out += out;
1202 state->total += out;
1203 if ((state->wrap & 4) && out)
1204 strm->adler = state->check =
1205 UPDATE(state->check, put - out, out);
1206 out = left;
1207 if ((state->wrap & 4) && (
1208 #ifdef GUNZIP
1209 state->flags ? hold :
1210 #endif
@@ -1216,32 +1237,35 @@
1216 INITBITS();
1217 Tracev((stderr, "inflate: check matches trailer\n"));
1218 }
1219 #ifdef GUNZIP
1220 state->mode = LENGTH;
 
1221 case LENGTH:
1222 if (state->wrap && state->flags) {
1223 NEEDBITS(32);
1224 if (hold != (state->total & 0xffffffffUL)) {
1225 strm->msg = (char *)"incorrect length check";
1226 state->mode = BAD;
1227 break;
1228 }
1229 INITBITS();
1230 Tracev((stderr, "inflate: length matches trailer\n"));
1231 }
1232 #endif
1233 state->mode = DONE;
 
1234 case DONE:
1235 ret = Z_STREAM_END;
1236 goto inf_leave;
1237 case BAD:
1238 ret = Z_DATA_ERROR;
1239 goto inf_leave;
1240 case MEM:
1241 return Z_MEM_ERROR;
1242 case SYNC:
 
1243 default:
1244 return Z_STREAM_ERROR;
1245 }
1246
1247 /*
@@ -1263,11 +1287,11 @@
1263 strm->total_in += in;
1264 strm->total_out += out;
1265 state->total += out;
1266 if ((state->wrap & 4) && out)
1267 strm->adler = state->check =
1268 UPDATE(state->check, strm->next_out - out, out);
1269 strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
1270 (state->mode == TYPE ? 128 : 0) +
1271 (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
1272 if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
1273 ret = Z_BUF_ERROR;
@@ -1399,10 +1423,11 @@
1399
1400 int ZEXPORT inflateSync(strm)
1401 z_streamp strm;
1402 {
1403 unsigned len; /* number of bytes to look at or looked at */
 
1404 unsigned long in, out; /* temporary to save total_in and total_out */
1405 unsigned char buf[4]; /* to restore bit buffer to byte string */
1406 struct inflate_state FAR *state;
1407
1408 /* check parameters */
@@ -1431,13 +1456,19 @@
1431 strm->next_in += len;
1432 strm->total_in += len;
1433
1434 /* return no joy or set up to restart inflate() on a new block */
1435 if (state->have != 4) return Z_DATA_ERROR;
 
 
 
 
 
1436 in = strm->total_in; out = strm->total_out;
1437 inflateReset(strm);
1438 strm->total_in = in; strm->total_out = out;
 
1439 state->mode = TYPE;
1440 return Z_OK;
1441 }
1442
1443 /*
@@ -1529,11 +1560,11 @@
1529 {
1530 struct inflate_state FAR *state;
1531
1532 if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1533 state = (struct inflate_state FAR *)strm->state;
1534 if (check)
1535 state->wrap |= 4;
1536 else
1537 state->wrap &= ~4;
1538 return Z_OK;
1539 }
1540
--- compat/zlib/inflate.c
+++ compat/zlib/inflate.c
@@ -1,7 +1,7 @@
1 /* inflate.c -- zlib decompression
2 * Copyright (C) 1995-2022 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 /*
7 * Change history:
@@ -128,10 +128,11 @@
128 if (state->wrap) /* to support ill-conceived Java test suite */
129 strm->adler = state->wrap & 1;
130 state->mode = HEAD;
131 state->last = 0;
132 state->havedict = 0;
133 state->flags = -1;
134 state->dmax = 32768U;
135 state->head = Z_NULL;
136 state->hold = 0;
137 state->bits = 0;
138 state->lencode = state->distcode = state->next = state->codes;
@@ -445,14 +446,14 @@
446
447 /* Macros for inflate(): */
448
449 /* check function to use adler32() for zlib or crc32() for gzip */
450 #ifdef GUNZIP
451 # define UPDATE_CHECK(check, buf, len) \
452 (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
453 #else
454 # define UPDATE_CHECK(check, buf, len) adler32(check, buf, len)
455 #endif
456
457 /* check macros for header crc */
458 #ifdef GUNZIP
459 # define CRC2(check, word) \
@@ -668,11 +669,10 @@
669 CRC2(state->check, hold);
670 INITBITS();
671 state->mode = FLAGS;
672 break;
673 }
 
674 if (state->head != Z_NULL)
675 state->head->done = -1;
676 if (!(state->wrap & 1) || /* check if zlib header allowed */
677 #else
678 if (
@@ -695,10 +695,11 @@
695 strm->msg = (char *)"invalid window size";
696 state->mode = BAD;
697 break;
698 }
699 state->dmax = 1U << len;
700 state->flags = 0; /* indicate zlib header */
701 Tracev((stderr, "inflate: zlib header ok\n"));
702 strm->adler = state->check = adler32(0L, Z_NULL, 0);
703 state->mode = hold & 0x200 ? DICTID : TYPE;
704 INITBITS();
705 break;
@@ -720,18 +721,20 @@
721 state->head->text = (int)((hold >> 8) & 1);
722 if ((state->flags & 0x0200) && (state->wrap & 4))
723 CRC2(state->check, hold);
724 INITBITS();
725 state->mode = TIME;
726 /* fallthrough */
727 case TIME:
728 NEEDBITS(32);
729 if (state->head != Z_NULL)
730 state->head->time = hold;
731 if ((state->flags & 0x0200) && (state->wrap & 4))
732 CRC4(state->check, hold);
733 INITBITS();
734 state->mode = OS;
735 /* fallthrough */
736 case OS:
737 NEEDBITS(16);
738 if (state->head != Z_NULL) {
739 state->head->xflags = (int)(hold & 0xff);
740 state->head->os = (int)(hold >> 8);
@@ -738,10 +741,11 @@
741 }
742 if ((state->flags & 0x0200) && (state->wrap & 4))
743 CRC2(state->check, hold);
744 INITBITS();
745 state->mode = EXLEN;
746 /* fallthrough */
747 case EXLEN:
748 if (state->flags & 0x0400) {
749 NEEDBITS(16);
750 state->length = (unsigned)(hold);
751 if (state->head != Z_NULL)
@@ -751,10 +755,11 @@
755 INITBITS();
756 }
757 else if (state->head != Z_NULL)
758 state->head->extra = Z_NULL;
759 state->mode = EXTRA;
760 /* fallthrough */
761 case EXTRA:
762 if (state->flags & 0x0400) {
763 copy = state->length;
764 if (copy > have) copy = have;
765 if (copy) {
@@ -773,10 +778,11 @@
778 }
779 if (state->length) goto inf_leave;
780 }
781 state->length = 0;
782 state->mode = NAME;
783 /* fallthrough */
784 case NAME:
785 if (state->flags & 0x0800) {
786 if (have == 0) goto inf_leave;
787 copy = 0;
788 do {
@@ -794,10 +800,11 @@
800 }
801 else if (state->head != Z_NULL)
802 state->head->name = Z_NULL;
803 state->length = 0;
804 state->mode = COMMENT;
805 /* fallthrough */
806 case COMMENT:
807 if (state->flags & 0x1000) {
808 if (have == 0) goto inf_leave;
809 copy = 0;
810 do {
@@ -814,10 +821,11 @@
821 if (len) goto inf_leave;
822 }
823 else if (state->head != Z_NULL)
824 state->head->comment = Z_NULL;
825 state->mode = HCRC;
826 /* fallthrough */
827 case HCRC:
828 if (state->flags & 0x0200) {
829 NEEDBITS(16);
830 if ((state->wrap & 4) && hold != (state->check & 0xffff)) {
831 strm->msg = (char *)"header crc mismatch";
@@ -837,19 +845,22 @@
845 case DICTID:
846 NEEDBITS(32);
847 strm->adler = state->check = ZSWAP32(hold);
848 INITBITS();
849 state->mode = DICT;
850 /* fallthrough */
851 case DICT:
852 if (state->havedict == 0) {
853 RESTORE();
854 return Z_NEED_DICT;
855 }
856 strm->adler = state->check = adler32(0L, Z_NULL, 0);
857 state->mode = TYPE;
858 /* fallthrough */
859 case TYPE:
860 if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
861 /* fallthrough */
862 case TYPEDO:
863 if (state->last) {
864 BYTEBITS();
865 state->mode = CHECK;
866 break;
@@ -896,12 +907,14 @@
907 Tracev((stderr, "inflate: stored length %u\n",
908 state->length));
909 INITBITS();
910 state->mode = COPY_;
911 if (flush == Z_TREES) goto inf_leave;
912 /* fallthrough */
913 case COPY_:
914 state->mode = COPY;
915 /* fallthrough */
916 case COPY:
917 copy = state->length;
918 if (copy) {
919 if (copy > have) copy = have;
920 if (copy > left) copy = left;
@@ -933,10 +946,11 @@
946 }
947 #endif
948 Tracev((stderr, "inflate: table sizes ok\n"));
949 state->have = 0;
950 state->mode = LENLENS;
951 /* fallthrough */
952 case LENLENS:
953 while (state->have < state->ncode) {
954 NEEDBITS(3);
955 state->lens[order[state->have++]] = (unsigned short)BITS(3);
956 DROPBITS(3);
@@ -954,10 +968,11 @@
968 break;
969 }
970 Tracev((stderr, "inflate: code lengths ok\n"));
971 state->have = 0;
972 state->mode = CODELENS;
973 /* fallthrough */
974 case CODELENS:
975 while (state->have < state->nlen + state->ndist) {
976 for (;;) {
977 here = state->lencode[BITS(state->lenbits)];
978 if ((unsigned)(here.bits) <= bits) break;
@@ -1037,12 +1052,14 @@
1052 break;
1053 }
1054 Tracev((stderr, "inflate: codes ok\n"));
1055 state->mode = LEN_;
1056 if (flush == Z_TREES) goto inf_leave;
1057 /* fallthrough */
1058 case LEN_:
1059 state->mode = LEN;
1060 /* fallthrough */
1061 case LEN:
1062 if (have >= 6 && left >= 258) {
1063 RESTORE();
1064 inflate_fast(strm, out);
1065 LOAD();
@@ -1088,10 +1105,11 @@
1105 state->mode = BAD;
1106 break;
1107 }
1108 state->extra = (unsigned)(here.op) & 15;
1109 state->mode = LENEXT;
1110 /* fallthrough */
1111 case LENEXT:
1112 if (state->extra) {
1113 NEEDBITS(state->extra);
1114 state->length += BITS(state->extra);
1115 DROPBITS(state->extra);
@@ -1098,10 +1116,11 @@
1116 state->back += state->extra;
1117 }
1118 Tracevv((stderr, "inflate: length %u\n", state->length));
1119 state->was = state->length;
1120 state->mode = DIST;
1121 /* fallthrough */
1122 case DIST:
1123 for (;;) {
1124 here = state->distcode[BITS(state->distbits)];
1125 if ((unsigned)(here.bits) <= bits) break;
1126 PULLBYTE();
@@ -1125,10 +1144,11 @@
1144 break;
1145 }
1146 state->offset = (unsigned)here.val;
1147 state->extra = (unsigned)(here.op) & 15;
1148 state->mode = DISTEXT;
1149 /* fallthrough */
1150 case DISTEXT:
1151 if (state->extra) {
1152 NEEDBITS(state->extra);
1153 state->offset += BITS(state->extra);
1154 DROPBITS(state->extra);
@@ -1141,10 +1161,11 @@
1161 break;
1162 }
1163 #endif
1164 Tracevv((stderr, "inflate: distance %u\n", state->offset));
1165 state->mode = MATCH;
1166 /* fallthrough */
1167 case MATCH:
1168 if (left == 0) goto inf_leave;
1169 copy = out - left;
1170 if (state->offset > copy) { /* copy from window */
1171 copy = state->offset - copy;
@@ -1200,11 +1221,11 @@
1221 out -= left;
1222 strm->total_out += out;
1223 state->total += out;
1224 if ((state->wrap & 4) && out)
1225 strm->adler = state->check =
1226 UPDATE_CHECK(state->check, put - out, out);
1227 out = left;
1228 if ((state->wrap & 4) && (
1229 #ifdef GUNZIP
1230 state->flags ? hold :
1231 #endif
@@ -1216,32 +1237,35 @@
1237 INITBITS();
1238 Tracev((stderr, "inflate: check matches trailer\n"));
1239 }
1240 #ifdef GUNZIP
1241 state->mode = LENGTH;
1242 /* fallthrough */
1243 case LENGTH:
1244 if (state->wrap && state->flags) {
1245 NEEDBITS(32);
1246 if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) {
1247 strm->msg = (char *)"incorrect length check";
1248 state->mode = BAD;
1249 break;
1250 }
1251 INITBITS();
1252 Tracev((stderr, "inflate: length matches trailer\n"));
1253 }
1254 #endif
1255 state->mode = DONE;
1256 /* fallthrough */
1257 case DONE:
1258 ret = Z_STREAM_END;
1259 goto inf_leave;
1260 case BAD:
1261 ret = Z_DATA_ERROR;
1262 goto inf_leave;
1263 case MEM:
1264 return Z_MEM_ERROR;
1265 case SYNC:
1266 /* fallthrough */
1267 default:
1268 return Z_STREAM_ERROR;
1269 }
1270
1271 /*
@@ -1263,11 +1287,11 @@
1287 strm->total_in += in;
1288 strm->total_out += out;
1289 state->total += out;
1290 if ((state->wrap & 4) && out)
1291 strm->adler = state->check =
1292 UPDATE_CHECK(state->check, strm->next_out - out, out);
1293 strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
1294 (state->mode == TYPE ? 128 : 0) +
1295 (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
1296 if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
1297 ret = Z_BUF_ERROR;
@@ -1399,10 +1423,11 @@
1423
1424 int ZEXPORT inflateSync(strm)
1425 z_streamp strm;
1426 {
1427 unsigned len; /* number of bytes to look at or looked at */
1428 int flags; /* temporary to save header status */
1429 unsigned long in, out; /* temporary to save total_in and total_out */
1430 unsigned char buf[4]; /* to restore bit buffer to byte string */
1431 struct inflate_state FAR *state;
1432
1433 /* check parameters */
@@ -1431,13 +1456,19 @@
1456 strm->next_in += len;
1457 strm->total_in += len;
1458
1459 /* return no joy or set up to restart inflate() on a new block */
1460 if (state->have != 4) return Z_DATA_ERROR;
1461 if (state->flags == -1)
1462 state->wrap = 0; /* if no header yet, treat as raw */
1463 else
1464 state->wrap &= ~4; /* no point in computing a check value now */
1465 flags = state->flags;
1466 in = strm->total_in; out = strm->total_out;
1467 inflateReset(strm);
1468 strm->total_in = in; strm->total_out = out;
1469 state->flags = flags;
1470 state->mode = TYPE;
1471 return Z_OK;
1472 }
1473
1474 /*
@@ -1529,11 +1560,11 @@
1560 {
1561 struct inflate_state FAR *state;
1562
1563 if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1564 state = (struct inflate_state FAR *)strm->state;
1565 if (check && state->wrap)
1566 state->wrap |= 4;
1567 else
1568 state->wrap &= ~4;
1569 return Z_OK;
1570 }
1571
--- compat/zlib/inflate.h
+++ compat/zlib/inflate.h
@@ -1,7 +1,7 @@
11
/* inflate.h -- internal inflate state definition
2
- * Copyright (C) 1995-2016 Mark Adler
2
+ * Copyright (C) 1995-2019 Mark Adler
33
* For conditions of distribution and use, see copyright notice in zlib.h
44
*/
55
66
/* WARNING: this file should *not* be used by applications. It is
77
part of the implementation of the compression library and is
@@ -84,11 +84,12 @@
8484
inflate_mode mode; /* current inflate mode */
8585
int last; /* true if processing last block */
8686
int wrap; /* bit 0 true for zlib, bit 1 true for gzip,
8787
bit 2 true to validate check value */
8888
int havedict; /* true if dictionary provided */
89
- int flags; /* gzip header method and flags (0 if zlib) */
89
+ int flags; /* gzip header method and flags, 0 if zlib, or
90
+ -1 if raw or no header yet */
9091
unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
9192
unsigned long check; /* protected copy of check value */
9293
unsigned long total; /* protected copy of output count */
9394
gz_headerp head; /* where to save gzip header information */
9495
/* sliding window */
9596
--- compat/zlib/inflate.h
+++ compat/zlib/inflate.h
@@ -1,7 +1,7 @@
1 /* inflate.h -- internal inflate state definition
2 * Copyright (C) 1995-2016 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 /* WARNING: this file should *not* be used by applications. It is
7 part of the implementation of the compression library and is
@@ -84,11 +84,12 @@
84 inflate_mode mode; /* current inflate mode */
85 int last; /* true if processing last block */
86 int wrap; /* bit 0 true for zlib, bit 1 true for gzip,
87 bit 2 true to validate check value */
88 int havedict; /* true if dictionary provided */
89 int flags; /* gzip header method and flags (0 if zlib) */
 
90 unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
91 unsigned long check; /* protected copy of check value */
92 unsigned long total; /* protected copy of output count */
93 gz_headerp head; /* where to save gzip header information */
94 /* sliding window */
95
--- compat/zlib/inflate.h
+++ compat/zlib/inflate.h
@@ -1,7 +1,7 @@
1 /* inflate.h -- internal inflate state definition
2 * Copyright (C) 1995-2019 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 /* WARNING: this file should *not* be used by applications. It is
7 part of the implementation of the compression library and is
@@ -84,11 +84,12 @@
84 inflate_mode mode; /* current inflate mode */
85 int last; /* true if processing last block */
86 int wrap; /* bit 0 true for zlib, bit 1 true for gzip,
87 bit 2 true to validate check value */
88 int havedict; /* true if dictionary provided */
89 int flags; /* gzip header method and flags, 0 if zlib, or
90 -1 if raw or no header yet */
91 unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
92 unsigned long check; /* protected copy of check value */
93 unsigned long total; /* protected copy of output count */
94 gz_headerp head; /* where to save gzip header information */
95 /* sliding window */
96
--- compat/zlib/inftrees.c
+++ compat/zlib/inftrees.c
@@ -1,17 +1,17 @@
11
/* inftrees.c -- generate Huffman trees for efficient decoding
2
- * Copyright (C) 1995-2017 Mark Adler
2
+ * Copyright (C) 1995-2022 Mark Adler
33
* For conditions of distribution and use, see copyright notice in zlib.h
44
*/
55
66
#include "zutil.h"
77
#include "inftrees.h"
88
99
#define MAXBITS 15
1010
1111
const char inflate_copyright[] =
12
- " inflate 1.2.11 Copyright 1995-2017 Mark Adler ";
12
+ " inflate 1.2.12 Copyright 1995-2022 Mark Adler ";
1313
/*
1414
If you use the zlib library in a product, an acknowledgment is welcome
1515
in the documentation of your product. If for some reason you cannot
1616
include such an acknowledgment, I would appreciate that you keep this
1717
copyright string in the executable of your product.
@@ -60,11 +60,11 @@
6060
static const unsigned short lbase[31] = { /* Length codes 257..285 base */
6161
3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
6262
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
6363
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
6464
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
65
- 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202};
65
+ 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 202};
6666
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
6767
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
6868
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
6969
8193, 12289, 16385, 24577, 0, 0};
7070
static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
7171
--- compat/zlib/inftrees.c
+++ compat/zlib/inftrees.c
@@ -1,17 +1,17 @@
1 /* inftrees.c -- generate Huffman trees for efficient decoding
2 * Copyright (C) 1995-2017 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 #include "zutil.h"
7 #include "inftrees.h"
8
9 #define MAXBITS 15
10
11 const char inflate_copyright[] =
12 " inflate 1.2.11 Copyright 1995-2017 Mark Adler ";
13 /*
14 If you use the zlib library in a product, an acknowledgment is welcome
15 in the documentation of your product. If for some reason you cannot
16 include such an acknowledgment, I would appreciate that you keep this
17 copyright string in the executable of your product.
@@ -60,11 +60,11 @@
60 static const unsigned short lbase[31] = { /* Length codes 257..285 base */
61 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
62 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
63 static const unsigned short lext[31] = { /* Length codes 257..285 extra */
64 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
65 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202};
66 static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
67 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
68 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
69 8193, 12289, 16385, 24577, 0, 0};
70 static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
71
--- compat/zlib/inftrees.c
+++ compat/zlib/inftrees.c
@@ -1,17 +1,17 @@
1 /* inftrees.c -- generate Huffman trees for efficient decoding
2 * Copyright (C) 1995-2022 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 #include "zutil.h"
7 #include "inftrees.h"
8
9 #define MAXBITS 15
10
11 const char inflate_copyright[] =
12 " inflate 1.2.12 Copyright 1995-2022 Mark Adler ";
13 /*
14 If you use the zlib library in a product, an acknowledgment is welcome
15 in the documentation of your product. If for some reason you cannot
16 include such an acknowledgment, I would appreciate that you keep this
17 copyright string in the executable of your product.
@@ -60,11 +60,11 @@
60 static const unsigned short lbase[31] = { /* Length codes 257..285 base */
61 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
62 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
63 static const unsigned short lext[31] = { /* Length codes 257..285 extra */
64 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
65 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 202};
66 static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
67 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
68 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
69 8193, 12289, 16385, 24577, 0, 0};
70 static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
71
--- compat/zlib/os400/README400
+++ compat/zlib/os400/README400
@@ -1,6 +1,6 @@
1
- ZLIB version 1.2.11 for OS/400 installation instructions
1
+ ZLIB version 1.2.12 for OS/400 installation instructions
22
33
1) Download and unpack the zlib tarball to some IFS directory.
44
(i.e.: /path/to/the/zlib/ifs/source/directory)
55
66
If the installed IFS command suppors gzip format, this is straightforward,
77
--- compat/zlib/os400/README400
+++ compat/zlib/os400/README400
@@ -1,6 +1,6 @@
1 ZLIB version 1.2.11 for OS/400 installation instructions
2
3 1) Download and unpack the zlib tarball to some IFS directory.
4 (i.e.: /path/to/the/zlib/ifs/source/directory)
5
6 If the installed IFS command suppors gzip format, this is straightforward,
7
--- compat/zlib/os400/README400
+++ compat/zlib/os400/README400
@@ -1,6 +1,6 @@
1 ZLIB version 1.2.12 for OS/400 installation instructions
2
3 1) Download and unpack the zlib tarball to some IFS directory.
4 (i.e.: /path/to/the/zlib/ifs/source/directory)
5
6 If the installed IFS command suppors gzip format, this is straightforward,
7
--- compat/zlib/os400/zlib.inc
+++ compat/zlib/os400/zlib.inc
@@ -1,9 +1,9 @@
11
* ZLIB.INC - Interface to the general purpose compression library
22
*
33
* ILE RPG400 version by Patrick Monnerat, DATASPHERE.
4
- * Version 1.2.11
4
+ * Version 1.2.12
55
*
66
*
77
* WARNING:
88
* Procedures inflateInit(), inflateInit2(), deflateInit(),
99
* deflateInit2() and inflateBackInit() need to be called with
@@ -20,16 +20,16 @@
2020
* Constants
2121
**************************************************************************
2222
*
2323
* Versioning information.
2424
*
25
- D ZLIB_VERSION C '1.2.11'
25
+ D ZLIB_VERSION C '1.2.12'
2626
D ZLIB_VERNUM C X'12a0'
2727
D ZLIB_VER_MAJOR C 1
2828
D ZLIB_VER_MINOR C 2
2929
D ZLIB_VER_REVISION...
30
- D C 11
30
+ D C 12
3131
D ZLIB_VER_SUBREVISION...
3232
D C 0
3333
*
3434
* Other equates.
3535
*
3636
--- compat/zlib/os400/zlib.inc
+++ compat/zlib/os400/zlib.inc
@@ -1,9 +1,9 @@
1 * ZLIB.INC - Interface to the general purpose compression library
2 *
3 * ILE RPG400 version by Patrick Monnerat, DATASPHERE.
4 * Version 1.2.11
5 *
6 *
7 * WARNING:
8 * Procedures inflateInit(), inflateInit2(), deflateInit(),
9 * deflateInit2() and inflateBackInit() need to be called with
@@ -20,16 +20,16 @@
20 * Constants
21 **************************************************************************
22 *
23 * Versioning information.
24 *
25 D ZLIB_VERSION C '1.2.11'
26 D ZLIB_VERNUM C X'12a0'
27 D ZLIB_VER_MAJOR C 1
28 D ZLIB_VER_MINOR C 2
29 D ZLIB_VER_REVISION...
30 D C 11
31 D ZLIB_VER_SUBREVISION...
32 D C 0
33 *
34 * Other equates.
35 *
36
--- compat/zlib/os400/zlib.inc
+++ compat/zlib/os400/zlib.inc
@@ -1,9 +1,9 @@
1 * ZLIB.INC - Interface to the general purpose compression library
2 *
3 * ILE RPG400 version by Patrick Monnerat, DATASPHERE.
4 * Version 1.2.12
5 *
6 *
7 * WARNING:
8 * Procedures inflateInit(), inflateInit2(), deflateInit(),
9 * deflateInit2() and inflateBackInit() need to be called with
@@ -20,16 +20,16 @@
20 * Constants
21 **************************************************************************
22 *
23 * Versioning information.
24 *
25 D ZLIB_VERSION C '1.2.12'
26 D ZLIB_VERNUM C X'12a0'
27 D ZLIB_VER_MAJOR C 1
28 D ZLIB_VER_MINOR C 2
29 D ZLIB_VER_REVISION...
30 D C 12
31 D ZLIB_VER_SUBREVISION...
32 D C 0
33 *
34 * Other equates.
35 *
36
--- compat/zlib/qnx/package.qpg
+++ compat/zlib/qnx/package.qpg
@@ -23,14 +23,14 @@
2323
2424
<QPG:Values>
2525
<QPG:Files>
2626
<QPG:Add file="../zconf.h" install="/opt/include/" user="root:sys" permission="644"/>
2727
<QPG:Add file="../zlib.h" install="/opt/include/" user="root:sys" permission="644"/>
28
- <QPG:Add file="../libz.so.1.2.11" install="/opt/lib/" user="root:bin" permission="644"/>
29
- <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.11"/>
30
- <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.11"/>
31
- <QPG:Add file="../libz.so.1.2.11" install="/opt/lib/" component="slib"/>
28
+ <QPG:Add file="../libz.so.1.2.12" install="/opt/lib/" user="root:bin" permission="644"/>
29
+ <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.12"/>
30
+ <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.12"/>
31
+ <QPG:Add file="../libz.so.1.2.12" install="/opt/lib/" component="slib"/>
3232
</QPG:Files>
3333
3434
<QPG:PackageFilter>
3535
<QPM:PackageManifest>
3636
<QPM:PackageDescription>
@@ -61,11 +61,11 @@
6161
<QPM:ProductDescriptionURL>http://www.gzip.org/zlib</QPM:ProductDescriptionURL>
6262
<QPM:ProductDescriptionEmbedURL></QPM:ProductDescriptionEmbedURL>
6363
</QPM:ProductDescription>
6464
6565
<QPM:ReleaseDescription>
66
- <QPM:ReleaseVersion>1.2.11</QPM:ReleaseVersion>
66
+ <QPM:ReleaseVersion>1.2.12</QPM:ReleaseVersion>
6767
<QPM:ReleaseUrgency>Medium</QPM:ReleaseUrgency>
6868
<QPM:ReleaseStability>Stable</QPM:ReleaseStability>
6969
<QPM:ReleaseNoteMinor></QPM:ReleaseNoteMinor>
7070
<QPM:ReleaseNoteMajor></QPM:ReleaseNoteMajor>
7171
<QPM:ExcludeCountries>
7272
--- compat/zlib/qnx/package.qpg
+++ compat/zlib/qnx/package.qpg
@@ -23,14 +23,14 @@
23
24 <QPG:Values>
25 <QPG:Files>
26 <QPG:Add file="../zconf.h" install="/opt/include/" user="root:sys" permission="644"/>
27 <QPG:Add file="../zlib.h" install="/opt/include/" user="root:sys" permission="644"/>
28 <QPG:Add file="../libz.so.1.2.11" install="/opt/lib/" user="root:bin" permission="644"/>
29 <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.11"/>
30 <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.11"/>
31 <QPG:Add file="../libz.so.1.2.11" install="/opt/lib/" component="slib"/>
32 </QPG:Files>
33
34 <QPG:PackageFilter>
35 <QPM:PackageManifest>
36 <QPM:PackageDescription>
@@ -61,11 +61,11 @@
61 <QPM:ProductDescriptionURL>http://www.gzip.org/zlib</QPM:ProductDescriptionURL>
62 <QPM:ProductDescriptionEmbedURL></QPM:ProductDescriptionEmbedURL>
63 </QPM:ProductDescription>
64
65 <QPM:ReleaseDescription>
66 <QPM:ReleaseVersion>1.2.11</QPM:ReleaseVersion>
67 <QPM:ReleaseUrgency>Medium</QPM:ReleaseUrgency>
68 <QPM:ReleaseStability>Stable</QPM:ReleaseStability>
69 <QPM:ReleaseNoteMinor></QPM:ReleaseNoteMinor>
70 <QPM:ReleaseNoteMajor></QPM:ReleaseNoteMajor>
71 <QPM:ExcludeCountries>
72
--- compat/zlib/qnx/package.qpg
+++ compat/zlib/qnx/package.qpg
@@ -23,14 +23,14 @@
23
24 <QPG:Values>
25 <QPG:Files>
26 <QPG:Add file="../zconf.h" install="/opt/include/" user="root:sys" permission="644"/>
27 <QPG:Add file="../zlib.h" install="/opt/include/" user="root:sys" permission="644"/>
28 <QPG:Add file="../libz.so.1.2.12" install="/opt/lib/" user="root:bin" permission="644"/>
29 <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.12"/>
30 <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.12"/>
31 <QPG:Add file="../libz.so.1.2.12" install="/opt/lib/" component="slib"/>
32 </QPG:Files>
33
34 <QPG:PackageFilter>
35 <QPM:PackageManifest>
36 <QPM:PackageDescription>
@@ -61,11 +61,11 @@
61 <QPM:ProductDescriptionURL>http://www.gzip.org/zlib</QPM:ProductDescriptionURL>
62 <QPM:ProductDescriptionEmbedURL></QPM:ProductDescriptionEmbedURL>
63 </QPM:ProductDescription>
64
65 <QPM:ReleaseDescription>
66 <QPM:ReleaseVersion>1.2.12</QPM:ReleaseVersion>
67 <QPM:ReleaseUrgency>Medium</QPM:ReleaseUrgency>
68 <QPM:ReleaseStability>Stable</QPM:ReleaseStability>
69 <QPM:ReleaseNoteMinor></QPM:ReleaseNoteMinor>
70 <QPM:ReleaseNoteMajor></QPM:ReleaseNoteMajor>
71 <QPM:ExcludeCountries>
72
--- compat/zlib/test/example.c
+++ compat/zlib/test/example.c
@@ -438,13 +438,12 @@
438438
d_stream.avail_in = (uInt)comprLen-2; /* read all compressed data */
439439
err = inflateSync(&d_stream); /* but skip the damaged part */
440440
CHECK_ERR(err, "inflateSync");
441441
442442
err = inflate(&d_stream, Z_FINISH);
443
- if (err != Z_DATA_ERROR) {
444
- fprintf(stderr, "inflate should report DATA_ERROR\n");
445
- /* Because of incorrect adler32 */
443
+ if (err != Z_STREAM_END) {
444
+ fprintf(stderr, "inflate should report Z_STREAM_END\n");
446445
exit(1);
447446
}
448447
err = inflateEnd(&d_stream);
449448
CHECK_ERR(err, "inflateEnd");
450449
451450
--- compat/zlib/test/example.c
+++ compat/zlib/test/example.c
@@ -438,13 +438,12 @@
438 d_stream.avail_in = (uInt)comprLen-2; /* read all compressed data */
439 err = inflateSync(&d_stream); /* but skip the damaged part */
440 CHECK_ERR(err, "inflateSync");
441
442 err = inflate(&d_stream, Z_FINISH);
443 if (err != Z_DATA_ERROR) {
444 fprintf(stderr, "inflate should report DATA_ERROR\n");
445 /* Because of incorrect adler32 */
446 exit(1);
447 }
448 err = inflateEnd(&d_stream);
449 CHECK_ERR(err, "inflateEnd");
450
451
--- compat/zlib/test/example.c
+++ compat/zlib/test/example.c
@@ -438,13 +438,12 @@
438 d_stream.avail_in = (uInt)comprLen-2; /* read all compressed data */
439 err = inflateSync(&d_stream); /* but skip the damaged part */
440 CHECK_ERR(err, "inflateSync");
441
442 err = inflate(&d_stream, Z_FINISH);
443 if (err != Z_STREAM_END) {
444 fprintf(stderr, "inflate should report Z_STREAM_END\n");
 
445 exit(1);
446 }
447 err = inflateEnd(&d_stream);
448 CHECK_ERR(err, "inflateEnd");
449
450
--- compat/zlib/treebuild.xml
+++ compat/zlib/treebuild.xml
@@ -1,8 +1,8 @@
11
<?xml version="1.0" ?>
2
-<package name="zlib" version="1.2.11">
3
- <library name="zlib" dlversion="1.2.11" dlname="z">
2
+<package name="zlib" version="1.2.12">
3
+ <library name="zlib" dlversion="1.2.12" dlname="z">
44
<property name="description"> zip compression library </property>
55
<property name="include-target-dir" value="$(@PACKAGE/install-includedir)" />
66
77
<!-- fixme: not implemented yet -->
88
<property name="compiler/c/inline" value="yes" />
99
--- compat/zlib/treebuild.xml
+++ compat/zlib/treebuild.xml
@@ -1,8 +1,8 @@
1 <?xml version="1.0" ?>
2 <package name="zlib" version="1.2.11">
3 <library name="zlib" dlversion="1.2.11" dlname="z">
4 <property name="description"> zip compression library </property>
5 <property name="include-target-dir" value="$(@PACKAGE/install-includedir)" />
6
7 <!-- fixme: not implemented yet -->
8 <property name="compiler/c/inline" value="yes" />
9
--- compat/zlib/treebuild.xml
+++ compat/zlib/treebuild.xml
@@ -1,8 +1,8 @@
1 <?xml version="1.0" ?>
2 <package name="zlib" version="1.2.12">
3 <library name="zlib" dlversion="1.2.12" dlname="z">
4 <property name="description"> zip compression library </property>
5 <property name="include-target-dir" value="$(@PACKAGE/install-includedir)" />
6
7 <!-- fixme: not implemented yet -->
8 <property name="compiler/c/inline" value="yes" />
9
--- compat/zlib/trees.c
+++ compat/zlib/trees.c
@@ -1,7 +1,7 @@
11
/* trees.c -- output deflated data using Huffman coding
2
- * Copyright (C) 1995-2017 Jean-loup Gailly
2
+ * Copyright (C) 1995-2021 Jean-loup Gailly
33
* detect_data_type() function provided freely by Cosmin Truta, 2006
44
* For conditions of distribution and use, see copyright notice in zlib.h
55
*/
66
77
/*
@@ -147,11 +147,11 @@
147147
local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
148148
int blcodes));
149149
local void compress_block OF((deflate_state *s, const ct_data *ltree,
150150
const ct_data *dtree));
151151
local int detect_data_type OF((deflate_state *s));
152
-local unsigned bi_reverse OF((unsigned value, int length));
152
+local unsigned bi_reverse OF((unsigned code, int len));
153153
local void bi_windup OF((deflate_state *s));
154154
local void bi_flush OF((deflate_state *s));
155155
156156
#ifdef GEN_TREES_H
157157
local void gen_trees_header OF((void));
@@ -414,11 +414,11 @@
414414
for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0;
415415
for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
416416
417417
s->dyn_ltree[END_BLOCK].Freq = 1;
418418
s->opt_len = s->static_len = 0L;
419
- s->last_lit = s->matches = 0;
419
+ s->sym_next = s->matches = 0;
420420
}
421421
422422
#define SMALLEST 1
423423
/* Index within the heap array of least frequent node in the Huffman tree */
424424
@@ -868,11 +868,12 @@
868868
{
869869
send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */
870870
bi_windup(s); /* align on byte boundary */
871871
put_short(s, (ush)stored_len);
872872
put_short(s, (ush)~stored_len);
873
- zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len);
873
+ if (stored_len)
874
+ zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len);
874875
s->pending += stored_len;
875876
#ifdef ZLIB_DEBUG
876877
s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
877878
s->compressed_len += (stored_len + 4) << 3;
878879
s->bits_sent += 2*16;
@@ -945,11 +946,11 @@
945946
opt_lenb = (s->opt_len+3+7)>>3;
946947
static_lenb = (s->static_len+3+7)>>3;
947948
948949
Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
949950
opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
950
- s->last_lit));
951
+ s->sym_next / 3));
951952
952953
if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
953954
954955
} else {
955956
Assert(buf != (char*)0, "lost buf");
@@ -1014,12 +1015,13 @@
10141015
int ZLIB_INTERNAL _tr_tally (s, dist, lc)
10151016
deflate_state *s;
10161017
unsigned dist; /* distance of matched string */
10171018
unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
10181019
{
1019
- s->d_buf[s->last_lit] = (ush)dist;
1020
- s->l_buf[s->last_lit++] = (uch)lc;
1020
+ s->sym_buf[s->sym_next++] = dist;
1021
+ s->sym_buf[s->sym_next++] = dist >> 8;
1022
+ s->sym_buf[s->sym_next++] = lc;
10211023
if (dist == 0) {
10221024
/* lc is the unmatched char */
10231025
s->dyn_ltree[lc].Freq++;
10241026
} else {
10251027
s->matches++;
@@ -1030,34 +1032,11 @@
10301032
(ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match");
10311033
10321034
s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
10331035
s->dyn_dtree[d_code(dist)].Freq++;
10341036
}
1035
-
1036
-#ifdef TRUNCATE_BLOCK
1037
- /* Try to guess if it is profitable to stop the current block here */
1038
- if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
1039
- /* Compute an upper bound for the compressed length */
1040
- ulg out_length = (ulg)s->last_lit*8L;
1041
- ulg in_length = (ulg)((long)s->strstart - s->block_start);
1042
- int dcode;
1043
- for (dcode = 0; dcode < D_CODES; dcode++) {
1044
- out_length += (ulg)s->dyn_dtree[dcode].Freq *
1045
- (5L+extra_dbits[dcode]);
1046
- }
1047
- out_length >>= 3;
1048
- Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
1049
- s->last_lit, in_length, out_length,
1050
- 100L - out_length*100L/in_length));
1051
- if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
1052
- }
1053
-#endif
1054
- return (s->last_lit == s->lit_bufsize-1);
1055
- /* We avoid equality with lit_bufsize because of wraparound at 64K
1056
- * on 16 bit machines and because stored blocks are restricted to
1057
- * 64K-1 bytes.
1058
- */
1037
+ return (s->sym_next == s->sym_end);
10591038
}
10601039
10611040
/* ===========================================================================
10621041
* Send the block data compressed using the given Huffman trees
10631042
*/
@@ -1066,17 +1045,18 @@
10661045
const ct_data *ltree; /* literal tree */
10671046
const ct_data *dtree; /* distance tree */
10681047
{
10691048
unsigned dist; /* distance of matched string */
10701049
int lc; /* match length or unmatched char (if dist == 0) */
1071
- unsigned lx = 0; /* running index in l_buf */
1050
+ unsigned sx = 0; /* running index in sym_buf */
10721051
unsigned code; /* the code to send */
10731052
int extra; /* number of extra bits to send */
10741053
1075
- if (s->last_lit != 0) do {
1076
- dist = s->d_buf[lx];
1077
- lc = s->l_buf[lx++];
1054
+ if (s->sym_next != 0) do {
1055
+ dist = s->sym_buf[sx++] & 0xff;
1056
+ dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8;
1057
+ lc = s->sym_buf[sx++];
10781058
if (dist == 0) {
10791059
send_code(s, lc, ltree); /* send a literal byte */
10801060
Tracecv(isgraph(lc), (stderr," '%c' ", lc));
10811061
} else {
10821062
/* Here, lc is the match length - MIN_MATCH */
@@ -1097,56 +1077,55 @@
10971077
dist -= (unsigned)base_dist[code];
10981078
send_bits(s, dist, extra); /* send the extra distance bits */
10991079
}
11001080
} /* literal or match pair ? */
11011081
1102
- /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
1103
- Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
1104
- "pendingBuf overflow");
1082
+ /* Check that the overlay between pending_buf and sym_buf is ok: */
1083
+ Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow");
11051084
1106
- } while (lx < s->last_lit);
1085
+ } while (sx < s->sym_next);
11071086
11081087
send_code(s, END_BLOCK, ltree);
11091088
}
11101089
11111090
/* ===========================================================================
11121091
* Check if the data type is TEXT or BINARY, using the following algorithm:
11131092
* - TEXT if the two conditions below are satisfied:
11141093
* a) There are no non-portable control characters belonging to the
1115
- * "black list" (0..6, 14..25, 28..31).
1094
+ * "block list" (0..6, 14..25, 28..31).
11161095
* b) There is at least one printable character belonging to the
1117
- * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
1096
+ * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
11181097
* - BINARY otherwise.
11191098
* - The following partially-portable control characters form a
11201099
* "gray list" that is ignored in this detection algorithm:
11211100
* (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
11221101
* IN assertion: the fields Freq of dyn_ltree are set.
11231102
*/
11241103
local int detect_data_type(s)
11251104
deflate_state *s;
11261105
{
1127
- /* black_mask is the bit mask of black-listed bytes
1106
+ /* block_mask is the bit mask of block-listed bytes
11281107
* set bits 0..6, 14..25, and 28..31
11291108
* 0xf3ffc07f = binary 11110011111111111100000001111111
11301109
*/
1131
- unsigned long black_mask = 0xf3ffc07fUL;
1110
+ unsigned long block_mask = 0xf3ffc07fUL;
11321111
int n;
11331112
1134
- /* Check for non-textual ("black-listed") bytes. */
1135
- for (n = 0; n <= 31; n++, black_mask >>= 1)
1136
- if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0))
1113
+ /* Check for non-textual ("block-listed") bytes. */
1114
+ for (n = 0; n <= 31; n++, block_mask >>= 1)
1115
+ if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0))
11371116
return Z_BINARY;
11381117
1139
- /* Check for textual ("white-listed") bytes. */
1118
+ /* Check for textual ("allow-listed") bytes. */
11401119
if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0
11411120
|| s->dyn_ltree[13].Freq != 0)
11421121
return Z_TEXT;
11431122
for (n = 32; n < LITERALS; n++)
11441123
if (s->dyn_ltree[n].Freq != 0)
11451124
return Z_TEXT;
11461125
1147
- /* There are no "black-listed" or "white-listed" bytes:
1126
+ /* There are no "block-listed" or "allow-listed" bytes:
11481127
* this stream either is empty or has tolerated ("gray-listed") bytes only.
11491128
*/
11501129
return Z_BINARY;
11511130
}
11521131
11531132
--- compat/zlib/trees.c
+++ compat/zlib/trees.c
@@ -1,7 +1,7 @@
1 /* trees.c -- output deflated data using Huffman coding
2 * Copyright (C) 1995-2017 Jean-loup Gailly
3 * detect_data_type() function provided freely by Cosmin Truta, 2006
4 * For conditions of distribution and use, see copyright notice in zlib.h
5 */
6
7 /*
@@ -147,11 +147,11 @@
147 local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
148 int blcodes));
149 local void compress_block OF((deflate_state *s, const ct_data *ltree,
150 const ct_data *dtree));
151 local int detect_data_type OF((deflate_state *s));
152 local unsigned bi_reverse OF((unsigned value, int length));
153 local void bi_windup OF((deflate_state *s));
154 local void bi_flush OF((deflate_state *s));
155
156 #ifdef GEN_TREES_H
157 local void gen_trees_header OF((void));
@@ -414,11 +414,11 @@
414 for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0;
415 for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
416
417 s->dyn_ltree[END_BLOCK].Freq = 1;
418 s->opt_len = s->static_len = 0L;
419 s->last_lit = s->matches = 0;
420 }
421
422 #define SMALLEST 1
423 /* Index within the heap array of least frequent node in the Huffman tree */
424
@@ -868,11 +868,12 @@
868 {
869 send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */
870 bi_windup(s); /* align on byte boundary */
871 put_short(s, (ush)stored_len);
872 put_short(s, (ush)~stored_len);
873 zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len);
 
874 s->pending += stored_len;
875 #ifdef ZLIB_DEBUG
876 s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
877 s->compressed_len += (stored_len + 4) << 3;
878 s->bits_sent += 2*16;
@@ -945,11 +946,11 @@
945 opt_lenb = (s->opt_len+3+7)>>3;
946 static_lenb = (s->static_len+3+7)>>3;
947
948 Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
949 opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
950 s->last_lit));
951
952 if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
953
954 } else {
955 Assert(buf != (char*)0, "lost buf");
@@ -1014,12 +1015,13 @@
1014 int ZLIB_INTERNAL _tr_tally (s, dist, lc)
1015 deflate_state *s;
1016 unsigned dist; /* distance of matched string */
1017 unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
1018 {
1019 s->d_buf[s->last_lit] = (ush)dist;
1020 s->l_buf[s->last_lit++] = (uch)lc;
 
1021 if (dist == 0) {
1022 /* lc is the unmatched char */
1023 s->dyn_ltree[lc].Freq++;
1024 } else {
1025 s->matches++;
@@ -1030,34 +1032,11 @@
1030 (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match");
1031
1032 s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
1033 s->dyn_dtree[d_code(dist)].Freq++;
1034 }
1035
1036 #ifdef TRUNCATE_BLOCK
1037 /* Try to guess if it is profitable to stop the current block here */
1038 if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
1039 /* Compute an upper bound for the compressed length */
1040 ulg out_length = (ulg)s->last_lit*8L;
1041 ulg in_length = (ulg)((long)s->strstart - s->block_start);
1042 int dcode;
1043 for (dcode = 0; dcode < D_CODES; dcode++) {
1044 out_length += (ulg)s->dyn_dtree[dcode].Freq *
1045 (5L+extra_dbits[dcode]);
1046 }
1047 out_length >>= 3;
1048 Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
1049 s->last_lit, in_length, out_length,
1050 100L - out_length*100L/in_length));
1051 if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
1052 }
1053 #endif
1054 return (s->last_lit == s->lit_bufsize-1);
1055 /* We avoid equality with lit_bufsize because of wraparound at 64K
1056 * on 16 bit machines and because stored blocks are restricted to
1057 * 64K-1 bytes.
1058 */
1059 }
1060
1061 /* ===========================================================================
1062 * Send the block data compressed using the given Huffman trees
1063 */
@@ -1066,17 +1045,18 @@
1066 const ct_data *ltree; /* literal tree */
1067 const ct_data *dtree; /* distance tree */
1068 {
1069 unsigned dist; /* distance of matched string */
1070 int lc; /* match length or unmatched char (if dist == 0) */
1071 unsigned lx = 0; /* running index in l_buf */
1072 unsigned code; /* the code to send */
1073 int extra; /* number of extra bits to send */
1074
1075 if (s->last_lit != 0) do {
1076 dist = s->d_buf[lx];
1077 lc = s->l_buf[lx++];
 
1078 if (dist == 0) {
1079 send_code(s, lc, ltree); /* send a literal byte */
1080 Tracecv(isgraph(lc), (stderr," '%c' ", lc));
1081 } else {
1082 /* Here, lc is the match length - MIN_MATCH */
@@ -1097,56 +1077,55 @@
1097 dist -= (unsigned)base_dist[code];
1098 send_bits(s, dist, extra); /* send the extra distance bits */
1099 }
1100 } /* literal or match pair ? */
1101
1102 /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
1103 Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
1104 "pendingBuf overflow");
1105
1106 } while (lx < s->last_lit);
1107
1108 send_code(s, END_BLOCK, ltree);
1109 }
1110
1111 /* ===========================================================================
1112 * Check if the data type is TEXT or BINARY, using the following algorithm:
1113 * - TEXT if the two conditions below are satisfied:
1114 * a) There are no non-portable control characters belonging to the
1115 * "black list" (0..6, 14..25, 28..31).
1116 * b) There is at least one printable character belonging to the
1117 * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
1118 * - BINARY otherwise.
1119 * - The following partially-portable control characters form a
1120 * "gray list" that is ignored in this detection algorithm:
1121 * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
1122 * IN assertion: the fields Freq of dyn_ltree are set.
1123 */
1124 local int detect_data_type(s)
1125 deflate_state *s;
1126 {
1127 /* black_mask is the bit mask of black-listed bytes
1128 * set bits 0..6, 14..25, and 28..31
1129 * 0xf3ffc07f = binary 11110011111111111100000001111111
1130 */
1131 unsigned long black_mask = 0xf3ffc07fUL;
1132 int n;
1133
1134 /* Check for non-textual ("black-listed") bytes. */
1135 for (n = 0; n <= 31; n++, black_mask >>= 1)
1136 if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0))
1137 return Z_BINARY;
1138
1139 /* Check for textual ("white-listed") bytes. */
1140 if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0
1141 || s->dyn_ltree[13].Freq != 0)
1142 return Z_TEXT;
1143 for (n = 32; n < LITERALS; n++)
1144 if (s->dyn_ltree[n].Freq != 0)
1145 return Z_TEXT;
1146
1147 /* There are no "black-listed" or "white-listed" bytes:
1148 * this stream either is empty or has tolerated ("gray-listed") bytes only.
1149 */
1150 return Z_BINARY;
1151 }
1152
1153
--- compat/zlib/trees.c
+++ compat/zlib/trees.c
@@ -1,7 +1,7 @@
1 /* trees.c -- output deflated data using Huffman coding
2 * Copyright (C) 1995-2021 Jean-loup Gailly
3 * detect_data_type() function provided freely by Cosmin Truta, 2006
4 * For conditions of distribution and use, see copyright notice in zlib.h
5 */
6
7 /*
@@ -147,11 +147,11 @@
147 local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
148 int blcodes));
149 local void compress_block OF((deflate_state *s, const ct_data *ltree,
150 const ct_data *dtree));
151 local int detect_data_type OF((deflate_state *s));
152 local unsigned bi_reverse OF((unsigned code, int len));
153 local void bi_windup OF((deflate_state *s));
154 local void bi_flush OF((deflate_state *s));
155
156 #ifdef GEN_TREES_H
157 local void gen_trees_header OF((void));
@@ -414,11 +414,11 @@
414 for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0;
415 for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
416
417 s->dyn_ltree[END_BLOCK].Freq = 1;
418 s->opt_len = s->static_len = 0L;
419 s->sym_next = s->matches = 0;
420 }
421
422 #define SMALLEST 1
423 /* Index within the heap array of least frequent node in the Huffman tree */
424
@@ -868,11 +868,12 @@
868 {
869 send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */
870 bi_windup(s); /* align on byte boundary */
871 put_short(s, (ush)stored_len);
872 put_short(s, (ush)~stored_len);
873 if (stored_len)
874 zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len);
875 s->pending += stored_len;
876 #ifdef ZLIB_DEBUG
877 s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
878 s->compressed_len += (stored_len + 4) << 3;
879 s->bits_sent += 2*16;
@@ -945,11 +946,11 @@
946 opt_lenb = (s->opt_len+3+7)>>3;
947 static_lenb = (s->static_len+3+7)>>3;
948
949 Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
950 opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
951 s->sym_next / 3));
952
953 if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
954
955 } else {
956 Assert(buf != (char*)0, "lost buf");
@@ -1014,12 +1015,13 @@
1015 int ZLIB_INTERNAL _tr_tally (s, dist, lc)
1016 deflate_state *s;
1017 unsigned dist; /* distance of matched string */
1018 unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
1019 {
1020 s->sym_buf[s->sym_next++] = dist;
1021 s->sym_buf[s->sym_next++] = dist >> 8;
1022 s->sym_buf[s->sym_next++] = lc;
1023 if (dist == 0) {
1024 /* lc is the unmatched char */
1025 s->dyn_ltree[lc].Freq++;
1026 } else {
1027 s->matches++;
@@ -1030,34 +1032,11 @@
1032 (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match");
1033
1034 s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
1035 s->dyn_dtree[d_code(dist)].Freq++;
1036 }
1037 return (s->sym_next == s->sym_end);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1038 }
1039
1040 /* ===========================================================================
1041 * Send the block data compressed using the given Huffman trees
1042 */
@@ -1066,17 +1045,18 @@
1045 const ct_data *ltree; /* literal tree */
1046 const ct_data *dtree; /* distance tree */
1047 {
1048 unsigned dist; /* distance of matched string */
1049 int lc; /* match length or unmatched char (if dist == 0) */
1050 unsigned sx = 0; /* running index in sym_buf */
1051 unsigned code; /* the code to send */
1052 int extra; /* number of extra bits to send */
1053
1054 if (s->sym_next != 0) do {
1055 dist = s->sym_buf[sx++] & 0xff;
1056 dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8;
1057 lc = s->sym_buf[sx++];
1058 if (dist == 0) {
1059 send_code(s, lc, ltree); /* send a literal byte */
1060 Tracecv(isgraph(lc), (stderr," '%c' ", lc));
1061 } else {
1062 /* Here, lc is the match length - MIN_MATCH */
@@ -1097,56 +1077,55 @@
1077 dist -= (unsigned)base_dist[code];
1078 send_bits(s, dist, extra); /* send the extra distance bits */
1079 }
1080 } /* literal or match pair ? */
1081
1082 /* Check that the overlay between pending_buf and sym_buf is ok: */
1083 Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow");
 
1084
1085 } while (sx < s->sym_next);
1086
1087 send_code(s, END_BLOCK, ltree);
1088 }
1089
1090 /* ===========================================================================
1091 * Check if the data type is TEXT or BINARY, using the following algorithm:
1092 * - TEXT if the two conditions below are satisfied:
1093 * a) There are no non-portable control characters belonging to the
1094 * "block list" (0..6, 14..25, 28..31).
1095 * b) There is at least one printable character belonging to the
1096 * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
1097 * - BINARY otherwise.
1098 * - The following partially-portable control characters form a
1099 * "gray list" that is ignored in this detection algorithm:
1100 * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
1101 * IN assertion: the fields Freq of dyn_ltree are set.
1102 */
1103 local int detect_data_type(s)
1104 deflate_state *s;
1105 {
1106 /* block_mask is the bit mask of block-listed bytes
1107 * set bits 0..6, 14..25, and 28..31
1108 * 0xf3ffc07f = binary 11110011111111111100000001111111
1109 */
1110 unsigned long block_mask = 0xf3ffc07fUL;
1111 int n;
1112
1113 /* Check for non-textual ("block-listed") bytes. */
1114 for (n = 0; n <= 31; n++, block_mask >>= 1)
1115 if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0))
1116 return Z_BINARY;
1117
1118 /* Check for textual ("allow-listed") bytes. */
1119 if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0
1120 || s->dyn_ltree[13].Freq != 0)
1121 return Z_TEXT;
1122 for (n = 32; n < LITERALS; n++)
1123 if (s->dyn_ltree[n].Freq != 0)
1124 return Z_TEXT;
1125
1126 /* There are no "block-listed" or "allow-listed" bytes:
1127 * this stream either is empty or has tolerated ("gray-listed") bytes only.
1128 */
1129 return Z_BINARY;
1130 }
1131
1132
--- compat/zlib/win32/Makefile.bor
+++ compat/zlib/win32/Makefile.bor
@@ -1,11 +1,10 @@
11
# Makefile for zlib
22
# Borland C++ for Win32
33
#
44
# Usage:
55
# make -f win32/Makefile.bor
6
-# make -f win32/Makefile.bor LOCAL_ZLIB=-DASMV OBJA=match.obj OBJPA=+match.obj
76
87
# ------------ Borland C++ ------------
98
109
# Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7)
1110
# should be added to the environment via "set LOCAL_ZLIB=-DFOO" or
1211
--- compat/zlib/win32/Makefile.bor
+++ compat/zlib/win32/Makefile.bor
@@ -1,11 +1,10 @@
1 # Makefile for zlib
2 # Borland C++ for Win32
3 #
4 # Usage:
5 # make -f win32/Makefile.bor
6 # make -f win32/Makefile.bor LOCAL_ZLIB=-DASMV OBJA=match.obj OBJPA=+match.obj
7
8 # ------------ Borland C++ ------------
9
10 # Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7)
11 # should be added to the environment via "set LOCAL_ZLIB=-DFOO" or
12
--- compat/zlib/win32/Makefile.bor
+++ compat/zlib/win32/Makefile.bor
@@ -1,11 +1,10 @@
1 # Makefile for zlib
2 # Borland C++ for Win32
3 #
4 # Usage:
5 # make -f win32/Makefile.bor
 
6
7 # ------------ Borland C++ ------------
8
9 # Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7)
10 # should be added to the environment via "set LOCAL_ZLIB=-DFOO" or
11
--- compat/zlib/win32/Makefile.gcc
+++ compat/zlib/win32/Makefile.gcc
@@ -9,14 +9,10 @@
99
1010
# To compile, or to compile and test, type from the top level zlib directory:
1111
#
1212
# make -fwin32/Makefile.gcc; make test testdll -fwin32/Makefile.gcc
1313
#
14
-# To use the asm code, type:
15
-# cp contrib/asm?86/match.S ./match.S
16
-# make LOC=-DASMV OBJA=match.o -fwin32/Makefile.gcc
17
-#
1814
# To install libz.a, zconf.h and zlib.h in the system directories, type:
1915
#
2016
# make install -fwin32/Makefile.gcc
2117
#
2218
# BINARY_PATH, INCLUDE_PATH and LIBRARY_PATH must be set.
@@ -36,11 +32,10 @@
3632
#
3733
# Set to 1 if shared object needs to be installed
3834
#
3935
SHARED_MODE=0
4036
41
-#LOC = -DASMV
4237
#LOC = -DZLIB_DEBUG -g
4338
4439
PREFIX =
4540
CC = $(PREFIX)gcc
4641
CFLAGS = $(LOC) -O3 -Wall
4742
--- compat/zlib/win32/Makefile.gcc
+++ compat/zlib/win32/Makefile.gcc
@@ -9,14 +9,10 @@
9
10 # To compile, or to compile and test, type from the top level zlib directory:
11 #
12 # make -fwin32/Makefile.gcc; make test testdll -fwin32/Makefile.gcc
13 #
14 # To use the asm code, type:
15 # cp contrib/asm?86/match.S ./match.S
16 # make LOC=-DASMV OBJA=match.o -fwin32/Makefile.gcc
17 #
18 # To install libz.a, zconf.h and zlib.h in the system directories, type:
19 #
20 # make install -fwin32/Makefile.gcc
21 #
22 # BINARY_PATH, INCLUDE_PATH and LIBRARY_PATH must be set.
@@ -36,11 +32,10 @@
36 #
37 # Set to 1 if shared object needs to be installed
38 #
39 SHARED_MODE=0
40
41 #LOC = -DASMV
42 #LOC = -DZLIB_DEBUG -g
43
44 PREFIX =
45 CC = $(PREFIX)gcc
46 CFLAGS = $(LOC) -O3 -Wall
47
--- compat/zlib/win32/Makefile.gcc
+++ compat/zlib/win32/Makefile.gcc
@@ -9,14 +9,10 @@
9
10 # To compile, or to compile and test, type from the top level zlib directory:
11 #
12 # make -fwin32/Makefile.gcc; make test testdll -fwin32/Makefile.gcc
13 #
 
 
 
 
14 # To install libz.a, zconf.h and zlib.h in the system directories, type:
15 #
16 # make install -fwin32/Makefile.gcc
17 #
18 # BINARY_PATH, INCLUDE_PATH and LIBRARY_PATH must be set.
@@ -36,11 +32,10 @@
32 #
33 # Set to 1 if shared object needs to be installed
34 #
35 SHARED_MODE=0
36
 
37 #LOC = -DZLIB_DEBUG -g
38
39 PREFIX =
40 CC = $(PREFIX)gcc
41 CFLAGS = $(LOC) -O3 -Wall
42
--- compat/zlib/win32/Makefile.msc
+++ compat/zlib/win32/Makefile.msc
@@ -2,14 +2,10 @@
22
# zlib is copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
33
#
44
# Usage:
55
# nmake -f win32/Makefile.msc (standard build)
66
# nmake -f win32/Makefile.msc LOC=-DFOO (nonstandard build)
7
-# nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" \
8
-# OBJA="inffas32.obj match686.obj" (use ASM code, x86)
9
-# nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." \
10
-# OBJA="inffasx64.obj gvmat64.obj inffas8664.obj" (use ASM code, x64)
117
128
# The toplevel directory of the source tree.
139
#
1410
TOP = .
1511
1612
--- compat/zlib/win32/Makefile.msc
+++ compat/zlib/win32/Makefile.msc
@@ -2,14 +2,10 @@
2 # zlib is copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
3 #
4 # Usage:
5 # nmake -f win32/Makefile.msc (standard build)
6 # nmake -f win32/Makefile.msc LOC=-DFOO (nonstandard build)
7 # nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" \
8 # OBJA="inffas32.obj match686.obj" (use ASM code, x86)
9 # nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." \
10 # OBJA="inffasx64.obj gvmat64.obj inffas8664.obj" (use ASM code, x64)
11
12 # The toplevel directory of the source tree.
13 #
14 TOP = .
15
16
--- compat/zlib/win32/Makefile.msc
+++ compat/zlib/win32/Makefile.msc
@@ -2,14 +2,10 @@
2 # zlib is copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
3 #
4 # Usage:
5 # nmake -f win32/Makefile.msc (standard build)
6 # nmake -f win32/Makefile.msc LOC=-DFOO (nonstandard build)
 
 
 
 
7
8 # The toplevel directory of the source tree.
9 #
10 TOP = .
11
12
--- compat/zlib/win32/README-WIN32.txt
+++ compat/zlib/win32/README-WIN32.txt
@@ -1,8 +1,8 @@
11
ZLIB DATA COMPRESSION LIBRARY
22
3
-zlib 1.2.11 is a general purpose data compression library. All the code is
3
+zlib 1.2.12 is a general purpose data compression library. All the code is
44
thread safe. The data format used by the zlib library is described by RFCs
55
(Request for Comments) 1950 to 1952 in the files
66
http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format)
77
and rfc1952.txt (gzip format).
88
@@ -20,11 +20,11 @@
2020
before asking for help.
2121
2222
2323
Manifest:
2424
25
-The package zlib-1.2.11-win32-x86.zip will contain the following files:
25
+The package zlib-1.2.12-win32-x86.zip will contain the following files:
2626
2727
README-WIN32.txt This document
2828
ChangeLog Changes since previous zlib packages
2929
DLL_FAQ.txt Frequently asked questions about zlib1.dll
3030
zlib.3.pdf Documentation of this library in Adobe Acrobat format
3131
--- compat/zlib/win32/README-WIN32.txt
+++ compat/zlib/win32/README-WIN32.txt
@@ -1,8 +1,8 @@
1 ZLIB DATA COMPRESSION LIBRARY
2
3 zlib 1.2.11 is a general purpose data compression library. All the code is
4 thread safe. The data format used by the zlib library is described by RFCs
5 (Request for Comments) 1950 to 1952 in the files
6 http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format)
7 and rfc1952.txt (gzip format).
8
@@ -20,11 +20,11 @@
20 before asking for help.
21
22
23 Manifest:
24
25 The package zlib-1.2.11-win32-x86.zip will contain the following files:
26
27 README-WIN32.txt This document
28 ChangeLog Changes since previous zlib packages
29 DLL_FAQ.txt Frequently asked questions about zlib1.dll
30 zlib.3.pdf Documentation of this library in Adobe Acrobat format
31
--- compat/zlib/win32/README-WIN32.txt
+++ compat/zlib/win32/README-WIN32.txt
@@ -1,8 +1,8 @@
1 ZLIB DATA COMPRESSION LIBRARY
2
3 zlib 1.2.12 is a general purpose data compression library. All the code is
4 thread safe. The data format used by the zlib library is described by RFCs
5 (Request for Comments) 1950 to 1952 in the files
6 http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format)
7 and rfc1952.txt (gzip format).
8
@@ -20,11 +20,11 @@
20 before asking for help.
21
22
23 Manifest:
24
25 The package zlib-1.2.12-win32-x86.zip will contain the following files:
26
27 README-WIN32.txt This document
28 ChangeLog Changes since previous zlib packages
29 DLL_FAQ.txt Frequently asked questions about zlib1.dll
30 zlib.3.pdf Documentation of this library in Adobe Acrobat format
31
--- compat/zlib/win32/zlib.def
+++ compat/zlib/win32/zlib.def
@@ -67,17 +67,20 @@
6767
gzseek64
6868
gztell64
6969
gzoffset64
7070
adler32_combine64
7171
crc32_combine64
72
+ crc32_combine_gen64
7273
; checksum functions
7374
adler32
7475
adler32_z
7576
crc32
7677
crc32_z
7778
adler32_combine
7879
crc32_combine
80
+ crc32_combine_gen
81
+ crc32_combine_op
7982
; various hacks, don't look :)
8083
deflateInit_
8184
deflateInit2_
8285
inflateInit_
8386
inflateInit2_
8487
--- compat/zlib/win32/zlib.def
+++ compat/zlib/win32/zlib.def
@@ -67,17 +67,20 @@
67 gzseek64
68 gztell64
69 gzoffset64
70 adler32_combine64
71 crc32_combine64
 
72 ; checksum functions
73 adler32
74 adler32_z
75 crc32
76 crc32_z
77 adler32_combine
78 crc32_combine
 
 
79 ; various hacks, don't look :)
80 deflateInit_
81 deflateInit2_
82 inflateInit_
83 inflateInit2_
84
--- compat/zlib/win32/zlib.def
+++ compat/zlib/win32/zlib.def
@@ -67,17 +67,20 @@
67 gzseek64
68 gztell64
69 gzoffset64
70 adler32_combine64
71 crc32_combine64
72 crc32_combine_gen64
73 ; checksum functions
74 adler32
75 adler32_z
76 crc32
77 crc32_z
78 adler32_combine
79 crc32_combine
80 crc32_combine_gen
81 crc32_combine_op
82 ; various hacks, don't look :)
83 deflateInit_
84 deflateInit2_
85 inflateInit_
86 inflateInit2_
87
--- compat/zlib/zconf.h
+++ compat/zlib/zconf.h
@@ -429,15 +429,15 @@
429429
typedef Z_U4 z_crc_t;
430430
#else
431431
typedef unsigned long z_crc_t;
432432
#endif
433433
434
-#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */
434
+#ifdef HAVE_UNISTD_H /* was set to #if 1 by ./configure */
435435
# define Z_HAVE_UNISTD_H
436436
#endif
437437
438
-#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */
438
+#if 1 /* was set to #if 1 by ./configure */
439439
# define Z_HAVE_STDARG_H
440440
#endif
441441
442442
#ifdef STDC
443443
# ifndef Z_SOLO
444444
--- compat/zlib/zconf.h
+++ compat/zlib/zconf.h
@@ -429,15 +429,15 @@
429 typedef Z_U4 z_crc_t;
430 #else
431 typedef unsigned long z_crc_t;
432 #endif
433
434 #ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */
435 # define Z_HAVE_UNISTD_H
436 #endif
437
438 #ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */
439 # define Z_HAVE_STDARG_H
440 #endif
441
442 #ifdef STDC
443 # ifndef Z_SOLO
444
--- compat/zlib/zconf.h
+++ compat/zlib/zconf.h
@@ -429,15 +429,15 @@
429 typedef Z_U4 z_crc_t;
430 #else
431 typedef unsigned long z_crc_t;
432 #endif
433
434 #ifdef HAVE_UNISTD_H /* was set to #if 1 by ./configure */
435 # define Z_HAVE_UNISTD_H
436 #endif
437
438 #if 1 /* was set to #if 1 by ./configure */
439 # define Z_HAVE_STDARG_H
440 #endif
441
442 #ifdef STDC
443 # ifndef Z_SOLO
444
--- compat/zlib/zlib.3
+++ compat/zlib/zlib.3
@@ -1,6 +1,6 @@
1
-.TH ZLIB 3 "15 Jan 2017"
1
+.TH ZLIB 3 "27 Mar 2022"
22
.SH NAME
33
zlib \- compression/decompression library
44
.SH SYNOPSIS
55
[see
66
.I zlib.h
@@ -103,13 +103,13 @@
103103
.LP
104104
before asking for help.
105105
Send questions and/or comments to [email protected],
106106
or (for the Windows DLL version) to Gilles Vollant ([email protected]).
107107
.SH AUTHORS AND LICENSE
108
-Version 1.2.11
108
+Version 1.2.12
109109
.LP
110
-Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
110
+Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
111111
.LP
112112
This software is provided 'as-is', without any express or implied
113113
warranty. In no event will the authors be held liable for any damages
114114
arising from the use of this software.
115115
.LP
116116
--- compat/zlib/zlib.3
+++ compat/zlib/zlib.3
@@ -1,6 +1,6 @@
1 .TH ZLIB 3 "15 Jan 2017"
2 .SH NAME
3 zlib \- compression/decompression library
4 .SH SYNOPSIS
5 [see
6 .I zlib.h
@@ -103,13 +103,13 @@
103 .LP
104 before asking for help.
105 Send questions and/or comments to [email protected],
106 or (for the Windows DLL version) to Gilles Vollant ([email protected]).
107 .SH AUTHORS AND LICENSE
108 Version 1.2.11
109 .LP
110 Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
111 .LP
112 This software is provided 'as-is', without any express or implied
113 warranty. In no event will the authors be held liable for any damages
114 arising from the use of this software.
115 .LP
116
--- compat/zlib/zlib.3
+++ compat/zlib/zlib.3
@@ -1,6 +1,6 @@
1 .TH ZLIB 3 "27 Mar 2022"
2 .SH NAME
3 zlib \- compression/decompression library
4 .SH SYNOPSIS
5 [see
6 .I zlib.h
@@ -103,13 +103,13 @@
103 .LP
104 before asking for help.
105 Send questions and/or comments to [email protected],
106 or (for the Windows DLL version) to Gilles Vollant ([email protected]).
107 .SH AUTHORS AND LICENSE
108 Version 1.2.12
109 .LP
110 Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
111 .LP
112 This software is provided 'as-is', without any express or implied
113 warranty. In no event will the authors be held liable for any damages
114 arising from the use of this software.
115 .LP
116
--- compat/zlib/zlib.3.pdf
+++ compat/zlib/zlib.3.pdf
cannot compute difference between binary files
11
--- compat/zlib/zlib.3.pdf
+++ compat/zlib/zlib.3.pdf
0 annot compute difference between binary files
1
--- compat/zlib/zlib.3.pdf
+++ compat/zlib/zlib.3.pdf
0 annot compute difference between binary files
1
+123 -100
--- compat/zlib/zlib.h
+++ compat/zlib/zlib.h
@@ -1,9 +1,9 @@
11
/* zlib.h -- interface of the 'zlib' general purpose compression library
2
- version 1.2.11, January 15th, 2017
2
+ version 1.2.12, March 11th, 2022
33
4
- Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
4
+ Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
55
66
This software is provided 'as-is', without any express or implied
77
warranty. In no event will the authors be held liable for any damages
88
arising from the use of this software.
99
@@ -35,15 +35,15 @@
3535
3636
#ifdef __cplusplus
3737
extern "C" {
3838
#endif
3939
40
-#define ZLIB_VERSION "1.2.11"
41
-#define ZLIB_VERNUM 0x12b0
40
+#define ZLIB_VERSION "1.2.12"
41
+#define ZLIB_VERNUM 0x12c0
4242
#define ZLIB_VER_MAJOR 1
4343
#define ZLIB_VER_MINOR 2
44
-#define ZLIB_VER_REVISION 11
44
+#define ZLIB_VER_REVISION 12
4545
#define ZLIB_VER_SUBREVISION 0
4646
4747
/*
4848
The 'zlib' compression library provides in-memory compression and
4949
decompression functions, including integrity checks of the uncompressed data.
@@ -541,12 +541,11 @@
541541
int windowBits,
542542
int memLevel,
543543
int strategy));
544544
545545
This is another version of deflateInit with more compression options. The
546
- fields next_in, zalloc, zfree and opaque must be initialized before by the
547
- caller.
546
+ fields zalloc, zfree and opaque must be initialized before by the caller.
548547
549548
The method parameter is the compression method. It must be Z_DEFLATED in
550549
this version of the library.
551550
552551
The windowBits parameter is the base two logarithm of the window size
@@ -710,15 +709,16 @@
710709
Dynamically update the compression level and compression strategy. The
711710
interpretation of level and strategy is as in deflateInit2(). This can be
712711
used to switch between compression and straight copy of the input data, or
713712
to switch to a different kind of input data requiring a different strategy.
714713
If the compression approach (which is a function of the level) or the
715
- strategy is changed, and if any input has been consumed in a previous
716
- deflate() call, then the input available so far is compressed with the old
717
- level and strategy using deflate(strm, Z_BLOCK). There are three approaches
718
- for the compression levels 0, 1..3, and 4..9 respectively. The new level
719
- and strategy will take effect at the next call of deflate().
714
+ strategy is changed, and if there have been any deflate() calls since the
715
+ state was initialized or reset, then the input available so far is
716
+ compressed with the old level and strategy using deflate(strm, Z_BLOCK).
717
+ There are three approaches for the compression levels 0, 1..3, and 4..9
718
+ respectively. The new level and strategy will take effect at the next call
719
+ of deflate().
720720
721721
If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does
722722
not have enough output space to complete, then the parameter change will not
723723
take effect. In this case, deflateParams() can be called again with the
724724
same parameters and more output space to try again.
@@ -863,13 +863,15 @@
863863
windowBits can also be greater than 15 for optional gzip decoding. Add
864864
32 to windowBits to enable zlib and gzip decoding with automatic header
865865
detection, or add 16 to decode only the gzip format (the zlib format will
866866
return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a
867867
CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see
868
- below), inflate() will not automatically decode concatenated gzip streams.
869
- inflate() will return Z_STREAM_END at the end of the gzip stream. The state
870
- would need to be reset to continue decoding a subsequent gzip stream.
868
+ below), inflate() will *not* automatically decode concatenated gzip members.
869
+ inflate() will return Z_STREAM_END at the end of the gzip member. The state
870
+ would need to be reset to continue decoding a subsequent gzip member. This
871
+ *must* be done if there is more data after a gzip member, in order for the
872
+ decompression to be compliant with the gzip standard (RFC 1952).
871873
872874
inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
873875
memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
874876
version assumed by the caller, or Z_STREAM_ERROR if the parameters are
875877
invalid, such as a null pointer to the structure. msg is set to null if
@@ -1300,18 +1302,18 @@
13001302
typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */
13011303
13021304
/*
13031305
ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
13041306
1305
- Opens a gzip (.gz) file for reading or writing. The mode parameter is as
1306
- in fopen ("rb" or "wb") but can also include a compression level ("wb9") or
1307
- a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
1308
- compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
1309
- for fixed code compression as in "wb9F". (See the description of
1310
- deflateInit2 for more information about the strategy parameter.) 'T' will
1311
- request transparent writing or appending with no compression and not using
1312
- the gzip format.
1307
+ Open the gzip (.gz) file at path for reading and decompressing, or
1308
+ compressing and writing. The mode parameter is as in fopen ("rb" or "wb")
1309
+ but can also include a compression level ("wb9") or a strategy: 'f' for
1310
+ filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h",
1311
+ 'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression
1312
+ as in "wb9F". (See the description of deflateInit2 for more information
1313
+ about the strategy parameter.) 'T' will request transparent writing or
1314
+ appending with no compression and not using the gzip format.
13131315
13141316
"a" can be used instead of "w" to request that the gzip stream that will
13151317
be written be appended to the file. "+" will result in an error, since
13161318
reading and writing to the same gzip file is not supported. The addition of
13171319
"x" when writing will create the file exclusively, which fails if the file
@@ -1337,13 +1339,13 @@
13371339
file could not be opened.
13381340
*/
13391341
13401342
ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
13411343
/*
1342
- gzdopen associates a gzFile with the file descriptor fd. File descriptors
1343
- are obtained from calls like open, dup, creat, pipe or fileno (if the file
1344
- has been previously opened with fopen). The mode parameter is as in gzopen.
1344
+ Associate a gzFile with the file descriptor fd. File descriptors are
1345
+ obtained from calls like open, dup, creat, pipe or fileno (if the file has
1346
+ been previously opened with fopen). The mode parameter is as in gzopen.
13451347
13461348
The next call of gzclose on the returned gzFile will also close the file
13471349
descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
13481350
fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
13491351
mode);. The duplicated descriptor should be saved to avoid a leak, since
@@ -1360,38 +1362,38 @@
13601362
will not detect if fd is invalid (unless fd is -1).
13611363
*/
13621364
13631365
ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
13641366
/*
1365
- Set the internal buffer size used by this library's functions. The
1366
- default buffer size is 8192 bytes. This function must be called after
1367
- gzopen() or gzdopen(), and before any other calls that read or write the
1368
- file. The buffer memory allocation is always deferred to the first read or
1369
- write. Three times that size in buffer space is allocated. A larger buffer
1370
- size of, for example, 64K or 128K bytes will noticeably increase the speed
1371
- of decompression (reading).
1367
+ Set the internal buffer size used by this library's functions for file to
1368
+ size. The default buffer size is 8192 bytes. This function must be called
1369
+ after gzopen() or gzdopen(), and before any other calls that read or write
1370
+ the file. The buffer memory allocation is always deferred to the first read
1371
+ or write. Three times that size in buffer space is allocated. A larger
1372
+ buffer size of, for example, 64K or 128K bytes will noticeably increase the
1373
+ speed of decompression (reading).
13721374
13731375
The new buffer size also affects the maximum length for gzprintf().
13741376
13751377
gzbuffer() returns 0 on success, or -1 on failure, such as being called
13761378
too late.
13771379
*/
13781380
13791381
ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
13801382
/*
1381
- Dynamically update the compression level or strategy. See the description
1382
- of deflateInit2 for the meaning of these parameters. Previously provided
1383
- data is flushed before the parameter change.
1383
+ Dynamically update the compression level and strategy for file. See the
1384
+ description of deflateInit2 for the meaning of these parameters. Previously
1385
+ provided data is flushed before applying the parameter changes.
13841386
13851387
gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not
13861388
opened for writing, Z_ERRNO if there is an error writing the flushed data,
13871389
or Z_MEM_ERROR if there is a memory allocation error.
13881390
*/
13891391
13901392
ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
13911393
/*
1392
- Reads the given number of uncompressed bytes from the compressed file. If
1394
+ Read and decompress up to len uncompressed bytes from file into buf. If
13931395
the input file is not in gzip format, gzread copies the given number of
13941396
bytes into the buffer directly from the file.
13951397
13961398
After reaching the end of a gzip stream in the input, gzread will continue
13971399
to read, looking for another gzip stream. Any number of gzip streams may be
@@ -1418,15 +1420,15 @@
14181420
*/
14191421
14201422
ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems,
14211423
gzFile file));
14221424
/*
1423
- Read up to nitems items of size size from file to buf, otherwise operating
1424
- as gzread() does. This duplicates the interface of stdio's fread(), with
1425
- size_t request and return types. If the library defines size_t, then
1426
- z_size_t is identical to size_t. If not, then z_size_t is an unsigned
1427
- integer type that can contain a pointer.
1425
+ Read and decompress up to nitems items of size size from file into buf,
1426
+ otherwise operating as gzread() does. This duplicates the interface of
1427
+ stdio's fread(), with size_t request and return types. If the library
1428
+ defines size_t, then z_size_t is identical to size_t. If not, then z_size_t
1429
+ is an unsigned integer type that can contain a pointer.
14281430
14291431
gzfread() returns the number of full items read of size size, or zero if
14301432
the end of the file was reached and a full item could not be read, or if
14311433
there was an error. gzerror() must be consulted if zero is returned in
14321434
order to determine if there was an error. If the multiplication of size and
@@ -1441,22 +1443,20 @@
14411443
is the same as the behavior of fread() implementations in common libraries,
14421444
but it prevents the direct use of gzfread() to read a concurrently written
14431445
file, reseting and retrying on end-of-file, when size is not 1.
14441446
*/
14451447
1446
-ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
1447
- voidpc buf, unsigned len));
1448
+ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len));
14481449
/*
1449
- Writes the given number of uncompressed bytes into the compressed file.
1450
- gzwrite returns the number of uncompressed bytes written or 0 in case of
1451
- error.
1450
+ Compress and write the len uncompressed bytes at buf to file. gzwrite
1451
+ returns the number of uncompressed bytes written or 0 in case of error.
14521452
*/
14531453
14541454
ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size,
14551455
z_size_t nitems, gzFile file));
14561456
/*
1457
- gzfwrite() writes nitems items of size size from buf to file, duplicating
1457
+ Compress and write nitems items of size size from buf to file, duplicating
14581458
the interface of stdio's fwrite(), with size_t request and return types. If
14591459
the library defines size_t, then z_size_t is identical to size_t. If not,
14601460
then z_size_t is an unsigned integer type that can contain a pointer.
14611461
14621462
gzfwrite() returns the number of full items written of size size, or zero
@@ -1465,63 +1465,64 @@
14651465
is returned, and the error state is set to Z_STREAM_ERROR.
14661466
*/
14671467
14681468
ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
14691469
/*
1470
- Converts, formats, and writes the arguments to the compressed file under
1471
- control of the format string, as in fprintf. gzprintf returns the number of
1470
+ Convert, format, compress, and write the arguments (...) to file under
1471
+ control of the string format, as in fprintf. gzprintf returns the number of
14721472
uncompressed bytes actually written, or a negative zlib error code in case
14731473
of error. The number of uncompressed bytes written is limited to 8191, or
14741474
one less than the buffer size given to gzbuffer(). The caller should assure
14751475
that this limit is not exceeded. If it is exceeded, then gzprintf() will
14761476
return an error (0) with nothing written. In this case, there may also be a
14771477
buffer overflow with unpredictable consequences, which is possible only if
1478
- zlib was compiled with the insecure functions sprintf() or vsprintf()
1478
+ zlib was compiled with the insecure functions sprintf() or vsprintf(),
14791479
because the secure snprintf() or vsnprintf() functions were not available.
14801480
This can be determined using zlibCompileFlags().
14811481
*/
14821482
14831483
ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
14841484
/*
1485
- Writes the given null-terminated string to the compressed file, excluding
1485
+ Compress and write the given null-terminated string s to file, excluding
14861486
the terminating null character.
14871487
14881488
gzputs returns the number of characters written, or -1 in case of error.
14891489
*/
14901490
14911491
ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
14921492
/*
1493
- Reads bytes from the compressed file until len-1 characters are read, or a
1494
- newline character is read and transferred to buf, or an end-of-file
1495
- condition is encountered. If any characters are read or if len == 1, the
1496
- string is terminated with a null character. If no characters are read due
1497
- to an end-of-file or len < 1, then the buffer is left untouched.
1493
+ Read and decompress bytes from file into buf, until len-1 characters are
1494
+ read, or until a newline character is read and transferred to buf, or an
1495
+ end-of-file condition is encountered. If any characters are read or if len
1496
+ is one, the string is terminated with a null character. If no characters
1497
+ are read due to an end-of-file or len is less than one, then the buffer is
1498
+ left untouched.
14981499
14991500
gzgets returns buf which is a null-terminated string, or it returns NULL
15001501
for end-of-file or in case of error. If there was an error, the contents at
15011502
buf are indeterminate.
15021503
*/
15031504
15041505
ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
15051506
/*
1506
- Writes c, converted to an unsigned char, into the compressed file. gzputc
1507
+ Compress and write c, converted to an unsigned char, into file. gzputc
15071508
returns the value that was written, or -1 in case of error.
15081509
*/
15091510
15101511
ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
15111512
/*
1512
- Reads one byte from the compressed file. gzgetc returns this byte or -1
1513
+ Read and decompress one byte from file. gzgetc returns this byte or -1
15131514
in case of end of file or error. This is implemented as a macro for speed.
15141515
As such, it does not do all of the checking the other functions do. I.e.
15151516
it does not check to see if file is NULL, nor whether the structure file
15161517
points to has been clobbered or not.
15171518
*/
15181519
15191520
ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
15201521
/*
1521
- Push one character back onto the stream to be read as the first character
1522
- on the next read. At least one character of push-back is allowed.
1522
+ Push c back onto the stream for file to be read as the first character on
1523
+ the next read. At least one character of push-back is always allowed.
15231524
gzungetc() returns the character pushed, or -1 on failure. gzungetc() will
15241525
fail if c is -1, and may fail if a character has been pushed but not read
15251526
yet. If gzungetc is used immediately after gzopen or gzdopen, at least the
15261527
output buffer size of pushed characters is allowed. (See gzbuffer above.)
15271528
The pushed character will be discarded if the stream is repositioned with
@@ -1528,13 +1529,13 @@
15281529
gzseek() or gzrewind().
15291530
*/
15301531
15311532
ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
15321533
/*
1533
- Flushes all pending output into the compressed file. The parameter flush
1534
- is as in the deflate() function. The return value is the zlib error number
1535
- (see function gzerror below). gzflush is only permitted when writing.
1534
+ Flush all pending output to file. The parameter flush is as in the
1535
+ deflate() function. The return value is the zlib error number (see function
1536
+ gzerror below). gzflush is only permitted when writing.
15361537
15371538
If the flush parameter is Z_FINISH, the remaining data is written and the
15381539
gzip stream is completed in the output. If gzwrite() is called again, a new
15391540
gzip stream will be started in the output. gzread() is able to read such
15401541
concatenated gzip streams.
@@ -1545,12 +1546,12 @@
15451546
15461547
/*
15471548
ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
15481549
z_off_t offset, int whence));
15491550
1550
- Sets the starting position for the next gzread or gzwrite on the given
1551
- compressed file. The offset represents a number of bytes in the
1551
+ Set the starting position to offset relative to whence for the next gzread
1552
+ or gzwrite on file. The offset represents a number of bytes in the
15521553
uncompressed data stream. The whence parameter is defined as in lseek(2);
15531554
the value SEEK_END is not supported.
15541555
15551556
If the file is opened for reading, this function is emulated but can be
15561557
extremely slow. If the file is opened for writing, only forward seeks are
@@ -1563,54 +1564,54 @@
15631564
would be before the current position.
15641565
*/
15651566
15661567
ZEXTERN int ZEXPORT gzrewind OF((gzFile file));
15671568
/*
1568
- Rewinds the given file. This function is supported only for reading.
1569
+ Rewind file. This function is supported only for reading.
15691570
1570
- gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
1571
+ gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET).
15711572
*/
15721573
15731574
/*
15741575
ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file));
15751576
1576
- Returns the starting position for the next gzread or gzwrite on the given
1577
- compressed file. This position represents a number of bytes in the
1578
- uncompressed data stream, and is zero when starting, even if appending or
1579
- reading a gzip stream from the middle of a file using gzdopen().
1577
+ Return the starting position for the next gzread or gzwrite on file.
1578
+ This position represents a number of bytes in the uncompressed data stream,
1579
+ and is zero when starting, even if appending or reading a gzip stream from
1580
+ the middle of a file using gzdopen().
15801581
15811582
gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
15821583
*/
15831584
15841585
/*
15851586
ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));
15861587
1587
- Returns the current offset in the file being read or written. This offset
1588
- includes the count of bytes that precede the gzip stream, for example when
1589
- appending or when using gzdopen() for reading. When reading, the offset
1590
- does not include as yet unused buffered input. This information can be used
1591
- for a progress indicator. On error, gzoffset() returns -1.
1588
+ Return the current compressed (actual) read or write offset of file. This
1589
+ offset includes the count of bytes that precede the gzip stream, for example
1590
+ when appending or when using gzdopen() for reading. When reading, the
1591
+ offset does not include as yet unused buffered input. This information can
1592
+ be used for a progress indicator. On error, gzoffset() returns -1.
15921593
*/
15931594
15941595
ZEXTERN int ZEXPORT gzeof OF((gzFile file));
15951596
/*
1596
- Returns true (1) if the end-of-file indicator has been set while reading,
1597
- false (0) otherwise. Note that the end-of-file indicator is set only if the
1598
- read tried to go past the end of the input, but came up short. Therefore,
1599
- just like feof(), gzeof() may return false even if there is no more data to
1600
- read, in the event that the last read request was for the exact number of
1601
- bytes remaining in the input file. This will happen if the input file size
1602
- is an exact multiple of the buffer size.
1597
+ Return true (1) if the end-of-file indicator for file has been set while
1598
+ reading, false (0) otherwise. Note that the end-of-file indicator is set
1599
+ only if the read tried to go past the end of the input, but came up short.
1600
+ Therefore, just like feof(), gzeof() may return false even if there is no
1601
+ more data to read, in the event that the last read request was for the exact
1602
+ number of bytes remaining in the input file. This will happen if the input
1603
+ file size is an exact multiple of the buffer size.
16031604
16041605
If gzeof() returns true, then the read functions will return no more data,
16051606
unless the end-of-file indicator is reset by gzclearerr() and the input file
16061607
has grown since the previous end of file was detected.
16071608
*/
16081609
16091610
ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
16101611
/*
1611
- Returns true (1) if file is being copied directly while reading, or false
1612
+ Return true (1) if file is being copied directly while reading, or false
16121613
(0) if file is a gzip stream being decompressed.
16131614
16141615
If the input file is empty, gzdirect() will return true, since the input
16151616
does not contain a gzip stream.
16161617
@@ -1627,12 +1628,12 @@
16271628
gzip file reading and decompression, which may not be desired.)
16281629
*/
16291630
16301631
ZEXTERN int ZEXPORT gzclose OF((gzFile file));
16311632
/*
1632
- Flushes all pending output if necessary, closes the compressed file and
1633
- deallocates the (de)compression state. Note that once file is closed, you
1633
+ Flush all pending output for file, if necessary, close file and
1634
+ deallocate the (de)compression state. Note that once file is closed, you
16341635
cannot call gzerror with file, since its structures have been deallocated.
16351636
gzclose must not be called more than once on the same file, just as free
16361637
must not be called more than once on the same allocation.
16371638
16381639
gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
@@ -1652,14 +1653,14 @@
16521653
zlib library.
16531654
*/
16541655
16551656
ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
16561657
/*
1657
- Returns the error message for the last error which occurred on the given
1658
- compressed file. errnum is set to zlib error number. If an error occurred
1659
- in the file system and not in the compression library, errnum is set to
1660
- Z_ERRNO and the application may consult errno to get the exact error code.
1658
+ Return the error message for the last error which occurred on file.
1659
+ errnum is set to zlib error number. If an error occurred in the file system
1660
+ and not in the compression library, errnum is set to Z_ERRNO and the
1661
+ application may consult errno to get the exact error code.
16611662
16621663
The application must not modify the returned string. Future calls to
16631664
this function may invalidate the previously returned string. If file is
16641665
closed, then the string previously returned by gzerror will no longer be
16651666
available.
@@ -1668,11 +1669,11 @@
16681669
functions above that do not distinguish those cases in their return values.
16691670
*/
16701671
16711672
ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
16721673
/*
1673
- Clears the error and end-of-file flags for file. This is analogous to the
1674
+ Clear the error and end-of-file flags for file. This is analogous to the
16741675
clearerr() function in stdio. This is useful for continuing to read a gzip
16751676
file that is being written concurrently.
16761677
*/
16771678
16781679
#endif /* !Z_SOLO */
@@ -1686,12 +1687,13 @@
16861687
*/
16871688
16881689
ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
16891690
/*
16901691
Update a running Adler-32 checksum with the bytes buf[0..len-1] and
1691
- return the updated checksum. If buf is Z_NULL, this function returns the
1692
- required initial value for the checksum.
1692
+ return the updated checksum. An Adler-32 value is in the range of a 32-bit
1693
+ unsigned integer. If buf is Z_NULL, this function returns the required
1694
+ initial value for the checksum.
16931695
16941696
An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed
16951697
much faster.
16961698
16971699
Usage example:
@@ -1720,16 +1722,17 @@
17201722
seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note
17211723
that the z_off_t type (like off_t) is a signed integer. If len2 is
17221724
negative, the result has no meaning or utility.
17231725
*/
17241726
1725
-ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
1727
+ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
17261728
/*
17271729
Update a running CRC-32 with the bytes buf[0..len-1] and return the
1728
- updated CRC-32. If buf is Z_NULL, this function returns the required
1729
- initial value for the crc. Pre- and post-conditioning (one's complement) is
1730
- performed within this function so it shouldn't be done by the application.
1730
+ updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer.
1731
+ If buf is Z_NULL, this function returns the required initial value for the
1732
+ crc. Pre- and post-conditioning (one's complement) is performed within this
1733
+ function so it shouldn't be done by the application.
17311734
17321735
Usage example:
17331736
17341737
uLong crc = crc32(0L, Z_NULL, 0);
17351738
@@ -1737,11 +1740,11 @@
17371740
crc = crc32(crc, buffer, length);
17381741
}
17391742
if (crc != original_crc) error();
17401743
*/
17411744
1742
-ZEXTERN uLong ZEXPORT crc32_z OF((uLong adler, const Bytef *buf,
1745
+ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf,
17431746
z_size_t len));
17441747
/*
17451748
Same as crc32(), but with a size_t length.
17461749
*/
17471750
@@ -1752,10 +1755,24 @@
17521755
seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
17531756
calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32
17541757
check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
17551758
len2.
17561759
*/
1760
+
1761
+/*
1762
+ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t len2));
1763
+
1764
+ Return the operator corresponding to length len2, to be used with
1765
+ crc32_combine_op().
1766
+*/
1767
+
1768
+ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op));
1769
+/*
1770
+ Give the same result as crc32_combine(), using op in place of len2. op is
1771
+ is generated from len2 by crc32_combine_gen(). This will be faster than
1772
+ crc32_combine() if the generated op is used more than once.
1773
+*/
17571774
17581775
17591776
/* various hacks, don't look :) */
17601777
17611778
/* deflateInit and inflateInit are macros to allow checking the zlib version
@@ -1840,10 +1857,11 @@
18401857
ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
18411858
ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
18421859
ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
18431860
ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));
18441861
ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
1862
+ ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off64_t));
18451863
#endif
18461864
18471865
#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
18481866
# ifdef Z_PREFIX_SET
18491867
# define z_gzopen z_gzopen64
@@ -1850,39 +1868,44 @@
18501868
# define z_gzseek z_gzseek64
18511869
# define z_gztell z_gztell64
18521870
# define z_gzoffset z_gzoffset64
18531871
# define z_adler32_combine z_adler32_combine64
18541872
# define z_crc32_combine z_crc32_combine64
1873
+# define z_crc32_combine_gen z_crc32_combine_gen64
18551874
# else
18561875
# define gzopen gzopen64
18571876
# define gzseek gzseek64
18581877
# define gztell gztell64
18591878
# define gzoffset gzoffset64
18601879
# define adler32_combine adler32_combine64
18611880
# define crc32_combine crc32_combine64
1881
+# define crc32_combine_gen crc32_combine_gen64
18621882
# endif
18631883
# ifndef Z_LARGE64
18641884
ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
18651885
ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
18661886
ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
18671887
ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));
18681888
ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
18691889
ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
1890
+ ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t));
18701891
# endif
18711892
#else
18721893
ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
18731894
ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));
18741895
ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));
18751896
ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));
18761897
ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
18771898
ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
1899
+ ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t));
18781900
#endif
18791901
18801902
#else /* Z_SOLO */
18811903
18821904
ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
18831905
ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
1906
+ ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t));
18841907
18851908
#endif /* !Z_SOLO */
18861909
18871910
/* undocumented functions */
18881911
ZEXTERN const char * ZEXPORT zError OF((int));
@@ -1891,11 +1914,11 @@
18911914
ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int));
18921915
ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int));
18931916
ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp));
18941917
ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp));
18951918
ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp));
1896
-#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(Z_SOLO)
1919
+#if defined(_WIN32) && !defined(Z_SOLO)
18971920
ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path,
18981921
const char *mode));
18991922
#endif
19001923
#if defined(STDC) || defined(Z_HAVE_STDARG_H)
19011924
# ifndef Z_SOLO
19021925
--- compat/zlib/zlib.h
+++ compat/zlib/zlib.h
@@ -1,9 +1,9 @@
1 /* zlib.h -- interface of the 'zlib' general purpose compression library
2 version 1.2.11, January 15th, 2017
3
4 Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
5
6 This software is provided 'as-is', without any express or implied
7 warranty. In no event will the authors be held liable for any damages
8 arising from the use of this software.
9
@@ -35,15 +35,15 @@
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40 #define ZLIB_VERSION "1.2.11"
41 #define ZLIB_VERNUM 0x12b0
42 #define ZLIB_VER_MAJOR 1
43 #define ZLIB_VER_MINOR 2
44 #define ZLIB_VER_REVISION 11
45 #define ZLIB_VER_SUBREVISION 0
46
47 /*
48 The 'zlib' compression library provides in-memory compression and
49 decompression functions, including integrity checks of the uncompressed data.
@@ -541,12 +541,11 @@
541 int windowBits,
542 int memLevel,
543 int strategy));
544
545 This is another version of deflateInit with more compression options. The
546 fields next_in, zalloc, zfree and opaque must be initialized before by the
547 caller.
548
549 The method parameter is the compression method. It must be Z_DEFLATED in
550 this version of the library.
551
552 The windowBits parameter is the base two logarithm of the window size
@@ -710,15 +709,16 @@
710 Dynamically update the compression level and compression strategy. The
711 interpretation of level and strategy is as in deflateInit2(). This can be
712 used to switch between compression and straight copy of the input data, or
713 to switch to a different kind of input data requiring a different strategy.
714 If the compression approach (which is a function of the level) or the
715 strategy is changed, and if any input has been consumed in a previous
716 deflate() call, then the input available so far is compressed with the old
717 level and strategy using deflate(strm, Z_BLOCK). There are three approaches
718 for the compression levels 0, 1..3, and 4..9 respectively. The new level
719 and strategy will take effect at the next call of deflate().
 
720
721 If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does
722 not have enough output space to complete, then the parameter change will not
723 take effect. In this case, deflateParams() can be called again with the
724 same parameters and more output space to try again.
@@ -863,13 +863,15 @@
863 windowBits can also be greater than 15 for optional gzip decoding. Add
864 32 to windowBits to enable zlib and gzip decoding with automatic header
865 detection, or add 16 to decode only the gzip format (the zlib format will
866 return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a
867 CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see
868 below), inflate() will not automatically decode concatenated gzip streams.
869 inflate() will return Z_STREAM_END at the end of the gzip stream. The state
870 would need to be reset to continue decoding a subsequent gzip stream.
 
 
871
872 inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
873 memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
874 version assumed by the caller, or Z_STREAM_ERROR if the parameters are
875 invalid, such as a null pointer to the structure. msg is set to null if
@@ -1300,18 +1302,18 @@
1300 typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */
1301
1302 /*
1303 ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
1304
1305 Opens a gzip (.gz) file for reading or writing. The mode parameter is as
1306 in fopen ("rb" or "wb") but can also include a compression level ("wb9") or
1307 a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
1308 compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
1309 for fixed code compression as in "wb9F". (See the description of
1310 deflateInit2 for more information about the strategy parameter.) 'T' will
1311 request transparent writing or appending with no compression and not using
1312 the gzip format.
1313
1314 "a" can be used instead of "w" to request that the gzip stream that will
1315 be written be appended to the file. "+" will result in an error, since
1316 reading and writing to the same gzip file is not supported. The addition of
1317 "x" when writing will create the file exclusively, which fails if the file
@@ -1337,13 +1339,13 @@
1337 file could not be opened.
1338 */
1339
1340 ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
1341 /*
1342 gzdopen associates a gzFile with the file descriptor fd. File descriptors
1343 are obtained from calls like open, dup, creat, pipe or fileno (if the file
1344 has been previously opened with fopen). The mode parameter is as in gzopen.
1345
1346 The next call of gzclose on the returned gzFile will also close the file
1347 descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
1348 fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
1349 mode);. The duplicated descriptor should be saved to avoid a leak, since
@@ -1360,38 +1362,38 @@
1360 will not detect if fd is invalid (unless fd is -1).
1361 */
1362
1363 ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
1364 /*
1365 Set the internal buffer size used by this library's functions. The
1366 default buffer size is 8192 bytes. This function must be called after
1367 gzopen() or gzdopen(), and before any other calls that read or write the
1368 file. The buffer memory allocation is always deferred to the first read or
1369 write. Three times that size in buffer space is allocated. A larger buffer
1370 size of, for example, 64K or 128K bytes will noticeably increase the speed
1371 of decompression (reading).
1372
1373 The new buffer size also affects the maximum length for gzprintf().
1374
1375 gzbuffer() returns 0 on success, or -1 on failure, such as being called
1376 too late.
1377 */
1378
1379 ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
1380 /*
1381 Dynamically update the compression level or strategy. See the description
1382 of deflateInit2 for the meaning of these parameters. Previously provided
1383 data is flushed before the parameter change.
1384
1385 gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not
1386 opened for writing, Z_ERRNO if there is an error writing the flushed data,
1387 or Z_MEM_ERROR if there is a memory allocation error.
1388 */
1389
1390 ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
1391 /*
1392 Reads the given number of uncompressed bytes from the compressed file. If
1393 the input file is not in gzip format, gzread copies the given number of
1394 bytes into the buffer directly from the file.
1395
1396 After reaching the end of a gzip stream in the input, gzread will continue
1397 to read, looking for another gzip stream. Any number of gzip streams may be
@@ -1418,15 +1420,15 @@
1418 */
1419
1420 ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems,
1421 gzFile file));
1422 /*
1423 Read up to nitems items of size size from file to buf, otherwise operating
1424 as gzread() does. This duplicates the interface of stdio's fread(), with
1425 size_t request and return types. If the library defines size_t, then
1426 z_size_t is identical to size_t. If not, then z_size_t is an unsigned
1427 integer type that can contain a pointer.
1428
1429 gzfread() returns the number of full items read of size size, or zero if
1430 the end of the file was reached and a full item could not be read, or if
1431 there was an error. gzerror() must be consulted if zero is returned in
1432 order to determine if there was an error. If the multiplication of size and
@@ -1441,22 +1443,20 @@
1441 is the same as the behavior of fread() implementations in common libraries,
1442 but it prevents the direct use of gzfread() to read a concurrently written
1443 file, reseting and retrying on end-of-file, when size is not 1.
1444 */
1445
1446 ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
1447 voidpc buf, unsigned len));
1448 /*
1449 Writes the given number of uncompressed bytes into the compressed file.
1450 gzwrite returns the number of uncompressed bytes written or 0 in case of
1451 error.
1452 */
1453
1454 ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size,
1455 z_size_t nitems, gzFile file));
1456 /*
1457 gzfwrite() writes nitems items of size size from buf to file, duplicating
1458 the interface of stdio's fwrite(), with size_t request and return types. If
1459 the library defines size_t, then z_size_t is identical to size_t. If not,
1460 then z_size_t is an unsigned integer type that can contain a pointer.
1461
1462 gzfwrite() returns the number of full items written of size size, or zero
@@ -1465,63 +1465,64 @@
1465 is returned, and the error state is set to Z_STREAM_ERROR.
1466 */
1467
1468 ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
1469 /*
1470 Converts, formats, and writes the arguments to the compressed file under
1471 control of the format string, as in fprintf. gzprintf returns the number of
1472 uncompressed bytes actually written, or a negative zlib error code in case
1473 of error. The number of uncompressed bytes written is limited to 8191, or
1474 one less than the buffer size given to gzbuffer(). The caller should assure
1475 that this limit is not exceeded. If it is exceeded, then gzprintf() will
1476 return an error (0) with nothing written. In this case, there may also be a
1477 buffer overflow with unpredictable consequences, which is possible only if
1478 zlib was compiled with the insecure functions sprintf() or vsprintf()
1479 because the secure snprintf() or vsnprintf() functions were not available.
1480 This can be determined using zlibCompileFlags().
1481 */
1482
1483 ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
1484 /*
1485 Writes the given null-terminated string to the compressed file, excluding
1486 the terminating null character.
1487
1488 gzputs returns the number of characters written, or -1 in case of error.
1489 */
1490
1491 ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
1492 /*
1493 Reads bytes from the compressed file until len-1 characters are read, or a
1494 newline character is read and transferred to buf, or an end-of-file
1495 condition is encountered. If any characters are read or if len == 1, the
1496 string is terminated with a null character. If no characters are read due
1497 to an end-of-file or len < 1, then the buffer is left untouched.
 
1498
1499 gzgets returns buf which is a null-terminated string, or it returns NULL
1500 for end-of-file or in case of error. If there was an error, the contents at
1501 buf are indeterminate.
1502 */
1503
1504 ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
1505 /*
1506 Writes c, converted to an unsigned char, into the compressed file. gzputc
1507 returns the value that was written, or -1 in case of error.
1508 */
1509
1510 ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
1511 /*
1512 Reads one byte from the compressed file. gzgetc returns this byte or -1
1513 in case of end of file or error. This is implemented as a macro for speed.
1514 As such, it does not do all of the checking the other functions do. I.e.
1515 it does not check to see if file is NULL, nor whether the structure file
1516 points to has been clobbered or not.
1517 */
1518
1519 ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
1520 /*
1521 Push one character back onto the stream to be read as the first character
1522 on the next read. At least one character of push-back is allowed.
1523 gzungetc() returns the character pushed, or -1 on failure. gzungetc() will
1524 fail if c is -1, and may fail if a character has been pushed but not read
1525 yet. If gzungetc is used immediately after gzopen or gzdopen, at least the
1526 output buffer size of pushed characters is allowed. (See gzbuffer above.)
1527 The pushed character will be discarded if the stream is repositioned with
@@ -1528,13 +1529,13 @@
1528 gzseek() or gzrewind().
1529 */
1530
1531 ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
1532 /*
1533 Flushes all pending output into the compressed file. The parameter flush
1534 is as in the deflate() function. The return value is the zlib error number
1535 (see function gzerror below). gzflush is only permitted when writing.
1536
1537 If the flush parameter is Z_FINISH, the remaining data is written and the
1538 gzip stream is completed in the output. If gzwrite() is called again, a new
1539 gzip stream will be started in the output. gzread() is able to read such
1540 concatenated gzip streams.
@@ -1545,12 +1546,12 @@
1545
1546 /*
1547 ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
1548 z_off_t offset, int whence));
1549
1550 Sets the starting position for the next gzread or gzwrite on the given
1551 compressed file. The offset represents a number of bytes in the
1552 uncompressed data stream. The whence parameter is defined as in lseek(2);
1553 the value SEEK_END is not supported.
1554
1555 If the file is opened for reading, this function is emulated but can be
1556 extremely slow. If the file is opened for writing, only forward seeks are
@@ -1563,54 +1564,54 @@
1563 would be before the current position.
1564 */
1565
1566 ZEXTERN int ZEXPORT gzrewind OF((gzFile file));
1567 /*
1568 Rewinds the given file. This function is supported only for reading.
1569
1570 gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
1571 */
1572
1573 /*
1574 ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file));
1575
1576 Returns the starting position for the next gzread or gzwrite on the given
1577 compressed file. This position represents a number of bytes in the
1578 uncompressed data stream, and is zero when starting, even if appending or
1579 reading a gzip stream from the middle of a file using gzdopen().
1580
1581 gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
1582 */
1583
1584 /*
1585 ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));
1586
1587 Returns the current offset in the file being read or written. This offset
1588 includes the count of bytes that precede the gzip stream, for example when
1589 appending or when using gzdopen() for reading. When reading, the offset
1590 does not include as yet unused buffered input. This information can be used
1591 for a progress indicator. On error, gzoffset() returns -1.
1592 */
1593
1594 ZEXTERN int ZEXPORT gzeof OF((gzFile file));
1595 /*
1596 Returns true (1) if the end-of-file indicator has been set while reading,
1597 false (0) otherwise. Note that the end-of-file indicator is set only if the
1598 read tried to go past the end of the input, but came up short. Therefore,
1599 just like feof(), gzeof() may return false even if there is no more data to
1600 read, in the event that the last read request was for the exact number of
1601 bytes remaining in the input file. This will happen if the input file size
1602 is an exact multiple of the buffer size.
1603
1604 If gzeof() returns true, then the read functions will return no more data,
1605 unless the end-of-file indicator is reset by gzclearerr() and the input file
1606 has grown since the previous end of file was detected.
1607 */
1608
1609 ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
1610 /*
1611 Returns true (1) if file is being copied directly while reading, or false
1612 (0) if file is a gzip stream being decompressed.
1613
1614 If the input file is empty, gzdirect() will return true, since the input
1615 does not contain a gzip stream.
1616
@@ -1627,12 +1628,12 @@
1627 gzip file reading and decompression, which may not be desired.)
1628 */
1629
1630 ZEXTERN int ZEXPORT gzclose OF((gzFile file));
1631 /*
1632 Flushes all pending output if necessary, closes the compressed file and
1633 deallocates the (de)compression state. Note that once file is closed, you
1634 cannot call gzerror with file, since its structures have been deallocated.
1635 gzclose must not be called more than once on the same file, just as free
1636 must not be called more than once on the same allocation.
1637
1638 gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
@@ -1652,14 +1653,14 @@
1652 zlib library.
1653 */
1654
1655 ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
1656 /*
1657 Returns the error message for the last error which occurred on the given
1658 compressed file. errnum is set to zlib error number. If an error occurred
1659 in the file system and not in the compression library, errnum is set to
1660 Z_ERRNO and the application may consult errno to get the exact error code.
1661
1662 The application must not modify the returned string. Future calls to
1663 this function may invalidate the previously returned string. If file is
1664 closed, then the string previously returned by gzerror will no longer be
1665 available.
@@ -1668,11 +1669,11 @@
1668 functions above that do not distinguish those cases in their return values.
1669 */
1670
1671 ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
1672 /*
1673 Clears the error and end-of-file flags for file. This is analogous to the
1674 clearerr() function in stdio. This is useful for continuing to read a gzip
1675 file that is being written concurrently.
1676 */
1677
1678 #endif /* !Z_SOLO */
@@ -1686,12 +1687,13 @@
1686 */
1687
1688 ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
1689 /*
1690 Update a running Adler-32 checksum with the bytes buf[0..len-1] and
1691 return the updated checksum. If buf is Z_NULL, this function returns the
1692 required initial value for the checksum.
 
1693
1694 An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed
1695 much faster.
1696
1697 Usage example:
@@ -1720,16 +1722,17 @@
1720 seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note
1721 that the z_off_t type (like off_t) is a signed integer. If len2 is
1722 negative, the result has no meaning or utility.
1723 */
1724
1725 ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
1726 /*
1727 Update a running CRC-32 with the bytes buf[0..len-1] and return the
1728 updated CRC-32. If buf is Z_NULL, this function returns the required
1729 initial value for the crc. Pre- and post-conditioning (one's complement) is
1730 performed within this function so it shouldn't be done by the application.
 
1731
1732 Usage example:
1733
1734 uLong crc = crc32(0L, Z_NULL, 0);
1735
@@ -1737,11 +1740,11 @@
1737 crc = crc32(crc, buffer, length);
1738 }
1739 if (crc != original_crc) error();
1740 */
1741
1742 ZEXTERN uLong ZEXPORT crc32_z OF((uLong adler, const Bytef *buf,
1743 z_size_t len));
1744 /*
1745 Same as crc32(), but with a size_t length.
1746 */
1747
@@ -1752,10 +1755,24 @@
1752 seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
1753 calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32
1754 check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
1755 len2.
1756 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1757
1758
1759 /* various hacks, don't look :) */
1760
1761 /* deflateInit and inflateInit are macros to allow checking the zlib version
@@ -1840,10 +1857,11 @@
1840 ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
1841 ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
1842 ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
1843 ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));
1844 ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
 
1845 #endif
1846
1847 #if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
1848 # ifdef Z_PREFIX_SET
1849 # define z_gzopen z_gzopen64
@@ -1850,39 +1868,44 @@
1850 # define z_gzseek z_gzseek64
1851 # define z_gztell z_gztell64
1852 # define z_gzoffset z_gzoffset64
1853 # define z_adler32_combine z_adler32_combine64
1854 # define z_crc32_combine z_crc32_combine64
 
1855 # else
1856 # define gzopen gzopen64
1857 # define gzseek gzseek64
1858 # define gztell gztell64
1859 # define gzoffset gzoffset64
1860 # define adler32_combine adler32_combine64
1861 # define crc32_combine crc32_combine64
 
1862 # endif
1863 # ifndef Z_LARGE64
1864 ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
1865 ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
1866 ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
1867 ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));
1868 ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
1869 ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
 
1870 # endif
1871 #else
1872 ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
1873 ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));
1874 ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));
1875 ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));
1876 ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
1877 ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
 
1878 #endif
1879
1880 #else /* Z_SOLO */
1881
1882 ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
1883 ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
 
1884
1885 #endif /* !Z_SOLO */
1886
1887 /* undocumented functions */
1888 ZEXTERN const char * ZEXPORT zError OF((int));
@@ -1891,11 +1914,11 @@
1891 ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int));
1892 ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int));
1893 ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp));
1894 ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp));
1895 ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp));
1896 #if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(Z_SOLO)
1897 ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path,
1898 const char *mode));
1899 #endif
1900 #if defined(STDC) || defined(Z_HAVE_STDARG_H)
1901 # ifndef Z_SOLO
1902
--- compat/zlib/zlib.h
+++ compat/zlib/zlib.h
@@ -1,9 +1,9 @@
1 /* zlib.h -- interface of the 'zlib' general purpose compression library
2 version 1.2.12, March 11th, 2022
3
4 Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
5
6 This software is provided 'as-is', without any express or implied
7 warranty. In no event will the authors be held liable for any damages
8 arising from the use of this software.
9
@@ -35,15 +35,15 @@
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40 #define ZLIB_VERSION "1.2.12"
41 #define ZLIB_VERNUM 0x12c0
42 #define ZLIB_VER_MAJOR 1
43 #define ZLIB_VER_MINOR 2
44 #define ZLIB_VER_REVISION 12
45 #define ZLIB_VER_SUBREVISION 0
46
47 /*
48 The 'zlib' compression library provides in-memory compression and
49 decompression functions, including integrity checks of the uncompressed data.
@@ -541,12 +541,11 @@
541 int windowBits,
542 int memLevel,
543 int strategy));
544
545 This is another version of deflateInit with more compression options. The
546 fields zalloc, zfree and opaque must be initialized before by the caller.
 
547
548 The method parameter is the compression method. It must be Z_DEFLATED in
549 this version of the library.
550
551 The windowBits parameter is the base two logarithm of the window size
@@ -710,15 +709,16 @@
709 Dynamically update the compression level and compression strategy. The
710 interpretation of level and strategy is as in deflateInit2(). This can be
711 used to switch between compression and straight copy of the input data, or
712 to switch to a different kind of input data requiring a different strategy.
713 If the compression approach (which is a function of the level) or the
714 strategy is changed, and if there have been any deflate() calls since the
715 state was initialized or reset, then the input available so far is
716 compressed with the old level and strategy using deflate(strm, Z_BLOCK).
717 There are three approaches for the compression levels 0, 1..3, and 4..9
718 respectively. The new level and strategy will take effect at the next call
719 of deflate().
720
721 If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does
722 not have enough output space to complete, then the parameter change will not
723 take effect. In this case, deflateParams() can be called again with the
724 same parameters and more output space to try again.
@@ -863,13 +863,15 @@
863 windowBits can also be greater than 15 for optional gzip decoding. Add
864 32 to windowBits to enable zlib and gzip decoding with automatic header
865 detection, or add 16 to decode only the gzip format (the zlib format will
866 return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a
867 CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see
868 below), inflate() will *not* automatically decode concatenated gzip members.
869 inflate() will return Z_STREAM_END at the end of the gzip member. The state
870 would need to be reset to continue decoding a subsequent gzip member. This
871 *must* be done if there is more data after a gzip member, in order for the
872 decompression to be compliant with the gzip standard (RFC 1952).
873
874 inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
875 memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
876 version assumed by the caller, or Z_STREAM_ERROR if the parameters are
877 invalid, such as a null pointer to the structure. msg is set to null if
@@ -1300,18 +1302,18 @@
1302 typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */
1303
1304 /*
1305 ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
1306
1307 Open the gzip (.gz) file at path for reading and decompressing, or
1308 compressing and writing. The mode parameter is as in fopen ("rb" or "wb")
1309 but can also include a compression level ("wb9") or a strategy: 'f' for
1310 filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h",
1311 'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression
1312 as in "wb9F". (See the description of deflateInit2 for more information
1313 about the strategy parameter.) 'T' will request transparent writing or
1314 appending with no compression and not using the gzip format.
1315
1316 "a" can be used instead of "w" to request that the gzip stream that will
1317 be written be appended to the file. "+" will result in an error, since
1318 reading and writing to the same gzip file is not supported. The addition of
1319 "x" when writing will create the file exclusively, which fails if the file
@@ -1337,13 +1339,13 @@
1339 file could not be opened.
1340 */
1341
1342 ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
1343 /*
1344 Associate a gzFile with the file descriptor fd. File descriptors are
1345 obtained from calls like open, dup, creat, pipe or fileno (if the file has
1346 been previously opened with fopen). The mode parameter is as in gzopen.
1347
1348 The next call of gzclose on the returned gzFile will also close the file
1349 descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
1350 fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
1351 mode);. The duplicated descriptor should be saved to avoid a leak, since
@@ -1360,38 +1362,38 @@
1362 will not detect if fd is invalid (unless fd is -1).
1363 */
1364
1365 ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
1366 /*
1367 Set the internal buffer size used by this library's functions for file to
1368 size. The default buffer size is 8192 bytes. This function must be called
1369 after gzopen() or gzdopen(), and before any other calls that read or write
1370 the file. The buffer memory allocation is always deferred to the first read
1371 or write. Three times that size in buffer space is allocated. A larger
1372 buffer size of, for example, 64K or 128K bytes will noticeably increase the
1373 speed of decompression (reading).
1374
1375 The new buffer size also affects the maximum length for gzprintf().
1376
1377 gzbuffer() returns 0 on success, or -1 on failure, such as being called
1378 too late.
1379 */
1380
1381 ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
1382 /*
1383 Dynamically update the compression level and strategy for file. See the
1384 description of deflateInit2 for the meaning of these parameters. Previously
1385 provided data is flushed before applying the parameter changes.
1386
1387 gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not
1388 opened for writing, Z_ERRNO if there is an error writing the flushed data,
1389 or Z_MEM_ERROR if there is a memory allocation error.
1390 */
1391
1392 ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
1393 /*
1394 Read and decompress up to len uncompressed bytes from file into buf. If
1395 the input file is not in gzip format, gzread copies the given number of
1396 bytes into the buffer directly from the file.
1397
1398 After reaching the end of a gzip stream in the input, gzread will continue
1399 to read, looking for another gzip stream. Any number of gzip streams may be
@@ -1418,15 +1420,15 @@
1420 */
1421
1422 ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems,
1423 gzFile file));
1424 /*
1425 Read and decompress up to nitems items of size size from file into buf,
1426 otherwise operating as gzread() does. This duplicates the interface of
1427 stdio's fread(), with size_t request and return types. If the library
1428 defines size_t, then z_size_t is identical to size_t. If not, then z_size_t
1429 is an unsigned integer type that can contain a pointer.
1430
1431 gzfread() returns the number of full items read of size size, or zero if
1432 the end of the file was reached and a full item could not be read, or if
1433 there was an error. gzerror() must be consulted if zero is returned in
1434 order to determine if there was an error. If the multiplication of size and
@@ -1441,22 +1443,20 @@
1443 is the same as the behavior of fread() implementations in common libraries,
1444 but it prevents the direct use of gzfread() to read a concurrently written
1445 file, reseting and retrying on end-of-file, when size is not 1.
1446 */
1447
1448 ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len));
 
1449 /*
1450 Compress and write the len uncompressed bytes at buf to file. gzwrite
1451 returns the number of uncompressed bytes written or 0 in case of error.
 
1452 */
1453
1454 ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size,
1455 z_size_t nitems, gzFile file));
1456 /*
1457 Compress and write nitems items of size size from buf to file, duplicating
1458 the interface of stdio's fwrite(), with size_t request and return types. If
1459 the library defines size_t, then z_size_t is identical to size_t. If not,
1460 then z_size_t is an unsigned integer type that can contain a pointer.
1461
1462 gzfwrite() returns the number of full items written of size size, or zero
@@ -1465,63 +1465,64 @@
1465 is returned, and the error state is set to Z_STREAM_ERROR.
1466 */
1467
1468 ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
1469 /*
1470 Convert, format, compress, and write the arguments (...) to file under
1471 control of the string format, as in fprintf. gzprintf returns the number of
1472 uncompressed bytes actually written, or a negative zlib error code in case
1473 of error. The number of uncompressed bytes written is limited to 8191, or
1474 one less than the buffer size given to gzbuffer(). The caller should assure
1475 that this limit is not exceeded. If it is exceeded, then gzprintf() will
1476 return an error (0) with nothing written. In this case, there may also be a
1477 buffer overflow with unpredictable consequences, which is possible only if
1478 zlib was compiled with the insecure functions sprintf() or vsprintf(),
1479 because the secure snprintf() or vsnprintf() functions were not available.
1480 This can be determined using zlibCompileFlags().
1481 */
1482
1483 ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
1484 /*
1485 Compress and write the given null-terminated string s to file, excluding
1486 the terminating null character.
1487
1488 gzputs returns the number of characters written, or -1 in case of error.
1489 */
1490
1491 ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
1492 /*
1493 Read and decompress bytes from file into buf, until len-1 characters are
1494 read, or until a newline character is read and transferred to buf, or an
1495 end-of-file condition is encountered. If any characters are read or if len
1496 is one, the string is terminated with a null character. If no characters
1497 are read due to an end-of-file or len is less than one, then the buffer is
1498 left untouched.
1499
1500 gzgets returns buf which is a null-terminated string, or it returns NULL
1501 for end-of-file or in case of error. If there was an error, the contents at
1502 buf are indeterminate.
1503 */
1504
1505 ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
1506 /*
1507 Compress and write c, converted to an unsigned char, into file. gzputc
1508 returns the value that was written, or -1 in case of error.
1509 */
1510
1511 ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
1512 /*
1513 Read and decompress one byte from file. gzgetc returns this byte or -1
1514 in case of end of file or error. This is implemented as a macro for speed.
1515 As such, it does not do all of the checking the other functions do. I.e.
1516 it does not check to see if file is NULL, nor whether the structure file
1517 points to has been clobbered or not.
1518 */
1519
1520 ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
1521 /*
1522 Push c back onto the stream for file to be read as the first character on
1523 the next read. At least one character of push-back is always allowed.
1524 gzungetc() returns the character pushed, or -1 on failure. gzungetc() will
1525 fail if c is -1, and may fail if a character has been pushed but not read
1526 yet. If gzungetc is used immediately after gzopen or gzdopen, at least the
1527 output buffer size of pushed characters is allowed. (See gzbuffer above.)
1528 The pushed character will be discarded if the stream is repositioned with
@@ -1528,13 +1529,13 @@
1529 gzseek() or gzrewind().
1530 */
1531
1532 ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
1533 /*
1534 Flush all pending output to file. The parameter flush is as in the
1535 deflate() function. The return value is the zlib error number (see function
1536 gzerror below). gzflush is only permitted when writing.
1537
1538 If the flush parameter is Z_FINISH, the remaining data is written and the
1539 gzip stream is completed in the output. If gzwrite() is called again, a new
1540 gzip stream will be started in the output. gzread() is able to read such
1541 concatenated gzip streams.
@@ -1545,12 +1546,12 @@
1546
1547 /*
1548 ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
1549 z_off_t offset, int whence));
1550
1551 Set the starting position to offset relative to whence for the next gzread
1552 or gzwrite on file. The offset represents a number of bytes in the
1553 uncompressed data stream. The whence parameter is defined as in lseek(2);
1554 the value SEEK_END is not supported.
1555
1556 If the file is opened for reading, this function is emulated but can be
1557 extremely slow. If the file is opened for writing, only forward seeks are
@@ -1563,54 +1564,54 @@
1564 would be before the current position.
1565 */
1566
1567 ZEXTERN int ZEXPORT gzrewind OF((gzFile file));
1568 /*
1569 Rewind file. This function is supported only for reading.
1570
1571 gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET).
1572 */
1573
1574 /*
1575 ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file));
1576
1577 Return the starting position for the next gzread or gzwrite on file.
1578 This position represents a number of bytes in the uncompressed data stream,
1579 and is zero when starting, even if appending or reading a gzip stream from
1580 the middle of a file using gzdopen().
1581
1582 gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
1583 */
1584
1585 /*
1586 ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));
1587
1588 Return the current compressed (actual) read or write offset of file. This
1589 offset includes the count of bytes that precede the gzip stream, for example
1590 when appending or when using gzdopen() for reading. When reading, the
1591 offset does not include as yet unused buffered input. This information can
1592 be used for a progress indicator. On error, gzoffset() returns -1.
1593 */
1594
1595 ZEXTERN int ZEXPORT gzeof OF((gzFile file));
1596 /*
1597 Return true (1) if the end-of-file indicator for file has been set while
1598 reading, false (0) otherwise. Note that the end-of-file indicator is set
1599 only if the read tried to go past the end of the input, but came up short.
1600 Therefore, just like feof(), gzeof() may return false even if there is no
1601 more data to read, in the event that the last read request was for the exact
1602 number of bytes remaining in the input file. This will happen if the input
1603 file size is an exact multiple of the buffer size.
1604
1605 If gzeof() returns true, then the read functions will return no more data,
1606 unless the end-of-file indicator is reset by gzclearerr() and the input file
1607 has grown since the previous end of file was detected.
1608 */
1609
1610 ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
1611 /*
1612 Return true (1) if file is being copied directly while reading, or false
1613 (0) if file is a gzip stream being decompressed.
1614
1615 If the input file is empty, gzdirect() will return true, since the input
1616 does not contain a gzip stream.
1617
@@ -1627,12 +1628,12 @@
1628 gzip file reading and decompression, which may not be desired.)
1629 */
1630
1631 ZEXTERN int ZEXPORT gzclose OF((gzFile file));
1632 /*
1633 Flush all pending output for file, if necessary, close file and
1634 deallocate the (de)compression state. Note that once file is closed, you
1635 cannot call gzerror with file, since its structures have been deallocated.
1636 gzclose must not be called more than once on the same file, just as free
1637 must not be called more than once on the same allocation.
1638
1639 gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
@@ -1652,14 +1653,14 @@
1653 zlib library.
1654 */
1655
1656 ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
1657 /*
1658 Return the error message for the last error which occurred on file.
1659 errnum is set to zlib error number. If an error occurred in the file system
1660 and not in the compression library, errnum is set to Z_ERRNO and the
1661 application may consult errno to get the exact error code.
1662
1663 The application must not modify the returned string. Future calls to
1664 this function may invalidate the previously returned string. If file is
1665 closed, then the string previously returned by gzerror will no longer be
1666 available.
@@ -1668,11 +1669,11 @@
1669 functions above that do not distinguish those cases in their return values.
1670 */
1671
1672 ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
1673 /*
1674 Clear the error and end-of-file flags for file. This is analogous to the
1675 clearerr() function in stdio. This is useful for continuing to read a gzip
1676 file that is being written concurrently.
1677 */
1678
1679 #endif /* !Z_SOLO */
@@ -1686,12 +1687,13 @@
1687 */
1688
1689 ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
1690 /*
1691 Update a running Adler-32 checksum with the bytes buf[0..len-1] and
1692 return the updated checksum. An Adler-32 value is in the range of a 32-bit
1693 unsigned integer. If buf is Z_NULL, this function returns the required
1694 initial value for the checksum.
1695
1696 An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed
1697 much faster.
1698
1699 Usage example:
@@ -1720,16 +1722,17 @@
1722 seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note
1723 that the z_off_t type (like off_t) is a signed integer. If len2 is
1724 negative, the result has no meaning or utility.
1725 */
1726
1727 ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
1728 /*
1729 Update a running CRC-32 with the bytes buf[0..len-1] and return the
1730 updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer.
1731 If buf is Z_NULL, this function returns the required initial value for the
1732 crc. Pre- and post-conditioning (one's complement) is performed within this
1733 function so it shouldn't be done by the application.
1734
1735 Usage example:
1736
1737 uLong crc = crc32(0L, Z_NULL, 0);
1738
@@ -1737,11 +1740,11 @@
1740 crc = crc32(crc, buffer, length);
1741 }
1742 if (crc != original_crc) error();
1743 */
1744
1745 ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf,
1746 z_size_t len));
1747 /*
1748 Same as crc32(), but with a size_t length.
1749 */
1750
@@ -1752,10 +1755,24 @@
1755 seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
1756 calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32
1757 check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
1758 len2.
1759 */
1760
1761 /*
1762 ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t len2));
1763
1764 Return the operator corresponding to length len2, to be used with
1765 crc32_combine_op().
1766 */
1767
1768 ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op));
1769 /*
1770 Give the same result as crc32_combine(), using op in place of len2. op is
1771 is generated from len2 by crc32_combine_gen(). This will be faster than
1772 crc32_combine() if the generated op is used more than once.
1773 */
1774
1775
1776 /* various hacks, don't look :) */
1777
1778 /* deflateInit and inflateInit are macros to allow checking the zlib version
@@ -1840,10 +1857,11 @@
1857 ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
1858 ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
1859 ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
1860 ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));
1861 ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
1862 ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off64_t));
1863 #endif
1864
1865 #if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
1866 # ifdef Z_PREFIX_SET
1867 # define z_gzopen z_gzopen64
@@ -1850,39 +1868,44 @@
1868 # define z_gzseek z_gzseek64
1869 # define z_gztell z_gztell64
1870 # define z_gzoffset z_gzoffset64
1871 # define z_adler32_combine z_adler32_combine64
1872 # define z_crc32_combine z_crc32_combine64
1873 # define z_crc32_combine_gen z_crc32_combine_gen64
1874 # else
1875 # define gzopen gzopen64
1876 # define gzseek gzseek64
1877 # define gztell gztell64
1878 # define gzoffset gzoffset64
1879 # define adler32_combine adler32_combine64
1880 # define crc32_combine crc32_combine64
1881 # define crc32_combine_gen crc32_combine_gen64
1882 # endif
1883 # ifndef Z_LARGE64
1884 ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
1885 ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
1886 ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
1887 ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));
1888 ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
1889 ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
1890 ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t));
1891 # endif
1892 #else
1893 ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
1894 ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));
1895 ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));
1896 ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));
1897 ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
1898 ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
1899 ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t));
1900 #endif
1901
1902 #else /* Z_SOLO */
1903
1904 ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
1905 ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
1906 ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t));
1907
1908 #endif /* !Z_SOLO */
1909
1910 /* undocumented functions */
1911 ZEXTERN const char * ZEXPORT zError OF((int));
@@ -1891,11 +1914,11 @@
1914 ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int));
1915 ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int));
1916 ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp));
1917 ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp));
1918 ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp));
1919 #if defined(_WIN32) && !defined(Z_SOLO)
1920 ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path,
1921 const char *mode));
1922 #endif
1923 #if defined(STDC) || defined(Z_HAVE_STDARG_H)
1924 # ifndef Z_SOLO
1925
--- compat/zlib/zlib.map
+++ compat/zlib/zlib.map
@@ -90,5 +90,11 @@
9090
gzfwrite;
9191
deflateGetDictionary;
9292
adler32_z;
9393
crc32_z;
9494
} ZLIB_1.2.7.1;
95
+
96
+ZLIB_1.2.12 {
97
+ crc32_combine_gen;
98
+ crc32_combine_gen64;
99
+ crc32_combine_op;
100
+} ZLIB_1.2.9;
95101
--- compat/zlib/zlib.map
+++ compat/zlib/zlib.map
@@ -90,5 +90,11 @@
90 gzfwrite;
91 deflateGetDictionary;
92 adler32_z;
93 crc32_z;
94 } ZLIB_1.2.7.1;
 
 
 
 
 
 
95
--- compat/zlib/zlib.map
+++ compat/zlib/zlib.map
@@ -90,5 +90,11 @@
90 gzfwrite;
91 deflateGetDictionary;
92 adler32_z;
93 crc32_z;
94 } ZLIB_1.2.7.1;
95
96 ZLIB_1.2.12 {
97 crc32_combine_gen;
98 crc32_combine_gen64;
99 crc32_combine_op;
100 } ZLIB_1.2.9;
101
--- compat/zlib/zutil.c
+++ compat/zlib/zutil.c
@@ -134,12 +134,12 @@
134134
int err;
135135
{
136136
return ERR_MSG(err);
137137
}
138138
139
-#if defined(_WIN32_WCE)
140
- /* The Microsoft C Run-Time Library for Windows CE doesn't have
139
+#if defined(_WIN32_WCE) && _WIN32_WCE < 0x800
140
+ /* The older Microsoft C Run-Time Library for Windows CE doesn't have
141141
* errno. We define it as a global variable to simplify porting.
142142
* Its value is always 0 and should not be used.
143143
*/
144144
int errno = 0;
145145
#endif
146146
--- compat/zlib/zutil.c
+++ compat/zlib/zutil.c
@@ -134,12 +134,12 @@
134 int err;
135 {
136 return ERR_MSG(err);
137 }
138
139 #if defined(_WIN32_WCE)
140 /* The Microsoft C Run-Time Library for Windows CE doesn't have
141 * errno. We define it as a global variable to simplify porting.
142 * Its value is always 0 and should not be used.
143 */
144 int errno = 0;
145 #endif
146
--- compat/zlib/zutil.c
+++ compat/zlib/zutil.c
@@ -134,12 +134,12 @@
134 int err;
135 {
136 return ERR_MSG(err);
137 }
138
139 #if defined(_WIN32_WCE) && _WIN32_WCE < 0x800
140 /* The older Microsoft C Run-Time Library for Windows CE doesn't have
141 * errno. We define it as a global variable to simplify porting.
142 * Its value is always 0 and should not be used.
143 */
144 int errno = 0;
145 #endif
146
--- compat/zlib/zutil.h
+++ compat/zlib/zutil.h
@@ -1,7 +1,7 @@
11
/* zutil.h -- internal interface and configuration of the compression library
2
- * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
2
+ * Copyright (C) 1995-2022 Jean-loup Gailly, Mark Adler
33
* For conditions of distribution and use, see copyright notice in zlib.h
44
*/
55
66
/* WARNING: this file should *not* be used by applications. It is
77
part of the implementation of the compression library and is
@@ -27,14 +27,10 @@
2727
# endif
2828
# include <string.h>
2929
# include <stdlib.h>
3030
#endif
3131
32
-#ifdef Z_SOLO
33
- typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */
34
-#endif
35
-
3632
#ifndef local
3733
# define local static
3834
#endif
3935
/* since "static" is used to mean two completely different things in C, we
4036
define "local" for the non-static meaning of "static", for readability
@@ -43,10 +39,21 @@
4339
typedef unsigned char uch;
4440
typedef uch FAR uchf;
4541
typedef unsigned short ush;
4642
typedef ush FAR ushf;
4743
typedef unsigned long ulg;
44
+
45
+#if !defined(Z_U8) && !defined(Z_SOLO) && defined(STDC)
46
+# include <limits.h>
47
+# if (ULONG_MAX == 0xffffffffffffffff)
48
+# define Z_U8 unsigned long
49
+# elif (ULLONG_MAX == 0xffffffffffffffff)
50
+# define Z_U8 unsigned long long
51
+# elif (UINT_MAX == 0xffffffffffffffff)
52
+# define Z_U8 unsigned
53
+# endif
54
+#endif
4855
4956
extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
5057
/* (size given to avoid silly warnings with Visual C++) */
5158
5259
#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
@@ -168,14 +175,10 @@
168175
#endif
169176
170177
#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
171178
# if defined(_WIN32_WCE)
172179
# define fdopen(fd,mode) NULL /* No fdopen() */
173
-# ifndef _PTRDIFF_T_DEFINED
174
- typedef int ptrdiff_t;
175
-# define _PTRDIFF_T_DEFINED
176
-# endif
177180
# else
178181
# define fdopen(fd,type) _fdopen(fd,type)
179182
# endif
180183
#endif
181184
182185
183186
ADDED containers/Dockerfile-nojail.patch
184187
ADDED containers/busybox-config
--- compat/zlib/zutil.h
+++ compat/zlib/zutil.h
@@ -1,7 +1,7 @@
1 /* zutil.h -- internal interface and configuration of the compression library
2 * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 /* WARNING: this file should *not* be used by applications. It is
7 part of the implementation of the compression library and is
@@ -27,14 +27,10 @@
27 # endif
28 # include <string.h>
29 # include <stdlib.h>
30 #endif
31
32 #ifdef Z_SOLO
33 typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */
34 #endif
35
36 #ifndef local
37 # define local static
38 #endif
39 /* since "static" is used to mean two completely different things in C, we
40 define "local" for the non-static meaning of "static", for readability
@@ -43,10 +39,21 @@
43 typedef unsigned char uch;
44 typedef uch FAR uchf;
45 typedef unsigned short ush;
46 typedef ush FAR ushf;
47 typedef unsigned long ulg;
 
 
 
 
 
 
 
 
 
 
 
48
49 extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
50 /* (size given to avoid silly warnings with Visual C++) */
51
52 #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
@@ -168,14 +175,10 @@
168 #endif
169
170 #if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
171 # if defined(_WIN32_WCE)
172 # define fdopen(fd,mode) NULL /* No fdopen() */
173 # ifndef _PTRDIFF_T_DEFINED
174 typedef int ptrdiff_t;
175 # define _PTRDIFF_T_DEFINED
176 # endif
177 # else
178 # define fdopen(fd,type) _fdopen(fd,type)
179 # endif
180 #endif
181
182
183 DDED containers/Dockerfile-nojail.patch
184 DDED containers/busybox-config
--- compat/zlib/zutil.h
+++ compat/zlib/zutil.h
@@ -1,7 +1,7 @@
1 /* zutil.h -- internal interface and configuration of the compression library
2 * Copyright (C) 1995-2022 Jean-loup Gailly, Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 /* WARNING: this file should *not* be used by applications. It is
7 part of the implementation of the compression library and is
@@ -27,14 +27,10 @@
27 # endif
28 # include <string.h>
29 # include <stdlib.h>
30 #endif
31
 
 
 
 
32 #ifndef local
33 # define local static
34 #endif
35 /* since "static" is used to mean two completely different things in C, we
36 define "local" for the non-static meaning of "static", for readability
@@ -43,10 +39,21 @@
39 typedef unsigned char uch;
40 typedef uch FAR uchf;
41 typedef unsigned short ush;
42 typedef ush FAR ushf;
43 typedef unsigned long ulg;
44
45 #if !defined(Z_U8) && !defined(Z_SOLO) && defined(STDC)
46 # include <limits.h>
47 # if (ULONG_MAX == 0xffffffffffffffff)
48 # define Z_U8 unsigned long
49 # elif (ULLONG_MAX == 0xffffffffffffffff)
50 # define Z_U8 unsigned long long
51 # elif (UINT_MAX == 0xffffffffffffffff)
52 # define Z_U8 unsigned
53 # endif
54 #endif
55
56 extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
57 /* (size given to avoid silly warnings with Visual C++) */
58
59 #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
@@ -168,14 +175,10 @@
175 #endif
176
177 #if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
178 # if defined(_WIN32_WCE)
179 # define fdopen(fd,mode) NULL /* No fdopen() */
 
 
 
 
180 # else
181 # define fdopen(fd,type) _fdopen(fd,type)
182 # endif
183 #endif
184
185
186 DDED containers/Dockerfile-nojail.patch
187 DDED containers/busybox-config
--- a/containers/Dockerfile-nojail.patch
+++ b/containers/Dockerfile-nojail.patch
@@ -0,0 +1,11 @@
1
+Index: Doc62,13 +62: DocIndebbx/busybox /bin/
2
+ etc/os-release /etc/
3
+@@ -84,19 +84,17 @@
4
+ 61,13 +61fossil", "server",101,13 +101,13 @@
5
+ 18,10 +118,9 @@
6
+ ## x:0:0:SysAdmin:/:/bin/nologin' > /etc/passwd9@GO,U:\
7
+ && echo 'root:x:0:root'M@N0,C:> /etc/groupA@Hc,b:\
8
+ && addgroup -S -g ${UID} fossilj@N0,1v:adduser -S -h `pwd` -g 'Fossil User' -G fossil -u ${UID} fossil \
9
+- && install -d -m 700 -o fossil -g fossil log museumG@NG,o:\
10
+- && install -d -m 755 -o fossil -g fossil devN@N0,3:\
11
+-19@AQ,1:-b@B_,t:+ && install -d -m 700 -o fossil -g fossil log museum26@C9,1: a@EG,1f@FW,_@HE,L@Hj,B:bin/fossil a@HD,f@LC,R:ha1sum "$@"' > /bin/sha1sum9@GO,b@LG,F:ha3sum "$@"' > H@K~,1P@LC,w@Me,O@NW,f:bin/sha?sum
--- a/containers/Dockerfile-nojail.patch
+++ b/containers/Dockerfile-nojail.patch
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
--- a/containers/Dockerfile-nojail.patch
+++ b/containers/Dockerfile-nojail.patch
@@ -0,0 +1,11 @@
1 Index: Doc62,13 +62: DocIndebbx/busybox /bin/
2 etc/os-release /etc/
3 @@ -84,19 +84,17 @@
4 61,13 +61fossil", "server",101,13 +101,13 @@
5 18,10 +118,9 @@
6 ## x:0:0:SysAdmin:/:/bin/nologin' > /etc/passwd9@GO,U:\
7 && echo 'root:x:0:root'M@N0,C:> /etc/groupA@Hc,b:\
8 && addgroup -S -g ${UID} fossilj@N0,1v:adduser -S -h `pwd` -g 'Fossil User' -G fossil -u ${UID} fossil \
9 - && install -d -m 700 -o fossil -g fossil log museumG@NG,o:\
10 - && install -d -m 755 -o fossil -g fossil devN@N0,3:\
11 -19@AQ,1:-b@B_,t:+ && install -d -m 700 -o fossil -g fossil log museum26@C9,1: a@EG,1f@FW,_@HE,L@Hj,B:bin/fossil a@HD,f@LC,R:ha1sum "$@"' > /bin/sha1sum9@GO,b@LG,F:ha3sum "$@"' > H@K~,1P@LC,w@Me,O@NW,f:bin/sha?sum
--- a/containers/busybox-config
+++ b/containers/busybox-config
@@ -0,0 +1,1200 @@
1
+#
2
+# Automatically generated make config: don't edit
3
+# Busybox version: 1.35.0
4
+# Tue Aug 16 02:15:21 2022
5
+#
6
+CONFIG_HAVE_DOT_CONFIG=y
7
+
8
+#
9
+# Settings
10
+#
11
+CONFIG_DESKTOP=y
12
+# CONFIG_EXTRA_COMPAT is not set
13
+# CONFIG_FEDORA_COMPAT is not set
14
+CONFIG_INCLUDE_SUSv2=y
15
+CONFIG_LONG_OPTS=y
16
+CONFIG_SHOW_USAGE=y
17
+CONFIG_FEATURE_VERBOSE_USAGE=y
18
+CONFIG_FEATURE_COMPRESS_USAGE=y
19
+CONFIG_LFS=y
20
+# CONFIG_PAM is not set
21
+CONFIG_FEATURE_DEVPTS=y
22
+CONFIG_FEATURE_UTMP=y
23
+CONFIG_FEATURE_WTMP=y
24
+CONFIG_FEATURE_PIDFILE=y
25
+CONFIG_PID_FILE_PATH="/var/run"
26
+CONFIG_BUSYBOX=y
27
+CONFIG_FEATURE_SHOW_SCRIPT=y
28
+CONFIG_FEATURE_INSTALLER=y
29
+# CONFIG_INSTALL_NO_USR is not set
30
+CONFIG_FEATURE_SUID=y
31
+CONFIG_FEATURE_SUID_CONFIG=y
32
+CONFIG_FEATURE_SUID_CONFIG_QUIET=y
33
+# CONFIG_FEATURE_PREFER_APPLETS is not set
34
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
35
+# CONFIG_SELINUX is not set
36
+# CONFIG_FEATURE_CLEAN_UP is not set
37
+CONFIG_FEATURE_SYSLOG_INFO=y
38
+CONFIG_FEATURE_SYSLOG=y
39
+
40
+#
41
+# Build Options
42
+#
43
+CONFIG_STATIC=y
44
+# CONFIG_PIE is not set
45
+# CONFIG_NOMMU is not set
46
+# CONFIG_BUILD_LIBBUSYBOX is not set
47
+# CONFIG_FEATURE_LIBBUSYBOX_STATIC is not set
48
+# CONFIG_FEATURE_INDIVIDUAL is not set
49
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
50
+CONFIG_CROSS_COMPILER_PREFIX=""
51
+CONFIG_SYSROOT=""
52
+CONFIG_EXTRA_CFLAGS=""
53
+CONFIG_EXTRA_LDFLAGS=""
54
+CONFIG_EXTRA_LDLIBS=""
55
+# CONFIG_USE_PORTABLE_CODE is not set
56
+CONFIG_STACK_OPTIMIZATION_386=y
57
+CONFIG_STATIC_LIBGCC=y
58
+
59
+#
60
+# Installation Options ("make install" behavior)
61
+#
62
+CONFIG_INSTALL_APPLET_SYMLINKS=y
63
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
64
+# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
65
+# CONFIG_INSTALL_APPLET_DONT is not set
66
+# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
67
+# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
68
+# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
69
+CONFIG_PREFIX="./_install"
70
+
71
+#
72
+# Debugging Options
73
+#
74
+# CONFIG_DEBUG is not set
75
+# CONFIG_DEBUG_PESSIMIZE is not set
76
+# CONFIG_DEBUG_SANITIZE is not set
77
+# CONFIG_UNIT_TEST is not set
78
+# CONFIG_WERROR is not set
79
+# CONFIG_WARN_SIMPLE_MSG is not set
80
+CONFIG_NO_DEBUG_LIB=y
81
+# CONFIG_DMALLOC is not set
82
+# CONFIG_EFENCE is not set
83
+
84
+#
85
+# Library Tuning
86
+#
87
+# CONFIG_FEATURE_USE_BSS_TAIL is not set
88
+CONFIG_FLOAT_DURATION=y
89
+CONFIG_FEATURE_RTMINMAX=y
90
+CONFIG_FEATURE_RTMINMAX_USE_LIBC_DEFINITIONS=y
91
+CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
92
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
93
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
94
+CONFIG_PASSWORD_MINLEN=6
95
+CONFIG_MD5_SMALL=1
96
+CONFIG_SHA3_SMALL=1
97
+CONFIG_FEATURE_NON_POSIX_CP=y
98
+# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set
99
+CONFIG_FEATURE_USE_SENDFILE=y
100
+CONFIG_FEATURE_COPYBUF_KB=4
101
+CONFIG_MONOTONIC_SYSCALL=y
102
+CONFIG_IOCTL_HEX2STR_ERROR=y
103
+CONFIG_FEATURE_EDITING=y
104
+CONFIG_FEATURE_EDITING_MAX_LEN=1024
105
+# CONFIG_FEATURE_EDITING_VI is not set
106
+CONFIG_FEATURE_EDITING_HISTORY=255
107
+CONFIG_FEATURE_EDITING_SAVEHISTORY=y
108
+# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set
109
+CONFIG_FEATURE_REVERSE_SEARCH=y
110
+CONFIG_FEATURE_TAB_COMPLETION=y
111
+CONFIG_FEATURE_USERNAME_COMPLETION=y
112
+CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
113
+CONFIG_FEATURE_EDITING_WINCH=y
114
+# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
115
+# CONFIG_LOCALE_SUPPORT is not set
116
+CONFIG_UNICODE_SUPPORT=y
117
+# CONFIG_UNICODE_USING_LOCALE is not set
118
+# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
119
+CONFIG_SUBST_WCHAR=63
120
+CONFIG_LAST_SUPPORTED_WCHAR=767
121
+# CONFIG_UNICODE_COMBINING_WCHARS is not set
122
+# CONFIG_UNICODE_WIDE_WCHARS is not set
123
+# CONFIG_UNICODE_BIDI_SUPPORT is not set
124
+# CONFIG_UNICODE_NEUTRAL_TABLE is not set
125
+# CONFIG_UNICODE_PRESERVE_BROKEN is not set
126
+
127
+#
128
+# Applets
129
+#
130
+
131
+#
132
+# Archival Utilities
133
+#
134
+# CONFIG_FEATURE_SEAMLESS_XZ is not set
135
+# CONFIG_FEATURE_SEAMLESS_LZMA is not set
136
+# CONFIG_FEATURE_SEAMLESS_BZ2 is not set
137
+CONFIG_FEATURE_SEAMLESS_GZ=y
138
+# CONFIG_FEATURE_SEAMLESS_Z is not set
139
+# CONFIG_AR is not set
140
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
141
+# CONFIG_FEATURE_AR_CREATE is not set
142
+# CONFIG_UNCOMPRESS is not set
143
+CONFIG_GUNZIP=y
144
+CONFIG_ZCAT=y
145
+CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y
146
+# CONFIG_BUNZIP2 is not set
147
+# CONFIG_BZCAT is not set
148
+# CONFIG_UNLZMA is not set
149
+# CONFIG_LZCAT is not set
150
+# CONFIG_LZMA is not set
151
+# CONFIG_UNXZ is not set
152
+# CONFIG_XZCAT is not set
153
+# CONFIG_XZ is not set
154
+# CONFIG_BZIP2 is not set
155
+CONFIG_BZIP2_SMALL=0
156
+# CONFIG_FEATURE_BZIP2_DECOMPRESS is not set
157
+# CONFIG_CPIO is not set
158
+# CONFIG_FEATURE_CPIO_O is not set
159
+# CONFIG_FEATURE_CPIO_P is not set
160
+# CONFIG_FEATURE_CPIO_IGNORE_DEVNO is not set
161
+# CONFIG_FEATURE_CPIO_RENUMBER_INODES is not set
162
+# CONFIG_DPKG is not set
163
+# CONFIG_DPKG_DEB is not set
164
+CONFIG_GZIP=y
165
+CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
166
+CONFIG_GZIP_FAST=0
167
+# CONFIG_FEATURE_GZIP_LEVELS is not set
168
+CONFIG_FEATURE_GZIP_DECOMPRESS=y
169
+# CONFIG_LZOP is not set
170
+# CONFIG_UNLZOP is not set
171
+# CONFIG_LZOPCAT is not set
172
+# CONFIG_LZOP_COMPR_HIGH is not set
173
+# CONFIG_RPM is not set
174
+# CONFIG_RPM2CPIO is not set
175
+CONFIG_TAR=y
176
+CONFIG_FEATURE_TAR_LONG_OPTIONS=y
177
+CONFIG_FEATURE_TAR_CREATE=y
178
+CONFIG_FEATURE_TAR_AUTODETECT=y
179
+CONFIG_FEATURE_TAR_FROM=y
180
+# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
181
+# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
182
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
183
+# CONFIG_FEATURE_TAR_TO_COMMAND is not set
184
+CONFIG_FEATURE_TAR_UNAME_GNAME=y
185
+CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
186
+# CONFIG_FEATURE_TAR_SELINUX is not set
187
+CONFIG_UNZIP=y
188
+CONFIG_FEATURE_UNZIP_CDF=y
189
+CONFIG_FEATURE_UNZIP_BZIP2=y
190
+CONFIG_FEATURE_UNZIP_LZMA=y
191
+CONFIG_FEATURE_UNZIP_XZ=y
192
+# CONFIG_FEATURE_LZMA_FAST is not set
193
+
194
+#
195
+# Coreutils
196
+#
197
+CONFIG_FEATURE_VERBOSE=y
198
+
199
+#
200
+# Common options for date and touch
201
+#
202
+CONFIG_FEATURE_TIMEZONE=y
203
+
204
+#
205
+# Common options for cp and mv
206
+#
207
+CONFIG_FEATURE_PRESERVE_HARDLINKS=y
208
+
209
+#
210
+# Common options for df, du, ls
211
+#
212
+CONFIG_FEATURE_HUMAN_READABLE=y
213
+CONFIG_BASENAME=y
214
+CONFIG_CAT=y
215
+CONFIG_FEATURE_CATN=y
216
+CONFIG_FEATURE_CATV=y
217
+CONFIG_CHGRP=y
218
+CONFIG_CHMOD=y
219
+CONFIG_CHOWN=y
220
+CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y
221
+CONFIG_CHROOT=y
222
+# CONFIG_CKSUM is not set
223
+# CONFIG_CRC32 is not set
224
+CONFIG_COMM=y
225
+CONFIG_CP=y
226
+CONFIG_FEATURE_CP_LONG_OPTIONS=y
227
+CONFIG_FEATURE_CP_REFLINK=y
228
+CONFIG_CUT=y
229
+CONFIG_FEATURE_CUT_REGEX=y
230
+CONFIG_DATE=y
231
+CONFIG_FEATURE_DATE_ISOFMT=y
232
+# CONFIG_FEATURE_DATE_NANO is not set
233
+CONFIG_FEATURE_DATE_COMPAT=y
234
+CONFIG_DD=y
235
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
236
+CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
237
+CONFIG_FEATURE_DD_IBS_OBS=y
238
+CONFIG_FEATURE_DD_STATUS=y
239
+CONFIG_DF=y
240
+CONFIG_FEATURE_DF_FANCY=y
241
+CONFIG_FEATURE_SKIP_ROOTFS=y
242
+CONFIG_DIRNAME=y
243
+CONFIG_DOS2UNIX=y
244
+CONFIG_UNIX2DOS=y
245
+CONFIG_DU=y
246
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
247
+# CONFIG_ECHO is not set
248
+CONFIG_FEATURE_FANCY_ECHO=y
249
+CONFIG_ENV=y
250
+CONFIG_EXPAND=y
251
+CONFIG_UNEXPAND=y
252
+CONFIG_EXPR=y
253
+CONFIG_EXPR_MATH_SUPPORT_64=y
254
+# CONFIG_FACTOR is not set
255
+CONFIG_FALSE=y
256
+CONFIG_FOLD=y
257
+CONFIG_HEAD=y
258
+CONFIG_FEATURE_FANCY_HEAD=y
259
+CONFIG_HOSTID=y
260
+CONFIG_ID=y
261
+CONFIG_GROUPS=y
262
+CONFIG_INSTALL=y
263
+CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y
264
+CONFIG_LINK=y
265
+CONFIG_LN=y
266
+# CONFIG_LOGNAME is not set
267
+CONFIG_LS=y
268
+CONFIG_FEATURE_LS_FILETYPES=y
269
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
270
+CONFIG_FEATURE_LS_RECURSIVE=y
271
+CONFIG_FEATURE_LS_WIDTH=y
272
+CONFIG_FEATURE_LS_SORTFILES=y
273
+CONFIG_FEATURE_LS_TIMESTAMPS=y
274
+CONFIG_FEATURE_LS_USERNAME=y
275
+CONFIG_FEATURE_LS_COLOR=y
276
+CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
277
+# CONFIG_MD5SUM is not set
278
+# CONFIG_SHA1SUM is not set
279
+# CONFIG_SHA256SUM is not set
280
+# CONFIG_SHA512SUM is not set
281
+# CONFIG_SHA3SUM is not set
282
+# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set
283
+CONFIG_MKDIR=y
284
+CONFIG_MKFIFO=y
285
+CONFIG_MKNOD=y
286
+CONFIG_MKTEMP=y
287
+CONFIG_MV=y
288
+CONFIG_NICE=y
289
+CONFIG_NL=y
290
+CONFIG_NOHUP=y
291
+CONFIG_NPROC=y
292
+CONFIG_OD=y
293
+CONFIG_PASTE=y
294
+# CONFIG_PRINTENV is not set
295
+# CONFIG_PRINTF is not set
296
+CONFIG_PWD=y
297
+CONFIG_READLINK=y
298
+CONFIG_FEATURE_READLINK_FOLLOW=y
299
+CONFIG_REALPATH=y
300
+CONFIG_RM=y
301
+CONFIG_RMDIR=y
302
+CONFIG_SEQ=y
303
+CONFIG_SHRED=y
304
+CONFIG_SHUF=y
305
+CONFIG_SLEEP=y
306
+CONFIG_FEATURE_FANCY_SLEEP=y
307
+CONFIG_SORT=y
308
+# CONFIG_FEATURE_SORT_BIG is not set
309
+# CONFIG_FEATURE_SORT_OPTIMIZE_MEMORY is not set
310
+CONFIG_SPLIT=y
311
+CONFIG_FEATURE_SPLIT_FANCY=y
312
+CONFIG_STAT=y
313
+CONFIG_FEATURE_STAT_FORMAT=y
314
+CONFIG_FEATURE_STAT_FILESYSTEM=y
315
+CONFIG_STTY=y
316
+# CONFIG_SUM is not set
317
+CONFIG_SYNC=y
318
+CONFIG_FEATURE_SYNC_FANCY=y
319
+CONFIG_FSYNC=y
320
+CONFIG_TAC=y
321
+CONFIG_TAIL=y
322
+CONFIG_FEATURE_FANCY_TAIL=y
323
+CONFIG_TEE=y
324
+CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
325
+# CONFIG_TEST is not set
326
+# CONFIG_TEST1 is not set
327
+# CONFIG_TEST2 is not set
328
+# CONFIG_FEATURE_TEST_64 is not set
329
+CONFIG_TIMEOUT=y
330
+CONFIG_TOUCH=y
331
+CONFIG_FEATURE_TOUCH_SUSV3=y
332
+CONFIG_TR=y
333
+CONFIG_FEATURE_TR_CLASSES=y
334
+CONFIG_FEATURE_TR_EQUIV=y
335
+CONFIG_TRUE=y
336
+CONFIG_TRUNCATE=y
337
+CONFIG_TTY=y
338
+CONFIG_UNAME=y
339
+CONFIG_UNAME_OSNAME="GNU/Linux"
340
+CONFIG_BB_ARCH=y
341
+CONFIG_UNIQ=y
342
+CONFIG_UNLINK=y
343
+CONFIG_USLEEP=y
344
+CONFIG_UUDECODE=y
345
+CONFIG_BASE32=y
346
+CONFIG_BASE64=y
347
+CONFIG_UUENCODE=y
348
+CONFIG_WC=y
349
+CONFIG_FEATURE_WC_LARGE=y
350
+CONFIG_WHO=y
351
+CONFIG_W=y
352
+CONFIG_USERS=y
353
+CONFIG_WHOAMI=y
354
+CONFIG_YES=y
355
+
356
+#
357
+# Console Utilities
358
+#
359
+# CONFIG_CHVT is not set
360
+CONFIG_CLEAR=y
361
+# CONFIG_DEALLOCVT is not set
362
+# CONFIG_DUMPKMAP is not set
363
+# CONFIG_FGCONSOLE is not set
364
+# CONFIG_KBD_MODE is not set
365
+# CONFIG_LOADFONT is not set
366
+# CONFIG_SETFONT is not set
367
+# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set
368
+CONFIG_DEFAULT_SETFONT_DIR=""
369
+# CONFIG_FEATURE_LOADFONT_PSF2 is not set
370
+# CONFIG_FEATURE_LOADFONT_RAW is not set
371
+# CONFIG_LOADKMAP is not set
372
+# CONFIG_OPENVT is not set
373
+# CONFIG_RESET is not set
374
+# CONFIG_RESIZE is not set
375
+# CONFIG_FEATURE_RESIZE_PRINT is not set
376
+# CONFIG_SETCONSOLE is not set
377
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
378
+# CONFIG_SETKEYCODES is not set
379
+# CONFIG_SETLOGCONS is not set
380
+# CONFIG_SHOWKEY is not set
381
+
382
+#
383
+# Debian Utilities
384
+#
385
+# CONFIG_PIPE_PROGRESS is not set
386
+# CONFIG_RUN_PARTS is not set
387
+# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
388
+# CONFIG_FEATURE_RUN_PARTS_FANCY is not set
389
+# CONFIG_START_STOP_DAEMON is not set
390
+# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set
391
+# CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set
392
+CONFIG_WHICH=y
393
+
394
+#
395
+# klibc-utils
396
+#
397
+# CONFIG_MINIPS is not set
398
+# CONFIG_NUKE is not set
399
+# CONFIG_RESUME is not set
400
+# CONFIG_RUN_INIT is not set
401
+
402
+#
403
+# Editors
404
+#
405
+# CONFIG_AWK is not set
406
+# CONFIG_FEATURE_AWK_LIBM is not set
407
+# CONFIG_FEATURE_AWK_GNU_EXTENSIONS is not set
408
+# CONFIG_CMP is not set
409
+CONFIG_DIFF=y
410
+CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
411
+CONFIG_FEATURE_DIFF_DIR=y
412
+# CONFIG_ED is not set
413
+CONFIG_PATCH=y
414
+CONFIG_SED=y
415
+CONFIG_VI=y
416
+CONFIG_FEATURE_VI_MAX_LEN=4096
417
+# CONFIG_FEATURE_VI_8BIT is not set
418
+CONFIG_FEATURE_VI_COLON=y
419
+CONFIG_FEATURE_VI_COLON_EXPAND=y
420
+CONFIG_FEATURE_VI_YANKMARK=y
421
+CONFIG_FEATURE_VI_SEARCH=y
422
+# CONFIG_FEATURE_VI_REGEX_SEARCH is not set
423
+CONFIG_FEATURE_VI_USE_SIGNALS=y
424
+CONFIG_FEATURE_VI_DOT_CMD=y
425
+CONFIG_FEATURE_VI_READONLY=y
426
+CONFIG_FEATURE_VI_SETOPTS=y
427
+CONFIG_FEATURE_VI_SET=y
428
+CONFIG_FEATURE_VI_WIN_RESIZE=y
429
+CONFIG_FEATURE_VI_ASK_TERMINAL=y
430
+CONFIG_FEATURE_VI_UNDO=y
431
+CONFIG_FEATURE_VI_UNDO_QUEUE=y
432
+CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256
433
+CONFIG_FEATURE_VI_VERBOSE_STATUS=y
434
+CONFIG_FEATURE_ALLOW_EXEC=y
435
+
436
+#
437
+# Finding Utilities
438
+#
439
+CONFIG_FIND=y
440
+CONFIG_FEATURE_FIND_PRINT0=y
441
+CONFIG_FEATURE_FIND_MTIME=y
442
+CONFIG_FEATURE_FIND_ATIME=y
443
+CONFIG_FEATURE_FIND_CTIME=y
444
+CONFIG_FEATURE_FIND_MMIN=y
445
+CONFIG_FEATURE_FIND_AMIN=y
446
+CONFIG_FEATURE_FIND_CMIN=y
447
+CONFIG_FEATURE_FIND_PERM=y
448
+CONFIG_FEATURE_FIND_TYPE=y
449
+CONFIG_FEATURE_FIND_EXECUTABLE=y
450
+CONFIG_FEATURE_FIND_XDEV=y
451
+CONFIG_FEATURE_FIND_MAXDEPTH=y
452
+CONFIG_FEATURE_FIND_NEWER=y
453
+CONFIG_FEATURE_FIND_INUM=y
454
+CONFIG_FEATURE_FIND_SAMEFILE=y
455
+CONFIG_FEATURE_FIND_EXEC=y
456
+CONFIG_FEATURE_FIND_EXEC_PLUS=y
457
+CONFIG_FEATURE_FIND_USER=y
458
+CONFIG_FEATURE_FIND_GROUP=y
459
+CONFIG_FEATURE_FIND_NOT=y
460
+CONFIG_FEATURE_FIND_DEPTH=y
461
+CONFIG_FEATURE_FIND_PAREN=y
462
+CONFIG_FEATURE_FIND_SIZE=y
463
+CONFIG_FEATURE_FIND_PRUNE=y
464
+CONFIG_FEATURE_FIND_QUIT=y
465
+CONFIG_FEATURE_FIND_DELETE=y
466
+CONFIG_FEATURE_FIND_EMPTY=y
467
+CONFIG_FEATURE_FIND_PATH=y
468
+CONFIG_FEATURE_FIND_REGEX=y
469
+# CONFIG_FEATURE_FIND_CONTEXT is not set
470
+CONFIG_FEATURE_FIND_LINKS=y
471
+CONFIG_GREP=y
472
+# CONFIG_EGREP is not set
473
+# CONFIG_FGREP is not set
474
+CONFIG_FEATURE_GREP_CONTEXT=y
475
+CONFIG_XARGS=y
476
+CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
477
+CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
478
+CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
479
+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
480
+CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y
481
+CONFIG_FEATURE_XARGS_SUPPORT_PARALLEL=y
482
+CONFIG_FEATURE_XARGS_SUPPORT_ARGS_FILE=y
483
+
484
+#
485
+# Init Utilities
486
+#
487
+# CONFIG_BOOTCHARTD is not set
488
+# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
489
+# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
490
+# CONFIG_HALT is not set
491
+# CONFIG_POWEROFF is not set
492
+# CONFIG_REBOOT is not set
493
+# CONFIG_FEATURE_WAIT_FOR_INIT is not set
494
+# CONFIG_FEATURE_CALL_TELINIT is not set
495
+CONFIG_TELINIT_PATH=""
496
+# CONFIG_INIT is not set
497
+# CONFIG_LINUXRC is not set
498
+# CONFIG_FEATURE_USE_INITTAB is not set
499
+# CONFIG_FEATURE_KILL_REMOVED is not set
500
+CONFIG_FEATURE_KILL_DELAY=0
501
+# CONFIG_FEATURE_INIT_SCTTY is not set
502
+# CONFIG_FEATURE_INIT_SYSLOG is not set
503
+# CONFIG_FEATURE_INIT_QUIET is not set
504
+# CONFIG_FEATURE_INIT_COREDUMPS is not set
505
+CONFIG_INIT_TERMINAL_TYPE=""
506
+# CONFIG_FEATURE_INIT_MODIFY_CMDLINE is not set
507
+
508
+#
509
+# Login/Password Management Utilities
510
+#
511
+# CONFIG_FEATURE_SHADOWPASSWDS is not set
512
+CONFIG_USE_BB_PWD_GRP=y
513
+# CONFIG_USE_BB_SHADOW is not set
514
+CONFIG_USE_BB_CRYPT=y
515
+CONFIG_USE_BB_CRYPT_SHA=y
516
+# CONFIG_ADD_SHELL is not set
517
+# CONFIG_REMOVE_SHELL is not set
518
+CONFIG_ADDGROUP=y
519
+# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
520
+CONFIG_ADDUSER=y
521
+# CONFIG_FEATURE_CHECK_NAMES is not set
522
+CONFIG_LAST_ID=60000
523
+CONFIG_FIRST_SYSTEM_ID=100
524
+CONFIG_LAST_SYSTEM_ID=999
525
+# CONFIG_CHPASSWD is not set
526
+CONFIG_FEATURE_DEFAULT_PASSWD_ALGO=""
527
+# CONFIG_CRYPTPW is not set
528
+# CONFIG_MKPASSWD is not set
529
+# CONFIG_DELUSER is not set
530
+# CONFIG_DELGROUP is not set
531
+# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
532
+# CONFIG_GETTY is not set
533
+# CONFIG_LOGIN is not set
534
+# CONFIG_LOGIN_SESSION_AS_CHILD is not set
535
+# CONFIG_LOGIN_SCRIPTS is not set
536
+# CONFIG_FEATURE_NOLOGIN is not set
537
+# CONFIG_FEATURE_SECURETTY is not set
538
+# CONFIG_PASSWD is not set
539
+# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
540
+# CONFIG_SU is not set
541
+# CONFIG_FEATURE_SU_SYSLOG is not set
542
+# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set
543
+# CONFIG_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY is not set
544
+# CONFIG_SULOGIN is not set
545
+# CONFIG_VLOCK is not set
546
+
547
+#
548
+# Linux Ext2 FS Progs
549
+#
550
+# CONFIG_CHATTR is not set
551
+# CONFIG_FSCK is not set
552
+# CONFIG_LSATTR is not set
553
+# CONFIG_TUNE2FS is not set
554
+
555
+#
556
+# Linux Module Utilities
557
+#
558
+# CONFIG_MODPROBE_SMALL is not set
559
+# CONFIG_DEPMOD is not set
560
+# CONFIG_INSMOD is not set
561
+# CONFIG_LSMOD is not set
562
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
563
+# CONFIG_MODINFO is not set
564
+# CONFIG_MODPROBE is not set
565
+# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
566
+# CONFIG_RMMOD is not set
567
+
568
+#
569
+# Options common to multiple modutils
570
+#
571
+# CONFIG_FEATURE_CMDLINE_MODULE_OPTIONS is not set
572
+# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
573
+# CONFIG_FEATURE_2_4_MODULES is not set
574
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
575
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
576
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
577
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
578
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
579
+# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
580
+# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
581
+# CONFIG_FEATURE_MODUTILS_ALIAS is not set
582
+# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
583
+CONFIG_DEFAULT_MODULES_DIR=""
584
+CONFIG_DEFAULT_DEPMOD_FILE=""
585
+
586
+#
587
+# Linux System Utilities
588
+#
589
+# CONFIG_ACPID is not set
590
+# CONFIG_FEATURE_ACPID_COMPAT is not set
591
+# CONFIG_BLKDISCARD is not set
592
+# CONFIG_BLKID is not set
593
+# CONFIG_FEATURE_BLKID_TYPE is not set
594
+# CONFIG_BLOCKDEV is not set
595
+# CONFIG_CAL is not set
596
+# CONFIG_CHRT is not set
597
+# CONFIG_DMESG is not set
598
+# CONFIG_FEATURE_DMESG_PRETTY is not set
599
+# CONFIG_EJECT is not set
600
+# CONFIG_FEATURE_EJECT_SCSI is not set
601
+# CONFIG_FALLOCATE is not set
602
+# CONFIG_FATATTR is not set
603
+# CONFIG_FBSET is not set
604
+# CONFIG_FEATURE_FBSET_FANCY is not set
605
+# CONFIG_FEATURE_FBSET_READMODE is not set
606
+# CONFIG_FDFORMAT is not set
607
+# CONFIG_FDISK is not set
608
+# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set
609
+# CONFIG_FEATURE_FDISK_WRITABLE is not set
610
+# CONFIG_FEATURE_AIX_LABEL is not set
611
+# CONFIG_FEATURE_SGI_LABEL is not set
612
+# CONFIG_FEATURE_SUN_LABEL is not set
613
+# CONFIG_FEATURE_OSF_LABEL is not set
614
+# CONFIG_FEATURE_GPT_LABEL is not set
615
+# CONFIG_FEATURE_FDISK_ADVANCED is not set
616
+# CONFIG_FINDFS is not set
617
+# CONFIG_FLOCK is not set
618
+# CONFIG_FDFLUSH is not set
619
+# CONFIG_FREERAMDISK is not set
620
+# CONFIG_FSCK_MINIX is not set
621
+# CONFIG_FSFREEZE is not set
622
+# CONFIG_FSTRIM is not set
623
+# CONFIG_GETOPT is not set
624
+# CONFIG_FEATURE_GETOPT_LONG is not set
625
+CONFIG_HEXDUMP=y
626
+CONFIG_HD=y
627
+CONFIG_XXD=y
628
+# CONFIG_HWCLOCK is not set
629
+# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
630
+# CONFIG_IONICE is not set
631
+# CONFIG_IPCRM is not set
632
+# CONFIG_IPCS is not set
633
+# CONFIG_LAST is not set
634
+# CONFIG_FEATURE_LAST_FANCY is not set
635
+# CONFIG_LOSETUP is not set
636
+# CONFIG_LSPCI is not set
637
+# CONFIG_LSUSB is not set
638
+# CONFIG_MDEV is not set
639
+# CONFIG_FEATURE_MDEV_CONF is not set
640
+# CONFIG_FEATURE_MDEV_RENAME is not set
641
+# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
642
+# CONFIG_FEATURE_MDEV_EXEC is not set
643
+# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
644
+# CONFIG_FEATURE_MDEV_DAEMON is not set
645
+# CONFIG_MESG is not set
646
+# CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP is not set
647
+# CONFIG_MKE2FS is not set
648
+# CONFIG_MKFS_EXT2 is not set
649
+# CONFIG_MKFS_MINIX is not set
650
+# CONFIG_FEATURE_MINIX2 is not set
651
+# CONFIG_MKFS_REISER is not set
652
+# CONFIG_MKDOSFS is not set
653
+# CONFIG_MKFS_VFAT is not set
654
+# CONFIG_MKSWAP is not set
655
+# CONFIG_FEATURE_MKSWAP_UUID is not set
656
+CONFIG_MORE=y
657
+CONFIG_MOUNT=y
658
+CONFIG_FEATURE_MOUNT_FAKE=y
659
+CONFIG_FEATURE_MOUNT_VERBOSE=y
660
+# CONFIG_FEATURE_MOUNT_HELPERS is not set
661
+# CONFIG_FEATURE_MOUNT_LABEL is not set
662
+# CONFIG_FEATURE_MOUNT_NFS is not set
663
+# CONFIG_FEATURE_MOUNT_CIFS is not set
664
+CONFIG_FEATURE_MOUNT_FLAGS=y
665
+CONFIG_FEATURE_MOUNT_FSTAB=y
666
+CONFIG_FEATURE_MOUNT_OTHERTAB=y
667
+# CONFIG_MOUNTPOINT is not set
668
+CONFIG_NOLOGIN=y
669
+# CONFIG_NOLOGIN_DEPENDENCIES is not set
670
+# CONFIG_NSENTER is not set
671
+# CONFIG_PIVOT_ROOT is not set
672
+# CONFIG_RDATE is not set
673
+# CONFIG_RDEV is not set
674
+# CONFIG_READPROFILE is not set
675
+CONFIG_RENICE=y
676
+CONFIG_REV=y
677
+# CONFIG_RTCWAKE is not set
678
+# CONFIG_SCRIPT is not set
679
+# CONFIG_SCRIPTREPLAY is not set
680
+# CONFIG_SETARCH is not set
681
+# CONFIG_LINUX32 is not set
682
+# CONFIG_LINUX64 is not set
683
+# CONFIG_SETPRIV is not set
684
+# CONFIG_FEATURE_SETPRIV_DUMP is not set
685
+# CONFIG_FEATURE_SETPRIV_CAPABILITIES is not set
686
+# CONFIG_FEATURE_SETPRIV_CAPABILITY_NAMES is not set
687
+# CONFIG_SETSID is not set
688
+# CONFIG_SWAPON is not set
689
+# CONFIG_FEATURE_SWAPON_DISCARD is not set
690
+# CONFIG_FEATURE_SWAPON_PRI is not set
691
+# CONFIG_SWAPOFF is not set
692
+# CONFIG_FEATURE_SWAPONOFF_LABEL is not set
693
+# CONFIG_SWITCH_ROOT is not set
694
+# CONFIG_TASKSET is not set
695
+# CONFIG_FEATURE_TASKSET_FANCY is not set
696
+# CONFIG_FEATURE_TASKSET_CPULIST is not set
697
+# CONFIG_UEVENT is not set
698
+CONFIG_UMOUNT=y
699
+CONFIG_FEATURE_UMOUNT_ALL=y
700
+# CONFIG_UNSHARE is not set
701
+# CONFIG_WALL is not set
702
+
703
+#
704
+# Common options for mount/umount
705
+#
706
+# CONFIG_FEATURE_MOUNT_LOOP is not set
707
+# CONFIG_FEATURE_MOUNT_LOOP_CREATE is not set
708
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
709
+# CONFIG_VOLUMEID is not set
710
+# CONFIG_FEATURE_VOLUMEID_BCACHE is not set
711
+# CONFIG_FEATURE_VOLUMEID_BTRFS is not set
712
+# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
713
+# CONFIG_FEATURE_VOLUMEID_EROFS is not set
714
+# CONFIG_FEATURE_VOLUMEID_EXFAT is not set
715
+# CONFIG_FEATURE_VOLUMEID_EXT is not set
716
+# CONFIG_FEATURE_VOLUMEID_F2FS is not set
717
+# CONFIG_FEATURE_VOLUMEID_FAT is not set
718
+# CONFIG_FEATURE_VOLUMEID_HFS is not set
719
+# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set
720
+# CONFIG_FEATURE_VOLUMEID_JFS is not set
721
+# CONFIG_FEATURE_VOLUMEID_LFS is not set
722
+# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
723
+# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set
724
+# CONFIG_FEATURE_VOLUMEID_LUKS is not set
725
+# CONFIG_FEATURE_VOLUMEID_MINIX is not set
726
+# CONFIG_FEATURE_VOLUMEID_NILFS is not set
727
+# CONFIG_FEATURE_VOLUMEID_NTFS is not set
728
+# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
729
+# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
730
+# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
731
+# CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set
732
+# CONFIG_FEATURE_VOLUMEID_SYSV is not set
733
+# CONFIG_FEATURE_VOLUMEID_UBIFS is not set
734
+# CONFIG_FEATURE_VOLUMEID_UDF is not set
735
+# CONFIG_FEATURE_VOLUMEID_XFS is not set
736
+
737
+#
738
+# Miscellaneous Utilities
739
+#
740
+# CONFIG_ADJTIMEX is not set
741
+# CONFIG_ASCII is not set
742
+# CONFIG_BBCONFIG is not set
743
+# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
744
+CONFIG_BC=y
745
+# CONFIG_DC is not set
746
+CONFIG_FEATURE_DC_BIG=y
747
+# CONFIG_FEATURE_DC_LIBM is not set
748
+# CONFIG_FEATURE_BC_INTERACTIVE is not set
749
+# CONFIG_FEATURE_BC_LONG_OPTIONS is not set
750
+# CONFIG_BEEP is not set
751
+CONFIG_FEATURE_BEEP_FREQ=0
752
+CONFIG_FEATURE_BEEP_LENGTH_MS=0
753
+# CONFIG_CHAT is not set
754
+# CONFIG_FEATURE_CHAT_NOFAIL is not set
755
+# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
756
+# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set
757
+# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set
758
+# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set
759
+# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set
760
+# CONFIG_FEATURE_CHAT_CLR_ABORT is not set
761
+# CONFIG_CONSPY is not set
762
+CONFIG_CROND=y
763
+CONFIG_FEATURE_CROND_D=y
764
+CONFIG_FEATURE_CROND_CALL_SENDMAIL=y
765
+CONFIG_FEATURE_CROND_SPECIAL_TIMES=y
766
+CONFIG_FEATURE_CROND_DIR="/var/spool/cron"
767
+CONFIG_CRONTAB=y
768
+# CONFIG_DEVFSD is not set
769
+# CONFIG_DEVFSD_MODLOAD is not set
770
+# CONFIG_DEVFSD_FG_NP is not set
771
+# CONFIG_DEVFSD_VERBOSE is not set
772
+# CONFIG_FEATURE_DEVFS is not set
773
+# CONFIG_DEVMEM is not set
774
+# CONFIG_FBSPLASH is not set
775
+# CONFIG_FLASH_ERASEALL is not set
776
+# CONFIG_FLASH_LOCK is not set
777
+# CONFIG_FLASH_UNLOCK is not set
778
+# CONFIG_FLASHCP is not set
779
+# CONFIG_HDPARM is not set
780
+# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
781
+# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
782
+# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
783
+# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
784
+# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
785
+# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
786
+CONFIG_HEXEDIT=y
787
+# CONFIG_I2CGET is not set
788
+# CONFIG_I2CSET is not set
789
+# CONFIG_I2CDUMP is not set
790
+# CONFIG_I2CDETECT is not set
791
+# CONFIG_I2CTRANSFER is not set
792
+# CONFIG_INOTIFYD is not set
793
+CONFIG_LESS=y
794
+CONFIG_FEATURE_LESS_MAXLINES=9999999
795
+CONFIG_FEATURE_LESS_BRACKETS=y
796
+CONFIG_FEATURE_LESS_FLAGS=y
797
+CONFIG_FEATURE_LESS_TRUNCATE=y
798
+CONFIG_FEATURE_LESS_MARKS=y
799
+CONFIG_FEATURE_LESS_REGEXP=y
800
+CONFIG_FEATURE_LESS_WINCH=y
801
+CONFIG_FEATURE_LESS_ASK_TERMINAL=y
802
+CONFIG_FEATURE_LESS_DASHCMD=y
803
+CONFIG_FEATURE_LESS_LINENUMS=y
804
+CONFIG_FEATURE_LESS_RAW=y
805
+CONFIG_FEATURE_LESS_ENV=y
806
+# CONFIG_LSSCSI is not set
807
+# CONFIG_MAKEDEVS is not set
808
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
809
+# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
810
+# CONFIG_MAN is not set
811
+# CONFIG_MICROCOM is not set
812
+# CONFIG_MIM is not set
813
+# CONFIG_MT is not set
814
+# CONFIG_NANDWRITE is not set
815
+# CONFIG_NANDDUMP is not set
816
+# CONFIG_PARTPROBE is not set
817
+# CONFIG_RAIDAUTORUN is not set
818
+# CONFIG_READAHEAD is not set
819
+# CONFIG_RFKILL is not set
820
+# CONFIG_RUNLEVEL is not set
821
+# CONFIG_RX is not set
822
+# CONFIG_SETFATTR is not set
823
+# CONFIG_SETSERIAL is not set
824
+CONFIG_STRINGS=y
825
+CONFIG_TIME=y
826
+# CONFIG_TS is not set
827
+# CONFIG_TTYSIZE is not set
828
+# CONFIG_UBIATTACH is not set
829
+# CONFIG_UBIDETACH is not set
830
+# CONFIG_UBIMKVOL is not set
831
+# CONFIG_UBIRMVOL is not set
832
+# CONFIG_UBIRSVOL is not set
833
+# CONFIG_UBIUPDATEVOL is not set
834
+# CONFIG_UBIRENAME is not set
835
+# CONFIG_VOLNAME is not set
836
+# CONFIG_WATCHDOG is not set
837
+# CONFIG_FEATURE_WATCHDOG_OPEN_TWICE is not set
838
+
839
+#
840
+# Networking Utilities
841
+#
842
+CONFIG_FEATURE_IPV6=y
843
+# CONFIG_FEATURE_UNIX_LOCAL is not set
844
+CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
845
+# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
846
+# CONFIG_FEATURE_ETC_NETWORKS is not set
847
+# CONFIG_FEATURE_ETC_SERVICES is not set
848
+# CONFIG_FEATURE_HWIB is not set
849
+# CONFIG_FEATURE_TLS_SHA1 is not set
850
+# CONFIG_ARP is not set
851
+# CONFIG_ARPING is not set
852
+# CONFIG_BRCTL is not set
853
+# CONFIG_FEATURE_BRCTL_FANCY is not set
854
+# CONFIG_FEATURE_BRCTL_SHOW is not set
855
+# CONFIG_DNSD is not set
856
+# CONFIG_ETHER_WAKE is not set
857
+# CONFIG_FTPD is not set
858
+# CONFIG_FEATURE_FTPD_WRITE is not set
859
+# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set
860
+# CONFIG_FEATURE_FTPD_AUTHENTICATION is not set
861
+# CONFIG_FTPGET is not set
862
+# CONFIG_FTPPUT is not set
863
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
864
+# CONFIG_HOSTNAME is not set
865
+# CONFIG_DNSDOMAINNAME is not set
866
+# CONFIG_HTTPD is not set
867
+CONFIG_FEATURE_HTTPD_PORT_DEFAULT=0
868
+# CONFIG_FEATURE_HTTPD_RANGES is not set
869
+# CONFIG_FEATURE_HTTPD_SETUID is not set
870
+# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
871
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
872
+# CONFIG_FEATURE_HTTPD_CGI is not set
873
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
874
+# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
875
+# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
876
+# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set
877
+# CONFIG_FEATURE_HTTPD_PROXY is not set
878
+# CONFIG_FEATURE_HTTPD_GZIP is not set
879
+# CONFIG_FEATURE_HTTPD_ETAG is not set
880
+# CONFIG_FEATURE_HTTPD_LAST_MODIFIED is not set
881
+# CONFIG_FEATURE_HTTPD_DATE is not set
882
+# CONFIG_FEATURE_HTTPD_ACL_IP is not set
883
+CONFIG_IFCONFIG=y
884
+CONFIG_FEATURE_IFCONFIG_STATUS=y
885
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
886
+CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y
887
+CONFIG_FEATURE_IFCONFIG_HW=y
888
+CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y
889
+# CONFIG_IFENSLAVE is not set
890
+# CONFIG_IFPLUGD is not set
891
+# CONFIG_IFUP is not set
892
+# CONFIG_IFDOWN is not set
893
+CONFIG_IFUPDOWN_IFSTATE_PATH=""
894
+# CONFIG_FEATURE_IFUPDOWN_IP is not set
895
+# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set
896
+# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set
897
+# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set
898
+# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set
899
+CONFIG_INETD=y
900
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
901
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
902
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
903
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
904
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
905
+# CONFIG_FEATURE_INETD_RPC is not set
906
+CONFIG_IP=y
907
+# CONFIG_IPADDR is not set
908
+# CONFIG_IPLINK is not set
909
+# CONFIG_IPROUTE is not set
910
+# CONFIG_IPTUNNEL is not set
911
+# CONFIG_IPRULE is not set
912
+# CONFIG_IPNEIGH is not set
913
+CONFIG_FEATURE_IP_ADDRESS=y
914
+CONFIG_FEATURE_IP_LINK=y
915
+CONFIG_FEATURE_IP_ROUTE=y
916
+CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2"
917
+# CONFIG_FEATURE_IP_TUNNEL is not set
918
+# CONFIG_FEATURE_IP_RULE is not set
919
+CONFIG_FEATURE_IP_NEIGH=y
920
+# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
921
+CONFIG_IPCALC=y
922
+CONFIG_FEATURE_IPCALC_LONG_OPTIONS=y
923
+CONFIG_FEATURE_IPCALC_FANCY=y
924
+# CONFIG_FAKEIDENTD is not set
925
+# CONFIG_NAMEIF is not set
926
+# CONFIG_FEATURE_NAMEIF_EXTENDED is not set
927
+# CONFIG_NBDCLIENT is not set
928
+CONFIG_NC=y
929
+# CONFIG_NETCAT is not set
930
+CONFIG_NC_SERVER=y
931
+CONFIG_NC_EXTRA=y
932
+CONFIG_NC_110_COMPAT=y
933
+# CONFIG_NETSTAT is not set
934
+# CONFIG_FEATURE_NETSTAT_WIDE is not set
935
+# CONFIG_FEATURE_NETSTAT_PRG is not set
936
+# CONFIG_NSLOOKUP is not set
937
+# CONFIG_FEATURE_NSLOOKUP_BIG is not set
938
+# CONFIG_FEATURE_NSLOOKUP_LONG_OPTIONS is not set
939
+# CONFIG_NTPD is not set
940
+# CONFIG_FEATURE_NTPD_SERVER is not set
941
+# CONFIG_FEATURE_NTPD_CONF is not set
942
+# CONFIG_FEATURE_NTP_AUTH is not set
943
+# CONFIG_PING is not set
944
+# CONFIG_PING6 is not set
945
+# CONFIG_FEATURE_FANCY_PING is not set
946
+# CONFIG_PSCAN is not set
947
+CONFIG_ROUTE=y
948
+# CONFIG_SLATTACH is not set
949
+CONFIG_SSL_CLIENT=y
950
+# CONFIG_TC is not set
951
+# CONFIG_FEATURE_TC_INGRESS is not set
952
+# CONFIG_TCPSVD is not set
953
+# CONFIG_UDPSVD is not set
954
+# CONFIG_TELNET is not set
955
+# CONFIG_FEATURE_TELNET_TTYPE is not set
956
+# CONFIG_FEATURE_TELNET_AUTOLOGIN is not set
957
+# CONFIG_FEATURE_TELNET_WIDTH is not set
958
+# CONFIG_TELNETD is not set
959
+# CONFIG_FEATURE_TELNETD_STANDALONE is not set
960
+CONFIG_FEATURE_TELNETD_PORT_DEFAULT=0
961
+# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set
962
+# CONFIG_TFTP is not set
963
+# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set
964
+# CONFIG_FEATURE_TFTP_HPA_COMPAT is not set
965
+# CONFIG_TFTPD is not set
966
+# CONFIG_FEATURE_TFTP_GET is not set
967
+# CONFIG_FEATURE_TFTP_PUT is not set
968
+# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
969
+# CONFIG_TFTP_DEBUG is not set
970
+CONFIG_TLS=y
971
+# CONFIG_TRACEROUTE is not set
972
+# CONFIG_TRACEROUTE6 is not set
973
+# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
974
+# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
975
+# CONFIG_TUNCTL is not set
976
+# CONFIG_FEATURE_TUNCTL_UG is not set
977
+# CONFIG_VCONFIG is not set
978
+CONFIG_WGET=y
979
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
980
+CONFIG_FEATURE_WGET_STATUSBAR=y
981
+CONFIG_FEATURE_WGET_FTP=y
982
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
983
+CONFIG_FEATURE_WGET_TIMEOUT=y
984
+CONFIG_FEATURE_WGET_HTTPS=y
985
+CONFIG_FEATURE_WGET_OPENSSL=y
986
+CONFIG_WHOIS=y
987
+# CONFIG_ZCIP is not set
988
+# CONFIG_UDHCPD is not set
989
+# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set
990
+# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
991
+CONFIG_DHCPD_LEASES_FILE=""
992
+# CONFIG_DUMPLEASES is not set
993
+# CONFIG_DHCPRELAY is not set
994
+# CONFIG_UDHCPC is not set
995
+# CONFIG_FEATURE_UDHCPC_ARPING is not set
996
+# CONFIG_FEATURE_UDHCPC_SANITIZEOPT is not set
997
+CONFIG_UDHCPC_DEFAULT_SCRIPT=""
998
+# CONFIG_UDHCPC6 is not set
999
+# CONFIG_FEATURE_UDHCPC6_RFC3646 is not set
1000
+# CONFIG_FEATURE_UDHCPC6_RFC4704 is not set
1001
+# CONFIG_FEATURE_UDHCPC6_RFC4833 is not set
1002
+# CONFIG_FEATURE_UDHCPC6_RFC5970 is not set
1003
+CONFIG_UDHCPC_DEFAULT_INTERFACE=""
1004
+# CONFIG_FEATURE_UDHCP_PORT is not set
1005
+CONFIG_UDHCP_DEBUG=0
1006
+CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=0
1007
+# CONFIG_FEATURE_UDHCP_RFC3397 is not set
1008
+# CONFIG_FEATURE_UDHCP_8021Q is not set
1009
+CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS=""
1010
+
1011
+#
1012
+# Print Utilities
1013
+#
1014
+# CONFIG_LPD is not set
1015
+# CONFIG_LPR is not set
1016
+# CONFIG_LPQ is not set
1017
+
1018
+#
1019
+# Mail Utilities
1020
+#
1021
+CONFIG_FEATURE_MIME_CHARSET="utf-8"
1022
+# CONFIG_MAKEMIME is not set
1023
+# CONFIG_POPMAILDIR is not set
1024
+# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set
1025
+# CONFIG_REFORMIME is not set
1026
+# CONFIG_FEATURE_REFORMIME_COMPAT is not set
1027
+CONFIG_SENDMAIL=y
1028
+
1029
+#
1030
+# Process Utilities
1031
+#
1032
+# CONFIG_FEATURE_FAST_TOP is not set
1033
+CONFIG_FEATURE_SHOW_THREADS=y
1034
+CONFIG_FREE=y
1035
+CONFIG_FUSER=y
1036
+CONFIG_IOSTAT=y
1037
+CONFIG_KILL=y
1038
+CONFIG_KILLALL=y
1039
+# CONFIG_KILLALL5 is not set
1040
+CONFIG_LSOF=y
1041
+CONFIG_MPSTAT=y
1042
+CONFIG_NMETER=y
1043
+CONFIG_PGREP=y
1044
+CONFIG_PKILL=y
1045
+CONFIG_PIDOF=y
1046
+CONFIG_FEATURE_PIDOF_SINGLE=y
1047
+CONFIG_FEATURE_PIDOF_OMIT=y
1048
+CONFIG_PMAP=y
1049
+# CONFIG_POWERTOP is not set
1050
+# CONFIG_FEATURE_POWERTOP_INTERACTIVE is not set
1051
+CONFIG_PS=y
1052
+# CONFIG_FEATURE_PS_WIDE is not set
1053
+# CONFIG_FEATURE_PS_LONG is not set
1054
+CONFIG_FEATURE_PS_TIME=y
1055
+# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
1056
+CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y
1057
+CONFIG_PSTREE=y
1058
+CONFIG_PWDX=y
1059
+CONFIG_SMEMCAP=y
1060
+CONFIG_BB_SYSCTL=y
1061
+CONFIG_TOP=y
1062
+CONFIG_FEATURE_TOP_INTERACTIVE=y
1063
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
1064
+CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
1065
+CONFIG_FEATURE_TOP_SMP_CPU=y
1066
+CONFIG_FEATURE_TOP_DECIMALS=y
1067
+CONFIG_FEATURE_TOP_SMP_PROCESS=y
1068
+CONFIG_FEATURE_TOPMEM=y
1069
+CONFIG_UPTIME=y
1070
+CONFIG_FEATURE_UPTIME_UTMP_SUPPORT=y
1071
+CONFIG_WATCH=y
1072
+
1073
+#
1074
+# Runit Utilities
1075
+#
1076
+CONFIG_CHPST=y
1077
+CONFIG_SETUIDGID=y
1078
+CONFIG_ENVUIDGID=y
1079
+CONFIG_ENVDIR=y
1080
+CONFIG_SOFTLIMIT=y
1081
+CONFIG_RUNSV=y
1082
+CONFIG_RUNSVDIR=y
1083
+# CONFIG_FEATURE_RUNSVDIR_LOG is not set
1084
+CONFIG_SV=y
1085
+CONFIG_SV_DEFAULT_SERVICE_DIR="/var/service"
1086
+CONFIG_SVC=y
1087
+CONFIG_SVOK=y
1088
+CONFIG_SVLOGD=y
1089
+# CONFIG_CHCON is not set
1090
+# CONFIG_GETENFORCE is not set
1091
+# CONFIG_GETSEBOOL is not set
1092
+# CONFIG_LOAD_POLICY is not set
1093
+# CONFIG_MATCHPATHCON is not set
1094
+# CONFIG_RUNCON is not set
1095
+# CONFIG_SELINUXENABLED is not set
1096
+# CONFIG_SESTATUS is not set
1097
+# CONFIG_SETENFORCE is not set
1098
+# CONFIG_SETFILES is not set
1099
+# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
1100
+# CONFIG_RESTORECON is not set
1101
+# CONFIG_SETSEBOOL is not set
1102
+
1103
+#
1104
+# Shells
1105
+#
1106
+CONFIG_SH_IS_ASH=y
1107
+# CONFIG_SH_IS_HUSH is not set
1108
+# CONFIG_SH_IS_NONE is not set
1109
+# CONFIG_BASH_IS_ASH is not set
1110
+# CONFIG_BASH_IS_HUSH is not set
1111
+CONFIG_BASH_IS_NONE=y
1112
+CONFIG_SHELL_ASH=y
1113
+CONFIG_ASH=y
1114
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
1115
+CONFIG_ASH_INTERNAL_GLOB=y
1116
+CONFIG_ASH_BASH_COMPAT=y
1117
+# CONFIG_ASH_BASH_SOURCE_CURDIR is not set
1118
+CONFIG_ASH_BASH_NOT_FOUND_HOOK=y
1119
+CONFIG_ASH_JOB_CONTROL=y
1120
+CONFIG_ASH_ALIAS=y
1121
+CONFIG_ASH_RANDOM_SUPPORT=y
1122
+CONFIG_ASH_EXPAND_PRMT=y
1123
+CONFIG_ASH_IDLE_TIMEOUT=y
1124
+CONFIG_ASH_MAIL=y
1125
+CONFIG_ASH_ECHO=y
1126
+CONFIG_ASH_PRINTF=y
1127
+CONFIG_ASH_TEST=y
1128
+CONFIG_ASH_HELP=y
1129
+CONFIG_ASH_GETOPTS=y
1130
+CONFIG_ASH_CMDCMD=y
1131
+# CONFIG_CTTYHACK is not set
1132
+# CONFIG_HUSH is not set
1133
+# CONFIG_SHELL_HUSH is not set
1134
+# CONFIG_HUSH_BASH_COMPAT is not set
1135
+# CONFIG_HUSH_BRACE_EXPANSION is not set
1136
+# CONFIG_HUSH_BASH_SOURCE_CURDIR is not set
1137
+# CONFIG_HUSH_LINENO_VAR is not set
1138
+# CONFIG_HUSH_INTERACTIVE is not set
1139
+# CONFIG_HUSH_SAVEHISTORY is not set
1140
+# CONFIG_HUSH_JOB is not set
1141
+# CONFIG_HUSH_TICK is not set
1142
+# CONFIG_HUSH_IF is not set
1143
+# CONFIG_HUSH_LOOPS is not set
1144
+# CONFIG_HUSH_CASE is not set
1145
+# CONFIG_HUSH_FUNCTIONS is not set
1146
+# CONFIG_HUSH_LOCAL is not set
1147
+# CONFIG_HUSH_RANDOM_SUPPORT is not set
1148
+# CONFIG_HUSH_MODE_X is not set
1149
+# CONFIG_HUSH_ECHO is not set
1150
+# CONFIG_HUSH_PRINTF is not set
1151
+# CONFIG_HUSH_TEST is not set
1152
+# CONFIG_HUSH_HELP is not set
1153
+# CONFIG_HUSH_EXPORT is not set
1154
+# CONFIG_HUSH_EXPORT_N is not set
1155
+# CONFIG_HUSH_READONLY is not set
1156
+# CONFIG_HUSH_KILL is not set
1157
+# CONFIG_HUSH_WAIT is not set
1158
+# CONFIG_HUSH_COMMAND is not set
1159
+# CONFIG_HUSH_TRAP is not set
1160
+# CONFIG_HUSH_TYPE is not set
1161
+# CONFIG_HUSH_TIMES is not set
1162
+# CONFIG_HUSH_READ is not set
1163
+# CONFIG_HUSH_SET is not set
1164
+# CONFIG_HUSH_UNSET is not set
1165
+# CONFIG_HUSH_ULIMIT is not set
1166
+# CONFIG_HUSH_UMASK is not set
1167
+# CONFIG_HUSH_GETOPTS is not set
1168
+# CONFIG_HUSH_MEMLEAK is not set
1169
+
1170
+#
1171
+# Options common to all shells
1172
+#
1173
+CONFIG_FEATURE_SH_MATH=y
1174
+CONFIG_FEATURE_SH_MATH_64=y
1175
+CONFIG_FEATURE_SH_MATH_BASE=y
1176
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
1177
+# CONFIG_FEATURE_SH_STANDALONE is not set
1178
+# CONFIG_FEATURE_SH_NOFORK is not set
1179
+CONFIG_FEATURE_SH_READ_FRAC=y
1180
+CONFIG_FEATURE_SH_HISTFILESIZE=y
1181
+CONFIG_FEATURE_SH_EMBEDDED_SCRIPTS=y
1182
+
1183
+#
1184
+# System Logging Utilities
1185
+#
1186
+# CONFIG_KLOGD is not set
1187
+# CONFIG_FEATURE_KLOGD_KLOGCTL is not set
1188
+# CONFIG_LOGGER is not set
1189
+# CONFIG_LOGREAD is not set
1190
+# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set
1191
+# CONFIG_SYSLOGD is not set
1192
+# CONFIG_FEATURE_ROTATE_LOGFILE is not set
1193
+# CONFIG_FEATURE_REMOTE_LOG is not set
1194
+# CONFIG_FEATURE_SYSLOGD_DUP is not set
1195
+# CONFIG_FEATURE_SYSLOGD_CFG is not set
1196
+# CONFIG_FEATURE_SYSLOGD_PRECISE_TIMESTAMPS is not set
1197
+CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0
1198
+# CONFIG_FEATURE_IPC_SYSLOG is not set
1199
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0
1200
+# CONFIG_FEATURE_KMSG_SYSLOG is not set
--- a/containers/busybox-config
+++ b/containers/busybox-config
@@ -0,0 +1,1200 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/containers/busybox-config
+++ b/containers/busybox-config
@@ -0,0 +1,1200 @@
1 #
2 # Automatically generated make config: don't edit
3 # Busybox version: 1.35.0
4 # Tue Aug 16 02:15:21 2022
5 #
6 CONFIG_HAVE_DOT_CONFIG=y
7
8 #
9 # Settings
10 #
11 CONFIG_DESKTOP=y
12 # CONFIG_EXTRA_COMPAT is not set
13 # CONFIG_FEDORA_COMPAT is not set
14 CONFIG_INCLUDE_SUSv2=y
15 CONFIG_LONG_OPTS=y
16 CONFIG_SHOW_USAGE=y
17 CONFIG_FEATURE_VERBOSE_USAGE=y
18 CONFIG_FEATURE_COMPRESS_USAGE=y
19 CONFIG_LFS=y
20 # CONFIG_PAM is not set
21 CONFIG_FEATURE_DEVPTS=y
22 CONFIG_FEATURE_UTMP=y
23 CONFIG_FEATURE_WTMP=y
24 CONFIG_FEATURE_PIDFILE=y
25 CONFIG_PID_FILE_PATH="/var/run"
26 CONFIG_BUSYBOX=y
27 CONFIG_FEATURE_SHOW_SCRIPT=y
28 CONFIG_FEATURE_INSTALLER=y
29 # CONFIG_INSTALL_NO_USR is not set
30 CONFIG_FEATURE_SUID=y
31 CONFIG_FEATURE_SUID_CONFIG=y
32 CONFIG_FEATURE_SUID_CONFIG_QUIET=y
33 # CONFIG_FEATURE_PREFER_APPLETS is not set
34 CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
35 # CONFIG_SELINUX is not set
36 # CONFIG_FEATURE_CLEAN_UP is not set
37 CONFIG_FEATURE_SYSLOG_INFO=y
38 CONFIG_FEATURE_SYSLOG=y
39
40 #
41 # Build Options
42 #
43 CONFIG_STATIC=y
44 # CONFIG_PIE is not set
45 # CONFIG_NOMMU is not set
46 # CONFIG_BUILD_LIBBUSYBOX is not set
47 # CONFIG_FEATURE_LIBBUSYBOX_STATIC is not set
48 # CONFIG_FEATURE_INDIVIDUAL is not set
49 # CONFIG_FEATURE_SHARED_BUSYBOX is not set
50 CONFIG_CROSS_COMPILER_PREFIX=""
51 CONFIG_SYSROOT=""
52 CONFIG_EXTRA_CFLAGS=""
53 CONFIG_EXTRA_LDFLAGS=""
54 CONFIG_EXTRA_LDLIBS=""
55 # CONFIG_USE_PORTABLE_CODE is not set
56 CONFIG_STACK_OPTIMIZATION_386=y
57 CONFIG_STATIC_LIBGCC=y
58
59 #
60 # Installation Options ("make install" behavior)
61 #
62 CONFIG_INSTALL_APPLET_SYMLINKS=y
63 # CONFIG_INSTALL_APPLET_HARDLINKS is not set
64 # CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
65 # CONFIG_INSTALL_APPLET_DONT is not set
66 # CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
67 # CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
68 # CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
69 CONFIG_PREFIX="./_install"
70
71 #
72 # Debugging Options
73 #
74 # CONFIG_DEBUG is not set
75 # CONFIG_DEBUG_PESSIMIZE is not set
76 # CONFIG_DEBUG_SANITIZE is not set
77 # CONFIG_UNIT_TEST is not set
78 # CONFIG_WERROR is not set
79 # CONFIG_WARN_SIMPLE_MSG is not set
80 CONFIG_NO_DEBUG_LIB=y
81 # CONFIG_DMALLOC is not set
82 # CONFIG_EFENCE is not set
83
84 #
85 # Library Tuning
86 #
87 # CONFIG_FEATURE_USE_BSS_TAIL is not set
88 CONFIG_FLOAT_DURATION=y
89 CONFIG_FEATURE_RTMINMAX=y
90 CONFIG_FEATURE_RTMINMAX_USE_LIBC_DEFINITIONS=y
91 CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
92 # CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
93 # CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
94 CONFIG_PASSWORD_MINLEN=6
95 CONFIG_MD5_SMALL=1
96 CONFIG_SHA3_SMALL=1
97 CONFIG_FEATURE_NON_POSIX_CP=y
98 # CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set
99 CONFIG_FEATURE_USE_SENDFILE=y
100 CONFIG_FEATURE_COPYBUF_KB=4
101 CONFIG_MONOTONIC_SYSCALL=y
102 CONFIG_IOCTL_HEX2STR_ERROR=y
103 CONFIG_FEATURE_EDITING=y
104 CONFIG_FEATURE_EDITING_MAX_LEN=1024
105 # CONFIG_FEATURE_EDITING_VI is not set
106 CONFIG_FEATURE_EDITING_HISTORY=255
107 CONFIG_FEATURE_EDITING_SAVEHISTORY=y
108 # CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set
109 CONFIG_FEATURE_REVERSE_SEARCH=y
110 CONFIG_FEATURE_TAB_COMPLETION=y
111 CONFIG_FEATURE_USERNAME_COMPLETION=y
112 CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
113 CONFIG_FEATURE_EDITING_WINCH=y
114 # CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
115 # CONFIG_LOCALE_SUPPORT is not set
116 CONFIG_UNICODE_SUPPORT=y
117 # CONFIG_UNICODE_USING_LOCALE is not set
118 # CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
119 CONFIG_SUBST_WCHAR=63
120 CONFIG_LAST_SUPPORTED_WCHAR=767
121 # CONFIG_UNICODE_COMBINING_WCHARS is not set
122 # CONFIG_UNICODE_WIDE_WCHARS is not set
123 # CONFIG_UNICODE_BIDI_SUPPORT is not set
124 # CONFIG_UNICODE_NEUTRAL_TABLE is not set
125 # CONFIG_UNICODE_PRESERVE_BROKEN is not set
126
127 #
128 # Applets
129 #
130
131 #
132 # Archival Utilities
133 #
134 # CONFIG_FEATURE_SEAMLESS_XZ is not set
135 # CONFIG_FEATURE_SEAMLESS_LZMA is not set
136 # CONFIG_FEATURE_SEAMLESS_BZ2 is not set
137 CONFIG_FEATURE_SEAMLESS_GZ=y
138 # CONFIG_FEATURE_SEAMLESS_Z is not set
139 # CONFIG_AR is not set
140 # CONFIG_FEATURE_AR_LONG_FILENAMES is not set
141 # CONFIG_FEATURE_AR_CREATE is not set
142 # CONFIG_UNCOMPRESS is not set
143 CONFIG_GUNZIP=y
144 CONFIG_ZCAT=y
145 CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y
146 # CONFIG_BUNZIP2 is not set
147 # CONFIG_BZCAT is not set
148 # CONFIG_UNLZMA is not set
149 # CONFIG_LZCAT is not set
150 # CONFIG_LZMA is not set
151 # CONFIG_UNXZ is not set
152 # CONFIG_XZCAT is not set
153 # CONFIG_XZ is not set
154 # CONFIG_BZIP2 is not set
155 CONFIG_BZIP2_SMALL=0
156 # CONFIG_FEATURE_BZIP2_DECOMPRESS is not set
157 # CONFIG_CPIO is not set
158 # CONFIG_FEATURE_CPIO_O is not set
159 # CONFIG_FEATURE_CPIO_P is not set
160 # CONFIG_FEATURE_CPIO_IGNORE_DEVNO is not set
161 # CONFIG_FEATURE_CPIO_RENUMBER_INODES is not set
162 # CONFIG_DPKG is not set
163 # CONFIG_DPKG_DEB is not set
164 CONFIG_GZIP=y
165 CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
166 CONFIG_GZIP_FAST=0
167 # CONFIG_FEATURE_GZIP_LEVELS is not set
168 CONFIG_FEATURE_GZIP_DECOMPRESS=y
169 # CONFIG_LZOP is not set
170 # CONFIG_UNLZOP is not set
171 # CONFIG_LZOPCAT is not set
172 # CONFIG_LZOP_COMPR_HIGH is not set
173 # CONFIG_RPM is not set
174 # CONFIG_RPM2CPIO is not set
175 CONFIG_TAR=y
176 CONFIG_FEATURE_TAR_LONG_OPTIONS=y
177 CONFIG_FEATURE_TAR_CREATE=y
178 CONFIG_FEATURE_TAR_AUTODETECT=y
179 CONFIG_FEATURE_TAR_FROM=y
180 # CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
181 # CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
182 CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
183 # CONFIG_FEATURE_TAR_TO_COMMAND is not set
184 CONFIG_FEATURE_TAR_UNAME_GNAME=y
185 CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
186 # CONFIG_FEATURE_TAR_SELINUX is not set
187 CONFIG_UNZIP=y
188 CONFIG_FEATURE_UNZIP_CDF=y
189 CONFIG_FEATURE_UNZIP_BZIP2=y
190 CONFIG_FEATURE_UNZIP_LZMA=y
191 CONFIG_FEATURE_UNZIP_XZ=y
192 # CONFIG_FEATURE_LZMA_FAST is not set
193
194 #
195 # Coreutils
196 #
197 CONFIG_FEATURE_VERBOSE=y
198
199 #
200 # Common options for date and touch
201 #
202 CONFIG_FEATURE_TIMEZONE=y
203
204 #
205 # Common options for cp and mv
206 #
207 CONFIG_FEATURE_PRESERVE_HARDLINKS=y
208
209 #
210 # Common options for df, du, ls
211 #
212 CONFIG_FEATURE_HUMAN_READABLE=y
213 CONFIG_BASENAME=y
214 CONFIG_CAT=y
215 CONFIG_FEATURE_CATN=y
216 CONFIG_FEATURE_CATV=y
217 CONFIG_CHGRP=y
218 CONFIG_CHMOD=y
219 CONFIG_CHOWN=y
220 CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y
221 CONFIG_CHROOT=y
222 # CONFIG_CKSUM is not set
223 # CONFIG_CRC32 is not set
224 CONFIG_COMM=y
225 CONFIG_CP=y
226 CONFIG_FEATURE_CP_LONG_OPTIONS=y
227 CONFIG_FEATURE_CP_REFLINK=y
228 CONFIG_CUT=y
229 CONFIG_FEATURE_CUT_REGEX=y
230 CONFIG_DATE=y
231 CONFIG_FEATURE_DATE_ISOFMT=y
232 # CONFIG_FEATURE_DATE_NANO is not set
233 CONFIG_FEATURE_DATE_COMPAT=y
234 CONFIG_DD=y
235 CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
236 CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
237 CONFIG_FEATURE_DD_IBS_OBS=y
238 CONFIG_FEATURE_DD_STATUS=y
239 CONFIG_DF=y
240 CONFIG_FEATURE_DF_FANCY=y
241 CONFIG_FEATURE_SKIP_ROOTFS=y
242 CONFIG_DIRNAME=y
243 CONFIG_DOS2UNIX=y
244 CONFIG_UNIX2DOS=y
245 CONFIG_DU=y
246 CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
247 # CONFIG_ECHO is not set
248 CONFIG_FEATURE_FANCY_ECHO=y
249 CONFIG_ENV=y
250 CONFIG_EXPAND=y
251 CONFIG_UNEXPAND=y
252 CONFIG_EXPR=y
253 CONFIG_EXPR_MATH_SUPPORT_64=y
254 # CONFIG_FACTOR is not set
255 CONFIG_FALSE=y
256 CONFIG_FOLD=y
257 CONFIG_HEAD=y
258 CONFIG_FEATURE_FANCY_HEAD=y
259 CONFIG_HOSTID=y
260 CONFIG_ID=y
261 CONFIG_GROUPS=y
262 CONFIG_INSTALL=y
263 CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y
264 CONFIG_LINK=y
265 CONFIG_LN=y
266 # CONFIG_LOGNAME is not set
267 CONFIG_LS=y
268 CONFIG_FEATURE_LS_FILETYPES=y
269 CONFIG_FEATURE_LS_FOLLOWLINKS=y
270 CONFIG_FEATURE_LS_RECURSIVE=y
271 CONFIG_FEATURE_LS_WIDTH=y
272 CONFIG_FEATURE_LS_SORTFILES=y
273 CONFIG_FEATURE_LS_TIMESTAMPS=y
274 CONFIG_FEATURE_LS_USERNAME=y
275 CONFIG_FEATURE_LS_COLOR=y
276 CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
277 # CONFIG_MD5SUM is not set
278 # CONFIG_SHA1SUM is not set
279 # CONFIG_SHA256SUM is not set
280 # CONFIG_SHA512SUM is not set
281 # CONFIG_SHA3SUM is not set
282 # CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set
283 CONFIG_MKDIR=y
284 CONFIG_MKFIFO=y
285 CONFIG_MKNOD=y
286 CONFIG_MKTEMP=y
287 CONFIG_MV=y
288 CONFIG_NICE=y
289 CONFIG_NL=y
290 CONFIG_NOHUP=y
291 CONFIG_NPROC=y
292 CONFIG_OD=y
293 CONFIG_PASTE=y
294 # CONFIG_PRINTENV is not set
295 # CONFIG_PRINTF is not set
296 CONFIG_PWD=y
297 CONFIG_READLINK=y
298 CONFIG_FEATURE_READLINK_FOLLOW=y
299 CONFIG_REALPATH=y
300 CONFIG_RM=y
301 CONFIG_RMDIR=y
302 CONFIG_SEQ=y
303 CONFIG_SHRED=y
304 CONFIG_SHUF=y
305 CONFIG_SLEEP=y
306 CONFIG_FEATURE_FANCY_SLEEP=y
307 CONFIG_SORT=y
308 # CONFIG_FEATURE_SORT_BIG is not set
309 # CONFIG_FEATURE_SORT_OPTIMIZE_MEMORY is not set
310 CONFIG_SPLIT=y
311 CONFIG_FEATURE_SPLIT_FANCY=y
312 CONFIG_STAT=y
313 CONFIG_FEATURE_STAT_FORMAT=y
314 CONFIG_FEATURE_STAT_FILESYSTEM=y
315 CONFIG_STTY=y
316 # CONFIG_SUM is not set
317 CONFIG_SYNC=y
318 CONFIG_FEATURE_SYNC_FANCY=y
319 CONFIG_FSYNC=y
320 CONFIG_TAC=y
321 CONFIG_TAIL=y
322 CONFIG_FEATURE_FANCY_TAIL=y
323 CONFIG_TEE=y
324 CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
325 # CONFIG_TEST is not set
326 # CONFIG_TEST1 is not set
327 # CONFIG_TEST2 is not set
328 # CONFIG_FEATURE_TEST_64 is not set
329 CONFIG_TIMEOUT=y
330 CONFIG_TOUCH=y
331 CONFIG_FEATURE_TOUCH_SUSV3=y
332 CONFIG_TR=y
333 CONFIG_FEATURE_TR_CLASSES=y
334 CONFIG_FEATURE_TR_EQUIV=y
335 CONFIG_TRUE=y
336 CONFIG_TRUNCATE=y
337 CONFIG_TTY=y
338 CONFIG_UNAME=y
339 CONFIG_UNAME_OSNAME="GNU/Linux"
340 CONFIG_BB_ARCH=y
341 CONFIG_UNIQ=y
342 CONFIG_UNLINK=y
343 CONFIG_USLEEP=y
344 CONFIG_UUDECODE=y
345 CONFIG_BASE32=y
346 CONFIG_BASE64=y
347 CONFIG_UUENCODE=y
348 CONFIG_WC=y
349 CONFIG_FEATURE_WC_LARGE=y
350 CONFIG_WHO=y
351 CONFIG_W=y
352 CONFIG_USERS=y
353 CONFIG_WHOAMI=y
354 CONFIG_YES=y
355
356 #
357 # Console Utilities
358 #
359 # CONFIG_CHVT is not set
360 CONFIG_CLEAR=y
361 # CONFIG_DEALLOCVT is not set
362 # CONFIG_DUMPKMAP is not set
363 # CONFIG_FGCONSOLE is not set
364 # CONFIG_KBD_MODE is not set
365 # CONFIG_LOADFONT is not set
366 # CONFIG_SETFONT is not set
367 # CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set
368 CONFIG_DEFAULT_SETFONT_DIR=""
369 # CONFIG_FEATURE_LOADFONT_PSF2 is not set
370 # CONFIG_FEATURE_LOADFONT_RAW is not set
371 # CONFIG_LOADKMAP is not set
372 # CONFIG_OPENVT is not set
373 # CONFIG_RESET is not set
374 # CONFIG_RESIZE is not set
375 # CONFIG_FEATURE_RESIZE_PRINT is not set
376 # CONFIG_SETCONSOLE is not set
377 # CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
378 # CONFIG_SETKEYCODES is not set
379 # CONFIG_SETLOGCONS is not set
380 # CONFIG_SHOWKEY is not set
381
382 #
383 # Debian Utilities
384 #
385 # CONFIG_PIPE_PROGRESS is not set
386 # CONFIG_RUN_PARTS is not set
387 # CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
388 # CONFIG_FEATURE_RUN_PARTS_FANCY is not set
389 # CONFIG_START_STOP_DAEMON is not set
390 # CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set
391 # CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set
392 CONFIG_WHICH=y
393
394 #
395 # klibc-utils
396 #
397 # CONFIG_MINIPS is not set
398 # CONFIG_NUKE is not set
399 # CONFIG_RESUME is not set
400 # CONFIG_RUN_INIT is not set
401
402 #
403 # Editors
404 #
405 # CONFIG_AWK is not set
406 # CONFIG_FEATURE_AWK_LIBM is not set
407 # CONFIG_FEATURE_AWK_GNU_EXTENSIONS is not set
408 # CONFIG_CMP is not set
409 CONFIG_DIFF=y
410 CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
411 CONFIG_FEATURE_DIFF_DIR=y
412 # CONFIG_ED is not set
413 CONFIG_PATCH=y
414 CONFIG_SED=y
415 CONFIG_VI=y
416 CONFIG_FEATURE_VI_MAX_LEN=4096
417 # CONFIG_FEATURE_VI_8BIT is not set
418 CONFIG_FEATURE_VI_COLON=y
419 CONFIG_FEATURE_VI_COLON_EXPAND=y
420 CONFIG_FEATURE_VI_YANKMARK=y
421 CONFIG_FEATURE_VI_SEARCH=y
422 # CONFIG_FEATURE_VI_REGEX_SEARCH is not set
423 CONFIG_FEATURE_VI_USE_SIGNALS=y
424 CONFIG_FEATURE_VI_DOT_CMD=y
425 CONFIG_FEATURE_VI_READONLY=y
426 CONFIG_FEATURE_VI_SETOPTS=y
427 CONFIG_FEATURE_VI_SET=y
428 CONFIG_FEATURE_VI_WIN_RESIZE=y
429 CONFIG_FEATURE_VI_ASK_TERMINAL=y
430 CONFIG_FEATURE_VI_UNDO=y
431 CONFIG_FEATURE_VI_UNDO_QUEUE=y
432 CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256
433 CONFIG_FEATURE_VI_VERBOSE_STATUS=y
434 CONFIG_FEATURE_ALLOW_EXEC=y
435
436 #
437 # Finding Utilities
438 #
439 CONFIG_FIND=y
440 CONFIG_FEATURE_FIND_PRINT0=y
441 CONFIG_FEATURE_FIND_MTIME=y
442 CONFIG_FEATURE_FIND_ATIME=y
443 CONFIG_FEATURE_FIND_CTIME=y
444 CONFIG_FEATURE_FIND_MMIN=y
445 CONFIG_FEATURE_FIND_AMIN=y
446 CONFIG_FEATURE_FIND_CMIN=y
447 CONFIG_FEATURE_FIND_PERM=y
448 CONFIG_FEATURE_FIND_TYPE=y
449 CONFIG_FEATURE_FIND_EXECUTABLE=y
450 CONFIG_FEATURE_FIND_XDEV=y
451 CONFIG_FEATURE_FIND_MAXDEPTH=y
452 CONFIG_FEATURE_FIND_NEWER=y
453 CONFIG_FEATURE_FIND_INUM=y
454 CONFIG_FEATURE_FIND_SAMEFILE=y
455 CONFIG_FEATURE_FIND_EXEC=y
456 CONFIG_FEATURE_FIND_EXEC_PLUS=y
457 CONFIG_FEATURE_FIND_USER=y
458 CONFIG_FEATURE_FIND_GROUP=y
459 CONFIG_FEATURE_FIND_NOT=y
460 CONFIG_FEATURE_FIND_DEPTH=y
461 CONFIG_FEATURE_FIND_PAREN=y
462 CONFIG_FEATURE_FIND_SIZE=y
463 CONFIG_FEATURE_FIND_PRUNE=y
464 CONFIG_FEATURE_FIND_QUIT=y
465 CONFIG_FEATURE_FIND_DELETE=y
466 CONFIG_FEATURE_FIND_EMPTY=y
467 CONFIG_FEATURE_FIND_PATH=y
468 CONFIG_FEATURE_FIND_REGEX=y
469 # CONFIG_FEATURE_FIND_CONTEXT is not set
470 CONFIG_FEATURE_FIND_LINKS=y
471 CONFIG_GREP=y
472 # CONFIG_EGREP is not set
473 # CONFIG_FGREP is not set
474 CONFIG_FEATURE_GREP_CONTEXT=y
475 CONFIG_XARGS=y
476 CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
477 CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
478 CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
479 CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
480 CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y
481 CONFIG_FEATURE_XARGS_SUPPORT_PARALLEL=y
482 CONFIG_FEATURE_XARGS_SUPPORT_ARGS_FILE=y
483
484 #
485 # Init Utilities
486 #
487 # CONFIG_BOOTCHARTD is not set
488 # CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
489 # CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
490 # CONFIG_HALT is not set
491 # CONFIG_POWEROFF is not set
492 # CONFIG_REBOOT is not set
493 # CONFIG_FEATURE_WAIT_FOR_INIT is not set
494 # CONFIG_FEATURE_CALL_TELINIT is not set
495 CONFIG_TELINIT_PATH=""
496 # CONFIG_INIT is not set
497 # CONFIG_LINUXRC is not set
498 # CONFIG_FEATURE_USE_INITTAB is not set
499 # CONFIG_FEATURE_KILL_REMOVED is not set
500 CONFIG_FEATURE_KILL_DELAY=0
501 # CONFIG_FEATURE_INIT_SCTTY is not set
502 # CONFIG_FEATURE_INIT_SYSLOG is not set
503 # CONFIG_FEATURE_INIT_QUIET is not set
504 # CONFIG_FEATURE_INIT_COREDUMPS is not set
505 CONFIG_INIT_TERMINAL_TYPE=""
506 # CONFIG_FEATURE_INIT_MODIFY_CMDLINE is not set
507
508 #
509 # Login/Password Management Utilities
510 #
511 # CONFIG_FEATURE_SHADOWPASSWDS is not set
512 CONFIG_USE_BB_PWD_GRP=y
513 # CONFIG_USE_BB_SHADOW is not set
514 CONFIG_USE_BB_CRYPT=y
515 CONFIG_USE_BB_CRYPT_SHA=y
516 # CONFIG_ADD_SHELL is not set
517 # CONFIG_REMOVE_SHELL is not set
518 CONFIG_ADDGROUP=y
519 # CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
520 CONFIG_ADDUSER=y
521 # CONFIG_FEATURE_CHECK_NAMES is not set
522 CONFIG_LAST_ID=60000
523 CONFIG_FIRST_SYSTEM_ID=100
524 CONFIG_LAST_SYSTEM_ID=999
525 # CONFIG_CHPASSWD is not set
526 CONFIG_FEATURE_DEFAULT_PASSWD_ALGO=""
527 # CONFIG_CRYPTPW is not set
528 # CONFIG_MKPASSWD is not set
529 # CONFIG_DELUSER is not set
530 # CONFIG_DELGROUP is not set
531 # CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
532 # CONFIG_GETTY is not set
533 # CONFIG_LOGIN is not set
534 # CONFIG_LOGIN_SESSION_AS_CHILD is not set
535 # CONFIG_LOGIN_SCRIPTS is not set
536 # CONFIG_FEATURE_NOLOGIN is not set
537 # CONFIG_FEATURE_SECURETTY is not set
538 # CONFIG_PASSWD is not set
539 # CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
540 # CONFIG_SU is not set
541 # CONFIG_FEATURE_SU_SYSLOG is not set
542 # CONFIG_FEATURE_SU_CHECKS_SHELLS is not set
543 # CONFIG_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY is not set
544 # CONFIG_SULOGIN is not set
545 # CONFIG_VLOCK is not set
546
547 #
548 # Linux Ext2 FS Progs
549 #
550 # CONFIG_CHATTR is not set
551 # CONFIG_FSCK is not set
552 # CONFIG_LSATTR is not set
553 # CONFIG_TUNE2FS is not set
554
555 #
556 # Linux Module Utilities
557 #
558 # CONFIG_MODPROBE_SMALL is not set
559 # CONFIG_DEPMOD is not set
560 # CONFIG_INSMOD is not set
561 # CONFIG_LSMOD is not set
562 # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
563 # CONFIG_MODINFO is not set
564 # CONFIG_MODPROBE is not set
565 # CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
566 # CONFIG_RMMOD is not set
567
568 #
569 # Options common to multiple modutils
570 #
571 # CONFIG_FEATURE_CMDLINE_MODULE_OPTIONS is not set
572 # CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
573 # CONFIG_FEATURE_2_4_MODULES is not set
574 # CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
575 # CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
576 # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
577 # CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
578 # CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
579 # CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
580 # CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
581 # CONFIG_FEATURE_MODUTILS_ALIAS is not set
582 # CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
583 CONFIG_DEFAULT_MODULES_DIR=""
584 CONFIG_DEFAULT_DEPMOD_FILE=""
585
586 #
587 # Linux System Utilities
588 #
589 # CONFIG_ACPID is not set
590 # CONFIG_FEATURE_ACPID_COMPAT is not set
591 # CONFIG_BLKDISCARD is not set
592 # CONFIG_BLKID is not set
593 # CONFIG_FEATURE_BLKID_TYPE is not set
594 # CONFIG_BLOCKDEV is not set
595 # CONFIG_CAL is not set
596 # CONFIG_CHRT is not set
597 # CONFIG_DMESG is not set
598 # CONFIG_FEATURE_DMESG_PRETTY is not set
599 # CONFIG_EJECT is not set
600 # CONFIG_FEATURE_EJECT_SCSI is not set
601 # CONFIG_FALLOCATE is not set
602 # CONFIG_FATATTR is not set
603 # CONFIG_FBSET is not set
604 # CONFIG_FEATURE_FBSET_FANCY is not set
605 # CONFIG_FEATURE_FBSET_READMODE is not set
606 # CONFIG_FDFORMAT is not set
607 # CONFIG_FDISK is not set
608 # CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set
609 # CONFIG_FEATURE_FDISK_WRITABLE is not set
610 # CONFIG_FEATURE_AIX_LABEL is not set
611 # CONFIG_FEATURE_SGI_LABEL is not set
612 # CONFIG_FEATURE_SUN_LABEL is not set
613 # CONFIG_FEATURE_OSF_LABEL is not set
614 # CONFIG_FEATURE_GPT_LABEL is not set
615 # CONFIG_FEATURE_FDISK_ADVANCED is not set
616 # CONFIG_FINDFS is not set
617 # CONFIG_FLOCK is not set
618 # CONFIG_FDFLUSH is not set
619 # CONFIG_FREERAMDISK is not set
620 # CONFIG_FSCK_MINIX is not set
621 # CONFIG_FSFREEZE is not set
622 # CONFIG_FSTRIM is not set
623 # CONFIG_GETOPT is not set
624 # CONFIG_FEATURE_GETOPT_LONG is not set
625 CONFIG_HEXDUMP=y
626 CONFIG_HD=y
627 CONFIG_XXD=y
628 # CONFIG_HWCLOCK is not set
629 # CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
630 # CONFIG_IONICE is not set
631 # CONFIG_IPCRM is not set
632 # CONFIG_IPCS is not set
633 # CONFIG_LAST is not set
634 # CONFIG_FEATURE_LAST_FANCY is not set
635 # CONFIG_LOSETUP is not set
636 # CONFIG_LSPCI is not set
637 # CONFIG_LSUSB is not set
638 # CONFIG_MDEV is not set
639 # CONFIG_FEATURE_MDEV_CONF is not set
640 # CONFIG_FEATURE_MDEV_RENAME is not set
641 # CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
642 # CONFIG_FEATURE_MDEV_EXEC is not set
643 # CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
644 # CONFIG_FEATURE_MDEV_DAEMON is not set
645 # CONFIG_MESG is not set
646 # CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP is not set
647 # CONFIG_MKE2FS is not set
648 # CONFIG_MKFS_EXT2 is not set
649 # CONFIG_MKFS_MINIX is not set
650 # CONFIG_FEATURE_MINIX2 is not set
651 # CONFIG_MKFS_REISER is not set
652 # CONFIG_MKDOSFS is not set
653 # CONFIG_MKFS_VFAT is not set
654 # CONFIG_MKSWAP is not set
655 # CONFIG_FEATURE_MKSWAP_UUID is not set
656 CONFIG_MORE=y
657 CONFIG_MOUNT=y
658 CONFIG_FEATURE_MOUNT_FAKE=y
659 CONFIG_FEATURE_MOUNT_VERBOSE=y
660 # CONFIG_FEATURE_MOUNT_HELPERS is not set
661 # CONFIG_FEATURE_MOUNT_LABEL is not set
662 # CONFIG_FEATURE_MOUNT_NFS is not set
663 # CONFIG_FEATURE_MOUNT_CIFS is not set
664 CONFIG_FEATURE_MOUNT_FLAGS=y
665 CONFIG_FEATURE_MOUNT_FSTAB=y
666 CONFIG_FEATURE_MOUNT_OTHERTAB=y
667 # CONFIG_MOUNTPOINT is not set
668 CONFIG_NOLOGIN=y
669 # CONFIG_NOLOGIN_DEPENDENCIES is not set
670 # CONFIG_NSENTER is not set
671 # CONFIG_PIVOT_ROOT is not set
672 # CONFIG_RDATE is not set
673 # CONFIG_RDEV is not set
674 # CONFIG_READPROFILE is not set
675 CONFIG_RENICE=y
676 CONFIG_REV=y
677 # CONFIG_RTCWAKE is not set
678 # CONFIG_SCRIPT is not set
679 # CONFIG_SCRIPTREPLAY is not set
680 # CONFIG_SETARCH is not set
681 # CONFIG_LINUX32 is not set
682 # CONFIG_LINUX64 is not set
683 # CONFIG_SETPRIV is not set
684 # CONFIG_FEATURE_SETPRIV_DUMP is not set
685 # CONFIG_FEATURE_SETPRIV_CAPABILITIES is not set
686 # CONFIG_FEATURE_SETPRIV_CAPABILITY_NAMES is not set
687 # CONFIG_SETSID is not set
688 # CONFIG_SWAPON is not set
689 # CONFIG_FEATURE_SWAPON_DISCARD is not set
690 # CONFIG_FEATURE_SWAPON_PRI is not set
691 # CONFIG_SWAPOFF is not set
692 # CONFIG_FEATURE_SWAPONOFF_LABEL is not set
693 # CONFIG_SWITCH_ROOT is not set
694 # CONFIG_TASKSET is not set
695 # CONFIG_FEATURE_TASKSET_FANCY is not set
696 # CONFIG_FEATURE_TASKSET_CPULIST is not set
697 # CONFIG_UEVENT is not set
698 CONFIG_UMOUNT=y
699 CONFIG_FEATURE_UMOUNT_ALL=y
700 # CONFIG_UNSHARE is not set
701 # CONFIG_WALL is not set
702
703 #
704 # Common options for mount/umount
705 #
706 # CONFIG_FEATURE_MOUNT_LOOP is not set
707 # CONFIG_FEATURE_MOUNT_LOOP_CREATE is not set
708 # CONFIG_FEATURE_MTAB_SUPPORT is not set
709 # CONFIG_VOLUMEID is not set
710 # CONFIG_FEATURE_VOLUMEID_BCACHE is not set
711 # CONFIG_FEATURE_VOLUMEID_BTRFS is not set
712 # CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
713 # CONFIG_FEATURE_VOLUMEID_EROFS is not set
714 # CONFIG_FEATURE_VOLUMEID_EXFAT is not set
715 # CONFIG_FEATURE_VOLUMEID_EXT is not set
716 # CONFIG_FEATURE_VOLUMEID_F2FS is not set
717 # CONFIG_FEATURE_VOLUMEID_FAT is not set
718 # CONFIG_FEATURE_VOLUMEID_HFS is not set
719 # CONFIG_FEATURE_VOLUMEID_ISO9660 is not set
720 # CONFIG_FEATURE_VOLUMEID_JFS is not set
721 # CONFIG_FEATURE_VOLUMEID_LFS is not set
722 # CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
723 # CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set
724 # CONFIG_FEATURE_VOLUMEID_LUKS is not set
725 # CONFIG_FEATURE_VOLUMEID_MINIX is not set
726 # CONFIG_FEATURE_VOLUMEID_NILFS is not set
727 # CONFIG_FEATURE_VOLUMEID_NTFS is not set
728 # CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
729 # CONFIG_FEATURE_VOLUMEID_REISERFS is not set
730 # CONFIG_FEATURE_VOLUMEID_ROMFS is not set
731 # CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set
732 # CONFIG_FEATURE_VOLUMEID_SYSV is not set
733 # CONFIG_FEATURE_VOLUMEID_UBIFS is not set
734 # CONFIG_FEATURE_VOLUMEID_UDF is not set
735 # CONFIG_FEATURE_VOLUMEID_XFS is not set
736
737 #
738 # Miscellaneous Utilities
739 #
740 # CONFIG_ADJTIMEX is not set
741 # CONFIG_ASCII is not set
742 # CONFIG_BBCONFIG is not set
743 # CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
744 CONFIG_BC=y
745 # CONFIG_DC is not set
746 CONFIG_FEATURE_DC_BIG=y
747 # CONFIG_FEATURE_DC_LIBM is not set
748 # CONFIG_FEATURE_BC_INTERACTIVE is not set
749 # CONFIG_FEATURE_BC_LONG_OPTIONS is not set
750 # CONFIG_BEEP is not set
751 CONFIG_FEATURE_BEEP_FREQ=0
752 CONFIG_FEATURE_BEEP_LENGTH_MS=0
753 # CONFIG_CHAT is not set
754 # CONFIG_FEATURE_CHAT_NOFAIL is not set
755 # CONFIG_FEATURE_CHAT_TTY_HIFI is not set
756 # CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set
757 # CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set
758 # CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set
759 # CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set
760 # CONFIG_FEATURE_CHAT_CLR_ABORT is not set
761 # CONFIG_CONSPY is not set
762 CONFIG_CROND=y
763 CONFIG_FEATURE_CROND_D=y
764 CONFIG_FEATURE_CROND_CALL_SENDMAIL=y
765 CONFIG_FEATURE_CROND_SPECIAL_TIMES=y
766 CONFIG_FEATURE_CROND_DIR="/var/spool/cron"
767 CONFIG_CRONTAB=y
768 # CONFIG_DEVFSD is not set
769 # CONFIG_DEVFSD_MODLOAD is not set
770 # CONFIG_DEVFSD_FG_NP is not set
771 # CONFIG_DEVFSD_VERBOSE is not set
772 # CONFIG_FEATURE_DEVFS is not set
773 # CONFIG_DEVMEM is not set
774 # CONFIG_FBSPLASH is not set
775 # CONFIG_FLASH_ERASEALL is not set
776 # CONFIG_FLASH_LOCK is not set
777 # CONFIG_FLASH_UNLOCK is not set
778 # CONFIG_FLASHCP is not set
779 # CONFIG_HDPARM is not set
780 # CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
781 # CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
782 # CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
783 # CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
784 # CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
785 # CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
786 CONFIG_HEXEDIT=y
787 # CONFIG_I2CGET is not set
788 # CONFIG_I2CSET is not set
789 # CONFIG_I2CDUMP is not set
790 # CONFIG_I2CDETECT is not set
791 # CONFIG_I2CTRANSFER is not set
792 # CONFIG_INOTIFYD is not set
793 CONFIG_LESS=y
794 CONFIG_FEATURE_LESS_MAXLINES=9999999
795 CONFIG_FEATURE_LESS_BRACKETS=y
796 CONFIG_FEATURE_LESS_FLAGS=y
797 CONFIG_FEATURE_LESS_TRUNCATE=y
798 CONFIG_FEATURE_LESS_MARKS=y
799 CONFIG_FEATURE_LESS_REGEXP=y
800 CONFIG_FEATURE_LESS_WINCH=y
801 CONFIG_FEATURE_LESS_ASK_TERMINAL=y
802 CONFIG_FEATURE_LESS_DASHCMD=y
803 CONFIG_FEATURE_LESS_LINENUMS=y
804 CONFIG_FEATURE_LESS_RAW=y
805 CONFIG_FEATURE_LESS_ENV=y
806 # CONFIG_LSSCSI is not set
807 # CONFIG_MAKEDEVS is not set
808 # CONFIG_FEATURE_MAKEDEVS_LEAF is not set
809 # CONFIG_FEATURE_MAKEDEVS_TABLE is not set
810 # CONFIG_MAN is not set
811 # CONFIG_MICROCOM is not set
812 # CONFIG_MIM is not set
813 # CONFIG_MT is not set
814 # CONFIG_NANDWRITE is not set
815 # CONFIG_NANDDUMP is not set
816 # CONFIG_PARTPROBE is not set
817 # CONFIG_RAIDAUTORUN is not set
818 # CONFIG_READAHEAD is not set
819 # CONFIG_RFKILL is not set
820 # CONFIG_RUNLEVEL is not set
821 # CONFIG_RX is not set
822 # CONFIG_SETFATTR is not set
823 # CONFIG_SETSERIAL is not set
824 CONFIG_STRINGS=y
825 CONFIG_TIME=y
826 # CONFIG_TS is not set
827 # CONFIG_TTYSIZE is not set
828 # CONFIG_UBIATTACH is not set
829 # CONFIG_UBIDETACH is not set
830 # CONFIG_UBIMKVOL is not set
831 # CONFIG_UBIRMVOL is not set
832 # CONFIG_UBIRSVOL is not set
833 # CONFIG_UBIUPDATEVOL is not set
834 # CONFIG_UBIRENAME is not set
835 # CONFIG_VOLNAME is not set
836 # CONFIG_WATCHDOG is not set
837 # CONFIG_FEATURE_WATCHDOG_OPEN_TWICE is not set
838
839 #
840 # Networking Utilities
841 #
842 CONFIG_FEATURE_IPV6=y
843 # CONFIG_FEATURE_UNIX_LOCAL is not set
844 CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
845 # CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
846 # CONFIG_FEATURE_ETC_NETWORKS is not set
847 # CONFIG_FEATURE_ETC_SERVICES is not set
848 # CONFIG_FEATURE_HWIB is not set
849 # CONFIG_FEATURE_TLS_SHA1 is not set
850 # CONFIG_ARP is not set
851 # CONFIG_ARPING is not set
852 # CONFIG_BRCTL is not set
853 # CONFIG_FEATURE_BRCTL_FANCY is not set
854 # CONFIG_FEATURE_BRCTL_SHOW is not set
855 # CONFIG_DNSD is not set
856 # CONFIG_ETHER_WAKE is not set
857 # CONFIG_FTPD is not set
858 # CONFIG_FEATURE_FTPD_WRITE is not set
859 # CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set
860 # CONFIG_FEATURE_FTPD_AUTHENTICATION is not set
861 # CONFIG_FTPGET is not set
862 # CONFIG_FTPPUT is not set
863 # CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
864 # CONFIG_HOSTNAME is not set
865 # CONFIG_DNSDOMAINNAME is not set
866 # CONFIG_HTTPD is not set
867 CONFIG_FEATURE_HTTPD_PORT_DEFAULT=0
868 # CONFIG_FEATURE_HTTPD_RANGES is not set
869 # CONFIG_FEATURE_HTTPD_SETUID is not set
870 # CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
871 # CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
872 # CONFIG_FEATURE_HTTPD_CGI is not set
873 # CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
874 # CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
875 # CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
876 # CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set
877 # CONFIG_FEATURE_HTTPD_PROXY is not set
878 # CONFIG_FEATURE_HTTPD_GZIP is not set
879 # CONFIG_FEATURE_HTTPD_ETAG is not set
880 # CONFIG_FEATURE_HTTPD_LAST_MODIFIED is not set
881 # CONFIG_FEATURE_HTTPD_DATE is not set
882 # CONFIG_FEATURE_HTTPD_ACL_IP is not set
883 CONFIG_IFCONFIG=y
884 CONFIG_FEATURE_IFCONFIG_STATUS=y
885 # CONFIG_FEATURE_IFCONFIG_SLIP is not set
886 CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y
887 CONFIG_FEATURE_IFCONFIG_HW=y
888 CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y
889 # CONFIG_IFENSLAVE is not set
890 # CONFIG_IFPLUGD is not set
891 # CONFIG_IFUP is not set
892 # CONFIG_IFDOWN is not set
893 CONFIG_IFUPDOWN_IFSTATE_PATH=""
894 # CONFIG_FEATURE_IFUPDOWN_IP is not set
895 # CONFIG_FEATURE_IFUPDOWN_IPV4 is not set
896 # CONFIG_FEATURE_IFUPDOWN_IPV6 is not set
897 # CONFIG_FEATURE_IFUPDOWN_MAPPING is not set
898 # CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set
899 CONFIG_INETD=y
900 # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
901 # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
902 # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
903 # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
904 # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
905 # CONFIG_FEATURE_INETD_RPC is not set
906 CONFIG_IP=y
907 # CONFIG_IPADDR is not set
908 # CONFIG_IPLINK is not set
909 # CONFIG_IPROUTE is not set
910 # CONFIG_IPTUNNEL is not set
911 # CONFIG_IPRULE is not set
912 # CONFIG_IPNEIGH is not set
913 CONFIG_FEATURE_IP_ADDRESS=y
914 CONFIG_FEATURE_IP_LINK=y
915 CONFIG_FEATURE_IP_ROUTE=y
916 CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2"
917 # CONFIG_FEATURE_IP_TUNNEL is not set
918 # CONFIG_FEATURE_IP_RULE is not set
919 CONFIG_FEATURE_IP_NEIGH=y
920 # CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
921 CONFIG_IPCALC=y
922 CONFIG_FEATURE_IPCALC_LONG_OPTIONS=y
923 CONFIG_FEATURE_IPCALC_FANCY=y
924 # CONFIG_FAKEIDENTD is not set
925 # CONFIG_NAMEIF is not set
926 # CONFIG_FEATURE_NAMEIF_EXTENDED is not set
927 # CONFIG_NBDCLIENT is not set
928 CONFIG_NC=y
929 # CONFIG_NETCAT is not set
930 CONFIG_NC_SERVER=y
931 CONFIG_NC_EXTRA=y
932 CONFIG_NC_110_COMPAT=y
933 # CONFIG_NETSTAT is not set
934 # CONFIG_FEATURE_NETSTAT_WIDE is not set
935 # CONFIG_FEATURE_NETSTAT_PRG is not set
936 # CONFIG_NSLOOKUP is not set
937 # CONFIG_FEATURE_NSLOOKUP_BIG is not set
938 # CONFIG_FEATURE_NSLOOKUP_LONG_OPTIONS is not set
939 # CONFIG_NTPD is not set
940 # CONFIG_FEATURE_NTPD_SERVER is not set
941 # CONFIG_FEATURE_NTPD_CONF is not set
942 # CONFIG_FEATURE_NTP_AUTH is not set
943 # CONFIG_PING is not set
944 # CONFIG_PING6 is not set
945 # CONFIG_FEATURE_FANCY_PING is not set
946 # CONFIG_PSCAN is not set
947 CONFIG_ROUTE=y
948 # CONFIG_SLATTACH is not set
949 CONFIG_SSL_CLIENT=y
950 # CONFIG_TC is not set
951 # CONFIG_FEATURE_TC_INGRESS is not set
952 # CONFIG_TCPSVD is not set
953 # CONFIG_UDPSVD is not set
954 # CONFIG_TELNET is not set
955 # CONFIG_FEATURE_TELNET_TTYPE is not set
956 # CONFIG_FEATURE_TELNET_AUTOLOGIN is not set
957 # CONFIG_FEATURE_TELNET_WIDTH is not set
958 # CONFIG_TELNETD is not set
959 # CONFIG_FEATURE_TELNETD_STANDALONE is not set
960 CONFIG_FEATURE_TELNETD_PORT_DEFAULT=0
961 # CONFIG_FEATURE_TELNETD_INETD_WAIT is not set
962 # CONFIG_TFTP is not set
963 # CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set
964 # CONFIG_FEATURE_TFTP_HPA_COMPAT is not set
965 # CONFIG_TFTPD is not set
966 # CONFIG_FEATURE_TFTP_GET is not set
967 # CONFIG_FEATURE_TFTP_PUT is not set
968 # CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
969 # CONFIG_TFTP_DEBUG is not set
970 CONFIG_TLS=y
971 # CONFIG_TRACEROUTE is not set
972 # CONFIG_TRACEROUTE6 is not set
973 # CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
974 # CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
975 # CONFIG_TUNCTL is not set
976 # CONFIG_FEATURE_TUNCTL_UG is not set
977 # CONFIG_VCONFIG is not set
978 CONFIG_WGET=y
979 CONFIG_FEATURE_WGET_LONG_OPTIONS=y
980 CONFIG_FEATURE_WGET_STATUSBAR=y
981 CONFIG_FEATURE_WGET_FTP=y
982 CONFIG_FEATURE_WGET_AUTHENTICATION=y
983 CONFIG_FEATURE_WGET_TIMEOUT=y
984 CONFIG_FEATURE_WGET_HTTPS=y
985 CONFIG_FEATURE_WGET_OPENSSL=y
986 CONFIG_WHOIS=y
987 # CONFIG_ZCIP is not set
988 # CONFIG_UDHCPD is not set
989 # CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set
990 # CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
991 CONFIG_DHCPD_LEASES_FILE=""
992 # CONFIG_DUMPLEASES is not set
993 # CONFIG_DHCPRELAY is not set
994 # CONFIG_UDHCPC is not set
995 # CONFIG_FEATURE_UDHCPC_ARPING is not set
996 # CONFIG_FEATURE_UDHCPC_SANITIZEOPT is not set
997 CONFIG_UDHCPC_DEFAULT_SCRIPT=""
998 # CONFIG_UDHCPC6 is not set
999 # CONFIG_FEATURE_UDHCPC6_RFC3646 is not set
1000 # CONFIG_FEATURE_UDHCPC6_RFC4704 is not set
1001 # CONFIG_FEATURE_UDHCPC6_RFC4833 is not set
1002 # CONFIG_FEATURE_UDHCPC6_RFC5970 is not set
1003 CONFIG_UDHCPC_DEFAULT_INTERFACE=""
1004 # CONFIG_FEATURE_UDHCP_PORT is not set
1005 CONFIG_UDHCP_DEBUG=0
1006 CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=0
1007 # CONFIG_FEATURE_UDHCP_RFC3397 is not set
1008 # CONFIG_FEATURE_UDHCP_8021Q is not set
1009 CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS=""
1010
1011 #
1012 # Print Utilities
1013 #
1014 # CONFIG_LPD is not set
1015 # CONFIG_LPR is not set
1016 # CONFIG_LPQ is not set
1017
1018 #
1019 # Mail Utilities
1020 #
1021 CONFIG_FEATURE_MIME_CHARSET="utf-8"
1022 # CONFIG_MAKEMIME is not set
1023 # CONFIG_POPMAILDIR is not set
1024 # CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set
1025 # CONFIG_REFORMIME is not set
1026 # CONFIG_FEATURE_REFORMIME_COMPAT is not set
1027 CONFIG_SENDMAIL=y
1028
1029 #
1030 # Process Utilities
1031 #
1032 # CONFIG_FEATURE_FAST_TOP is not set
1033 CONFIG_FEATURE_SHOW_THREADS=y
1034 CONFIG_FREE=y
1035 CONFIG_FUSER=y
1036 CONFIG_IOSTAT=y
1037 CONFIG_KILL=y
1038 CONFIG_KILLALL=y
1039 # CONFIG_KILLALL5 is not set
1040 CONFIG_LSOF=y
1041 CONFIG_MPSTAT=y
1042 CONFIG_NMETER=y
1043 CONFIG_PGREP=y
1044 CONFIG_PKILL=y
1045 CONFIG_PIDOF=y
1046 CONFIG_FEATURE_PIDOF_SINGLE=y
1047 CONFIG_FEATURE_PIDOF_OMIT=y
1048 CONFIG_PMAP=y
1049 # CONFIG_POWERTOP is not set
1050 # CONFIG_FEATURE_POWERTOP_INTERACTIVE is not set
1051 CONFIG_PS=y
1052 # CONFIG_FEATURE_PS_WIDE is not set
1053 # CONFIG_FEATURE_PS_LONG is not set
1054 CONFIG_FEATURE_PS_TIME=y
1055 # CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
1056 CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y
1057 CONFIG_PSTREE=y
1058 CONFIG_PWDX=y
1059 CONFIG_SMEMCAP=y
1060 CONFIG_BB_SYSCTL=y
1061 CONFIG_TOP=y
1062 CONFIG_FEATURE_TOP_INTERACTIVE=y
1063 CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
1064 CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
1065 CONFIG_FEATURE_TOP_SMP_CPU=y
1066 CONFIG_FEATURE_TOP_DECIMALS=y
1067 CONFIG_FEATURE_TOP_SMP_PROCESS=y
1068 CONFIG_FEATURE_TOPMEM=y
1069 CONFIG_UPTIME=y
1070 CONFIG_FEATURE_UPTIME_UTMP_SUPPORT=y
1071 CONFIG_WATCH=y
1072
1073 #
1074 # Runit Utilities
1075 #
1076 CONFIG_CHPST=y
1077 CONFIG_SETUIDGID=y
1078 CONFIG_ENVUIDGID=y
1079 CONFIG_ENVDIR=y
1080 CONFIG_SOFTLIMIT=y
1081 CONFIG_RUNSV=y
1082 CONFIG_RUNSVDIR=y
1083 # CONFIG_FEATURE_RUNSVDIR_LOG is not set
1084 CONFIG_SV=y
1085 CONFIG_SV_DEFAULT_SERVICE_DIR="/var/service"
1086 CONFIG_SVC=y
1087 CONFIG_SVOK=y
1088 CONFIG_SVLOGD=y
1089 # CONFIG_CHCON is not set
1090 # CONFIG_GETENFORCE is not set
1091 # CONFIG_GETSEBOOL is not set
1092 # CONFIG_LOAD_POLICY is not set
1093 # CONFIG_MATCHPATHCON is not set
1094 # CONFIG_RUNCON is not set
1095 # CONFIG_SELINUXENABLED is not set
1096 # CONFIG_SESTATUS is not set
1097 # CONFIG_SETENFORCE is not set
1098 # CONFIG_SETFILES is not set
1099 # CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
1100 # CONFIG_RESTORECON is not set
1101 # CONFIG_SETSEBOOL is not set
1102
1103 #
1104 # Shells
1105 #
1106 CONFIG_SH_IS_ASH=y
1107 # CONFIG_SH_IS_HUSH is not set
1108 # CONFIG_SH_IS_NONE is not set
1109 # CONFIG_BASH_IS_ASH is not set
1110 # CONFIG_BASH_IS_HUSH is not set
1111 CONFIG_BASH_IS_NONE=y
1112 CONFIG_SHELL_ASH=y
1113 CONFIG_ASH=y
1114 CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
1115 CONFIG_ASH_INTERNAL_GLOB=y
1116 CONFIG_ASH_BASH_COMPAT=y
1117 # CONFIG_ASH_BASH_SOURCE_CURDIR is not set
1118 CONFIG_ASH_BASH_NOT_FOUND_HOOK=y
1119 CONFIG_ASH_JOB_CONTROL=y
1120 CONFIG_ASH_ALIAS=y
1121 CONFIG_ASH_RANDOM_SUPPORT=y
1122 CONFIG_ASH_EXPAND_PRMT=y
1123 CONFIG_ASH_IDLE_TIMEOUT=y
1124 CONFIG_ASH_MAIL=y
1125 CONFIG_ASH_ECHO=y
1126 CONFIG_ASH_PRINTF=y
1127 CONFIG_ASH_TEST=y
1128 CONFIG_ASH_HELP=y
1129 CONFIG_ASH_GETOPTS=y
1130 CONFIG_ASH_CMDCMD=y
1131 # CONFIG_CTTYHACK is not set
1132 # CONFIG_HUSH is not set
1133 # CONFIG_SHELL_HUSH is not set
1134 # CONFIG_HUSH_BASH_COMPAT is not set
1135 # CONFIG_HUSH_BRACE_EXPANSION is not set
1136 # CONFIG_HUSH_BASH_SOURCE_CURDIR is not set
1137 # CONFIG_HUSH_LINENO_VAR is not set
1138 # CONFIG_HUSH_INTERACTIVE is not set
1139 # CONFIG_HUSH_SAVEHISTORY is not set
1140 # CONFIG_HUSH_JOB is not set
1141 # CONFIG_HUSH_TICK is not set
1142 # CONFIG_HUSH_IF is not set
1143 # CONFIG_HUSH_LOOPS is not set
1144 # CONFIG_HUSH_CASE is not set
1145 # CONFIG_HUSH_FUNCTIONS is not set
1146 # CONFIG_HUSH_LOCAL is not set
1147 # CONFIG_HUSH_RANDOM_SUPPORT is not set
1148 # CONFIG_HUSH_MODE_X is not set
1149 # CONFIG_HUSH_ECHO is not set
1150 # CONFIG_HUSH_PRINTF is not set
1151 # CONFIG_HUSH_TEST is not set
1152 # CONFIG_HUSH_HELP is not set
1153 # CONFIG_HUSH_EXPORT is not set
1154 # CONFIG_HUSH_EXPORT_N is not set
1155 # CONFIG_HUSH_READONLY is not set
1156 # CONFIG_HUSH_KILL is not set
1157 # CONFIG_HUSH_WAIT is not set
1158 # CONFIG_HUSH_COMMAND is not set
1159 # CONFIG_HUSH_TRAP is not set
1160 # CONFIG_HUSH_TYPE is not set
1161 # CONFIG_HUSH_TIMES is not set
1162 # CONFIG_HUSH_READ is not set
1163 # CONFIG_HUSH_SET is not set
1164 # CONFIG_HUSH_UNSET is not set
1165 # CONFIG_HUSH_ULIMIT is not set
1166 # CONFIG_HUSH_UMASK is not set
1167 # CONFIG_HUSH_GETOPTS is not set
1168 # CONFIG_HUSH_MEMLEAK is not set
1169
1170 #
1171 # Options common to all shells
1172 #
1173 CONFIG_FEATURE_SH_MATH=y
1174 CONFIG_FEATURE_SH_MATH_64=y
1175 CONFIG_FEATURE_SH_MATH_BASE=y
1176 CONFIG_FEATURE_SH_EXTRA_QUIET=y
1177 # CONFIG_FEATURE_SH_STANDALONE is not set
1178 # CONFIG_FEATURE_SH_NOFORK is not set
1179 CONFIG_FEATURE_SH_READ_FRAC=y
1180 CONFIG_FEATURE_SH_HISTFILESIZE=y
1181 CONFIG_FEATURE_SH_EMBEDDED_SCRIPTS=y
1182
1183 #
1184 # System Logging Utilities
1185 #
1186 # CONFIG_KLOGD is not set
1187 # CONFIG_FEATURE_KLOGD_KLOGCTL is not set
1188 # CONFIG_LOGGER is not set
1189 # CONFIG_LOGREAD is not set
1190 # CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set
1191 # CONFIG_SYSLOGD is not set
1192 # CONFIG_FEATURE_ROTATE_LOGFILE is not set
1193 # CONFIG_FEATURE_REMOTE_LOG is not set
1194 # CONFIG_FEATURE_SYSLOGD_DUP is not set
1195 # CONFIG_FEATURE_SYSLOGD_CFG is not set
1196 # CONFIG_FEATURE_SYSLOGD_PRECISE_TIMESTAMPS is not set
1197 CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0
1198 # CONFIG_FEATURE_IPC_SYSLOG is not set
1199 CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0
1200 # CONFIG_FEATURE_KMSG_SYSLOG is not set
--- extsrc/pikchr-worker.js
+++ extsrc/pikchr-worker.js
@@ -66,11 +66,11 @@
6666
6767
{type: 'pikchr',
6868
data:{
6969
pikchr: input text,
7070
result: rendered result (SVG on success, HTML on error),
71
- isError: bool, true if .result holds an error report,
71
+ isError: bool, true if .pikchr holds an error report,
7272
flags: integer: flags used to configure the pikchr rendering,
7373
width: if !isError, width (integer pixels) of the SVG,
7474
height: if !isError, height (integer pixels) of the SVG
7575
}
7676
}
@@ -214,8 +214,8 @@
214214
building with:
215215
216216
emcc ... -sMODULARIZE=1 -sEXPORT_NAME=initPikchrModule
217217
*/
218218
initPikchrModule(pikchrModule).then(function(thisModule){
219
- wMsg('pikchrshow-ready');
219
+ wMsg('pikchr-ready');
220220
});
221221
})();
222222
--- extsrc/pikchr-worker.js
+++ extsrc/pikchr-worker.js
@@ -66,11 +66,11 @@
66
67 {type: 'pikchr',
68 data:{
69 pikchr: input text,
70 result: rendered result (SVG on success, HTML on error),
71 isError: bool, true if .result holds an error report,
72 flags: integer: flags used to configure the pikchr rendering,
73 width: if !isError, width (integer pixels) of the SVG,
74 height: if !isError, height (integer pixels) of the SVG
75 }
76 }
@@ -214,8 +214,8 @@
214 building with:
215
216 emcc ... -sMODULARIZE=1 -sEXPORT_NAME=initPikchrModule
217 */
218 initPikchrModule(pikchrModule).then(function(thisModule){
219 wMsg('pikchrshow-ready');
220 });
221 })();
222
--- extsrc/pikchr-worker.js
+++ extsrc/pikchr-worker.js
@@ -66,11 +66,11 @@
66
67 {type: 'pikchr',
68 data:{
69 pikchr: input text,
70 result: rendered result (SVG on success, HTML on error),
71 isError: bool, true if .pikchr holds an error report,
72 flags: integer: flags used to configure the pikchr rendering,
73 width: if !isError, width (integer pixels) of the SVG,
74 height: if !isError, height (integer pixels) of the SVG
75 }
76 }
@@ -214,8 +214,8 @@
214 building with:
215
216 emcc ... -sMODULARIZE=1 -sEXPORT_NAME=initPikchrModule
217 */
218 initPikchrModule(pikchrModule).then(function(thisModule){
219 wMsg('pikchr-ready');
220 });
221 })();
222
+4 -6
--- extsrc/pikchr.c
+++ extsrc/pikchr.c
@@ -5836,14 +5836,11 @@
58365836
pik_reset_samepath(p);
58375837
do{
58385838
n = pik_next_rpath(p, pErr);
58395839
}while( n<1 );
58405840
if( pHeading ){
5841
- if( rHdg<0.0 || rHdg>360.0 ){
5842
- pik_error(p, pHeading, "headings should be between 0 and 360");
5843
- return;
5844
- }
5841
+ rHdg = fmod(rHdg,360.0);
58455842
}else if( pEdgept->eEdge==CP_C ){
58465843
pik_error(p, pEdgept, "syntax error");
58475844
return;
58485845
}else{
58495846
rHdg = pik_hdg_angle[pEdgept->eEdge];
@@ -7889,13 +7886,14 @@
78897886
/* Print a usage comment for the shell and exit. */
78907887
static void usage(const char *argv0){
78917888
fprintf(stderr, "usage: %s [OPTIONS] FILE ...\n", argv0);
78927889
fprintf(stderr,
78937890
"Convert Pikchr input files into SVG. Filename \"-\" means stdin.\n"
7891
+ "All output goes to stdout.\n"
78947892
"Options:\n"
78957893
" --dont-stop Process all files even if earlier files have errors\n"
7896
- " --svg-only Omit raw SVG without the HTML wrapper\n"
7894
+ " --svg-only Emit raw SVG without the HTML wrapper\n"
78977895
);
78987896
exit(1);
78997897
}
79007898
79017899
/* Send text to standard output, but escape HTML markup */
@@ -8131,6 +8129,6 @@
81318129
81328130
81338131
#endif /* PIKCHR_TCL */
81348132
81358133
8136
-#line 8161 "pikchr.c"
8134
+#line 8159 "pikchr.c"
81378135
--- extsrc/pikchr.c
+++ extsrc/pikchr.c
@@ -5836,14 +5836,11 @@
5836 pik_reset_samepath(p);
5837 do{
5838 n = pik_next_rpath(p, pErr);
5839 }while( n<1 );
5840 if( pHeading ){
5841 if( rHdg<0.0 || rHdg>360.0 ){
5842 pik_error(p, pHeading, "headings should be between 0 and 360");
5843 return;
5844 }
5845 }else if( pEdgept->eEdge==CP_C ){
5846 pik_error(p, pEdgept, "syntax error");
5847 return;
5848 }else{
5849 rHdg = pik_hdg_angle[pEdgept->eEdge];
@@ -7889,13 +7886,14 @@
7889 /* Print a usage comment for the shell and exit. */
7890 static void usage(const char *argv0){
7891 fprintf(stderr, "usage: %s [OPTIONS] FILE ...\n", argv0);
7892 fprintf(stderr,
7893 "Convert Pikchr input files into SVG. Filename \"-\" means stdin.\n"
 
7894 "Options:\n"
7895 " --dont-stop Process all files even if earlier files have errors\n"
7896 " --svg-only Omit raw SVG without the HTML wrapper\n"
7897 );
7898 exit(1);
7899 }
7900
7901 /* Send text to standard output, but escape HTML markup */
@@ -8131,6 +8129,6 @@
8131
8132
8133 #endif /* PIKCHR_TCL */
8134
8135
8136 #line 8161 "pikchr.c"
8137
--- extsrc/pikchr.c
+++ extsrc/pikchr.c
@@ -5836,14 +5836,11 @@
5836 pik_reset_samepath(p);
5837 do{
5838 n = pik_next_rpath(p, pErr);
5839 }while( n<1 );
5840 if( pHeading ){
5841 rHdg = fmod(rHdg,360.0);
 
 
 
5842 }else if( pEdgept->eEdge==CP_C ){
5843 pik_error(p, pEdgept, "syntax error");
5844 return;
5845 }else{
5846 rHdg = pik_hdg_angle[pEdgept->eEdge];
@@ -7889,13 +7886,14 @@
7886 /* Print a usage comment for the shell and exit. */
7887 static void usage(const char *argv0){
7888 fprintf(stderr, "usage: %s [OPTIONS] FILE ...\n", argv0);
7889 fprintf(stderr,
7890 "Convert Pikchr input files into SVG. Filename \"-\" means stdin.\n"
7891 "All output goes to stdout.\n"
7892 "Options:\n"
7893 " --dont-stop Process all files even if earlier files have errors\n"
7894 " --svg-only Emit raw SVG without the HTML wrapper\n"
7895 );
7896 exit(1);
7897 }
7898
7899 /* Send text to standard output, but escape HTML markup */
@@ -8131,6 +8129,6 @@
8129
8130
8131 #endif /* PIKCHR_TCL */
8132
8133
8134 #line 8159 "pikchr.c"
8135
--- extsrc/pikchr.wasm
+++ extsrc/pikchr.wasm
cannot compute difference between binary files
11
--- extsrc/pikchr.wasm
+++ extsrc/pikchr.wasm
0 annot compute difference between binary files
1
--- extsrc/pikchr.wasm
+++ extsrc/pikchr.wasm
0 annot compute difference between binary files
1
+234 -90
--- extsrc/shell.c
+++ extsrc/shell.c
@@ -53,10 +53,19 @@
5353
*/
5454
#if !defined(SQLITE_OS_WINRT)
5555
# define SQLITE_OS_WINRT 0
5656
#endif
5757
58
+/*
59
+** If SQLITE_SHELL_FIDDLE is defined then the shell is modified
60
+** somewhat for use as a WASM module in a web browser. This flag
61
+** should only be used when building the "fiddle" web application, as
62
+** the browser-mode build has much different user input requirements
63
+** and this build mode rewires the user input subsystem to account for
64
+** that.
65
+*/
66
+
5867
/*
5968
** Warning pragmas copied from msvc.h in the core.
6069
*/
6170
#if defined(_MSC_VER)
6271
#pragma warning(disable : 4054)
@@ -245,21 +254,10 @@
245254
#else
246255
# define setBinaryMode(X,Y)
247256
# define setTextMode(X,Y)
248257
#endif
249258
250
-/*
251
-** When compiling with emcc (a.k.a. emscripten), we're building a
252
-** WebAssembly (WASM) bundle and need to disable and rewire a few
253
-** things.
254
-*/
255
-#ifdef __EMSCRIPTEN__
256
-#define SQLITE_SHELL_WASM_MODE
257
-#else
258
-#undef SQLITE_SHELL_WASM_MODE
259
-#endif
260
-
261259
/* True if the timer is enabled */
262260
static int enableTimer = 0;
263261
264262
/* Return the current wall-clock time */
265263
static sqlite3_int64 timeOfDay(void){
@@ -717,11 +715,11 @@
717715
**
718716
** The result is stored in space obtained from malloc() and must either
719717
** be freed by the caller or else passed back into this routine via the
720718
** zPrior argument for reuse.
721719
*/
722
-#ifndef SQLITE_SHELL_WASM_MODE
720
+#ifndef SQLITE_SHELL_FIDDLE
723721
static char *one_input_line(FILE *in, char *zPrior, int isContinuation){
724722
char *zPrompt;
725723
char *zResult;
726724
if( in!=0 ){
727725
zResult = local_getline(zPrior, in);
@@ -737,11 +735,11 @@
737735
if( zResult && *zResult ) shell_add_history(zResult);
738736
#endif
739737
}
740738
return zResult;
741739
}
742
-#endif /* !SQLITE_SHELL_WASM_MODE */
740
+#endif /* !SQLITE_SHELL_FIDDLE */
743741
744742
/*
745743
** Return the value of a hexadecimal digit. Return -1 if the input
746744
** is not a hex digit.
747745
*/
@@ -3794,10 +3792,11 @@
37943792
#define re_compile sqlite3re_compile
37953793
#define re_free sqlite3re_free
37963794
37973795
/* The end-of-input character */
37983796
#define RE_EOF 0 /* End of input */
3797
+#define RE_START 0xfffffff /* Start of input - larger than an UTF-8 */
37993798
38003799
/* The NFA is implemented as sequence of opcodes taken from the following
38013800
** set. Each opcode has a single integer argument.
38023801
*/
38033802
#define RE_OP_MATCH 1 /* Match the one character in the argument */
@@ -3815,10 +3814,37 @@
38153814
#define RE_OP_DIGIT 13 /* digit: [0-9] */
38163815
#define RE_OP_NOTDIGIT 14 /* Not a digit */
38173816
#define RE_OP_SPACE 15 /* space: [ \t\n\r\v\f] */
38183817
#define RE_OP_NOTSPACE 16 /* Not a digit */
38193818
#define RE_OP_BOUNDARY 17 /* Boundary between word and non-word */
3819
+#define RE_OP_ATSTART 18 /* Currently at the start of the string */
3820
+
3821
+#if defined(SQLITE_DEBUG)
3822
+/* Opcode names used for symbolic debugging */
3823
+static const char *ReOpName[] = {
3824
+ "EOF",
3825
+ "MATCH",
3826
+ "ANY",
3827
+ "ANYSTAR",
3828
+ "FORK",
3829
+ "GOTO",
3830
+ "ACCEPT",
3831
+ "CC_INC",
3832
+ "CC_EXC",
3833
+ "CC_VALUE",
3834
+ "CC_RANGE",
3835
+ "WORD",
3836
+ "NOTWORD",
3837
+ "DIGIT",
3838
+ "NOTDIGIT",
3839
+ "SPACE",
3840
+ "NOTSPACE",
3841
+ "BOUNDARY",
3842
+ "ATSTART",
3843
+};
3844
+#endif /* SQLITE_DEBUG */
3845
+
38203846
38213847
/* Each opcode is a "state" in the NFA */
38223848
typedef unsigned short ReStateNumber;
38233849
38243850
/* Because this is an NFA and not a DFA, multiple states can be active at
@@ -3849,11 +3875,11 @@
38493875
const char *zErr; /* Error message to return */
38503876
char *aOp; /* Operators for the virtual machine */
38513877
int *aArg; /* Arguments to each operator */
38523878
unsigned (*xNextChar)(ReInput*); /* Next character function */
38533879
unsigned char zInit[12]; /* Initial text to match */
3854
- int nInit; /* Number of characters in zInit */
3880
+ int nInit; /* Number of bytes in zInit */
38553881
unsigned nState; /* Number of entries in aOp[] and aArg[] */
38563882
unsigned nAlloc; /* Slots allocated for aOp[] and aArg[] */
38573883
};
38583884
38593885
/* Add a state to the given state set if it is not already there */
@@ -3922,11 +3948,11 @@
39223948
ReStateSet aStateSet[2], *pThis, *pNext;
39233949
ReStateNumber aSpace[100];
39243950
ReStateNumber *pToFree;
39253951
unsigned int i = 0;
39263952
unsigned int iSwap = 0;
3927
- int c = RE_EOF+1;
3953
+ int c = RE_START;
39283954
int cPrev = 0;
39293955
int rc = 0;
39303956
ReInput in;
39313957
39323958
in.z = zIn;
@@ -3941,10 +3967,11 @@
39413967
strncmp((const char*)zIn+in.i, (const char*)pRe->zInit, pRe->nInit)!=0)
39423968
){
39433969
in.i++;
39443970
}
39453971
if( in.i+pRe->nInit>in.mx ) return 0;
3972
+ c = RE_START-1;
39463973
}
39473974
39483975
if( pRe->nState<=(sizeof(aSpace)/(sizeof(aSpace[0])*2)) ){
39493976
pToFree = 0;
39503977
aStateSet[0].aState = aSpace;
@@ -3968,10 +3995,14 @@
39683995
int x = pThis->aState[i];
39693996
switch( pRe->aOp[x] ){
39703997
case RE_OP_MATCH: {
39713998
if( pRe->aArg[x]==c ) re_add_state(pNext, x+1);
39723999
break;
4000
+ }
4001
+ case RE_OP_ATSTART: {
4002
+ if( cPrev==RE_START ) re_add_state(pThis, x+1);
4003
+ break;
39734004
}
39744005
case RE_OP_ANY: {
39754006
if( c!=0 ) re_add_state(pNext, x+1);
39764007
break;
39774008
}
@@ -4050,11 +4081,13 @@
40504081
}
40514082
}
40524083
}
40534084
}
40544085
for(i=0; i<pNext->nState; i++){
4055
- if( pRe->aOp[pNext->aState[i]]==RE_OP_ACCEPT ){ rc = 1; break; }
4086
+ int x = pNext->aState[i];
4087
+ while( pRe->aOp[x]==RE_OP_GOTO ) x += pRe->aArg[x];
4088
+ if( pRe->aOp[x]==RE_OP_ACCEPT ){ rc = 1; break; }
40564089
}
40574090
re_match_end:
40584091
sqlite3_free(pToFree);
40594092
return rc;
40604093
}
@@ -4205,11 +4238,10 @@
42054238
const char *zErr;
42064239
while( (c = p->xNextChar(&p->sIn))!=0 ){
42074240
iStart = p->nState;
42084241
switch( c ){
42094242
case '|':
4210
- case '$':
42114243
case ')': {
42124244
p->sIn.i--;
42134245
return 0;
42144246
}
42154247
case '(': {
@@ -4241,10 +4273,18 @@
42414273
}
42424274
case '?': {
42434275
if( iPrev<0 ) return "'?' without operand";
42444276
re_insert(p, iPrev, RE_OP_FORK, p->nState - iPrev+1);
42454277
break;
4278
+ }
4279
+ case '$': {
4280
+ re_append(p, RE_OP_MATCH, RE_EOF);
4281
+ break;
4282
+ }
4283
+ case '^': {
4284
+ re_append(p, RE_OP_ATSTART, 0);
4285
+ break;
42464286
}
42474287
case '{': {
42484288
int m = 0, n = 0;
42494289
int sz, j;
42504290
if( iPrev<0 ) return "'{m,n}' without operand";
@@ -4260,10 +4300,11 @@
42604300
p->sIn.i++;
42614301
sz = p->nState - iPrev;
42624302
if( m==0 ){
42634303
if( n==0 ) return "both m and n are zero in '{m,n}'";
42644304
re_insert(p, iPrev, RE_OP_FORK, sz+1);
4305
+ iPrev++;
42654306
n--;
42664307
}else{
42674308
for(j=1; j<m; j++) re_copy(p, iPrev, sz);
42684309
}
42694310
for(j=m; j<n; j++){
@@ -4378,15 +4419,11 @@
43784419
zErr = re_subcompile_re(pRe);
43794420
if( zErr ){
43804421
re_free(pRe);
43814422
return zErr;
43824423
}
4383
- if( rePeek(pRe)=='$' && pRe->sIn.i+1>=pRe->sIn.mx ){
4384
- re_append(pRe, RE_OP_MATCH, RE_EOF);
4385
- re_append(pRe, RE_OP_ACCEPT, 0);
4386
- *ppRe = pRe;
4387
- }else if( pRe->sIn.i>=pRe->sIn.mx ){
4424
+ if( pRe->sIn.i>=pRe->sIn.mx ){
43884425
re_append(pRe, RE_OP_ACCEPT, 0);
43894426
*ppRe = pRe;
43904427
}else{
43914428
re_free(pRe);
43924429
return "unrecognized character";
@@ -4407,11 +4444,11 @@
44074444
pRe->zInit[j++] = (unsigned char)x;
44084445
}else if( x<=0xfff ){
44094446
pRe->zInit[j++] = (unsigned char)(0xc0 | (x>>6));
44104447
pRe->zInit[j++] = 0x80 | (x&0x3f);
44114448
}else if( x<=0xffff ){
4412
- pRe->zInit[j++] = (unsigned char)(0xd0 | (x>>12));
4449
+ pRe->zInit[j++] = (unsigned char)(0xe0 | (x>>12));
44134450
pRe->zInit[j++] = 0x80 | ((x>>6)&0x3f);
44144451
pRe->zInit[j++] = 0x80 | (x&0x3f);
44154452
}else{
44164453
break;
44174454
}
@@ -4465,10 +4502,71 @@
44654502
}
44664503
if( setAux ){
44674504
sqlite3_set_auxdata(context, 0, pRe, (void(*)(void*))re_free);
44684505
}
44694506
}
4507
+
4508
+#if defined(SQLITE_DEBUG)
4509
+/*
4510
+** This function is used for testing and debugging only. It is only available
4511
+** if the SQLITE_DEBUG compile-time option is used.
4512
+**
4513
+** Compile a regular expression and then convert the compiled expression into
4514
+** text and return that text.
4515
+*/
4516
+static void re_bytecode_func(
4517
+ sqlite3_context *context,
4518
+ int argc,
4519
+ sqlite3_value **argv
4520
+){
4521
+ const char *zPattern;
4522
+ const char *zErr;
4523
+ ReCompiled *pRe;
4524
+ sqlite3_str *pStr;
4525
+ int i;
4526
+ int n;
4527
+ char *z;
4528
+
4529
+ zPattern = (const char*)sqlite3_value_text(argv[0]);
4530
+ if( zPattern==0 ) return;
4531
+ zErr = re_compile(&pRe, zPattern, sqlite3_user_data(context)!=0);
4532
+ if( zErr ){
4533
+ re_free(pRe);
4534
+ sqlite3_result_error(context, zErr, -1);
4535
+ return;
4536
+ }
4537
+ if( pRe==0 ){
4538
+ sqlite3_result_error_nomem(context);
4539
+ return;
4540
+ }
4541
+ pStr = sqlite3_str_new(0);
4542
+ if( pStr==0 ) goto re_bytecode_func_err;
4543
+ if( pRe->nInit>0 ){
4544
+ sqlite3_str_appendf(pStr, "INIT ");
4545
+ for(i=0; i<pRe->nInit; i++){
4546
+ sqlite3_str_appendf(pStr, "%02x", pRe->zInit[i]);
4547
+ }
4548
+ sqlite3_str_appendf(pStr, "\n");
4549
+ }
4550
+ for(i=0; (unsigned)i<pRe->nState; i++){
4551
+ sqlite3_str_appendf(pStr, "%-8s %4d\n",
4552
+ ReOpName[(unsigned char)pRe->aOp[i]], pRe->aArg[i]);
4553
+ }
4554
+ n = sqlite3_str_length(pStr);
4555
+ z = sqlite3_str_finish(pStr);
4556
+ if( n==0 ){
4557
+ sqlite3_free(z);
4558
+ }else{
4559
+ sqlite3_result_text(context, z, n-1, sqlite3_free);
4560
+ }
4561
+
4562
+re_bytecode_func_err:
4563
+ re_free(pRe);
4564
+}
4565
+
4566
+#endif /* SQLITE_DEBUG */
4567
+
44704568
44714569
/*
44724570
** Invoke this routine to register the regexp() function with the
44734571
** SQLite database connection.
44744572
*/
@@ -4490,16 +4588,23 @@
44904588
/* The regexpi(PATTERN,STRING) function is a case-insensitive version
44914589
** of regexp(PATTERN,STRING). */
44924590
rc = sqlite3_create_function(db, "regexpi", 2,
44934591
SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC,
44944592
(void*)db, re_sql_func, 0, 0);
4593
+#if defined(SQLITE_DEBUG)
4594
+ if( rc==SQLITE_OK ){
4595
+ rc = sqlite3_create_function(db, "regexp_bytecode", 1,
4596
+ SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC,
4597
+ 0, re_bytecode_func, 0, 0);
4598
+ }
4599
+#endif /* SQLITE_DEBUG */
44954600
}
44964601
return rc;
44974602
}
44984603
44994604
/************************* End ../ext/misc/regexp.c ********************/
4500
-#ifndef SQLITE_SHELL_WASM_MODE
4605
+#ifndef SQLITE_SHELL_FIDDLE
45014606
/************************* Begin ../ext/misc/fileio.c ******************/
45024607
/*
45034608
** 2014-06-13
45044609
**
45054610
** The author disclaims copyright to this source code. In place of
@@ -10047,10 +10152,14 @@
1004710152
** Return true if zId must be quoted in order to use it as an SQL
1004810153
** identifier, or false otherwise.
1004910154
*/
1005010155
static int idxIdentifierRequiresQuotes(const char *zId){
1005110156
int i;
10157
+ int nId = STRLEN(zId);
10158
+
10159
+ if( sqlite3_keyword_check(zId, nId) ) return 1;
10160
+
1005210161
for(i=0; zId[i]; i++){
1005310162
if( !(zId[i]=='_')
1005410163
&& !(zId[i]>='0' && zId[i]<='9')
1005510164
&& !(zId[i]>='a' && zId[i]<='z')
1005610165
&& !(zId[i]>='A' && zId[i]<='Z')
@@ -12248,19 +12357,19 @@
1224812357
int nIndent; /* Size of array aiIndent[] */
1224912358
int iIndent; /* Index of current op in aiIndent[] */
1225012359
char *zNonce; /* Nonce for temporary safe-mode excapes */
1225112360
EQPGraph sGraph; /* Information for the graphical EXPLAIN QUERY PLAN */
1225212361
ExpertInfo expert; /* Valid if previous command was ".expert OPT..." */
12253
-#ifdef SQLITE_SHELL_WASM_MODE
12362
+#ifdef SQLITE_SHELL_FIDDLE
1225412363
struct {
1225512364
const char * zInput; /* Input string from wasm/JS proxy */
1225612365
const char * zPos; /* Cursor pos into zInput */
1225712366
} wasm;
1225812367
#endif
1225912368
};
1226012369
12261
-#ifdef SQLITE_SHELL_WASM_MODE
12370
+#ifdef SQLITE_SHELL_FIDDLE
1226212371
static ShellState shellState;
1226312372
#endif
1226412373
1226512374
1226612375
/* Allowed values for ShellState.autoEQP
@@ -12588,14 +12697,27 @@
1258812697
/*
1258912698
** Output the given string as a hex-encoded blob (eg. X'1234' )
1259012699
*/
1259112700
static void output_hex_blob(FILE *out, const void *pBlob, int nBlob){
1259212701
int i;
12593
- char *zBlob = (char *)pBlob;
12594
- raw_printf(out,"X'");
12595
- for(i=0; i<nBlob; i++){ raw_printf(out,"%02x",zBlob[i]&0xff); }
12596
- raw_printf(out,"'");
12702
+ unsigned char *aBlob = (unsigned char*)pBlob;
12703
+
12704
+ char *zStr = sqlite3_malloc(nBlob*2 + 1);
12705
+ shell_check_oom(zStr);
12706
+
12707
+ for(i=0; i<nBlob; i++){
12708
+ static const char aHex[] = {
12709
+ '0', '1', '2', '3', '4', '5', '6', '7',
12710
+ '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
12711
+ };
12712
+ zStr[i*2] = aHex[ (aBlob[i] >> 4) ];
12713
+ zStr[i*2+1] = aHex[ (aBlob[i] & 0x0F) ];
12714
+ }
12715
+ zStr[i*2] = '\0';
12716
+
12717
+ raw_printf(out,"X'%s'", zStr);
12718
+ sqlite3_free(zStr);
1259712719
}
1259812720
1259912721
/*
1260012722
** Find a string that is not found anywhere in z[]. Return a pointer
1260112723
** to that string.
@@ -12924,11 +13046,11 @@
1292413046
UNUSED_PARAMETER(zA2);
1292513047
UNUSED_PARAMETER(zA3);
1292613048
UNUSED_PARAMETER(zA4);
1292713049
switch( op ){
1292813050
case SQLITE_ATTACH: {
12929
-#ifndef SQLITE_SHELL_WASM_MODE
13051
+#ifndef SQLITE_SHELL_FIDDLE
1293013052
/* In WASM builds the filesystem is a virtual sandbox, so
1293113053
** there's no harm in using ATTACH. */
1293213054
failIfSafeMode(p, "cannot run ATTACH in safe mode");
1293313055
#endif
1293413056
break;
@@ -12997,19 +13119,41 @@
1299713119
/*
1299813120
** Print a schema statement. Part of MODE_Semi and MODE_Pretty output.
1299913121
**
1300013122
** This routine converts some CREATE TABLE statements for shadow tables
1300113123
** in FTS3/4/5 into CREATE TABLE IF NOT EXISTS statements.
13124
+**
13125
+** If the schema statement in z[] contains a start-of-comment and if
13126
+** sqlite3_complete() returns false, try to terminate the comment before
13127
+** printing the result. https://sqlite.org/forum/forumpost/d7be961c5c
1300213128
*/
1300313129
static void printSchemaLine(FILE *out, const char *z, const char *zTail){
13130
+ char *zToFree = 0;
1300413131
if( z==0 ) return;
1300513132
if( zTail==0 ) return;
13133
+ if( zTail[0]==';' && (strstr(z, "/*")!=0 || strstr(z,"--")!=0) ){
13134
+ const char *zOrig = z;
13135
+ static const char *azTerm[] = { "", "*/", "\n" };
13136
+ int i;
13137
+ for(i=0; i<ArraySize(azTerm); i++){
13138
+ char *zNew = sqlite3_mprintf("%s%s;", zOrig, azTerm[i]);
13139
+ if( sqlite3_complete(zNew) ){
13140
+ size_t n = strlen(zNew);
13141
+ zNew[n-1] = 0;
13142
+ zToFree = zNew;
13143
+ z = zNew;
13144
+ break;
13145
+ }
13146
+ sqlite3_free(zNew);
13147
+ }
13148
+ }
1300613149
if( sqlite3_strglob("CREATE TABLE ['\"]*", z)==0 ){
1300713150
utf8_printf(out, "CREATE TABLE IF NOT EXISTS %s%s", z+13, zTail);
1300813151
}else{
1300913152
utf8_printf(out, "%s%s", z, zTail);
1301013153
}
13154
+ sqlite3_free(zToFree);
1301113155
}
1301213156
static void printSchemaLineN(FILE *out, char *z, int n, const char *zTail){
1301313157
char c = z[n];
1301413158
z[n] = 0;
1301513159
printSchemaLine(out, z, zTail);
@@ -15338,11 +15482,11 @@
1533815482
** There must be two or more spaces between the end of the command and the
1533915483
** start of the description of what that command does.
1534015484
*/
1534115485
static const char *(azHelp[]) = {
1534215486
#if defined(SQLITE_HAVE_ZLIB) && !defined(SQLITE_OMIT_VIRTUALTABLE) \
15343
- && !defined(SQLITE_SHELL_WASM_MODE)
15487
+ && !defined(SQLITE_SHELL_FIDDLE)
1534415488
".archive ... Manage SQL archives",
1534515489
" Each command must have exactly one of the following options:",
1534615490
" -c, --create Create a new archive",
1534715491
" -u, --update Add or update files with changed mtime",
1534815492
" -i, --insert Like -u but always add even if unchanged",
@@ -15364,23 +15508,23 @@
1536415508
" http://sqlite.org/cli.html#sqlite_archive_support",
1536515509
#endif
1536615510
#ifndef SQLITE_OMIT_AUTHORIZATION
1536715511
".auth ON|OFF Show authorizer callbacks",
1536815512
#endif
15369
-#ifndef SQLITE_SHELL_WASM_MODE
15513
+#ifndef SQLITE_SHELL_FIDDLE
1537015514
".backup ?DB? FILE Backup DB (default \"main\") to FILE",
1537115515
" Options:",
1537215516
" --append Use the appendvfs",
1537315517
" --async Write to FILE without journal and fsync()",
1537415518
#endif
1537515519
".bail on|off Stop after hitting an error. Default OFF",
1537615520
".binary on|off Turn binary output on or off. Default OFF",
15377
-#ifndef SQLITE_SHELL_WASM_MODE
15521
+#ifndef SQLITE_SHELL_FIDDLE
1537815522
".cd DIRECTORY Change the working directory to DIRECTORY",
1537915523
#endif
1538015524
".changes on|off Show number of rows changed by SQL",
15381
-#ifndef SQLITE_SHELL_WASM_MODE
15525
+#ifndef SQLITE_SHELL_FIDDLE
1538215526
".check GLOB Fail if output since .testcase does not match",
1538315527
".clone NEWDB Clone data into NEWDB from the existing database",
1538415528
#endif
1538515529
".connection [close] [#] Open or close an auxiliary database connection",
1538615530
".databases List names and files of attached databases",
@@ -15402,15 +15546,15 @@
1540215546
#ifdef SQLITE_DEBUG
1540315547
" test Show raw EXPLAIN QUERY PLAN output",
1540415548
" trace Like \"full\" but enable \"PRAGMA vdbe_trace\"",
1540515549
#endif
1540615550
" trigger Like \"full\" but also show trigger bytecode",
15407
-#ifndef SQLITE_SHELL_WASM_MODE
15551
+#ifndef SQLITE_SHELL_FIDDLE
1540815552
".excel Display the output of next command in spreadsheet",
1540915553
" --bom Put a UTF8 byte-order mark on intermediate file",
1541015554
#endif
15411
-#ifndef SQLITE_SHELL_WASM_MODE
15555
+#ifndef SQLITE_SHELL_FIDDLE
1541215556
".exit ?CODE? Exit this program with return-code CODE",
1541315557
#endif
1541415558
".expert EXPERIMENTAL. Suggest indexes for queries",
1541515559
".explain ?on|off|auto? Change the EXPLAIN formatting mode. Default: auto",
1541615560
".filectrl CMD ... Run various sqlite3_file_control() operations",
@@ -15417,11 +15561,11 @@
1541715561
" --schema SCHEMA Use SCHEMA instead of \"main\"",
1541815562
" --help Show CMD details",
1541915563
".fullschema ?--indent? Show schema and the content of sqlite_stat tables",
1542015564
".headers on|off Turn display of headers on or off",
1542115565
".help ?-all? ?PATTERN? Show help text for PATTERN",
15422
-#ifndef SQLITE_SHELL_WASM_MODE
15566
+#ifndef SQLITE_SHELL_FIDDLE
1542315567
".import FILE TABLE Import data from FILE into TABLE",
1542415568
" Options:",
1542515569
" --ascii Use \\037 and \\036 as column and row separators",
1542615570
" --csv Use , and \\n as column and row separators",
1542715571
" --skip N Skip the first N rows of input",
@@ -15446,14 +15590,14 @@
1544615590
#endif
1544715591
".limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT",
1544815592
".lint OPTIONS Report potential schema issues.",
1544915593
" Options:",
1545015594
" fkey-indexes Find missing foreign key indexes",
15451
-#if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_WASM_MODE)
15595
+#if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_FIDDLE)
1545215596
".load FILE ?ENTRY? Load an extension library",
1545315597
#endif
15454
-#ifndef SQLITE_SHELL_WASM_MODE
15598
+#ifndef SQLITE_SHELL_FIDDLE
1545515599
".log FILE|off Turn logging on or off. FILE can be stderr/stdout",
1545615600
#endif
1545715601
".mode MODE ?OPTIONS? Set output mode",
1545815602
" MODE is one of:",
1545915603
" ascii Columns/rows delimited by 0x1F and 0x1E",
@@ -15476,15 +15620,15 @@
1547615620
" --wordwrap B Wrap or not at word boundaries per B (on/off)",
1547715621
" --ww Shorthand for \"--wordwrap 1\"",
1547815622
" --quote Quote output text as SQL literals",
1547915623
" --noquote Do not quote output text",
1548015624
" TABLE The name of SQL table used for \"insert\" mode",
15481
-#ifndef SQLITE_SHELL_WASM_MODE
15625
+#ifndef SQLITE_SHELL_FIDDLE
1548215626
".nonce STRING Suspend safe mode for one command if nonce matches",
1548315627
#endif
1548415628
".nullvalue STRING Use STRING in place of NULL values",
15485
-#ifndef SQLITE_SHELL_WASM_MODE
15629
+#ifndef SQLITE_SHELL_FIDDLE
1548615630
".once ?OPTIONS? ?FILE? Output for the next SQL command only to FILE",
1548715631
" If FILE begins with '|' then open as a pipe",
1548815632
" --bom Put a UTF8 byte-order mark at the beginning",
1548915633
" -e Send output to the system text editor",
1549015634
" -x Send output as CSV to a spreadsheet (same as \".excel\")",
@@ -15502,11 +15646,11 @@
1550215646
#endif
1550315647
" --new Initialize FILE to an empty database",
1550415648
" --nofollow Do not follow symbolic links",
1550515649
" --readonly Open FILE readonly",
1550615650
" --zip FILE is a ZIP archive",
15507
-#ifndef SQLITE_SHELL_WASM_MODE
15651
+#ifndef SQLITE_SHELL_FIDDLE
1550815652
".output ?FILE? Send output to FILE or stdout if FILE is omitted",
1550915653
" If FILE begins with '|' then open it as a pipe.",
1551015654
" Options:",
1551115655
" --bom Prefix output with a UTF8 byte-order mark",
1551215656
" -e Send output to the system text editor",
@@ -15526,11 +15670,11 @@
1552615670
" --once Do no more than one progress interrupt",
1552715671
" --quiet|-q No output except at interrupts",
1552815672
" --reset Reset the count for each input and interrupt",
1552915673
#endif
1553015674
".prompt MAIN CONTINUE Replace the standard prompts",
15531
-#ifndef SQLITE_SHELL_WASM_MODE
15675
+#ifndef SQLITE_SHELL_FIDDLE
1553215676
".quit Exit this program",
1553315677
".read FILE Read input from FILE or command output",
1553415678
" If FILE begins with \"|\", it is a command that generates the input.",
1553515679
#endif
1553615680
#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB)
@@ -15539,11 +15683,11 @@
1553915683
" --recovery-db NAME Store recovery metadata in database file NAME",
1554015684
" --lost-and-found TABLE Alternative name for the lost-and-found table",
1554115685
" --no-rowids Do not attempt to recover rowid values",
1554215686
" that are not also INTEGER PRIMARY KEYs",
1554315687
#endif
15544
-#ifndef SQLITE_SHELL_WASM_MODE
15688
+#ifndef SQLITE_SHELL_FIDDLE
1554515689
".restore ?DB? FILE Restore content of DB (default \"main\") from FILE",
1554615690
".save ?OPTIONS? FILE Write database to FILE (an alias for .backup ...)",
1554715691
#endif
1554815692
".scanstats on|off Turn sqlite3_stmt_scanstatus() metrics on or off",
1554915693
".schema ?PATTERN? Show the CREATE statements matching PATTERN",
@@ -15576,24 +15720,24 @@
1557615720
" --sha3-224 Use the sha3-224 algorithm",
1557715721
" --sha3-256 Use the sha3-256 algorithm (default)",
1557815722
" --sha3-384 Use the sha3-384 algorithm",
1557915723
" --sha3-512 Use the sha3-512 algorithm",
1558015724
" Any other argument is a LIKE pattern for tables to hash",
15581
-#if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE)
15725
+#if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE)
1558215726
".shell CMD ARGS... Run CMD ARGS... in a system shell",
1558315727
#endif
1558415728
".show Show the current values for various settings",
1558515729
".stats ?ARG? Show stats or turn stats on or off",
1558615730
" off Turn off automatic stat display",
1558715731
" on Turn on automatic stat display",
1558815732
" stmt Show statement stats",
1558915733
" vmstep Show the virtual machine step count only",
15590
-#if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE)
15734
+#if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE)
1559115735
".system CMD ARGS... Run CMD ARGS... in a system shell",
1559215736
#endif
1559315737
".tables ?TABLE? List names of tables matching LIKE pattern TABLE",
15594
-#ifndef SQLITE_SHELL_WASM_MODE
15738
+#ifndef SQLITE_SHELL_FIDDLE
1559515739
".testcase NAME Begin redirecting output to 'testcase-out.txt'",
1559615740
#endif
1559715741
".testctrl CMD ... Run various sqlite3_test_control() operations",
1559815742
" Run \".testctrl\" with no arguments for details",
1559915743
".timeout MS Try opening locked tables for MS milliseconds",
@@ -16142,11 +16286,11 @@
1614216286
sqlite3_uint_init(p->db, 0, 0);
1614316287
sqlite3_decimal_init(p->db, 0, 0);
1614416288
sqlite3_regexp_init(p->db, 0, 0);
1614516289
sqlite3_ieee_init(p->db, 0, 0);
1614616290
sqlite3_series_init(p->db, 0, 0);
16147
-#ifndef SQLITE_SHELL_WASM_MODE
16291
+#ifndef SQLITE_SHELL_FIDDLE
1614816292
sqlite3_fileio_init(p->db, 0, 0);
1614916293
sqlite3_completion_init(p->db, 0, 0);
1615016294
#endif
1615116295
#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB)
1615216296
sqlite3_dbdata_init(p->db, 0, 0);
@@ -19272,19 +19416,19 @@
1927219416
}
1927319417
}else
1927419418
#endif
1927519419
1927619420
#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB) \
19277
- && !defined(SQLITE_SHELL_WASM_MODE)
19421
+ && !defined(SQLITE_SHELL_FIDDLE)
1927819422
if( c=='a' && strncmp(azArg[0], "archive", n)==0 ){
1927919423
open_db(p, 0);
1928019424
failIfSafeMode(p, "cannot run .archive in safe mode");
1928119425
rc = arDotCommand(p, 0, azArg, nArg);
1928219426
}else
1928319427
#endif
1928419428
19285
-#ifndef SQLITE_SHELL_WASM_MODE
19429
+#ifndef SQLITE_SHELL_FIDDLE
1928619430
if( (c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0)
1928719431
|| (c=='s' && n>=3 && strncmp(azArg[0], "save", n)==0)
1928819432
){
1928919433
const char *zDestFile = 0;
1929019434
const char *zDb = 0;
@@ -19349,11 +19493,11 @@
1934919493
utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
1935019494
rc = 1;
1935119495
}
1935219496
close_db(pDest);
1935319497
}else
19354
-#endif /* !defined(SQLITE_SHELL_WASM_MODE) */
19498
+#endif /* !defined(SQLITE_SHELL_FIDDLE) */
1935519499
1935619500
if( c=='b' && n>=3 && strncmp(azArg[0], "bail", n)==0 ){
1935719501
if( nArg==2 ){
1935819502
bail_on_error = booleanValue(azArg[1]);
1935919503
}else{
@@ -19380,11 +19524,11 @@
1938019524
*/
1938119525
if( c=='b' && n>=3 && strncmp(azArg[0], "breakpoint", n)==0 ){
1938219526
test_breakpoint();
1938319527
}else
1938419528
19385
-#ifndef SQLITE_SHELL_WASM_MODE
19529
+#ifndef SQLITE_SHELL_FIDDLE
1938619530
if( c=='c' && strcmp(azArg[0],"cd")==0 ){
1938719531
failIfSafeMode(p, "cannot run .cd in safe mode");
1938819532
if( nArg==2 ){
1938919533
#if defined(_WIN32) || defined(WIN32)
1939019534
wchar_t *z = sqlite3_win32_utf8_to_unicode(azArg[1]);
@@ -19400,11 +19544,11 @@
1940019544
}else{
1940119545
raw_printf(stderr, "Usage: .cd DIRECTORY\n");
1940219546
rc = 1;
1940319547
}
1940419548
}else
19405
-#endif /* !defined(SQLITE_SHELL_WASM_MODE) */
19549
+#endif /* !defined(SQLITE_SHELL_FIDDLE) */
1940619550
1940719551
if( c=='c' && n>=3 && strncmp(azArg[0], "changes", n)==0 ){
1940819552
if( nArg==2 ){
1940919553
setOrClearFlag(p, SHFLG_CountChanges, azArg[1]);
1941019554
}else{
@@ -19411,11 +19555,11 @@
1941119555
raw_printf(stderr, "Usage: .changes on|off\n");
1941219556
rc = 1;
1941319557
}
1941419558
}else
1941519559
19416
-#ifndef SQLITE_SHELL_WASM_MODE
19560
+#ifndef SQLITE_SHELL_FIDDLE
1941719561
/* Cancel output redirection, if it is currently set (by .testcase)
1941819562
** Then read the content of the testcase-out.txt file and compare against
1941919563
** azArg[1]. If there are differences, report an error and exit.
1942019564
*/
1942119565
if( c=='c' && n>=3 && strncmp(azArg[0], "check", n)==0 ){
@@ -19436,23 +19580,23 @@
1943619580
utf8_printf(stdout, "testcase-%s ok\n", p->zTestcase);
1943719581
p->nCheck++;
1943819582
}
1943919583
sqlite3_free(zRes);
1944019584
}else
19441
-#endif /* !defined(SQLITE_SHELL_WASM_MODE) */
19585
+#endif /* !defined(SQLITE_SHELL_FIDDLE) */
1944219586
19443
-#ifndef SQLITE_SHELL_WASM_MODE
19587
+#ifndef SQLITE_SHELL_FIDDLE
1944419588
if( c=='c' && strncmp(azArg[0], "clone", n)==0 ){
1944519589
failIfSafeMode(p, "cannot run .clone in safe mode");
1944619590
if( nArg==2 ){
1944719591
tryToClone(p, azArg[1]);
1944819592
}else{
1944919593
raw_printf(stderr, "Usage: .clone FILENAME\n");
1945019594
rc = 1;
1945119595
}
1945219596
}else
19453
-#endif /* !defined(SQLITE_SHELL_WASM_MODE) */
19597
+#endif /* !defined(SQLITE_SHELL_FIDDLE) */
1945419598
1945519599
if( c=='c' && strncmp(azArg[0], "connection", n)==0 ){
1945619600
if( nArg==1 ){
1945719601
/* List available connections */
1945819602
int i;
@@ -19737,11 +19881,11 @@
1973719881
raw_printf(stderr, "Usage: .eqp off|on|trace|trigger|full\n");
1973819882
rc = 1;
1973919883
}
1974019884
}else
1974119885
19742
-#ifndef SQLITE_SHELL_WASM_MODE
19886
+#ifndef SQLITE_SHELL_FIDDLE
1974319887
if( c=='e' && strncmp(azArg[0], "exit", n)==0 ){
1974419888
if( nArg>1 && (rc = (int)integerValue(azArg[1]))!=0 ) exit(rc);
1974519889
rc = 2;
1974619890
}else
1974719891
#endif
@@ -19997,11 +20141,11 @@
1999720141
}else{
1999820142
showHelp(p->out, 0);
1999920143
}
2000020144
}else
2000120145
20002
-#ifndef SQLITE_SHELL_WASM_MODE
20146
+#ifndef SQLITE_SHELL_FIDDLE
2000320147
if( c=='i' && strncmp(azArg[0], "import", n)==0 ){
2000420148
char *zTable = 0; /* Insert data into this table */
2000520149
char *zSchema = 0; /* within this schema (may default to "main") */
2000620150
char *zFile = 0; /* Name of file to extra content from */
2000720151
sqlite3_stmt *pStmt = NULL; /* A statement */
@@ -20288,11 +20432,11 @@
2028820432
utf8_printf(p->out,
2028920433
"Added %d rows with %d errors using %d lines of input\n",
2029020434
sCtx.nRow, sCtx.nErr, sCtx.nLine-1);
2029120435
}
2029220436
}else
20293
-#endif /* !defined(SQLITE_SHELL_WASM_MODE) */
20437
+#endif /* !defined(SQLITE_SHELL_FIDDLE) */
2029420438
2029520439
#ifndef SQLITE_UNTESTABLE
2029620440
if( c=='i' && strncmp(azArg[0], "imposter", n)==0 ){
2029720441
char *zSql;
2029820442
char *zCollist = 0;
@@ -20478,11 +20622,11 @@
2047820622
if( c=='l' && n>2 && strncmp(azArg[0], "lint", n)==0 ){
2047920623
open_db(p, 0);
2048020624
lintDotCommand(p, azArg, nArg);
2048120625
}else
2048220626
20483
-#if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_WASM_MODE)
20627
+#if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_FIDDLE)
2048420628
if( c=='l' && strncmp(azArg[0], "load", n)==0 ){
2048520629
const char *zFile, *zProc;
2048620630
char *zErrMsg = 0;
2048720631
failIfSafeMode(p, "cannot run .load in safe mode");
2048820632
if( nArg<2 ){
@@ -20500,11 +20644,11 @@
2050020644
rc = 1;
2050120645
}
2050220646
}else
2050320647
#endif
2050420648
20505
-#ifndef SQLITE_SHELL_WASM_MODE
20649
+#ifndef SQLITE_SHELL_FIDDLE
2050620650
if( c=='l' && strncmp(azArg[0], "log", n)==0 ){
2050720651
failIfSafeMode(p, "cannot run .log in safe mode");
2050820652
if( nArg!=2 ){
2050920653
raw_printf(stderr, "Usage: .log FILENAME\n");
2051020654
rc = 1;
@@ -20637,11 +20781,11 @@
2063720781
rc = 1;
2063820782
}
2063920783
p->cMode = p->mode;
2064020784
}else
2064120785
20642
-#ifndef SQLITE_SHELL_WASM_MODE
20786
+#ifndef SQLITE_SHELL_FIDDLE
2064320787
if( c=='n' && strcmp(azArg[0], "nonce")==0 ){
2064420788
if( nArg!=2 ){
2064520789
raw_printf(stderr, "Usage: .nonce NONCE\n");
2064620790
rc = 1;
2064720791
}else if( p->zNonce==0 || strcmp(azArg[1],p->zNonce)!=0 ){
@@ -20652,11 +20796,11 @@
2065220796
p->bSafeMode = 0;
2065320797
return 0; /* Return immediately to bypass the safe mode reset
2065420798
** at the end of this procedure */
2065520799
}
2065620800
}else
20657
-#endif /* !defined(SQLITE_SHELL_WASM_MODE) */
20801
+#endif /* !defined(SQLITE_SHELL_FIDDLE) */
2065820802
2065920803
if( c=='n' && strncmp(azArg[0], "nullvalue", n)==0 ){
2066020804
if( nArg==2 ){
2066120805
sqlite3_snprintf(sizeof(p->nullValue), p->nullValue,
2066220806
"%.*s", (int)ArraySize(p->nullValue)-1, azArg[1]);
@@ -20674,11 +20818,11 @@
2067420818
int openMode = SHELL_OPEN_UNSPEC;
2067520819
2067620820
/* Check for command-line arguments */
2067720821
for(iName=1; iName<nArg; iName++){
2067820822
const char *z = azArg[iName];
20679
-#ifndef SQLITE_SHELL_WASM_MODE
20823
+#ifndef SQLITE_SHELL_FIDDLE
2068020824
if( optionMatch(z,"new") ){
2068120825
newFlag = 1;
2068220826
#ifdef SQLITE_HAVE_ZLIB
2068320827
}else if( optionMatch(z, "zip") ){
2068420828
openMode = SHELL_OPEN_ZIPFILE;
@@ -20696,11 +20840,11 @@
2069620840
openMode = SHELL_OPEN_HEXDB;
2069720841
}else if( optionMatch(z, "maxsize") && iName+1<nArg ){
2069820842
p->szMax = integerValue(azArg[++iName]);
2069920843
#endif /* SQLITE_OMIT_DESERIALIZE */
2070020844
}else
20701
-#endif /* !SQLITE_SHELL_WASM_MODE */
20845
+#endif /* !SQLITE_SHELL_FIDDLE */
2070220846
if( z[0]=='-' ){
2070320847
utf8_printf(stderr, "unknown option: %s\n", z);
2070420848
rc = 1;
2070520849
goto meta_command_exit;
2070620850
}else if( zFN ){
@@ -20724,11 +20868,11 @@
2072420868
p->szMax = 0;
2072520869
2072620870
/* If a filename is specified, try to open it first */
2072720871
if( zFN || p->openMode==SHELL_OPEN_HEXDB ){
2072820872
if( newFlag && zFN && !p->bSafeMode ) shellDeleteFile(zFN);
20729
-#ifndef SQLITE_SHELL_WASM_MODE
20873
+#ifndef SQLITE_SHELL_FIDDLE
2073020874
if( p->bSafeMode
2073120875
&& p->openMode!=SHELL_OPEN_HEXDB
2073220876
&& zFN
2073320877
&& strcmp(zFN,":memory:")!=0
2073420878
){
@@ -20757,11 +20901,11 @@
2075720901
p->pAuxDb->zDbFilename = 0;
2075820902
open_db(p, 0);
2075920903
}
2076020904
}else
2076120905
20762
-#ifndef SQLITE_SHELL_WASM_MODE
20906
+#ifndef SQLITE_SHELL_FIDDLE
2076320907
if( (c=='o'
2076420908
&& (strncmp(azArg[0], "output", n)==0||strncmp(azArg[0], "once", n)==0))
2076520909
|| (c=='e' && n==5 && strcmp(azArg[0],"excel")==0)
2076620910
){
2076720911
char *zFile = 0;
@@ -20873,11 +21017,11 @@
2087321017
sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile);
2087421018
}
2087521019
}
2087621020
sqlite3_free(zFile);
2087721021
}else
20878
-#endif /* !defined(SQLITE_SHELL_WASM_MODE) */
21022
+#endif /* !defined(SQLITE_SHELL_FIDDLE) */
2087921023
2088021024
if( c=='p' && n>=3 && strncmp(azArg[0], "parameter", n)==0 ){
2088121025
open_db(p,0);
2088221026
if( nArg<=1 ) goto parameter_syntax_error;
2088321027
@@ -21043,17 +21187,17 @@
2104321187
if( nArg >= 3) {
2104421188
strncpy(continuePrompt,azArg[2],(int)ArraySize(continuePrompt)-1);
2104521189
}
2104621190
}else
2104721191
21048
-#ifndef SQLITE_SHELL_WASM_MODE
21192
+#ifndef SQLITE_SHELL_FIDDLE
2104921193
if( c=='q' && strncmp(azArg[0], "quit", n)==0 ){
2105021194
rc = 2;
2105121195
}else
2105221196
#endif
2105321197
21054
-#ifndef SQLITE_SHELL_WASM_MODE
21198
+#ifndef SQLITE_SHELL_FIDDLE
2105521199
if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 ){
2105621200
FILE *inSaved = p->in;
2105721201
int savedLineno = p->lineno;
2105821202
failIfSafeMode(p, "cannot run .read in safe mode");
2105921203
if( nArg!=2 ){
@@ -21084,13 +21228,13 @@
2108421228
fclose(p->in);
2108521229
}
2108621230
p->in = inSaved;
2108721231
p->lineno = savedLineno;
2108821232
}else
21089
-#endif /* !defined(SQLITE_SHELL_WASM_MODE) */
21233
+#endif /* !defined(SQLITE_SHELL_FIDDLE) */
2109021234
21091
-#ifndef SQLITE_SHELL_WASM_MODE
21235
+#ifndef SQLITE_SHELL_FIDDLE
2109221236
if( c=='r' && n>=3 && strncmp(azArg[0], "restore", n)==0 ){
2109321237
const char *zSrcFile;
2109421238
const char *zDb;
2109521239
sqlite3 *pSrc;
2109621240
sqlite3_backup *pBackup;
@@ -21138,11 +21282,11 @@
2113821282
utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
2113921283
rc = 1;
2114021284
}
2114121285
close_db(pSrc);
2114221286
}else
21143
-#endif /* !defined(SQLITE_SHELL_WASM_MODE) */
21287
+#endif /* !defined(SQLITE_SHELL_FIDDLE) */
2114421288
2114521289
if( c=='s' && strncmp(azArg[0], "scanstats", n)==0 ){
2114621290
if( nArg==2 ){
2114721291
p->scanstatsOn = (u8)booleanValue(azArg[1]);
2114821292
#ifndef SQLITE_ENABLE_STMT_SCANSTATUS
@@ -21764,11 +21908,11 @@
2176421908
shell_exec(p, zSql, 0);
2176521909
}
2176621910
sqlite3_free(zSql);
2176721911
}else
2176821912
21769
-#if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE)
21913
+#if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE)
2177021914
if( c=='s'
2177121915
&& (strncmp(azArg[0], "shell", n)==0 || strncmp(azArg[0],"system",n)==0)
2177221916
){
2177321917
char *zCmd;
2177421918
int i, x;
@@ -21785,11 +21929,11 @@
2178521929
}
2178621930
x = zCmd!=0 ? system(zCmd) : 1;
2178721931
sqlite3_free(zCmd);
2178821932
if( x ) raw_printf(stderr, "System command returns %d\n", x);
2178921933
}else
21790
-#endif /* !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE) */
21934
+#endif /* !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE) */
2179121935
2179221936
if( c=='s' && strncmp(azArg[0], "show", n)==0 ){
2179321937
static const char *azBool[] = { "off", "on", "trigger", "full"};
2179421938
const char *zOut;
2179521939
int i;
@@ -21965,11 +22109,11 @@
2196522109
2196622110
for(ii=0; ii<nRow; ii++) sqlite3_free(azResult[ii]);
2196722111
sqlite3_free(azResult);
2196822112
}else
2196922113
21970
-#ifndef SQLITE_SHELL_WASM_MODE
22114
+#ifndef SQLITE_SHELL_FIDDLE
2197122115
/* Begin redirecting output to the file "testcase-out.txt" */
2197222116
if( c=='t' && strcmp(azArg[0],"testcase")==0 ){
2197322117
output_reset(p);
2197422118
p->out = output_file_open("testcase-out.txt", 0);
2197522119
if( p->out==0 ){
@@ -21979,11 +22123,11 @@
2197922123
sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "%s", azArg[1]);
2198022124
}else{
2198122125
sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "?");
2198222126
}
2198322127
}else
21984
-#endif /* !defined(SQLITE_SHELL_WASM_MODE) */
22128
+#endif /* !defined(SQLITE_SHELL_FIDDLE) */
2198522129
2198622130
#ifndef SQLITE_UNTESTABLE
2198722131
if( c=='t' && n>=8 && strncmp(azArg[0], "testctrl", n)==0 ){
2198822132
static const struct {
2198922133
const char *zCtrlName; /* Name of a test-control option */
@@ -22651,11 +22795,11 @@
2265122795
2265222796
static void echo_group_input(ShellState *p, const char *zDo){
2265322797
if( ShellHasFlag(p, SHFLG_Echo) ) utf8_printf(p->out, "%s\n", zDo);
2265422798
}
2265522799
22656
-#ifdef SQLITE_SHELL_WASM_MODE
22800
+#ifdef SQLITE_SHELL_FIDDLE
2265722801
/*
2265822802
** Alternate one_input_line() impl for wasm mode. This is not in the primary impl
2265922803
** because we need the global shellState and cannot access it from that function
2266022804
** without moving lots of code around (creating a larger/messier diff).
2266122805
*/
@@ -22682,11 +22826,11 @@
2268222826
shell_check_oom(zLine);
2268322827
memcpy(zLine, zBegin, (size_t)nZ);
2268422828
zLine[nZ] = 0;
2268522829
return zLine;
2268622830
}
22687
-#endif /* SQLITE_SHELL_WASM_MODE */
22831
+#endif /* SQLITE_SHELL_FIDDLE */
2268822832
2268922833
/*
2269022834
** Read input from *in and process it. If *in==0 then input
2269122835
** is interactive - the user is typing it it. Otherwise, input
2269222836
** is coming from a file or device. A prompt is issued and history
@@ -23065,11 +23209,11 @@
2306523209
# else
2306623210
# define SQLITE_SHELL_IS_UTF8 (1)
2306723211
# endif
2306823212
#endif
2306923213
23070
-#ifdef SQLITE_SHELL_WASM_MODE
23214
+#ifdef SQLITE_SHELL_FIDDLE
2307123215
# define main fiddle_main
2307223216
#endif
2307323217
2307423218
#if SQLITE_SHELL_IS_UTF8
2307523219
int SQLITE_CDECL main(int argc, char **argv){
@@ -23076,14 +23220,14 @@
2307623220
#else
2307723221
int SQLITE_CDECL wmain(int argc, wchar_t **wargv){
2307823222
char **argv;
2307923223
#endif
2308023224
#ifdef SQLITE_DEBUG
23081
- sqlite3_uint64 mem_main_enter = sqlite3_memory_used();
23225
+ sqlite3_int64 mem_main_enter = sqlite3_memory_used();
2308223226
#endif
2308323227
char *zErrMsg = 0;
23084
-#ifdef SQLITE_SHELL_WASM_MODE
23228
+#ifdef SQLITE_SHELL_FIDDLE
2308523229
# define data shellState
2308623230
#else
2308723231
ShellState data;
2308823232
#endif
2308923233
const char *zInitFile = 0;
@@ -23099,11 +23243,11 @@
2309923243
int argcToFree = 0;
2310023244
#endif
2310123245
2310223246
setBinaryMode(stdin, 0);
2310323247
setvbuf(stderr, 0, _IONBF, 0); /* Make sure stderr is unbuffered */
23104
-#ifdef SQLITE_SHELL_WASM_MODE
23248
+#ifdef SQLITE_SHELL_FIDDLE
2310523249
stdin_is_interactive = 0;
2310623250
stdout_is_console = 1;
2310723251
#else
2310823252
stdin_is_interactive = isatty(0);
2310923253
stdout_is_console = isatty(1);
@@ -23361,11 +23505,11 @@
2336123505
utf8_printf(stderr,"%s: Error: no database filename specified\n", Argv0);
2336223506
return 1;
2336323507
#endif
2336423508
}
2336523509
data.out = stdout;
23366
-#ifndef SQLITE_SHELL_WASM_MODE
23510
+#ifndef SQLITE_SHELL_FIDDLE
2336723511
sqlite3_appendvfs_init(0,0,0);
2336823512
#endif
2336923513
2337023514
/* Go ahead and open the database file if it already exists. If the
2337123515
** file does not exist, delay opening it. This prevents empty database
@@ -23629,11 +23773,11 @@
2362923773
}else{
2363023774
data.in = stdin;
2363123775
rc = process_input(&data);
2363223776
}
2363323777
}
23634
-#ifndef SQLITE_SHELL_WASM_MODE
23778
+#ifndef SQLITE_SHELL_FIDDLE
2363523779
/* In WASM mode we have to leave the db state in place so that
2363623780
** client code can "push" SQL into it after this call returns. */
2363723781
free(azCmd);
2363823782
set_table_name(&data, 0);
2363923783
if( data.db ){
@@ -23664,16 +23808,16 @@
2366423808
if( sqlite3_memory_used()>mem_main_enter ){
2366523809
utf8_printf(stderr, "Memory leaked: %u bytes\n",
2366623810
(unsigned int)(sqlite3_memory_used()-mem_main_enter));
2366723811
}
2366823812
#endif
23669
-#endif /* !SQLITE_SHELL_WASM_MODE */
23813
+#endif /* !SQLITE_SHELL_FIDDLE */
2367023814
return rc;
2367123815
}
2367223816
2367323817
23674
-#ifdef SQLITE_SHELL_WASM_MODE
23818
+#ifdef SQLITE_SHELL_FIDDLE
2367523819
/* Only for emcc experimentation purposes. */
2367623820
int fiddle_experiment(int a,int b){
2367723821
return a + b;
2367823822
}
2367923823
@@ -23790,6 +23934,6 @@
2379023934
shellState.wasm.zPos = zSql;
2379123935
process_input(&shellState);
2379223936
memset(&shellState.wasm, 0, sizeof(shellState.wasm));
2379323937
}
2379423938
}
23795
-#endif /* SQLITE_SHELL_WASM_MODE */
23939
+#endif /* SQLITE_SHELL_FIDDLE */
2379623940
--- extsrc/shell.c
+++ extsrc/shell.c
@@ -53,10 +53,19 @@
53 */
54 #if !defined(SQLITE_OS_WINRT)
55 # define SQLITE_OS_WINRT 0
56 #endif
57
 
 
 
 
 
 
 
 
 
58 /*
59 ** Warning pragmas copied from msvc.h in the core.
60 */
61 #if defined(_MSC_VER)
62 #pragma warning(disable : 4054)
@@ -245,21 +254,10 @@
245 #else
246 # define setBinaryMode(X,Y)
247 # define setTextMode(X,Y)
248 #endif
249
250 /*
251 ** When compiling with emcc (a.k.a. emscripten), we're building a
252 ** WebAssembly (WASM) bundle and need to disable and rewire a few
253 ** things.
254 */
255 #ifdef __EMSCRIPTEN__
256 #define SQLITE_SHELL_WASM_MODE
257 #else
258 #undef SQLITE_SHELL_WASM_MODE
259 #endif
260
261 /* True if the timer is enabled */
262 static int enableTimer = 0;
263
264 /* Return the current wall-clock time */
265 static sqlite3_int64 timeOfDay(void){
@@ -717,11 +715,11 @@
717 **
718 ** The result is stored in space obtained from malloc() and must either
719 ** be freed by the caller or else passed back into this routine via the
720 ** zPrior argument for reuse.
721 */
722 #ifndef SQLITE_SHELL_WASM_MODE
723 static char *one_input_line(FILE *in, char *zPrior, int isContinuation){
724 char *zPrompt;
725 char *zResult;
726 if( in!=0 ){
727 zResult = local_getline(zPrior, in);
@@ -737,11 +735,11 @@
737 if( zResult && *zResult ) shell_add_history(zResult);
738 #endif
739 }
740 return zResult;
741 }
742 #endif /* !SQLITE_SHELL_WASM_MODE */
743
744 /*
745 ** Return the value of a hexadecimal digit. Return -1 if the input
746 ** is not a hex digit.
747 */
@@ -3794,10 +3792,11 @@
3794 #define re_compile sqlite3re_compile
3795 #define re_free sqlite3re_free
3796
3797 /* The end-of-input character */
3798 #define RE_EOF 0 /* End of input */
 
3799
3800 /* The NFA is implemented as sequence of opcodes taken from the following
3801 ** set. Each opcode has a single integer argument.
3802 */
3803 #define RE_OP_MATCH 1 /* Match the one character in the argument */
@@ -3815,10 +3814,37 @@
3815 #define RE_OP_DIGIT 13 /* digit: [0-9] */
3816 #define RE_OP_NOTDIGIT 14 /* Not a digit */
3817 #define RE_OP_SPACE 15 /* space: [ \t\n\r\v\f] */
3818 #define RE_OP_NOTSPACE 16 /* Not a digit */
3819 #define RE_OP_BOUNDARY 17 /* Boundary between word and non-word */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3820
3821 /* Each opcode is a "state" in the NFA */
3822 typedef unsigned short ReStateNumber;
3823
3824 /* Because this is an NFA and not a DFA, multiple states can be active at
@@ -3849,11 +3875,11 @@
3849 const char *zErr; /* Error message to return */
3850 char *aOp; /* Operators for the virtual machine */
3851 int *aArg; /* Arguments to each operator */
3852 unsigned (*xNextChar)(ReInput*); /* Next character function */
3853 unsigned char zInit[12]; /* Initial text to match */
3854 int nInit; /* Number of characters in zInit */
3855 unsigned nState; /* Number of entries in aOp[] and aArg[] */
3856 unsigned nAlloc; /* Slots allocated for aOp[] and aArg[] */
3857 };
3858
3859 /* Add a state to the given state set if it is not already there */
@@ -3922,11 +3948,11 @@
3922 ReStateSet aStateSet[2], *pThis, *pNext;
3923 ReStateNumber aSpace[100];
3924 ReStateNumber *pToFree;
3925 unsigned int i = 0;
3926 unsigned int iSwap = 0;
3927 int c = RE_EOF+1;
3928 int cPrev = 0;
3929 int rc = 0;
3930 ReInput in;
3931
3932 in.z = zIn;
@@ -3941,10 +3967,11 @@
3941 strncmp((const char*)zIn+in.i, (const char*)pRe->zInit, pRe->nInit)!=0)
3942 ){
3943 in.i++;
3944 }
3945 if( in.i+pRe->nInit>in.mx ) return 0;
 
3946 }
3947
3948 if( pRe->nState<=(sizeof(aSpace)/(sizeof(aSpace[0])*2)) ){
3949 pToFree = 0;
3950 aStateSet[0].aState = aSpace;
@@ -3968,10 +3995,14 @@
3968 int x = pThis->aState[i];
3969 switch( pRe->aOp[x] ){
3970 case RE_OP_MATCH: {
3971 if( pRe->aArg[x]==c ) re_add_state(pNext, x+1);
3972 break;
 
 
 
 
3973 }
3974 case RE_OP_ANY: {
3975 if( c!=0 ) re_add_state(pNext, x+1);
3976 break;
3977 }
@@ -4050,11 +4081,13 @@
4050 }
4051 }
4052 }
4053 }
4054 for(i=0; i<pNext->nState; i++){
4055 if( pRe->aOp[pNext->aState[i]]==RE_OP_ACCEPT ){ rc = 1; break; }
 
 
4056 }
4057 re_match_end:
4058 sqlite3_free(pToFree);
4059 return rc;
4060 }
@@ -4205,11 +4238,10 @@
4205 const char *zErr;
4206 while( (c = p->xNextChar(&p->sIn))!=0 ){
4207 iStart = p->nState;
4208 switch( c ){
4209 case '|':
4210 case '$':
4211 case ')': {
4212 p->sIn.i--;
4213 return 0;
4214 }
4215 case '(': {
@@ -4241,10 +4273,18 @@
4241 }
4242 case '?': {
4243 if( iPrev<0 ) return "'?' without operand";
4244 re_insert(p, iPrev, RE_OP_FORK, p->nState - iPrev+1);
4245 break;
 
 
 
 
 
 
 
 
4246 }
4247 case '{': {
4248 int m = 0, n = 0;
4249 int sz, j;
4250 if( iPrev<0 ) return "'{m,n}' without operand";
@@ -4260,10 +4300,11 @@
4260 p->sIn.i++;
4261 sz = p->nState - iPrev;
4262 if( m==0 ){
4263 if( n==0 ) return "both m and n are zero in '{m,n}'";
4264 re_insert(p, iPrev, RE_OP_FORK, sz+1);
 
4265 n--;
4266 }else{
4267 for(j=1; j<m; j++) re_copy(p, iPrev, sz);
4268 }
4269 for(j=m; j<n; j++){
@@ -4378,15 +4419,11 @@
4378 zErr = re_subcompile_re(pRe);
4379 if( zErr ){
4380 re_free(pRe);
4381 return zErr;
4382 }
4383 if( rePeek(pRe)=='$' && pRe->sIn.i+1>=pRe->sIn.mx ){
4384 re_append(pRe, RE_OP_MATCH, RE_EOF);
4385 re_append(pRe, RE_OP_ACCEPT, 0);
4386 *ppRe = pRe;
4387 }else if( pRe->sIn.i>=pRe->sIn.mx ){
4388 re_append(pRe, RE_OP_ACCEPT, 0);
4389 *ppRe = pRe;
4390 }else{
4391 re_free(pRe);
4392 return "unrecognized character";
@@ -4407,11 +4444,11 @@
4407 pRe->zInit[j++] = (unsigned char)x;
4408 }else if( x<=0xfff ){
4409 pRe->zInit[j++] = (unsigned char)(0xc0 | (x>>6));
4410 pRe->zInit[j++] = 0x80 | (x&0x3f);
4411 }else if( x<=0xffff ){
4412 pRe->zInit[j++] = (unsigned char)(0xd0 | (x>>12));
4413 pRe->zInit[j++] = 0x80 | ((x>>6)&0x3f);
4414 pRe->zInit[j++] = 0x80 | (x&0x3f);
4415 }else{
4416 break;
4417 }
@@ -4465,10 +4502,71 @@
4465 }
4466 if( setAux ){
4467 sqlite3_set_auxdata(context, 0, pRe, (void(*)(void*))re_free);
4468 }
4469 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4470
4471 /*
4472 ** Invoke this routine to register the regexp() function with the
4473 ** SQLite database connection.
4474 */
@@ -4490,16 +4588,23 @@
4490 /* The regexpi(PATTERN,STRING) function is a case-insensitive version
4491 ** of regexp(PATTERN,STRING). */
4492 rc = sqlite3_create_function(db, "regexpi", 2,
4493 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC,
4494 (void*)db, re_sql_func, 0, 0);
 
 
 
 
 
 
 
4495 }
4496 return rc;
4497 }
4498
4499 /************************* End ../ext/misc/regexp.c ********************/
4500 #ifndef SQLITE_SHELL_WASM_MODE
4501 /************************* Begin ../ext/misc/fileio.c ******************/
4502 /*
4503 ** 2014-06-13
4504 **
4505 ** The author disclaims copyright to this source code. In place of
@@ -10047,10 +10152,14 @@
10047 ** Return true if zId must be quoted in order to use it as an SQL
10048 ** identifier, or false otherwise.
10049 */
10050 static int idxIdentifierRequiresQuotes(const char *zId){
10051 int i;
 
 
 
 
10052 for(i=0; zId[i]; i++){
10053 if( !(zId[i]=='_')
10054 && !(zId[i]>='0' && zId[i]<='9')
10055 && !(zId[i]>='a' && zId[i]<='z')
10056 && !(zId[i]>='A' && zId[i]<='Z')
@@ -12248,19 +12357,19 @@
12248 int nIndent; /* Size of array aiIndent[] */
12249 int iIndent; /* Index of current op in aiIndent[] */
12250 char *zNonce; /* Nonce for temporary safe-mode excapes */
12251 EQPGraph sGraph; /* Information for the graphical EXPLAIN QUERY PLAN */
12252 ExpertInfo expert; /* Valid if previous command was ".expert OPT..." */
12253 #ifdef SQLITE_SHELL_WASM_MODE
12254 struct {
12255 const char * zInput; /* Input string from wasm/JS proxy */
12256 const char * zPos; /* Cursor pos into zInput */
12257 } wasm;
12258 #endif
12259 };
12260
12261 #ifdef SQLITE_SHELL_WASM_MODE
12262 static ShellState shellState;
12263 #endif
12264
12265
12266 /* Allowed values for ShellState.autoEQP
@@ -12588,14 +12697,27 @@
12588 /*
12589 ** Output the given string as a hex-encoded blob (eg. X'1234' )
12590 */
12591 static void output_hex_blob(FILE *out, const void *pBlob, int nBlob){
12592 int i;
12593 char *zBlob = (char *)pBlob;
12594 raw_printf(out,"X'");
12595 for(i=0; i<nBlob; i++){ raw_printf(out,"%02x",zBlob[i]&0xff); }
12596 raw_printf(out,"'");
 
 
 
 
 
 
 
 
 
 
 
 
 
12597 }
12598
12599 /*
12600 ** Find a string that is not found anywhere in z[]. Return a pointer
12601 ** to that string.
@@ -12924,11 +13046,11 @@
12924 UNUSED_PARAMETER(zA2);
12925 UNUSED_PARAMETER(zA3);
12926 UNUSED_PARAMETER(zA4);
12927 switch( op ){
12928 case SQLITE_ATTACH: {
12929 #ifndef SQLITE_SHELL_WASM_MODE
12930 /* In WASM builds the filesystem is a virtual sandbox, so
12931 ** there's no harm in using ATTACH. */
12932 failIfSafeMode(p, "cannot run ATTACH in safe mode");
12933 #endif
12934 break;
@@ -12997,19 +13119,41 @@
12997 /*
12998 ** Print a schema statement. Part of MODE_Semi and MODE_Pretty output.
12999 **
13000 ** This routine converts some CREATE TABLE statements for shadow tables
13001 ** in FTS3/4/5 into CREATE TABLE IF NOT EXISTS statements.
 
 
 
 
13002 */
13003 static void printSchemaLine(FILE *out, const char *z, const char *zTail){
 
13004 if( z==0 ) return;
13005 if( zTail==0 ) return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13006 if( sqlite3_strglob("CREATE TABLE ['\"]*", z)==0 ){
13007 utf8_printf(out, "CREATE TABLE IF NOT EXISTS %s%s", z+13, zTail);
13008 }else{
13009 utf8_printf(out, "%s%s", z, zTail);
13010 }
 
13011 }
13012 static void printSchemaLineN(FILE *out, char *z, int n, const char *zTail){
13013 char c = z[n];
13014 z[n] = 0;
13015 printSchemaLine(out, z, zTail);
@@ -15338,11 +15482,11 @@
15338 ** There must be two or more spaces between the end of the command and the
15339 ** start of the description of what that command does.
15340 */
15341 static const char *(azHelp[]) = {
15342 #if defined(SQLITE_HAVE_ZLIB) && !defined(SQLITE_OMIT_VIRTUALTABLE) \
15343 && !defined(SQLITE_SHELL_WASM_MODE)
15344 ".archive ... Manage SQL archives",
15345 " Each command must have exactly one of the following options:",
15346 " -c, --create Create a new archive",
15347 " -u, --update Add or update files with changed mtime",
15348 " -i, --insert Like -u but always add even if unchanged",
@@ -15364,23 +15508,23 @@
15364 " http://sqlite.org/cli.html#sqlite_archive_support",
15365 #endif
15366 #ifndef SQLITE_OMIT_AUTHORIZATION
15367 ".auth ON|OFF Show authorizer callbacks",
15368 #endif
15369 #ifndef SQLITE_SHELL_WASM_MODE
15370 ".backup ?DB? FILE Backup DB (default \"main\") to FILE",
15371 " Options:",
15372 " --append Use the appendvfs",
15373 " --async Write to FILE without journal and fsync()",
15374 #endif
15375 ".bail on|off Stop after hitting an error. Default OFF",
15376 ".binary on|off Turn binary output on or off. Default OFF",
15377 #ifndef SQLITE_SHELL_WASM_MODE
15378 ".cd DIRECTORY Change the working directory to DIRECTORY",
15379 #endif
15380 ".changes on|off Show number of rows changed by SQL",
15381 #ifndef SQLITE_SHELL_WASM_MODE
15382 ".check GLOB Fail if output since .testcase does not match",
15383 ".clone NEWDB Clone data into NEWDB from the existing database",
15384 #endif
15385 ".connection [close] [#] Open or close an auxiliary database connection",
15386 ".databases List names and files of attached databases",
@@ -15402,15 +15546,15 @@
15402 #ifdef SQLITE_DEBUG
15403 " test Show raw EXPLAIN QUERY PLAN output",
15404 " trace Like \"full\" but enable \"PRAGMA vdbe_trace\"",
15405 #endif
15406 " trigger Like \"full\" but also show trigger bytecode",
15407 #ifndef SQLITE_SHELL_WASM_MODE
15408 ".excel Display the output of next command in spreadsheet",
15409 " --bom Put a UTF8 byte-order mark on intermediate file",
15410 #endif
15411 #ifndef SQLITE_SHELL_WASM_MODE
15412 ".exit ?CODE? Exit this program with return-code CODE",
15413 #endif
15414 ".expert EXPERIMENTAL. Suggest indexes for queries",
15415 ".explain ?on|off|auto? Change the EXPLAIN formatting mode. Default: auto",
15416 ".filectrl CMD ... Run various sqlite3_file_control() operations",
@@ -15417,11 +15561,11 @@
15417 " --schema SCHEMA Use SCHEMA instead of \"main\"",
15418 " --help Show CMD details",
15419 ".fullschema ?--indent? Show schema and the content of sqlite_stat tables",
15420 ".headers on|off Turn display of headers on or off",
15421 ".help ?-all? ?PATTERN? Show help text for PATTERN",
15422 #ifndef SQLITE_SHELL_WASM_MODE
15423 ".import FILE TABLE Import data from FILE into TABLE",
15424 " Options:",
15425 " --ascii Use \\037 and \\036 as column and row separators",
15426 " --csv Use , and \\n as column and row separators",
15427 " --skip N Skip the first N rows of input",
@@ -15446,14 +15590,14 @@
15446 #endif
15447 ".limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT",
15448 ".lint OPTIONS Report potential schema issues.",
15449 " Options:",
15450 " fkey-indexes Find missing foreign key indexes",
15451 #if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_WASM_MODE)
15452 ".load FILE ?ENTRY? Load an extension library",
15453 #endif
15454 #ifndef SQLITE_SHELL_WASM_MODE
15455 ".log FILE|off Turn logging on or off. FILE can be stderr/stdout",
15456 #endif
15457 ".mode MODE ?OPTIONS? Set output mode",
15458 " MODE is one of:",
15459 " ascii Columns/rows delimited by 0x1F and 0x1E",
@@ -15476,15 +15620,15 @@
15476 " --wordwrap B Wrap or not at word boundaries per B (on/off)",
15477 " --ww Shorthand for \"--wordwrap 1\"",
15478 " --quote Quote output text as SQL literals",
15479 " --noquote Do not quote output text",
15480 " TABLE The name of SQL table used for \"insert\" mode",
15481 #ifndef SQLITE_SHELL_WASM_MODE
15482 ".nonce STRING Suspend safe mode for one command if nonce matches",
15483 #endif
15484 ".nullvalue STRING Use STRING in place of NULL values",
15485 #ifndef SQLITE_SHELL_WASM_MODE
15486 ".once ?OPTIONS? ?FILE? Output for the next SQL command only to FILE",
15487 " If FILE begins with '|' then open as a pipe",
15488 " --bom Put a UTF8 byte-order mark at the beginning",
15489 " -e Send output to the system text editor",
15490 " -x Send output as CSV to a spreadsheet (same as \".excel\")",
@@ -15502,11 +15646,11 @@
15502 #endif
15503 " --new Initialize FILE to an empty database",
15504 " --nofollow Do not follow symbolic links",
15505 " --readonly Open FILE readonly",
15506 " --zip FILE is a ZIP archive",
15507 #ifndef SQLITE_SHELL_WASM_MODE
15508 ".output ?FILE? Send output to FILE or stdout if FILE is omitted",
15509 " If FILE begins with '|' then open it as a pipe.",
15510 " Options:",
15511 " --bom Prefix output with a UTF8 byte-order mark",
15512 " -e Send output to the system text editor",
@@ -15526,11 +15670,11 @@
15526 " --once Do no more than one progress interrupt",
15527 " --quiet|-q No output except at interrupts",
15528 " --reset Reset the count for each input and interrupt",
15529 #endif
15530 ".prompt MAIN CONTINUE Replace the standard prompts",
15531 #ifndef SQLITE_SHELL_WASM_MODE
15532 ".quit Exit this program",
15533 ".read FILE Read input from FILE or command output",
15534 " If FILE begins with \"|\", it is a command that generates the input.",
15535 #endif
15536 #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB)
@@ -15539,11 +15683,11 @@
15539 " --recovery-db NAME Store recovery metadata in database file NAME",
15540 " --lost-and-found TABLE Alternative name for the lost-and-found table",
15541 " --no-rowids Do not attempt to recover rowid values",
15542 " that are not also INTEGER PRIMARY KEYs",
15543 #endif
15544 #ifndef SQLITE_SHELL_WASM_MODE
15545 ".restore ?DB? FILE Restore content of DB (default \"main\") from FILE",
15546 ".save ?OPTIONS? FILE Write database to FILE (an alias for .backup ...)",
15547 #endif
15548 ".scanstats on|off Turn sqlite3_stmt_scanstatus() metrics on or off",
15549 ".schema ?PATTERN? Show the CREATE statements matching PATTERN",
@@ -15576,24 +15720,24 @@
15576 " --sha3-224 Use the sha3-224 algorithm",
15577 " --sha3-256 Use the sha3-256 algorithm (default)",
15578 " --sha3-384 Use the sha3-384 algorithm",
15579 " --sha3-512 Use the sha3-512 algorithm",
15580 " Any other argument is a LIKE pattern for tables to hash",
15581 #if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE)
15582 ".shell CMD ARGS... Run CMD ARGS... in a system shell",
15583 #endif
15584 ".show Show the current values for various settings",
15585 ".stats ?ARG? Show stats or turn stats on or off",
15586 " off Turn off automatic stat display",
15587 " on Turn on automatic stat display",
15588 " stmt Show statement stats",
15589 " vmstep Show the virtual machine step count only",
15590 #if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE)
15591 ".system CMD ARGS... Run CMD ARGS... in a system shell",
15592 #endif
15593 ".tables ?TABLE? List names of tables matching LIKE pattern TABLE",
15594 #ifndef SQLITE_SHELL_WASM_MODE
15595 ".testcase NAME Begin redirecting output to 'testcase-out.txt'",
15596 #endif
15597 ".testctrl CMD ... Run various sqlite3_test_control() operations",
15598 " Run \".testctrl\" with no arguments for details",
15599 ".timeout MS Try opening locked tables for MS milliseconds",
@@ -16142,11 +16286,11 @@
16142 sqlite3_uint_init(p->db, 0, 0);
16143 sqlite3_decimal_init(p->db, 0, 0);
16144 sqlite3_regexp_init(p->db, 0, 0);
16145 sqlite3_ieee_init(p->db, 0, 0);
16146 sqlite3_series_init(p->db, 0, 0);
16147 #ifndef SQLITE_SHELL_WASM_MODE
16148 sqlite3_fileio_init(p->db, 0, 0);
16149 sqlite3_completion_init(p->db, 0, 0);
16150 #endif
16151 #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB)
16152 sqlite3_dbdata_init(p->db, 0, 0);
@@ -19272,19 +19416,19 @@
19272 }
19273 }else
19274 #endif
19275
19276 #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB) \
19277 && !defined(SQLITE_SHELL_WASM_MODE)
19278 if( c=='a' && strncmp(azArg[0], "archive", n)==0 ){
19279 open_db(p, 0);
19280 failIfSafeMode(p, "cannot run .archive in safe mode");
19281 rc = arDotCommand(p, 0, azArg, nArg);
19282 }else
19283 #endif
19284
19285 #ifndef SQLITE_SHELL_WASM_MODE
19286 if( (c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0)
19287 || (c=='s' && n>=3 && strncmp(azArg[0], "save", n)==0)
19288 ){
19289 const char *zDestFile = 0;
19290 const char *zDb = 0;
@@ -19349,11 +19493,11 @@
19349 utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
19350 rc = 1;
19351 }
19352 close_db(pDest);
19353 }else
19354 #endif /* !defined(SQLITE_SHELL_WASM_MODE) */
19355
19356 if( c=='b' && n>=3 && strncmp(azArg[0], "bail", n)==0 ){
19357 if( nArg==2 ){
19358 bail_on_error = booleanValue(azArg[1]);
19359 }else{
@@ -19380,11 +19524,11 @@
19380 */
19381 if( c=='b' && n>=3 && strncmp(azArg[0], "breakpoint", n)==0 ){
19382 test_breakpoint();
19383 }else
19384
19385 #ifndef SQLITE_SHELL_WASM_MODE
19386 if( c=='c' && strcmp(azArg[0],"cd")==0 ){
19387 failIfSafeMode(p, "cannot run .cd in safe mode");
19388 if( nArg==2 ){
19389 #if defined(_WIN32) || defined(WIN32)
19390 wchar_t *z = sqlite3_win32_utf8_to_unicode(azArg[1]);
@@ -19400,11 +19544,11 @@
19400 }else{
19401 raw_printf(stderr, "Usage: .cd DIRECTORY\n");
19402 rc = 1;
19403 }
19404 }else
19405 #endif /* !defined(SQLITE_SHELL_WASM_MODE) */
19406
19407 if( c=='c' && n>=3 && strncmp(azArg[0], "changes", n)==0 ){
19408 if( nArg==2 ){
19409 setOrClearFlag(p, SHFLG_CountChanges, azArg[1]);
19410 }else{
@@ -19411,11 +19555,11 @@
19411 raw_printf(stderr, "Usage: .changes on|off\n");
19412 rc = 1;
19413 }
19414 }else
19415
19416 #ifndef SQLITE_SHELL_WASM_MODE
19417 /* Cancel output redirection, if it is currently set (by .testcase)
19418 ** Then read the content of the testcase-out.txt file and compare against
19419 ** azArg[1]. If there are differences, report an error and exit.
19420 */
19421 if( c=='c' && n>=3 && strncmp(azArg[0], "check", n)==0 ){
@@ -19436,23 +19580,23 @@
19436 utf8_printf(stdout, "testcase-%s ok\n", p->zTestcase);
19437 p->nCheck++;
19438 }
19439 sqlite3_free(zRes);
19440 }else
19441 #endif /* !defined(SQLITE_SHELL_WASM_MODE) */
19442
19443 #ifndef SQLITE_SHELL_WASM_MODE
19444 if( c=='c' && strncmp(azArg[0], "clone", n)==0 ){
19445 failIfSafeMode(p, "cannot run .clone in safe mode");
19446 if( nArg==2 ){
19447 tryToClone(p, azArg[1]);
19448 }else{
19449 raw_printf(stderr, "Usage: .clone FILENAME\n");
19450 rc = 1;
19451 }
19452 }else
19453 #endif /* !defined(SQLITE_SHELL_WASM_MODE) */
19454
19455 if( c=='c' && strncmp(azArg[0], "connection", n)==0 ){
19456 if( nArg==1 ){
19457 /* List available connections */
19458 int i;
@@ -19737,11 +19881,11 @@
19737 raw_printf(stderr, "Usage: .eqp off|on|trace|trigger|full\n");
19738 rc = 1;
19739 }
19740 }else
19741
19742 #ifndef SQLITE_SHELL_WASM_MODE
19743 if( c=='e' && strncmp(azArg[0], "exit", n)==0 ){
19744 if( nArg>1 && (rc = (int)integerValue(azArg[1]))!=0 ) exit(rc);
19745 rc = 2;
19746 }else
19747 #endif
@@ -19997,11 +20141,11 @@
19997 }else{
19998 showHelp(p->out, 0);
19999 }
20000 }else
20001
20002 #ifndef SQLITE_SHELL_WASM_MODE
20003 if( c=='i' && strncmp(azArg[0], "import", n)==0 ){
20004 char *zTable = 0; /* Insert data into this table */
20005 char *zSchema = 0; /* within this schema (may default to "main") */
20006 char *zFile = 0; /* Name of file to extra content from */
20007 sqlite3_stmt *pStmt = NULL; /* A statement */
@@ -20288,11 +20432,11 @@
20288 utf8_printf(p->out,
20289 "Added %d rows with %d errors using %d lines of input\n",
20290 sCtx.nRow, sCtx.nErr, sCtx.nLine-1);
20291 }
20292 }else
20293 #endif /* !defined(SQLITE_SHELL_WASM_MODE) */
20294
20295 #ifndef SQLITE_UNTESTABLE
20296 if( c=='i' && strncmp(azArg[0], "imposter", n)==0 ){
20297 char *zSql;
20298 char *zCollist = 0;
@@ -20478,11 +20622,11 @@
20478 if( c=='l' && n>2 && strncmp(azArg[0], "lint", n)==0 ){
20479 open_db(p, 0);
20480 lintDotCommand(p, azArg, nArg);
20481 }else
20482
20483 #if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_WASM_MODE)
20484 if( c=='l' && strncmp(azArg[0], "load", n)==0 ){
20485 const char *zFile, *zProc;
20486 char *zErrMsg = 0;
20487 failIfSafeMode(p, "cannot run .load in safe mode");
20488 if( nArg<2 ){
@@ -20500,11 +20644,11 @@
20500 rc = 1;
20501 }
20502 }else
20503 #endif
20504
20505 #ifndef SQLITE_SHELL_WASM_MODE
20506 if( c=='l' && strncmp(azArg[0], "log", n)==0 ){
20507 failIfSafeMode(p, "cannot run .log in safe mode");
20508 if( nArg!=2 ){
20509 raw_printf(stderr, "Usage: .log FILENAME\n");
20510 rc = 1;
@@ -20637,11 +20781,11 @@
20637 rc = 1;
20638 }
20639 p->cMode = p->mode;
20640 }else
20641
20642 #ifndef SQLITE_SHELL_WASM_MODE
20643 if( c=='n' && strcmp(azArg[0], "nonce")==0 ){
20644 if( nArg!=2 ){
20645 raw_printf(stderr, "Usage: .nonce NONCE\n");
20646 rc = 1;
20647 }else if( p->zNonce==0 || strcmp(azArg[1],p->zNonce)!=0 ){
@@ -20652,11 +20796,11 @@
20652 p->bSafeMode = 0;
20653 return 0; /* Return immediately to bypass the safe mode reset
20654 ** at the end of this procedure */
20655 }
20656 }else
20657 #endif /* !defined(SQLITE_SHELL_WASM_MODE) */
20658
20659 if( c=='n' && strncmp(azArg[0], "nullvalue", n)==0 ){
20660 if( nArg==2 ){
20661 sqlite3_snprintf(sizeof(p->nullValue), p->nullValue,
20662 "%.*s", (int)ArraySize(p->nullValue)-1, azArg[1]);
@@ -20674,11 +20818,11 @@
20674 int openMode = SHELL_OPEN_UNSPEC;
20675
20676 /* Check for command-line arguments */
20677 for(iName=1; iName<nArg; iName++){
20678 const char *z = azArg[iName];
20679 #ifndef SQLITE_SHELL_WASM_MODE
20680 if( optionMatch(z,"new") ){
20681 newFlag = 1;
20682 #ifdef SQLITE_HAVE_ZLIB
20683 }else if( optionMatch(z, "zip") ){
20684 openMode = SHELL_OPEN_ZIPFILE;
@@ -20696,11 +20840,11 @@
20696 openMode = SHELL_OPEN_HEXDB;
20697 }else if( optionMatch(z, "maxsize") && iName+1<nArg ){
20698 p->szMax = integerValue(azArg[++iName]);
20699 #endif /* SQLITE_OMIT_DESERIALIZE */
20700 }else
20701 #endif /* !SQLITE_SHELL_WASM_MODE */
20702 if( z[0]=='-' ){
20703 utf8_printf(stderr, "unknown option: %s\n", z);
20704 rc = 1;
20705 goto meta_command_exit;
20706 }else if( zFN ){
@@ -20724,11 +20868,11 @@
20724 p->szMax = 0;
20725
20726 /* If a filename is specified, try to open it first */
20727 if( zFN || p->openMode==SHELL_OPEN_HEXDB ){
20728 if( newFlag && zFN && !p->bSafeMode ) shellDeleteFile(zFN);
20729 #ifndef SQLITE_SHELL_WASM_MODE
20730 if( p->bSafeMode
20731 && p->openMode!=SHELL_OPEN_HEXDB
20732 && zFN
20733 && strcmp(zFN,":memory:")!=0
20734 ){
@@ -20757,11 +20901,11 @@
20757 p->pAuxDb->zDbFilename = 0;
20758 open_db(p, 0);
20759 }
20760 }else
20761
20762 #ifndef SQLITE_SHELL_WASM_MODE
20763 if( (c=='o'
20764 && (strncmp(azArg[0], "output", n)==0||strncmp(azArg[0], "once", n)==0))
20765 || (c=='e' && n==5 && strcmp(azArg[0],"excel")==0)
20766 ){
20767 char *zFile = 0;
@@ -20873,11 +21017,11 @@
20873 sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile);
20874 }
20875 }
20876 sqlite3_free(zFile);
20877 }else
20878 #endif /* !defined(SQLITE_SHELL_WASM_MODE) */
20879
20880 if( c=='p' && n>=3 && strncmp(azArg[0], "parameter", n)==0 ){
20881 open_db(p,0);
20882 if( nArg<=1 ) goto parameter_syntax_error;
20883
@@ -21043,17 +21187,17 @@
21043 if( nArg >= 3) {
21044 strncpy(continuePrompt,azArg[2],(int)ArraySize(continuePrompt)-1);
21045 }
21046 }else
21047
21048 #ifndef SQLITE_SHELL_WASM_MODE
21049 if( c=='q' && strncmp(azArg[0], "quit", n)==0 ){
21050 rc = 2;
21051 }else
21052 #endif
21053
21054 #ifndef SQLITE_SHELL_WASM_MODE
21055 if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 ){
21056 FILE *inSaved = p->in;
21057 int savedLineno = p->lineno;
21058 failIfSafeMode(p, "cannot run .read in safe mode");
21059 if( nArg!=2 ){
@@ -21084,13 +21228,13 @@
21084 fclose(p->in);
21085 }
21086 p->in = inSaved;
21087 p->lineno = savedLineno;
21088 }else
21089 #endif /* !defined(SQLITE_SHELL_WASM_MODE) */
21090
21091 #ifndef SQLITE_SHELL_WASM_MODE
21092 if( c=='r' && n>=3 && strncmp(azArg[0], "restore", n)==0 ){
21093 const char *zSrcFile;
21094 const char *zDb;
21095 sqlite3 *pSrc;
21096 sqlite3_backup *pBackup;
@@ -21138,11 +21282,11 @@
21138 utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
21139 rc = 1;
21140 }
21141 close_db(pSrc);
21142 }else
21143 #endif /* !defined(SQLITE_SHELL_WASM_MODE) */
21144
21145 if( c=='s' && strncmp(azArg[0], "scanstats", n)==0 ){
21146 if( nArg==2 ){
21147 p->scanstatsOn = (u8)booleanValue(azArg[1]);
21148 #ifndef SQLITE_ENABLE_STMT_SCANSTATUS
@@ -21764,11 +21908,11 @@
21764 shell_exec(p, zSql, 0);
21765 }
21766 sqlite3_free(zSql);
21767 }else
21768
21769 #if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE)
21770 if( c=='s'
21771 && (strncmp(azArg[0], "shell", n)==0 || strncmp(azArg[0],"system",n)==0)
21772 ){
21773 char *zCmd;
21774 int i, x;
@@ -21785,11 +21929,11 @@
21785 }
21786 x = zCmd!=0 ? system(zCmd) : 1;
21787 sqlite3_free(zCmd);
21788 if( x ) raw_printf(stderr, "System command returns %d\n", x);
21789 }else
21790 #endif /* !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE) */
21791
21792 if( c=='s' && strncmp(azArg[0], "show", n)==0 ){
21793 static const char *azBool[] = { "off", "on", "trigger", "full"};
21794 const char *zOut;
21795 int i;
@@ -21965,11 +22109,11 @@
21965
21966 for(ii=0; ii<nRow; ii++) sqlite3_free(azResult[ii]);
21967 sqlite3_free(azResult);
21968 }else
21969
21970 #ifndef SQLITE_SHELL_WASM_MODE
21971 /* Begin redirecting output to the file "testcase-out.txt" */
21972 if( c=='t' && strcmp(azArg[0],"testcase")==0 ){
21973 output_reset(p);
21974 p->out = output_file_open("testcase-out.txt", 0);
21975 if( p->out==0 ){
@@ -21979,11 +22123,11 @@
21979 sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "%s", azArg[1]);
21980 }else{
21981 sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "?");
21982 }
21983 }else
21984 #endif /* !defined(SQLITE_SHELL_WASM_MODE) */
21985
21986 #ifndef SQLITE_UNTESTABLE
21987 if( c=='t' && n>=8 && strncmp(azArg[0], "testctrl", n)==0 ){
21988 static const struct {
21989 const char *zCtrlName; /* Name of a test-control option */
@@ -22651,11 +22795,11 @@
22651
22652 static void echo_group_input(ShellState *p, const char *zDo){
22653 if( ShellHasFlag(p, SHFLG_Echo) ) utf8_printf(p->out, "%s\n", zDo);
22654 }
22655
22656 #ifdef SQLITE_SHELL_WASM_MODE
22657 /*
22658 ** Alternate one_input_line() impl for wasm mode. This is not in the primary impl
22659 ** because we need the global shellState and cannot access it from that function
22660 ** without moving lots of code around (creating a larger/messier diff).
22661 */
@@ -22682,11 +22826,11 @@
22682 shell_check_oom(zLine);
22683 memcpy(zLine, zBegin, (size_t)nZ);
22684 zLine[nZ] = 0;
22685 return zLine;
22686 }
22687 #endif /* SQLITE_SHELL_WASM_MODE */
22688
22689 /*
22690 ** Read input from *in and process it. If *in==0 then input
22691 ** is interactive - the user is typing it it. Otherwise, input
22692 ** is coming from a file or device. A prompt is issued and history
@@ -23065,11 +23209,11 @@
23065 # else
23066 # define SQLITE_SHELL_IS_UTF8 (1)
23067 # endif
23068 #endif
23069
23070 #ifdef SQLITE_SHELL_WASM_MODE
23071 # define main fiddle_main
23072 #endif
23073
23074 #if SQLITE_SHELL_IS_UTF8
23075 int SQLITE_CDECL main(int argc, char **argv){
@@ -23076,14 +23220,14 @@
23076 #else
23077 int SQLITE_CDECL wmain(int argc, wchar_t **wargv){
23078 char **argv;
23079 #endif
23080 #ifdef SQLITE_DEBUG
23081 sqlite3_uint64 mem_main_enter = sqlite3_memory_used();
23082 #endif
23083 char *zErrMsg = 0;
23084 #ifdef SQLITE_SHELL_WASM_MODE
23085 # define data shellState
23086 #else
23087 ShellState data;
23088 #endif
23089 const char *zInitFile = 0;
@@ -23099,11 +23243,11 @@
23099 int argcToFree = 0;
23100 #endif
23101
23102 setBinaryMode(stdin, 0);
23103 setvbuf(stderr, 0, _IONBF, 0); /* Make sure stderr is unbuffered */
23104 #ifdef SQLITE_SHELL_WASM_MODE
23105 stdin_is_interactive = 0;
23106 stdout_is_console = 1;
23107 #else
23108 stdin_is_interactive = isatty(0);
23109 stdout_is_console = isatty(1);
@@ -23361,11 +23505,11 @@
23361 utf8_printf(stderr,"%s: Error: no database filename specified\n", Argv0);
23362 return 1;
23363 #endif
23364 }
23365 data.out = stdout;
23366 #ifndef SQLITE_SHELL_WASM_MODE
23367 sqlite3_appendvfs_init(0,0,0);
23368 #endif
23369
23370 /* Go ahead and open the database file if it already exists. If the
23371 ** file does not exist, delay opening it. This prevents empty database
@@ -23629,11 +23773,11 @@
23629 }else{
23630 data.in = stdin;
23631 rc = process_input(&data);
23632 }
23633 }
23634 #ifndef SQLITE_SHELL_WASM_MODE
23635 /* In WASM mode we have to leave the db state in place so that
23636 ** client code can "push" SQL into it after this call returns. */
23637 free(azCmd);
23638 set_table_name(&data, 0);
23639 if( data.db ){
@@ -23664,16 +23808,16 @@
23664 if( sqlite3_memory_used()>mem_main_enter ){
23665 utf8_printf(stderr, "Memory leaked: %u bytes\n",
23666 (unsigned int)(sqlite3_memory_used()-mem_main_enter));
23667 }
23668 #endif
23669 #endif /* !SQLITE_SHELL_WASM_MODE */
23670 return rc;
23671 }
23672
23673
23674 #ifdef SQLITE_SHELL_WASM_MODE
23675 /* Only for emcc experimentation purposes. */
23676 int fiddle_experiment(int a,int b){
23677 return a + b;
23678 }
23679
@@ -23790,6 +23934,6 @@
23790 shellState.wasm.zPos = zSql;
23791 process_input(&shellState);
23792 memset(&shellState.wasm, 0, sizeof(shellState.wasm));
23793 }
23794 }
23795 #endif /* SQLITE_SHELL_WASM_MODE */
23796
--- extsrc/shell.c
+++ extsrc/shell.c
@@ -53,10 +53,19 @@
53 */
54 #if !defined(SQLITE_OS_WINRT)
55 # define SQLITE_OS_WINRT 0
56 #endif
57
58 /*
59 ** If SQLITE_SHELL_FIDDLE is defined then the shell is modified
60 ** somewhat for use as a WASM module in a web browser. This flag
61 ** should only be used when building the "fiddle" web application, as
62 ** the browser-mode build has much different user input requirements
63 ** and this build mode rewires the user input subsystem to account for
64 ** that.
65 */
66
67 /*
68 ** Warning pragmas copied from msvc.h in the core.
69 */
70 #if defined(_MSC_VER)
71 #pragma warning(disable : 4054)
@@ -245,21 +254,10 @@
254 #else
255 # define setBinaryMode(X,Y)
256 # define setTextMode(X,Y)
257 #endif
258
 
 
 
 
 
 
 
 
 
 
 
259 /* True if the timer is enabled */
260 static int enableTimer = 0;
261
262 /* Return the current wall-clock time */
263 static sqlite3_int64 timeOfDay(void){
@@ -717,11 +715,11 @@
715 **
716 ** The result is stored in space obtained from malloc() and must either
717 ** be freed by the caller or else passed back into this routine via the
718 ** zPrior argument for reuse.
719 */
720 #ifndef SQLITE_SHELL_FIDDLE
721 static char *one_input_line(FILE *in, char *zPrior, int isContinuation){
722 char *zPrompt;
723 char *zResult;
724 if( in!=0 ){
725 zResult = local_getline(zPrior, in);
@@ -737,11 +735,11 @@
735 if( zResult && *zResult ) shell_add_history(zResult);
736 #endif
737 }
738 return zResult;
739 }
740 #endif /* !SQLITE_SHELL_FIDDLE */
741
742 /*
743 ** Return the value of a hexadecimal digit. Return -1 if the input
744 ** is not a hex digit.
745 */
@@ -3794,10 +3792,11 @@
3792 #define re_compile sqlite3re_compile
3793 #define re_free sqlite3re_free
3794
3795 /* The end-of-input character */
3796 #define RE_EOF 0 /* End of input */
3797 #define RE_START 0xfffffff /* Start of input - larger than an UTF-8 */
3798
3799 /* The NFA is implemented as sequence of opcodes taken from the following
3800 ** set. Each opcode has a single integer argument.
3801 */
3802 #define RE_OP_MATCH 1 /* Match the one character in the argument */
@@ -3815,10 +3814,37 @@
3814 #define RE_OP_DIGIT 13 /* digit: [0-9] */
3815 #define RE_OP_NOTDIGIT 14 /* Not a digit */
3816 #define RE_OP_SPACE 15 /* space: [ \t\n\r\v\f] */
3817 #define RE_OP_NOTSPACE 16 /* Not a digit */
3818 #define RE_OP_BOUNDARY 17 /* Boundary between word and non-word */
3819 #define RE_OP_ATSTART 18 /* Currently at the start of the string */
3820
3821 #if defined(SQLITE_DEBUG)
3822 /* Opcode names used for symbolic debugging */
3823 static const char *ReOpName[] = {
3824 "EOF",
3825 "MATCH",
3826 "ANY",
3827 "ANYSTAR",
3828 "FORK",
3829 "GOTO",
3830 "ACCEPT",
3831 "CC_INC",
3832 "CC_EXC",
3833 "CC_VALUE",
3834 "CC_RANGE",
3835 "WORD",
3836 "NOTWORD",
3837 "DIGIT",
3838 "NOTDIGIT",
3839 "SPACE",
3840 "NOTSPACE",
3841 "BOUNDARY",
3842 "ATSTART",
3843 };
3844 #endif /* SQLITE_DEBUG */
3845
3846
3847 /* Each opcode is a "state" in the NFA */
3848 typedef unsigned short ReStateNumber;
3849
3850 /* Because this is an NFA and not a DFA, multiple states can be active at
@@ -3849,11 +3875,11 @@
3875 const char *zErr; /* Error message to return */
3876 char *aOp; /* Operators for the virtual machine */
3877 int *aArg; /* Arguments to each operator */
3878 unsigned (*xNextChar)(ReInput*); /* Next character function */
3879 unsigned char zInit[12]; /* Initial text to match */
3880 int nInit; /* Number of bytes in zInit */
3881 unsigned nState; /* Number of entries in aOp[] and aArg[] */
3882 unsigned nAlloc; /* Slots allocated for aOp[] and aArg[] */
3883 };
3884
3885 /* Add a state to the given state set if it is not already there */
@@ -3922,11 +3948,11 @@
3948 ReStateSet aStateSet[2], *pThis, *pNext;
3949 ReStateNumber aSpace[100];
3950 ReStateNumber *pToFree;
3951 unsigned int i = 0;
3952 unsigned int iSwap = 0;
3953 int c = RE_START;
3954 int cPrev = 0;
3955 int rc = 0;
3956 ReInput in;
3957
3958 in.z = zIn;
@@ -3941,10 +3967,11 @@
3967 strncmp((const char*)zIn+in.i, (const char*)pRe->zInit, pRe->nInit)!=0)
3968 ){
3969 in.i++;
3970 }
3971 if( in.i+pRe->nInit>in.mx ) return 0;
3972 c = RE_START-1;
3973 }
3974
3975 if( pRe->nState<=(sizeof(aSpace)/(sizeof(aSpace[0])*2)) ){
3976 pToFree = 0;
3977 aStateSet[0].aState = aSpace;
@@ -3968,10 +3995,14 @@
3995 int x = pThis->aState[i];
3996 switch( pRe->aOp[x] ){
3997 case RE_OP_MATCH: {
3998 if( pRe->aArg[x]==c ) re_add_state(pNext, x+1);
3999 break;
4000 }
4001 case RE_OP_ATSTART: {
4002 if( cPrev==RE_START ) re_add_state(pThis, x+1);
4003 break;
4004 }
4005 case RE_OP_ANY: {
4006 if( c!=0 ) re_add_state(pNext, x+1);
4007 break;
4008 }
@@ -4050,11 +4081,13 @@
4081 }
4082 }
4083 }
4084 }
4085 for(i=0; i<pNext->nState; i++){
4086 int x = pNext->aState[i];
4087 while( pRe->aOp[x]==RE_OP_GOTO ) x += pRe->aArg[x];
4088 if( pRe->aOp[x]==RE_OP_ACCEPT ){ rc = 1; break; }
4089 }
4090 re_match_end:
4091 sqlite3_free(pToFree);
4092 return rc;
4093 }
@@ -4205,11 +4238,10 @@
4238 const char *zErr;
4239 while( (c = p->xNextChar(&p->sIn))!=0 ){
4240 iStart = p->nState;
4241 switch( c ){
4242 case '|':
 
4243 case ')': {
4244 p->sIn.i--;
4245 return 0;
4246 }
4247 case '(': {
@@ -4241,10 +4273,18 @@
4273 }
4274 case '?': {
4275 if( iPrev<0 ) return "'?' without operand";
4276 re_insert(p, iPrev, RE_OP_FORK, p->nState - iPrev+1);
4277 break;
4278 }
4279 case '$': {
4280 re_append(p, RE_OP_MATCH, RE_EOF);
4281 break;
4282 }
4283 case '^': {
4284 re_append(p, RE_OP_ATSTART, 0);
4285 break;
4286 }
4287 case '{': {
4288 int m = 0, n = 0;
4289 int sz, j;
4290 if( iPrev<0 ) return "'{m,n}' without operand";
@@ -4260,10 +4300,11 @@
4300 p->sIn.i++;
4301 sz = p->nState - iPrev;
4302 if( m==0 ){
4303 if( n==0 ) return "both m and n are zero in '{m,n}'";
4304 re_insert(p, iPrev, RE_OP_FORK, sz+1);
4305 iPrev++;
4306 n--;
4307 }else{
4308 for(j=1; j<m; j++) re_copy(p, iPrev, sz);
4309 }
4310 for(j=m; j<n; j++){
@@ -4378,15 +4419,11 @@
4419 zErr = re_subcompile_re(pRe);
4420 if( zErr ){
4421 re_free(pRe);
4422 return zErr;
4423 }
4424 if( pRe->sIn.i>=pRe->sIn.mx ){
 
 
 
 
4425 re_append(pRe, RE_OP_ACCEPT, 0);
4426 *ppRe = pRe;
4427 }else{
4428 re_free(pRe);
4429 return "unrecognized character";
@@ -4407,11 +4444,11 @@
4444 pRe->zInit[j++] = (unsigned char)x;
4445 }else if( x<=0xfff ){
4446 pRe->zInit[j++] = (unsigned char)(0xc0 | (x>>6));
4447 pRe->zInit[j++] = 0x80 | (x&0x3f);
4448 }else if( x<=0xffff ){
4449 pRe->zInit[j++] = (unsigned char)(0xe0 | (x>>12));
4450 pRe->zInit[j++] = 0x80 | ((x>>6)&0x3f);
4451 pRe->zInit[j++] = 0x80 | (x&0x3f);
4452 }else{
4453 break;
4454 }
@@ -4465,10 +4502,71 @@
4502 }
4503 if( setAux ){
4504 sqlite3_set_auxdata(context, 0, pRe, (void(*)(void*))re_free);
4505 }
4506 }
4507
4508 #if defined(SQLITE_DEBUG)
4509 /*
4510 ** This function is used for testing and debugging only. It is only available
4511 ** if the SQLITE_DEBUG compile-time option is used.
4512 **
4513 ** Compile a regular expression and then convert the compiled expression into
4514 ** text and return that text.
4515 */
4516 static void re_bytecode_func(
4517 sqlite3_context *context,
4518 int argc,
4519 sqlite3_value **argv
4520 ){
4521 const char *zPattern;
4522 const char *zErr;
4523 ReCompiled *pRe;
4524 sqlite3_str *pStr;
4525 int i;
4526 int n;
4527 char *z;
4528
4529 zPattern = (const char*)sqlite3_value_text(argv[0]);
4530 if( zPattern==0 ) return;
4531 zErr = re_compile(&pRe, zPattern, sqlite3_user_data(context)!=0);
4532 if( zErr ){
4533 re_free(pRe);
4534 sqlite3_result_error(context, zErr, -1);
4535 return;
4536 }
4537 if( pRe==0 ){
4538 sqlite3_result_error_nomem(context);
4539 return;
4540 }
4541 pStr = sqlite3_str_new(0);
4542 if( pStr==0 ) goto re_bytecode_func_err;
4543 if( pRe->nInit>0 ){
4544 sqlite3_str_appendf(pStr, "INIT ");
4545 for(i=0; i<pRe->nInit; i++){
4546 sqlite3_str_appendf(pStr, "%02x", pRe->zInit[i]);
4547 }
4548 sqlite3_str_appendf(pStr, "\n");
4549 }
4550 for(i=0; (unsigned)i<pRe->nState; i++){
4551 sqlite3_str_appendf(pStr, "%-8s %4d\n",
4552 ReOpName[(unsigned char)pRe->aOp[i]], pRe->aArg[i]);
4553 }
4554 n = sqlite3_str_length(pStr);
4555 z = sqlite3_str_finish(pStr);
4556 if( n==0 ){
4557 sqlite3_free(z);
4558 }else{
4559 sqlite3_result_text(context, z, n-1, sqlite3_free);
4560 }
4561
4562 re_bytecode_func_err:
4563 re_free(pRe);
4564 }
4565
4566 #endif /* SQLITE_DEBUG */
4567
4568
4569 /*
4570 ** Invoke this routine to register the regexp() function with the
4571 ** SQLite database connection.
4572 */
@@ -4490,16 +4588,23 @@
4588 /* The regexpi(PATTERN,STRING) function is a case-insensitive version
4589 ** of regexp(PATTERN,STRING). */
4590 rc = sqlite3_create_function(db, "regexpi", 2,
4591 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC,
4592 (void*)db, re_sql_func, 0, 0);
4593 #if defined(SQLITE_DEBUG)
4594 if( rc==SQLITE_OK ){
4595 rc = sqlite3_create_function(db, "regexp_bytecode", 1,
4596 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC,
4597 0, re_bytecode_func, 0, 0);
4598 }
4599 #endif /* SQLITE_DEBUG */
4600 }
4601 return rc;
4602 }
4603
4604 /************************* End ../ext/misc/regexp.c ********************/
4605 #ifndef SQLITE_SHELL_FIDDLE
4606 /************************* Begin ../ext/misc/fileio.c ******************/
4607 /*
4608 ** 2014-06-13
4609 **
4610 ** The author disclaims copyright to this source code. In place of
@@ -10047,10 +10152,14 @@
10152 ** Return true if zId must be quoted in order to use it as an SQL
10153 ** identifier, or false otherwise.
10154 */
10155 static int idxIdentifierRequiresQuotes(const char *zId){
10156 int i;
10157 int nId = STRLEN(zId);
10158
10159 if( sqlite3_keyword_check(zId, nId) ) return 1;
10160
10161 for(i=0; zId[i]; i++){
10162 if( !(zId[i]=='_')
10163 && !(zId[i]>='0' && zId[i]<='9')
10164 && !(zId[i]>='a' && zId[i]<='z')
10165 && !(zId[i]>='A' && zId[i]<='Z')
@@ -12248,19 +12357,19 @@
12357 int nIndent; /* Size of array aiIndent[] */
12358 int iIndent; /* Index of current op in aiIndent[] */
12359 char *zNonce; /* Nonce for temporary safe-mode excapes */
12360 EQPGraph sGraph; /* Information for the graphical EXPLAIN QUERY PLAN */
12361 ExpertInfo expert; /* Valid if previous command was ".expert OPT..." */
12362 #ifdef SQLITE_SHELL_FIDDLE
12363 struct {
12364 const char * zInput; /* Input string from wasm/JS proxy */
12365 const char * zPos; /* Cursor pos into zInput */
12366 } wasm;
12367 #endif
12368 };
12369
12370 #ifdef SQLITE_SHELL_FIDDLE
12371 static ShellState shellState;
12372 #endif
12373
12374
12375 /* Allowed values for ShellState.autoEQP
@@ -12588,14 +12697,27 @@
12697 /*
12698 ** Output the given string as a hex-encoded blob (eg. X'1234' )
12699 */
12700 static void output_hex_blob(FILE *out, const void *pBlob, int nBlob){
12701 int i;
12702 unsigned char *aBlob = (unsigned char*)pBlob;
12703
12704 char *zStr = sqlite3_malloc(nBlob*2 + 1);
12705 shell_check_oom(zStr);
12706
12707 for(i=0; i<nBlob; i++){
12708 static const char aHex[] = {
12709 '0', '1', '2', '3', '4', '5', '6', '7',
12710 '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
12711 };
12712 zStr[i*2] = aHex[ (aBlob[i] >> 4) ];
12713 zStr[i*2+1] = aHex[ (aBlob[i] & 0x0F) ];
12714 }
12715 zStr[i*2] = '\0';
12716
12717 raw_printf(out,"X'%s'", zStr);
12718 sqlite3_free(zStr);
12719 }
12720
12721 /*
12722 ** Find a string that is not found anywhere in z[]. Return a pointer
12723 ** to that string.
@@ -12924,11 +13046,11 @@
13046 UNUSED_PARAMETER(zA2);
13047 UNUSED_PARAMETER(zA3);
13048 UNUSED_PARAMETER(zA4);
13049 switch( op ){
13050 case SQLITE_ATTACH: {
13051 #ifndef SQLITE_SHELL_FIDDLE
13052 /* In WASM builds the filesystem is a virtual sandbox, so
13053 ** there's no harm in using ATTACH. */
13054 failIfSafeMode(p, "cannot run ATTACH in safe mode");
13055 #endif
13056 break;
@@ -12997,19 +13119,41 @@
13119 /*
13120 ** Print a schema statement. Part of MODE_Semi and MODE_Pretty output.
13121 **
13122 ** This routine converts some CREATE TABLE statements for shadow tables
13123 ** in FTS3/4/5 into CREATE TABLE IF NOT EXISTS statements.
13124 **
13125 ** If the schema statement in z[] contains a start-of-comment and if
13126 ** sqlite3_complete() returns false, try to terminate the comment before
13127 ** printing the result. https://sqlite.org/forum/forumpost/d7be961c5c
13128 */
13129 static void printSchemaLine(FILE *out, const char *z, const char *zTail){
13130 char *zToFree = 0;
13131 if( z==0 ) return;
13132 if( zTail==0 ) return;
13133 if( zTail[0]==';' && (strstr(z, "/*")!=0 || strstr(z,"--")!=0) ){
13134 const char *zOrig = z;
13135 static const char *azTerm[] = { "", "*/", "\n" };
13136 int i;
13137 for(i=0; i<ArraySize(azTerm); i++){
13138 char *zNew = sqlite3_mprintf("%s%s;", zOrig, azTerm[i]);
13139 if( sqlite3_complete(zNew) ){
13140 size_t n = strlen(zNew);
13141 zNew[n-1] = 0;
13142 zToFree = zNew;
13143 z = zNew;
13144 break;
13145 }
13146 sqlite3_free(zNew);
13147 }
13148 }
13149 if( sqlite3_strglob("CREATE TABLE ['\"]*", z)==0 ){
13150 utf8_printf(out, "CREATE TABLE IF NOT EXISTS %s%s", z+13, zTail);
13151 }else{
13152 utf8_printf(out, "%s%s", z, zTail);
13153 }
13154 sqlite3_free(zToFree);
13155 }
13156 static void printSchemaLineN(FILE *out, char *z, int n, const char *zTail){
13157 char c = z[n];
13158 z[n] = 0;
13159 printSchemaLine(out, z, zTail);
@@ -15338,11 +15482,11 @@
15482 ** There must be two or more spaces between the end of the command and the
15483 ** start of the description of what that command does.
15484 */
15485 static const char *(azHelp[]) = {
15486 #if defined(SQLITE_HAVE_ZLIB) && !defined(SQLITE_OMIT_VIRTUALTABLE) \
15487 && !defined(SQLITE_SHELL_FIDDLE)
15488 ".archive ... Manage SQL archives",
15489 " Each command must have exactly one of the following options:",
15490 " -c, --create Create a new archive",
15491 " -u, --update Add or update files with changed mtime",
15492 " -i, --insert Like -u but always add even if unchanged",
@@ -15364,23 +15508,23 @@
15508 " http://sqlite.org/cli.html#sqlite_archive_support",
15509 #endif
15510 #ifndef SQLITE_OMIT_AUTHORIZATION
15511 ".auth ON|OFF Show authorizer callbacks",
15512 #endif
15513 #ifndef SQLITE_SHELL_FIDDLE
15514 ".backup ?DB? FILE Backup DB (default \"main\") to FILE",
15515 " Options:",
15516 " --append Use the appendvfs",
15517 " --async Write to FILE without journal and fsync()",
15518 #endif
15519 ".bail on|off Stop after hitting an error. Default OFF",
15520 ".binary on|off Turn binary output on or off. Default OFF",
15521 #ifndef SQLITE_SHELL_FIDDLE
15522 ".cd DIRECTORY Change the working directory to DIRECTORY",
15523 #endif
15524 ".changes on|off Show number of rows changed by SQL",
15525 #ifndef SQLITE_SHELL_FIDDLE
15526 ".check GLOB Fail if output since .testcase does not match",
15527 ".clone NEWDB Clone data into NEWDB from the existing database",
15528 #endif
15529 ".connection [close] [#] Open or close an auxiliary database connection",
15530 ".databases List names and files of attached databases",
@@ -15402,15 +15546,15 @@
15546 #ifdef SQLITE_DEBUG
15547 " test Show raw EXPLAIN QUERY PLAN output",
15548 " trace Like \"full\" but enable \"PRAGMA vdbe_trace\"",
15549 #endif
15550 " trigger Like \"full\" but also show trigger bytecode",
15551 #ifndef SQLITE_SHELL_FIDDLE
15552 ".excel Display the output of next command in spreadsheet",
15553 " --bom Put a UTF8 byte-order mark on intermediate file",
15554 #endif
15555 #ifndef SQLITE_SHELL_FIDDLE
15556 ".exit ?CODE? Exit this program with return-code CODE",
15557 #endif
15558 ".expert EXPERIMENTAL. Suggest indexes for queries",
15559 ".explain ?on|off|auto? Change the EXPLAIN formatting mode. Default: auto",
15560 ".filectrl CMD ... Run various sqlite3_file_control() operations",
@@ -15417,11 +15561,11 @@
15561 " --schema SCHEMA Use SCHEMA instead of \"main\"",
15562 " --help Show CMD details",
15563 ".fullschema ?--indent? Show schema and the content of sqlite_stat tables",
15564 ".headers on|off Turn display of headers on or off",
15565 ".help ?-all? ?PATTERN? Show help text for PATTERN",
15566 #ifndef SQLITE_SHELL_FIDDLE
15567 ".import FILE TABLE Import data from FILE into TABLE",
15568 " Options:",
15569 " --ascii Use \\037 and \\036 as column and row separators",
15570 " --csv Use , and \\n as column and row separators",
15571 " --skip N Skip the first N rows of input",
@@ -15446,14 +15590,14 @@
15590 #endif
15591 ".limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT",
15592 ".lint OPTIONS Report potential schema issues.",
15593 " Options:",
15594 " fkey-indexes Find missing foreign key indexes",
15595 #if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_FIDDLE)
15596 ".load FILE ?ENTRY? Load an extension library",
15597 #endif
15598 #ifndef SQLITE_SHELL_FIDDLE
15599 ".log FILE|off Turn logging on or off. FILE can be stderr/stdout",
15600 #endif
15601 ".mode MODE ?OPTIONS? Set output mode",
15602 " MODE is one of:",
15603 " ascii Columns/rows delimited by 0x1F and 0x1E",
@@ -15476,15 +15620,15 @@
15620 " --wordwrap B Wrap or not at word boundaries per B (on/off)",
15621 " --ww Shorthand for \"--wordwrap 1\"",
15622 " --quote Quote output text as SQL literals",
15623 " --noquote Do not quote output text",
15624 " TABLE The name of SQL table used for \"insert\" mode",
15625 #ifndef SQLITE_SHELL_FIDDLE
15626 ".nonce STRING Suspend safe mode for one command if nonce matches",
15627 #endif
15628 ".nullvalue STRING Use STRING in place of NULL values",
15629 #ifndef SQLITE_SHELL_FIDDLE
15630 ".once ?OPTIONS? ?FILE? Output for the next SQL command only to FILE",
15631 " If FILE begins with '|' then open as a pipe",
15632 " --bom Put a UTF8 byte-order mark at the beginning",
15633 " -e Send output to the system text editor",
15634 " -x Send output as CSV to a spreadsheet (same as \".excel\")",
@@ -15502,11 +15646,11 @@
15646 #endif
15647 " --new Initialize FILE to an empty database",
15648 " --nofollow Do not follow symbolic links",
15649 " --readonly Open FILE readonly",
15650 " --zip FILE is a ZIP archive",
15651 #ifndef SQLITE_SHELL_FIDDLE
15652 ".output ?FILE? Send output to FILE or stdout if FILE is omitted",
15653 " If FILE begins with '|' then open it as a pipe.",
15654 " Options:",
15655 " --bom Prefix output with a UTF8 byte-order mark",
15656 " -e Send output to the system text editor",
@@ -15526,11 +15670,11 @@
15670 " --once Do no more than one progress interrupt",
15671 " --quiet|-q No output except at interrupts",
15672 " --reset Reset the count for each input and interrupt",
15673 #endif
15674 ".prompt MAIN CONTINUE Replace the standard prompts",
15675 #ifndef SQLITE_SHELL_FIDDLE
15676 ".quit Exit this program",
15677 ".read FILE Read input from FILE or command output",
15678 " If FILE begins with \"|\", it is a command that generates the input.",
15679 #endif
15680 #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB)
@@ -15539,11 +15683,11 @@
15683 " --recovery-db NAME Store recovery metadata in database file NAME",
15684 " --lost-and-found TABLE Alternative name for the lost-and-found table",
15685 " --no-rowids Do not attempt to recover rowid values",
15686 " that are not also INTEGER PRIMARY KEYs",
15687 #endif
15688 #ifndef SQLITE_SHELL_FIDDLE
15689 ".restore ?DB? FILE Restore content of DB (default \"main\") from FILE",
15690 ".save ?OPTIONS? FILE Write database to FILE (an alias for .backup ...)",
15691 #endif
15692 ".scanstats on|off Turn sqlite3_stmt_scanstatus() metrics on or off",
15693 ".schema ?PATTERN? Show the CREATE statements matching PATTERN",
@@ -15576,24 +15720,24 @@
15720 " --sha3-224 Use the sha3-224 algorithm",
15721 " --sha3-256 Use the sha3-256 algorithm (default)",
15722 " --sha3-384 Use the sha3-384 algorithm",
15723 " --sha3-512 Use the sha3-512 algorithm",
15724 " Any other argument is a LIKE pattern for tables to hash",
15725 #if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE)
15726 ".shell CMD ARGS... Run CMD ARGS... in a system shell",
15727 #endif
15728 ".show Show the current values for various settings",
15729 ".stats ?ARG? Show stats or turn stats on or off",
15730 " off Turn off automatic stat display",
15731 " on Turn on automatic stat display",
15732 " stmt Show statement stats",
15733 " vmstep Show the virtual machine step count only",
15734 #if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE)
15735 ".system CMD ARGS... Run CMD ARGS... in a system shell",
15736 #endif
15737 ".tables ?TABLE? List names of tables matching LIKE pattern TABLE",
15738 #ifndef SQLITE_SHELL_FIDDLE
15739 ".testcase NAME Begin redirecting output to 'testcase-out.txt'",
15740 #endif
15741 ".testctrl CMD ... Run various sqlite3_test_control() operations",
15742 " Run \".testctrl\" with no arguments for details",
15743 ".timeout MS Try opening locked tables for MS milliseconds",
@@ -16142,11 +16286,11 @@
16286 sqlite3_uint_init(p->db, 0, 0);
16287 sqlite3_decimal_init(p->db, 0, 0);
16288 sqlite3_regexp_init(p->db, 0, 0);
16289 sqlite3_ieee_init(p->db, 0, 0);
16290 sqlite3_series_init(p->db, 0, 0);
16291 #ifndef SQLITE_SHELL_FIDDLE
16292 sqlite3_fileio_init(p->db, 0, 0);
16293 sqlite3_completion_init(p->db, 0, 0);
16294 #endif
16295 #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB)
16296 sqlite3_dbdata_init(p->db, 0, 0);
@@ -19272,19 +19416,19 @@
19416 }
19417 }else
19418 #endif
19419
19420 #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB) \
19421 && !defined(SQLITE_SHELL_FIDDLE)
19422 if( c=='a' && strncmp(azArg[0], "archive", n)==0 ){
19423 open_db(p, 0);
19424 failIfSafeMode(p, "cannot run .archive in safe mode");
19425 rc = arDotCommand(p, 0, azArg, nArg);
19426 }else
19427 #endif
19428
19429 #ifndef SQLITE_SHELL_FIDDLE
19430 if( (c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0)
19431 || (c=='s' && n>=3 && strncmp(azArg[0], "save", n)==0)
19432 ){
19433 const char *zDestFile = 0;
19434 const char *zDb = 0;
@@ -19349,11 +19493,11 @@
19493 utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
19494 rc = 1;
19495 }
19496 close_db(pDest);
19497 }else
19498 #endif /* !defined(SQLITE_SHELL_FIDDLE) */
19499
19500 if( c=='b' && n>=3 && strncmp(azArg[0], "bail", n)==0 ){
19501 if( nArg==2 ){
19502 bail_on_error = booleanValue(azArg[1]);
19503 }else{
@@ -19380,11 +19524,11 @@
19524 */
19525 if( c=='b' && n>=3 && strncmp(azArg[0], "breakpoint", n)==0 ){
19526 test_breakpoint();
19527 }else
19528
19529 #ifndef SQLITE_SHELL_FIDDLE
19530 if( c=='c' && strcmp(azArg[0],"cd")==0 ){
19531 failIfSafeMode(p, "cannot run .cd in safe mode");
19532 if( nArg==2 ){
19533 #if defined(_WIN32) || defined(WIN32)
19534 wchar_t *z = sqlite3_win32_utf8_to_unicode(azArg[1]);
@@ -19400,11 +19544,11 @@
19544 }else{
19545 raw_printf(stderr, "Usage: .cd DIRECTORY\n");
19546 rc = 1;
19547 }
19548 }else
19549 #endif /* !defined(SQLITE_SHELL_FIDDLE) */
19550
19551 if( c=='c' && n>=3 && strncmp(azArg[0], "changes", n)==0 ){
19552 if( nArg==2 ){
19553 setOrClearFlag(p, SHFLG_CountChanges, azArg[1]);
19554 }else{
@@ -19411,11 +19555,11 @@
19555 raw_printf(stderr, "Usage: .changes on|off\n");
19556 rc = 1;
19557 }
19558 }else
19559
19560 #ifndef SQLITE_SHELL_FIDDLE
19561 /* Cancel output redirection, if it is currently set (by .testcase)
19562 ** Then read the content of the testcase-out.txt file and compare against
19563 ** azArg[1]. If there are differences, report an error and exit.
19564 */
19565 if( c=='c' && n>=3 && strncmp(azArg[0], "check", n)==0 ){
@@ -19436,23 +19580,23 @@
19580 utf8_printf(stdout, "testcase-%s ok\n", p->zTestcase);
19581 p->nCheck++;
19582 }
19583 sqlite3_free(zRes);
19584 }else
19585 #endif /* !defined(SQLITE_SHELL_FIDDLE) */
19586
19587 #ifndef SQLITE_SHELL_FIDDLE
19588 if( c=='c' && strncmp(azArg[0], "clone", n)==0 ){
19589 failIfSafeMode(p, "cannot run .clone in safe mode");
19590 if( nArg==2 ){
19591 tryToClone(p, azArg[1]);
19592 }else{
19593 raw_printf(stderr, "Usage: .clone FILENAME\n");
19594 rc = 1;
19595 }
19596 }else
19597 #endif /* !defined(SQLITE_SHELL_FIDDLE) */
19598
19599 if( c=='c' && strncmp(azArg[0], "connection", n)==0 ){
19600 if( nArg==1 ){
19601 /* List available connections */
19602 int i;
@@ -19737,11 +19881,11 @@
19881 raw_printf(stderr, "Usage: .eqp off|on|trace|trigger|full\n");
19882 rc = 1;
19883 }
19884 }else
19885
19886 #ifndef SQLITE_SHELL_FIDDLE
19887 if( c=='e' && strncmp(azArg[0], "exit", n)==0 ){
19888 if( nArg>1 && (rc = (int)integerValue(azArg[1]))!=0 ) exit(rc);
19889 rc = 2;
19890 }else
19891 #endif
@@ -19997,11 +20141,11 @@
20141 }else{
20142 showHelp(p->out, 0);
20143 }
20144 }else
20145
20146 #ifndef SQLITE_SHELL_FIDDLE
20147 if( c=='i' && strncmp(azArg[0], "import", n)==0 ){
20148 char *zTable = 0; /* Insert data into this table */
20149 char *zSchema = 0; /* within this schema (may default to "main") */
20150 char *zFile = 0; /* Name of file to extra content from */
20151 sqlite3_stmt *pStmt = NULL; /* A statement */
@@ -20288,11 +20432,11 @@
20432 utf8_printf(p->out,
20433 "Added %d rows with %d errors using %d lines of input\n",
20434 sCtx.nRow, sCtx.nErr, sCtx.nLine-1);
20435 }
20436 }else
20437 #endif /* !defined(SQLITE_SHELL_FIDDLE) */
20438
20439 #ifndef SQLITE_UNTESTABLE
20440 if( c=='i' && strncmp(azArg[0], "imposter", n)==0 ){
20441 char *zSql;
20442 char *zCollist = 0;
@@ -20478,11 +20622,11 @@
20622 if( c=='l' && n>2 && strncmp(azArg[0], "lint", n)==0 ){
20623 open_db(p, 0);
20624 lintDotCommand(p, azArg, nArg);
20625 }else
20626
20627 #if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_FIDDLE)
20628 if( c=='l' && strncmp(azArg[0], "load", n)==0 ){
20629 const char *zFile, *zProc;
20630 char *zErrMsg = 0;
20631 failIfSafeMode(p, "cannot run .load in safe mode");
20632 if( nArg<2 ){
@@ -20500,11 +20644,11 @@
20644 rc = 1;
20645 }
20646 }else
20647 #endif
20648
20649 #ifndef SQLITE_SHELL_FIDDLE
20650 if( c=='l' && strncmp(azArg[0], "log", n)==0 ){
20651 failIfSafeMode(p, "cannot run .log in safe mode");
20652 if( nArg!=2 ){
20653 raw_printf(stderr, "Usage: .log FILENAME\n");
20654 rc = 1;
@@ -20637,11 +20781,11 @@
20781 rc = 1;
20782 }
20783 p->cMode = p->mode;
20784 }else
20785
20786 #ifndef SQLITE_SHELL_FIDDLE
20787 if( c=='n' && strcmp(azArg[0], "nonce")==0 ){
20788 if( nArg!=2 ){
20789 raw_printf(stderr, "Usage: .nonce NONCE\n");
20790 rc = 1;
20791 }else if( p->zNonce==0 || strcmp(azArg[1],p->zNonce)!=0 ){
@@ -20652,11 +20796,11 @@
20796 p->bSafeMode = 0;
20797 return 0; /* Return immediately to bypass the safe mode reset
20798 ** at the end of this procedure */
20799 }
20800 }else
20801 #endif /* !defined(SQLITE_SHELL_FIDDLE) */
20802
20803 if( c=='n' && strncmp(azArg[0], "nullvalue", n)==0 ){
20804 if( nArg==2 ){
20805 sqlite3_snprintf(sizeof(p->nullValue), p->nullValue,
20806 "%.*s", (int)ArraySize(p->nullValue)-1, azArg[1]);
@@ -20674,11 +20818,11 @@
20818 int openMode = SHELL_OPEN_UNSPEC;
20819
20820 /* Check for command-line arguments */
20821 for(iName=1; iName<nArg; iName++){
20822 const char *z = azArg[iName];
20823 #ifndef SQLITE_SHELL_FIDDLE
20824 if( optionMatch(z,"new") ){
20825 newFlag = 1;
20826 #ifdef SQLITE_HAVE_ZLIB
20827 }else if( optionMatch(z, "zip") ){
20828 openMode = SHELL_OPEN_ZIPFILE;
@@ -20696,11 +20840,11 @@
20840 openMode = SHELL_OPEN_HEXDB;
20841 }else if( optionMatch(z, "maxsize") && iName+1<nArg ){
20842 p->szMax = integerValue(azArg[++iName]);
20843 #endif /* SQLITE_OMIT_DESERIALIZE */
20844 }else
20845 #endif /* !SQLITE_SHELL_FIDDLE */
20846 if( z[0]=='-' ){
20847 utf8_printf(stderr, "unknown option: %s\n", z);
20848 rc = 1;
20849 goto meta_command_exit;
20850 }else if( zFN ){
@@ -20724,11 +20868,11 @@
20868 p->szMax = 0;
20869
20870 /* If a filename is specified, try to open it first */
20871 if( zFN || p->openMode==SHELL_OPEN_HEXDB ){
20872 if( newFlag && zFN && !p->bSafeMode ) shellDeleteFile(zFN);
20873 #ifndef SQLITE_SHELL_FIDDLE
20874 if( p->bSafeMode
20875 && p->openMode!=SHELL_OPEN_HEXDB
20876 && zFN
20877 && strcmp(zFN,":memory:")!=0
20878 ){
@@ -20757,11 +20901,11 @@
20901 p->pAuxDb->zDbFilename = 0;
20902 open_db(p, 0);
20903 }
20904 }else
20905
20906 #ifndef SQLITE_SHELL_FIDDLE
20907 if( (c=='o'
20908 && (strncmp(azArg[0], "output", n)==0||strncmp(azArg[0], "once", n)==0))
20909 || (c=='e' && n==5 && strcmp(azArg[0],"excel")==0)
20910 ){
20911 char *zFile = 0;
@@ -20873,11 +21017,11 @@
21017 sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile);
21018 }
21019 }
21020 sqlite3_free(zFile);
21021 }else
21022 #endif /* !defined(SQLITE_SHELL_FIDDLE) */
21023
21024 if( c=='p' && n>=3 && strncmp(azArg[0], "parameter", n)==0 ){
21025 open_db(p,0);
21026 if( nArg<=1 ) goto parameter_syntax_error;
21027
@@ -21043,17 +21187,17 @@
21187 if( nArg >= 3) {
21188 strncpy(continuePrompt,azArg[2],(int)ArraySize(continuePrompt)-1);
21189 }
21190 }else
21191
21192 #ifndef SQLITE_SHELL_FIDDLE
21193 if( c=='q' && strncmp(azArg[0], "quit", n)==0 ){
21194 rc = 2;
21195 }else
21196 #endif
21197
21198 #ifndef SQLITE_SHELL_FIDDLE
21199 if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 ){
21200 FILE *inSaved = p->in;
21201 int savedLineno = p->lineno;
21202 failIfSafeMode(p, "cannot run .read in safe mode");
21203 if( nArg!=2 ){
@@ -21084,13 +21228,13 @@
21228 fclose(p->in);
21229 }
21230 p->in = inSaved;
21231 p->lineno = savedLineno;
21232 }else
21233 #endif /* !defined(SQLITE_SHELL_FIDDLE) */
21234
21235 #ifndef SQLITE_SHELL_FIDDLE
21236 if( c=='r' && n>=3 && strncmp(azArg[0], "restore", n)==0 ){
21237 const char *zSrcFile;
21238 const char *zDb;
21239 sqlite3 *pSrc;
21240 sqlite3_backup *pBackup;
@@ -21138,11 +21282,11 @@
21282 utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
21283 rc = 1;
21284 }
21285 close_db(pSrc);
21286 }else
21287 #endif /* !defined(SQLITE_SHELL_FIDDLE) */
21288
21289 if( c=='s' && strncmp(azArg[0], "scanstats", n)==0 ){
21290 if( nArg==2 ){
21291 p->scanstatsOn = (u8)booleanValue(azArg[1]);
21292 #ifndef SQLITE_ENABLE_STMT_SCANSTATUS
@@ -21764,11 +21908,11 @@
21908 shell_exec(p, zSql, 0);
21909 }
21910 sqlite3_free(zSql);
21911 }else
21912
21913 #if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE)
21914 if( c=='s'
21915 && (strncmp(azArg[0], "shell", n)==0 || strncmp(azArg[0],"system",n)==0)
21916 ){
21917 char *zCmd;
21918 int i, x;
@@ -21785,11 +21929,11 @@
21929 }
21930 x = zCmd!=0 ? system(zCmd) : 1;
21931 sqlite3_free(zCmd);
21932 if( x ) raw_printf(stderr, "System command returns %d\n", x);
21933 }else
21934 #endif /* !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE) */
21935
21936 if( c=='s' && strncmp(azArg[0], "show", n)==0 ){
21937 static const char *azBool[] = { "off", "on", "trigger", "full"};
21938 const char *zOut;
21939 int i;
@@ -21965,11 +22109,11 @@
22109
22110 for(ii=0; ii<nRow; ii++) sqlite3_free(azResult[ii]);
22111 sqlite3_free(azResult);
22112 }else
22113
22114 #ifndef SQLITE_SHELL_FIDDLE
22115 /* Begin redirecting output to the file "testcase-out.txt" */
22116 if( c=='t' && strcmp(azArg[0],"testcase")==0 ){
22117 output_reset(p);
22118 p->out = output_file_open("testcase-out.txt", 0);
22119 if( p->out==0 ){
@@ -21979,11 +22123,11 @@
22123 sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "%s", azArg[1]);
22124 }else{
22125 sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "?");
22126 }
22127 }else
22128 #endif /* !defined(SQLITE_SHELL_FIDDLE) */
22129
22130 #ifndef SQLITE_UNTESTABLE
22131 if( c=='t' && n>=8 && strncmp(azArg[0], "testctrl", n)==0 ){
22132 static const struct {
22133 const char *zCtrlName; /* Name of a test-control option */
@@ -22651,11 +22795,11 @@
22795
22796 static void echo_group_input(ShellState *p, const char *zDo){
22797 if( ShellHasFlag(p, SHFLG_Echo) ) utf8_printf(p->out, "%s\n", zDo);
22798 }
22799
22800 #ifdef SQLITE_SHELL_FIDDLE
22801 /*
22802 ** Alternate one_input_line() impl for wasm mode. This is not in the primary impl
22803 ** because we need the global shellState and cannot access it from that function
22804 ** without moving lots of code around (creating a larger/messier diff).
22805 */
@@ -22682,11 +22826,11 @@
22826 shell_check_oom(zLine);
22827 memcpy(zLine, zBegin, (size_t)nZ);
22828 zLine[nZ] = 0;
22829 return zLine;
22830 }
22831 #endif /* SQLITE_SHELL_FIDDLE */
22832
22833 /*
22834 ** Read input from *in and process it. If *in==0 then input
22835 ** is interactive - the user is typing it it. Otherwise, input
22836 ** is coming from a file or device. A prompt is issued and history
@@ -23065,11 +23209,11 @@
23209 # else
23210 # define SQLITE_SHELL_IS_UTF8 (1)
23211 # endif
23212 #endif
23213
23214 #ifdef SQLITE_SHELL_FIDDLE
23215 # define main fiddle_main
23216 #endif
23217
23218 #if SQLITE_SHELL_IS_UTF8
23219 int SQLITE_CDECL main(int argc, char **argv){
@@ -23076,14 +23220,14 @@
23220 #else
23221 int SQLITE_CDECL wmain(int argc, wchar_t **wargv){
23222 char **argv;
23223 #endif
23224 #ifdef SQLITE_DEBUG
23225 sqlite3_int64 mem_main_enter = sqlite3_memory_used();
23226 #endif
23227 char *zErrMsg = 0;
23228 #ifdef SQLITE_SHELL_FIDDLE
23229 # define data shellState
23230 #else
23231 ShellState data;
23232 #endif
23233 const char *zInitFile = 0;
@@ -23099,11 +23243,11 @@
23243 int argcToFree = 0;
23244 #endif
23245
23246 setBinaryMode(stdin, 0);
23247 setvbuf(stderr, 0, _IONBF, 0); /* Make sure stderr is unbuffered */
23248 #ifdef SQLITE_SHELL_FIDDLE
23249 stdin_is_interactive = 0;
23250 stdout_is_console = 1;
23251 #else
23252 stdin_is_interactive = isatty(0);
23253 stdout_is_console = isatty(1);
@@ -23361,11 +23505,11 @@
23505 utf8_printf(stderr,"%s: Error: no database filename specified\n", Argv0);
23506 return 1;
23507 #endif
23508 }
23509 data.out = stdout;
23510 #ifndef SQLITE_SHELL_FIDDLE
23511 sqlite3_appendvfs_init(0,0,0);
23512 #endif
23513
23514 /* Go ahead and open the database file if it already exists. If the
23515 ** file does not exist, delay opening it. This prevents empty database
@@ -23629,11 +23773,11 @@
23773 }else{
23774 data.in = stdin;
23775 rc = process_input(&data);
23776 }
23777 }
23778 #ifndef SQLITE_SHELL_FIDDLE
23779 /* In WASM mode we have to leave the db state in place so that
23780 ** client code can "push" SQL into it after this call returns. */
23781 free(azCmd);
23782 set_table_name(&data, 0);
23783 if( data.db ){
@@ -23664,16 +23808,16 @@
23808 if( sqlite3_memory_used()>mem_main_enter ){
23809 utf8_printf(stderr, "Memory leaked: %u bytes\n",
23810 (unsigned int)(sqlite3_memory_used()-mem_main_enter));
23811 }
23812 #endif
23813 #endif /* !SQLITE_SHELL_FIDDLE */
23814 return rc;
23815 }
23816
23817
23818 #ifdef SQLITE_SHELL_FIDDLE
23819 /* Only for emcc experimentation purposes. */
23820 int fiddle_experiment(int a,int b){
23821 return a + b;
23822 }
23823
@@ -23790,6 +23934,6 @@
23934 shellState.wasm.zPos = zSql;
23935 process_input(&shellState);
23936 memset(&shellState.wasm, 0, sizeof(shellState.wasm));
23937 }
23938 }
23939 #endif /* SQLITE_SHELL_FIDDLE */
23940
+1218 -754
--- extsrc/sqlite3.c
+++ extsrc/sqlite3.c
@@ -1,8 +1,8 @@
11
/******************************************************************************
22
** This file is an amalgamation of many separate C source files from SQLite
3
-** version 3.39.0. By combining all the individual C code files into this
3
+** version 3.40.0. By combining all the individual C code files into this
44
** single large file, the entire code can be compiled as a single translation
55
** unit. This allows many compilers to do optimizations that would not be
66
** possible if the files were compiled separately. Performance improvements
77
** of 5% or more are commonly seen when SQLite is compiled as a single
88
** translation unit.
@@ -450,13 +450,13 @@
450450
**
451451
** See also: [sqlite3_libversion()],
452452
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
453453
** [sqlite_version()] and [sqlite_source_id()].
454454
*/
455
-#define SQLITE_VERSION "3.39.0"
456
-#define SQLITE_VERSION_NUMBER 3039000
457
-#define SQLITE_SOURCE_ID "2022-06-15 16:26:37 56c60a35ea457f06db58ec3f694a1ae16fd03e6625da1d7879d63d72bbcb1c62"
455
+#define SQLITE_VERSION "3.40.0"
456
+#define SQLITE_VERSION_NUMBER 3040000
457
+#define SQLITE_SOURCE_ID "2022-09-02 21:19:24 da7af290960ab8a04a1f55cdc5eeac36b47fa194edf67f0a05daa4b7f2a4071c"
458458
459459
/*
460460
** CAPI3REF: Run-Time Library Version Numbers
461461
** KEYWORDS: sqlite3_version sqlite3_sourceid
462462
**
@@ -3728,10 +3728,13 @@
37283728
**
37293729
** ^(<dt>[SQLITE_OPEN_SHAREDCACHE]</dt>
37303730
** <dd>The database is opened [shared cache] enabled, overriding
37313731
** the default shared cache setting provided by
37323732
** [sqlite3_enable_shared_cache()].)^
3733
+** The [use of shared cache mode is discouraged] and hence shared cache
3734
+** capabilities may be omitted from many builds of SQLite. In such cases,
3735
+** this option is a no-op.
37333736
**
37343737
** ^(<dt>[SQLITE_OPEN_PRIVATECACHE]</dt>
37353738
** <dd>The database is opened [shared cache] disabled, overriding
37363739
** the default shared cache setting provided by
37373740
** [sqlite3_enable_shared_cache()].)^
@@ -3743,11 +3746,11 @@
37433746
** connection as soon as the connection is created. In addition to setting
37443747
** the extended result code mode, this flag also causes [sqlite3_open_v2()]
37453748
** to return an extended result code.</dd>
37463749
**
37473750
** [[OPEN_NOFOLLOW]] ^(<dt>[SQLITE_OPEN_NOFOLLOW]</dt>
3748
-** <dd>The database filename is not allowed to be a symbolic link</dd>
3751
+** <dd>The database filename is not allowed to contain a symbolic link</dd>
37493752
** </dl>)^
37503753
**
37513754
** If the 3rd parameter to sqlite3_open_v2() is not one of the
37523755
** required combinations shown above optionally combined with other
37533756
** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits]
@@ -6586,11 +6589,11 @@
65866589
** CAPI3REF: Return The Schema Name For A Database Connection
65876590
** METHOD: sqlite3
65886591
**
65896592
** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name
65906593
** for the N-th database on database connection D, or a NULL pointer of N is
6591
-** out of range. An N alue of 0 means the main database file. An N of 1 is
6594
+** out of range. An N value of 0 means the main database file. An N of 1 is
65926595
** the "temp" schema. Larger values of N correspond to various ATTACH-ed
65936596
** databases.
65946597
**
65956598
** Space to hold the string that is returned by sqlite3_db_name() is managed
65966599
** by SQLite itself. The string might be deallocated by any operation that
@@ -6769,11 +6772,11 @@
67696772
**
67706773
** ^The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback
67716774
** function C that is invoked prior to each autovacuum of the database
67726775
** file. ^The callback is passed a copy of the generic data pointer (P),
67736776
** the schema-name of the attached database that is being autovacuumed,
6774
-** the the size of the database file in pages, the number of free pages,
6777
+** the size of the database file in pages, the number of free pages,
67756778
** and the number of bytes per page, respectively. The callback should
67766779
** return the number of free pages that should be removed by the
67776780
** autovacuum. ^If the callback returns zero, then no autovacuum happens.
67786781
** ^If the value returned is greater than or equal to the number of
67796782
** free pages, then a complete autovacuum happens.
@@ -6889,10 +6892,15 @@
68896892
**
68906893
** ^(This routine enables or disables the sharing of the database cache
68916894
** and schema data structures between [database connection | connections]
68926895
** to the same database. Sharing is enabled if the argument is true
68936896
** and disabled if the argument is false.)^
6897
+**
6898
+** This interface is omitted if SQLite is compiled with
6899
+** [-DSQLITE_OMIT_SHARED_CACHE]. The [-DSQLITE_OMIT_SHARED_CACHE]
6900
+** compile-time option is recommended because the
6901
+** [use of shared cache mode is discouraged].
68946902
**
68956903
** ^Cache sharing is enabled and disabled for an entire process.
68966904
** This is a change as of SQLite [version 3.5.0] ([dateof:3.5.0]).
68976905
** In prior versions of SQLite,
68986906
** sharing was enabled or disabled for each thread separately.
@@ -6988,11 +6996,11 @@
69886996
** ^Setting the heap limits to zero disables the heap limiter mechanism.
69896997
**
69906998
** ^The soft heap limit may not be greater than the hard heap limit.
69916999
** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N)
69927000
** is invoked with a value of N that is greater than the hard heap limit,
6993
-** the the soft heap limit is set to the value of the hard heap limit.
7001
+** the soft heap limit is set to the value of the hard heap limit.
69947002
** ^The soft heap limit is automatically enabled whenever the hard heap
69957003
** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and
69967004
** the soft heap limit is outside the range of 1..N, then the soft heap
69977005
** limit is set to N. ^Invoking sqlite3_soft_heap_limit64(0) when the
69987006
** hard heap limit is enabled makes the soft heap limit equal to the
@@ -9283,11 +9291,11 @@
92839291
** sqlite3_backup_init() is called and before the corresponding call to
92849292
** sqlite3_backup_finish(). SQLite does not currently check to see
92859293
** if the application incorrectly accesses the destination [database connection]
92869294
** and so no error code is reported, but the operations may malfunction
92879295
** nevertheless. Use of the destination database connection while a
9288
-** backup is in progress might also also cause a mutex deadlock.
9296
+** backup is in progress might also cause a mutex deadlock.
92899297
**
92909298
** If running in [shared cache mode], the application must
92919299
** guarantee that the shared cache used by the destination database
92929300
** is not accessed while the backup is running. In practice this means
92939301
** that the application must guarantee that the disk file being
@@ -9711,11 +9719,11 @@
97119719
** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the
97129720
** meaning of each of these checkpoint modes.
97139721
*/
97149722
#define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */
97159723
#define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */
9716
-#define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for for readers */
9724
+#define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for readers */
97179725
#define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */
97189726
97199727
/*
97209728
** CAPI3REF: Virtual Table Interface Configuration
97219729
**
@@ -13142,10 +13150,15 @@
1314213150
/******** End of fts5.h *********/
1314313151
1314413152
/************** End of sqlite3.h *********************************************/
1314513153
/************** Continuing where we left off in sqliteInt.h ******************/
1314613154
13155
+/*
13156
+** Reuse the STATIC_LRU for mutex access to sqlite3_temp_directory.
13157
+*/
13158
+#define SQLITE_MUTEX_STATIC_TEMPDIR SQLITE_MUTEX_STATIC_VFS1
13159
+
1314713160
/*
1314813161
** Include the configuration header output by 'configure' if we're using the
1314913162
** autoconf-based build
1315013163
*/
1315113164
#if defined(_HAVE_SQLITE_CONFIG_H) && !defined(SQLITECONFIG_H)
@@ -15553,67 +15566,67 @@
1555315566
#define OP_Checkpoint 3
1555415567
#define OP_JournalMode 4
1555515568
#define OP_Vacuum 5
1555615569
#define OP_VFilter 6 /* jump, synopsis: iplan=r[P3] zplan='P4' */
1555715570
#define OP_VUpdate 7 /* synopsis: data=r[P3@P2] */
15558
-#define OP_Goto 8 /* jump */
15559
-#define OP_Gosub 9 /* jump */
15560
-#define OP_InitCoroutine 10 /* jump */
15561
-#define OP_Yield 11 /* jump */
15562
-#define OP_MustBeInt 12 /* jump */
15563
-#define OP_Jump 13 /* jump */
15564
-#define OP_Once 14 /* jump */
15565
-#define OP_If 15 /* jump */
15566
-#define OP_IfNot 16 /* jump */
15567
-#define OP_IsNullOrType 17 /* jump, synopsis: if typeof(r[P1]) IN (P3,5) goto P2 */
15568
-#define OP_IfNullRow 18 /* jump, synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */
15571
+#define OP_Init 8 /* jump, synopsis: Start at P2 */
15572
+#define OP_Goto 9 /* jump */
15573
+#define OP_Gosub 10 /* jump */
15574
+#define OP_InitCoroutine 11 /* jump */
15575
+#define OP_Yield 12 /* jump */
15576
+#define OP_MustBeInt 13 /* jump */
15577
+#define OP_Jump 14 /* jump */
15578
+#define OP_Once 15 /* jump */
15579
+#define OP_If 16 /* jump */
15580
+#define OP_IfNot 17 /* jump */
15581
+#define OP_IsNullOrType 18 /* jump, synopsis: if typeof(r[P1]) IN (P3,5) goto P2 */
1556915582
#define OP_Not 19 /* same as TK_NOT, synopsis: r[P2]= !r[P1] */
15570
-#define OP_SeekLT 20 /* jump, synopsis: key=r[P3@P4] */
15571
-#define OP_SeekLE 21 /* jump, synopsis: key=r[P3@P4] */
15572
-#define OP_SeekGE 22 /* jump, synopsis: key=r[P3@P4] */
15573
-#define OP_SeekGT 23 /* jump, synopsis: key=r[P3@P4] */
15574
-#define OP_IfNotOpen 24 /* jump, synopsis: if( !csr[P1] ) goto P2 */
15575
-#define OP_IfNoHope 25 /* jump, synopsis: key=r[P3@P4] */
15576
-#define OP_NoConflict 26 /* jump, synopsis: key=r[P3@P4] */
15577
-#define OP_NotFound 27 /* jump, synopsis: key=r[P3@P4] */
15578
-#define OP_Found 28 /* jump, synopsis: key=r[P3@P4] */
15579
-#define OP_SeekRowid 29 /* jump, synopsis: intkey=r[P3] */
15580
-#define OP_NotExists 30 /* jump, synopsis: intkey=r[P3] */
15581
-#define OP_Last 31 /* jump */
15582
-#define OP_IfSmaller 32 /* jump */
15583
-#define OP_SorterSort 33 /* jump */
15584
-#define OP_Sort 34 /* jump */
15585
-#define OP_Rewind 35 /* jump */
15586
-#define OP_SorterNext 36 /* jump */
15587
-#define OP_Prev 37 /* jump */
15588
-#define OP_Next 38 /* jump */
15589
-#define OP_IdxLE 39 /* jump, synopsis: key=r[P3@P4] */
15590
-#define OP_IdxGT 40 /* jump, synopsis: key=r[P3@P4] */
15591
-#define OP_IdxLT 41 /* jump, synopsis: key=r[P3@P4] */
15592
-#define OP_IdxGE 42 /* jump, synopsis: key=r[P3@P4] */
15583
+#define OP_IfNullRow 20 /* jump, synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */
15584
+#define OP_SeekLT 21 /* jump, synopsis: key=r[P3@P4] */
15585
+#define OP_SeekLE 22 /* jump, synopsis: key=r[P3@P4] */
15586
+#define OP_SeekGE 23 /* jump, synopsis: key=r[P3@P4] */
15587
+#define OP_SeekGT 24 /* jump, synopsis: key=r[P3@P4] */
15588
+#define OP_IfNotOpen 25 /* jump, synopsis: if( !csr[P1] ) goto P2 */
15589
+#define OP_IfNoHope 26 /* jump, synopsis: key=r[P3@P4] */
15590
+#define OP_NoConflict 27 /* jump, synopsis: key=r[P3@P4] */
15591
+#define OP_NotFound 28 /* jump, synopsis: key=r[P3@P4] */
15592
+#define OP_Found 29 /* jump, synopsis: key=r[P3@P4] */
15593
+#define OP_SeekRowid 30 /* jump, synopsis: intkey=r[P3] */
15594
+#define OP_NotExists 31 /* jump, synopsis: intkey=r[P3] */
15595
+#define OP_Last 32 /* jump */
15596
+#define OP_IfSmaller 33 /* jump */
15597
+#define OP_SorterSort 34 /* jump */
15598
+#define OP_Sort 35 /* jump */
15599
+#define OP_Rewind 36 /* jump */
15600
+#define OP_SorterNext 37 /* jump */
15601
+#define OP_Prev 38 /* jump */
15602
+#define OP_Next 39 /* jump */
15603
+#define OP_IdxLE 40 /* jump, synopsis: key=r[P3@P4] */
15604
+#define OP_IdxGT 41 /* jump, synopsis: key=r[P3@P4] */
15605
+#define OP_IdxLT 42 /* jump, synopsis: key=r[P3@P4] */
1559315606
#define OP_Or 43 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */
1559415607
#define OP_And 44 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */
15595
-#define OP_RowSetRead 45 /* jump, synopsis: r[P3]=rowset(P1) */
15596
-#define OP_RowSetTest 46 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */
15597
-#define OP_Program 47 /* jump */
15598
-#define OP_FkIfZero 48 /* jump, synopsis: if fkctr[P1]==0 goto P2 */
15599
-#define OP_IfPos 49 /* jump, synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */
15608
+#define OP_IdxGE 45 /* jump, synopsis: key=r[P3@P4] */
15609
+#define OP_RowSetRead 46 /* jump, synopsis: r[P3]=rowset(P1) */
15610
+#define OP_RowSetTest 47 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */
15611
+#define OP_Program 48 /* jump */
15612
+#define OP_FkIfZero 49 /* jump, synopsis: if fkctr[P1]==0 goto P2 */
1560015613
#define OP_IsNull 50 /* jump, same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */
1560115614
#define OP_NotNull 51 /* jump, same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */
1560215615
#define OP_Ne 52 /* jump, same as TK_NE, synopsis: IF r[P3]!=r[P1] */
1560315616
#define OP_Eq 53 /* jump, same as TK_EQ, synopsis: IF r[P3]==r[P1] */
1560415617
#define OP_Gt 54 /* jump, same as TK_GT, synopsis: IF r[P3]>r[P1] */
1560515618
#define OP_Le 55 /* jump, same as TK_LE, synopsis: IF r[P3]<=r[P1] */
1560615619
#define OP_Lt 56 /* jump, same as TK_LT, synopsis: IF r[P3]<r[P1] */
1560715620
#define OP_Ge 57 /* jump, same as TK_GE, synopsis: IF r[P3]>=r[P1] */
1560815621
#define OP_ElseEq 58 /* jump, same as TK_ESCAPE */
15609
-#define OP_IfNotZero 59 /* jump, synopsis: if r[P1]!=0 then r[P1]--, goto P2 */
15610
-#define OP_DecrJumpZero 60 /* jump, synopsis: if (--r[P1])==0 goto P2 */
15611
-#define OP_IncrVacuum 61 /* jump */
15612
-#define OP_VNext 62 /* jump */
15613
-#define OP_Filter 63 /* jump, synopsis: if key(P3@P4) not in filter(P1) goto P2 */
15614
-#define OP_Init 64 /* jump, synopsis: Start at P2 */
15622
+#define OP_IfPos 59 /* jump, synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */
15623
+#define OP_IfNotZero 60 /* jump, synopsis: if r[P1]!=0 then r[P1]--, goto P2 */
15624
+#define OP_DecrJumpZero 61 /* jump, synopsis: if (--r[P1])==0 goto P2 */
15625
+#define OP_IncrVacuum 62 /* jump */
15626
+#define OP_VNext 63 /* jump */
15627
+#define OP_Filter 64 /* jump, synopsis: if key(P3@P4) not in filter(P1) goto P2 */
1561515628
#define OP_PureFunc 65 /* synopsis: r[P3]=func(r[P2@NP]) */
1561615629
#define OP_Function 66 /* synopsis: r[P3]=func(r[P2@NP]) */
1561715630
#define OP_Return 67
1561815631
#define OP_EndCoroutine 68
1561915632
#define OP_HaltIfNull 69 /* synopsis: if r[P3]=null halt */
@@ -15745,17 +15758,17 @@
1574515758
#define OPFLG_IN3 0x08 /* in3: P3 is an input */
1574615759
#define OPFLG_OUT2 0x10 /* out2: P2 is an output */
1574715760
#define OPFLG_OUT3 0x20 /* out3: P3 is an output */
1574815761
#define OPFLG_INITIALIZER {\
1574915762
/* 0 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,\
15750
-/* 8 */ 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x03,\
15751
-/* 16 */ 0x03, 0x03, 0x01, 0x12, 0x09, 0x09, 0x09, 0x09,\
15752
-/* 24 */ 0x01, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x01,\
15763
+/* 8 */ 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,\
15764
+/* 16 */ 0x03, 0x03, 0x03, 0x12, 0x01, 0x09, 0x09, 0x09,\
15765
+/* 24 */ 0x09, 0x01, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,\
1575315766
/* 32 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\
15754
-/* 40 */ 0x01, 0x01, 0x01, 0x26, 0x26, 0x23, 0x0b, 0x01,\
15755
-/* 48 */ 0x01, 0x03, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\
15756
-/* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x01, 0x01, 0x01,\
15767
+/* 40 */ 0x01, 0x01, 0x01, 0x26, 0x26, 0x01, 0x23, 0x0b,\
15768
+/* 48 */ 0x01, 0x01, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\
15769
+/* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01,\
1575715770
/* 64 */ 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x00, 0x10,\
1575815771
/* 72 */ 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x00,\
1575915772
/* 80 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x02, 0x02,\
1576015773
/* 88 */ 0x02, 0x00, 0x00, 0x12, 0x1e, 0x20, 0x00, 0x00,\
1576115774
/* 96 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x26, 0x26,\
@@ -15857,10 +15870,11 @@
1585715870
SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe*, int addr, const char *zP4, int N);
1585815871
SQLITE_PRIVATE void sqlite3VdbeAppendP4(Vdbe*, void *pP4, int p4type);
1585915872
SQLITE_PRIVATE void sqlite3VdbeSetP4KeyInfo(Parse*, Index*);
1586015873
SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe*, int);
1586115874
SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe*, int);
15875
+SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetLastOp(Vdbe*);
1586215876
SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Parse*);
1586315877
SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe*);
1586415878
SQLITE_PRIVATE void sqlite3VdbeReusable(Vdbe*);
1586515879
SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe*);
1586615880
SQLITE_PRIVATE void sqlite3VdbeMakeReady(Vdbe*,Parse*);
@@ -16741,10 +16755,11 @@
1674116755
void *pMiddle; /* First byte past end of full-size buffers and
1674216756
** the first byte of LOOKASIDE_SMALL buffers */
1674316757
#endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */
1674416758
void *pStart; /* First byte of available memory space */
1674516759
void *pEnd; /* First byte past end of available space */
16760
+ void *pTrueEnd; /* True value of pEnd, when db->pnBytesFreed!=0 */
1674616761
};
1674716762
struct LookasideSlot {
1674816763
LookasideSlot *pNext; /* Next buffer in the list of free buffers */
1674916764
};
1675016765
@@ -18189,11 +18204,11 @@
1818918204
#define EP_xIsSelect 0x001000 /* x.pSelect is valid (otherwise x.pList is) */
1819018205
#define EP_Skip 0x002000 /* Operator does not contribute to affinity */
1819118206
#define EP_Reduced 0x004000 /* Expr struct EXPR_REDUCEDSIZE bytes only */
1819218207
#define EP_Win 0x008000 /* Contains window functions */
1819318208
#define EP_TokenOnly 0x010000 /* Expr struct EXPR_TOKENONLYSIZE bytes only */
18194
-#define EP_MemToken 0x020000 /* Need to sqlite3DbFree() Expr.zToken */
18209
+ /* 0x020000 // Available for reuse */
1819518210
#define EP_IfNullRow 0x040000 /* The TK_IF_NULL_ROW opcode */
1819618211
#define EP_Unlikely 0x080000 /* unlikely() or likelihood() function */
1819718212
#define EP_ConstFunc 0x100000 /* A SQLITE_FUNC_CONSTANT or _SLOCHNG function */
1819818213
#define EP_CanBeNull 0x200000 /* Can be null despite NOT NULL constraint */
1819918214
#define EP_Subquery 0x400000 /* Tree contains a TK_SELECT operator */
@@ -19667,10 +19682,11 @@
1966719682
SQLITE_PRIVATE void *sqlite3Realloc(void*, u64);
1966819683
SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *, void *, u64);
1966919684
SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *, void *, u64);
1967019685
SQLITE_PRIVATE void sqlite3DbFree(sqlite3*, void*);
1967119686
SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3*, void*);
19687
+SQLITE_PRIVATE void sqlite3DbNNFreeNN(sqlite3*, void*);
1967219688
SQLITE_PRIVATE int sqlite3MallocSize(const void*);
1967319689
SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3*, const void*);
1967419690
SQLITE_PRIVATE void *sqlite3PageMalloc(int);
1967519691
SQLITE_PRIVATE void sqlite3PageFree(void*);
1967619692
SQLITE_PRIVATE void sqlite3MemSetDefault(void);
@@ -19777,18 +19793,20 @@
1977719793
SQLITE_PRIVATE void sqlite3TreeViewColumnList(TreeView*, const Column*, int, u8);
1977819794
SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView*, const SrcList*);
1977919795
SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView*, const Select*, u8);
1978019796
SQLITE_PRIVATE void sqlite3TreeViewWith(TreeView*, const With*, u8);
1978119797
SQLITE_PRIVATE void sqlite3TreeViewUpsert(TreeView*, const Upsert*, u8);
19798
+#if TREETRACE_ENABLED
1978219799
SQLITE_PRIVATE void sqlite3TreeViewDelete(const With*, const SrcList*, const Expr*,
1978319800
const ExprList*,const Expr*, const Trigger*);
1978419801
SQLITE_PRIVATE void sqlite3TreeViewInsert(const With*, const SrcList*,
1978519802
const IdList*, const Select*, const ExprList*,
1978619803
int, const Upsert*, const Trigger*);
1978719804
SQLITE_PRIVATE void sqlite3TreeViewUpdate(const With*, const SrcList*, const ExprList*,
1978819805
const Expr*, int, const ExprList*, const Expr*,
1978919806
const Upsert*, const Trigger*);
19807
+#endif
1979019808
#ifndef SQLITE_OMIT_TRIGGER
1979119809
SQLITE_PRIVATE void sqlite3TreeViewTriggerStep(TreeView*, const TriggerStep*, u8, u8);
1979219810
SQLITE_PRIVATE void sqlite3TreeViewTrigger(TreeView*, const Trigger*, u8, u8);
1979319811
#endif
1979419812
#ifndef SQLITE_OMIT_WINDOWFUNC
@@ -20189,10 +20207,11 @@
2018920207
SQLITE_PRIVATE int sqlite3FixSrcList(DbFixer*, SrcList*);
2019020208
SQLITE_PRIVATE int sqlite3FixSelect(DbFixer*, Select*);
2019120209
SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*);
2019220210
SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*);
2019320211
SQLITE_PRIVATE int sqlite3RealSameAsInt(double,sqlite3_int64);
20212
+SQLITE_PRIVATE i64 sqlite3RealToI64(double);
2019420213
SQLITE_PRIVATE void sqlite3Int64ToText(i64,char*);
2019520214
SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8);
2019620215
SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*);
2019720216
SQLITE_PRIVATE int sqlite3GetUInt32(const char*, u32*);
2019820217
SQLITE_PRIVATE int sqlite3Atoi(const char*);
@@ -21635,13 +21654,10 @@
2163521654
"OMIT_WSD",
2163621655
#endif
2163721656
#ifdef SQLITE_OMIT_XFER_OPT
2163821657
"OMIT_XFER_OPT",
2163921658
#endif
21640
-#ifdef SQLITE_PCACHE_SEPARATE_HEADER
21641
- "PCACHE_SEPARATE_HEADER",
21642
-#endif
2164321659
#ifdef SQLITE_PERFORMANCE_TRACE
2164421660
"PERFORMANCE_TRACE",
2164521661
#endif
2164621662
#ifdef SQLITE_POWERSAFE_OVERWRITE
2164721663
# if SQLITE_POWERSAFE_OVERWRITE != 1
@@ -22590,11 +22606,11 @@
2259022606
** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare()
2259122607
** is really a pointer to an instance of this structure.
2259222608
*/
2259322609
struct Vdbe {
2259422610
sqlite3 *db; /* The database connection that owns this statement */
22595
- Vdbe *pPrev,*pNext; /* Linked list of VDBEs with the same Vdbe.db */
22611
+ Vdbe **ppVPrev,*pVNext; /* Linked list of VDBEs with the same Vdbe.db */
2259622612
Parse *pParse; /* Parsing context used to create this Vdbe */
2259722613
ynVar nVar; /* Number of entries in aVar[] */
2259822614
int nMem; /* Number of memory locations currently allocated */
2259922615
int nCursor; /* Number of slots in apCsr[] */
2260022616
u32 cacheCtr; /* VdbeCursor row cache generation counter */
@@ -23148,10 +23164,12 @@
2314823164
int i; /* Used to iterate through schemas */
2314923165
int nByte = 0; /* Used to accumulate return value */
2315023166
2315123167
sqlite3BtreeEnterAll(db);
2315223168
db->pnBytesFreed = &nByte;
23169
+ assert( db->lookaside.pEnd==db->lookaside.pTrueEnd );
23170
+ db->lookaside.pEnd = db->lookaside.pStart;
2315323171
for(i=0; i<db->nDb; i++){
2315423172
Schema *pSchema = db->aDb[i].pSchema;
2315523173
if( ALWAYS(pSchema!=0) ){
2315623174
HashElem *p;
2315723175
@@ -23173,10 +23191,11 @@
2317323191
sqlite3DeleteTable(db, (Table *)sqliteHashData(p));
2317423192
}
2317523193
}
2317623194
}
2317723195
db->pnBytesFreed = 0;
23196
+ db->lookaside.pEnd = db->lookaside.pTrueEnd;
2317823197
sqlite3BtreeLeaveAll(db);
2317923198
2318023199
*pHighwater = 0;
2318123200
*pCurrent = nByte;
2318223201
break;
@@ -23190,13 +23209,16 @@
2319023209
case SQLITE_DBSTATUS_STMT_USED: {
2319123210
struct Vdbe *pVdbe; /* Used to iterate through VMs */
2319223211
int nByte = 0; /* Used to accumulate return value */
2319323212
2319423213
db->pnBytesFreed = &nByte;
23195
- for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){
23214
+ assert( db->lookaside.pEnd==db->lookaside.pTrueEnd );
23215
+ db->lookaside.pEnd = db->lookaside.pStart;
23216
+ for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pVNext){
2319623217
sqlite3VdbeDelete(pVdbe);
2319723218
}
23219
+ db->lookaside.pEnd = db->lookaside.pTrueEnd;
2319823220
db->pnBytesFreed = 0;
2319923221
2320023222
*pHighwater = 0; /* IMP: R-64479-57858 */
2320123223
*pCurrent = nByte;
2320223224
@@ -23528,11 +23550,11 @@
2352823550
X1 = 36525*(Y+4716)/100;
2352923551
X2 = 306001*(M+1)/10000;
2353023552
p->iJD = (sqlite3_int64)((X1 + X2 + D + B - 1524.5 ) * 86400000);
2353123553
p->validJD = 1;
2353223554
if( p->validHMS ){
23533
- p->iJD += p->h*3600000 + p->m*60000 + (sqlite3_int64)(p->s*1000);
23555
+ p->iJD += p->h*3600000 + p->m*60000 + (sqlite3_int64)(p->s*1000 + 0.5);
2353423556
if( p->validTZ ){
2353523557
p->iJD -= p->tz*60000;
2353623558
p->validYMD = 0;
2353723559
p->validHMS = 0;
2353823560
p->validTZ = 0;
@@ -24037,11 +24059,11 @@
2403724059
** weekday N where 0==Sunday, 1==Monday, and so forth. If the
2403824060
** date is already on the appropriate weekday, this is a no-op.
2403924061
*/
2404024062
if( sqlite3_strnicmp(z, "weekday ", 8)==0
2404124063
&& sqlite3AtoF(&z[8], &r, sqlite3Strlen30(&z[8]), SQLITE_UTF8)>0
24042
- && (n=(int)r)==r && n>=0 && r<7 ){
24064
+ && r>=0.0 && r<7.0 && (n=(int)r)==r ){
2404324065
sqlite3_int64 Z;
2404424066
computeYMD_HMS(p);
2404524067
p->validTZ = 0;
2404624068
p->validJD = 0;
2404724069
computeJD(p);
@@ -24835,10 +24857,11 @@
2483524857
DO_OS_MALLOC_TEST(0);
2483624858
/* 0x87f7f is a mask of SQLITE_OPEN_ flags that are valid to be passed
2483724859
** down into the VFS layer. Some SQLITE_OPEN_ flags (for example,
2483824860
** SQLITE_OPEN_FULLMUTEX or SQLITE_OPEN_SHAREDCACHE) are blocked before
2483924861
** reaching the VFS. */
24862
+ assert( zPath || (flags & SQLITE_OPEN_EXCLUSIVE) );
2484024863
rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x1087f7f, pFlagsOut);
2484124864
assert( rc==SQLITE_OK || pFile->pMethods==0 );
2484224865
return rc;
2484324866
}
2484424867
SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){
@@ -29100,11 +29123,11 @@
2910029123
/*
2910129124
** TRUE if p is a lookaside memory allocation from db
2910229125
*/
2910329126
#ifndef SQLITE_OMIT_LOOKASIDE
2910429127
static int isLookaside(sqlite3 *db, const void *p){
29105
- return SQLITE_WITHIN(p, db->lookaside.pStart, db->lookaside.pEnd);
29128
+ return SQLITE_WITHIN(p, db->lookaside.pStart, db->lookaside.pTrueEnd);
2910629129
}
2910729130
#else
2910829131
#define isLookaside(A,B) 0
2910929132
#endif
2911029133
@@ -29124,22 +29147,20 @@
2912429147
#endif
2912529148
}
2912629149
SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, const void *p){
2912729150
assert( p!=0 );
2912829151
#ifdef SQLITE_DEBUG
29129
- if( db==0 || !isLookaside(db,p) ){
29130
- if( db==0 ){
29131
- assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_HEAP) );
29132
- assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
29133
- }else{
29134
- assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
29135
- assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
29136
- }
29152
+ if( db==0 ){
29153
+ assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_HEAP) );
29154
+ assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
29155
+ }else if( !isLookaside(db,p) ){
29156
+ assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
29157
+ assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
2913729158
}
2913829159
#endif
2913929160
if( db ){
29140
- if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){
29161
+ if( ((uptr)p)<(uptr)(db->lookaside.pTrueEnd) ){
2914129162
#ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE
2914229163
if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){
2914329164
assert( sqlite3_mutex_held(db->mutex) );
2914429165
return LOOKASIDE_SMALL;
2914529166
}
@@ -29191,18 +29212,15 @@
2919129212
*/
2919229213
SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3 *db, void *p){
2919329214
assert( db==0 || sqlite3_mutex_held(db->mutex) );
2919429215
assert( p!=0 );
2919529216
if( db ){
29196
- if( db->pnBytesFreed ){
29197
- measureAllocationSize(db, p);
29198
- return;
29199
- }
2920029217
if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){
2920129218
#ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE
2920229219
if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){
2920329220
LookasideSlot *pBuf = (LookasideSlot*)p;
29221
+ assert( db->pnBytesFreed==0 );
2920429222
#ifdef SQLITE_DEBUG
2920529223
memset(p, 0xaa, LOOKASIDE_SMALL); /* Trash freed content */
2920629224
#endif
2920729225
pBuf->pNext = db->lookaside.pSmallFree;
2920829226
db->lookaside.pSmallFree = pBuf;
@@ -29209,24 +29227,66 @@
2920929227
return;
2921029228
}
2921129229
#endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */
2921229230
if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){
2921329231
LookasideSlot *pBuf = (LookasideSlot*)p;
29232
+ assert( db->pnBytesFreed==0 );
2921429233
#ifdef SQLITE_DEBUG
2921529234
memset(p, 0xaa, db->lookaside.szTrue); /* Trash freed content */
2921629235
#endif
2921729236
pBuf->pNext = db->lookaside.pFree;
2921829237
db->lookaside.pFree = pBuf;
2921929238
return;
2922029239
}
2922129240
}
29241
+ if( db->pnBytesFreed ){
29242
+ measureAllocationSize(db, p);
29243
+ return;
29244
+ }
2922229245
}
2922329246
assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
2922429247
assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
2922529248
assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) );
2922629249
sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
2922729250
sqlite3_free(p);
29251
+}
29252
+SQLITE_PRIVATE void sqlite3DbNNFreeNN(sqlite3 *db, void *p){
29253
+ assert( db!=0 );
29254
+ assert( sqlite3_mutex_held(db->mutex) );
29255
+ assert( p!=0 );
29256
+ if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){
29257
+#ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE
29258
+ if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){
29259
+ LookasideSlot *pBuf = (LookasideSlot*)p;
29260
+ assert( db->pnBytesFreed==0 );
29261
+#ifdef SQLITE_DEBUG
29262
+ memset(p, 0xaa, LOOKASIDE_SMALL); /* Trash freed content */
29263
+#endif
29264
+ pBuf->pNext = db->lookaside.pSmallFree;
29265
+ db->lookaside.pSmallFree = pBuf;
29266
+ return;
29267
+ }
29268
+#endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */
29269
+ if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){
29270
+ LookasideSlot *pBuf = (LookasideSlot*)p;
29271
+ assert( db->pnBytesFreed==0 );
29272
+#ifdef SQLITE_DEBUG
29273
+ memset(p, 0xaa, db->lookaside.szTrue); /* Trash freed content */
29274
+#endif
29275
+ pBuf->pNext = db->lookaside.pFree;
29276
+ db->lookaside.pFree = pBuf;
29277
+ return;
29278
+ }
29279
+ }
29280
+ if( db->pnBytesFreed ){
29281
+ measureAllocationSize(db, p);
29282
+ return;
29283
+ }
29284
+ assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
29285
+ assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
29286
+ sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
29287
+ sqlite3_free(p);
2922829288
}
2922929289
SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){
2923029290
assert( db==0 || sqlite3_mutex_held(db->mutex) );
2923129291
if( p ) sqlite3DbFreeNN(db, p);
2923229292
}
@@ -29559,12 +29619,17 @@
2955929619
if( db->nVdbeExec>0 ){
2956029620
AtomicStore(&db->u1.isInterrupted, 1);
2956129621
}
2956229622
DisableLookaside;
2956329623
if( db->pParse ){
29624
+ Parse *pParse;
2956429625
sqlite3ErrorMsg(db->pParse, "out of memory");
2956529626
db->pParse->rc = SQLITE_NOMEM_BKPT;
29627
+ for(pParse=db->pParse->pOuterParse; pParse; pParse = pParse->pOuterParse){
29628
+ pParse->nErr++;
29629
+ pParse->rc = SQLITE_NOMEM;
29630
+ }
2956629631
}
2956729632
}
2956829633
return 0;
2956929634
}
2957029635
@@ -30426,12 +30491,12 @@
3042630491
}
3042730492
break;
3042830493
case etSQLESCAPE: /* %q: Escape ' characters */
3042930494
case etSQLESCAPE2: /* %Q: Escape ' and enclose in '...' */
3043030495
case etSQLESCAPE3: { /* %w: Escape " characters */
30431
- int i, j, k, n, isnull;
30432
- int needQuote;
30496
+ i64 i, j, k, n;
30497
+ int needQuote, isnull;
3043330498
char ch;
3043430499
char q = ((xtype==etSQLESCAPE3)?'"':'\''); /* Quote character */
3043530500
char *escarg;
3043630501
3043730502
if( bArgList ){
@@ -31073,11 +31138,11 @@
3107331138
*/
3107431139
SQLITE_PRIVATE void sqlite3TreeViewLine(TreeView *p, const char *zFormat, ...){
3107531140
va_list ap;
3107631141
int i;
3107731142
StrAccum acc;
31078
- char zBuf[500];
31143
+ char zBuf[1000];
3107931144
sqlite3StrAccumInit(&acc, 0, zBuf, sizeof(zBuf), 0);
3108031145
if( p ){
3108131146
for(i=0; i<p->iLevel && i<(int)sizeof(p->bLine)-1; i++){
3108231147
sqlite3_str_append(&acc, p->bLine[i] ? "| " : " ", 4);
3108331148
}
@@ -31115,12 +31180,12 @@
3111531180
int i;
3111631181
sqlite3TreeViewPush(&pView, moreToFollow);
3111731182
sqlite3TreeViewLine(pView, "COLUMNS");
3111831183
for(i=0; i<nCol; i++){
3111931184
u16 flg = aCol[i].colFlags;
31120
- int moreToFollow = i<(nCol - 1);
31121
- sqlite3TreeViewPush(&pView, moreToFollow);
31185
+ int colMoreToFollow = i<(nCol - 1);
31186
+ sqlite3TreeViewPush(&pView, colMoreToFollow);
3112231187
sqlite3TreeViewLine(pView, 0);
3112331188
printf(" %s", aCol[i].zCnName);
3112431189
switch( aCol[i].eCType ){
3112531190
case COLTYPE_ANY: printf(" ANY"); break;
3112631191
case COLTYPE_BLOB: printf(" BLOB"); break;
@@ -31204,11 +31269,11 @@
3120431269
if( pSrc==0 ) return;
3120531270
for(i=0; i<pSrc->nSrc; i++){
3120631271
const SrcItem *pItem = &pSrc->a[i];
3120731272
StrAccum x;
3120831273
int n = 0;
31209
- char zLine[100];
31274
+ char zLine[1000];
3121031275
sqlite3StrAccumInit(&x, 0, zLine, sizeof(zLine), 0);
3121131276
x.printfFlags |= SQLITE_PRINTF_INTERNAL;
3121231277
sqlite3_str_appendf(&x, "{%d:*} %!S", pItem->iCursor, pItem);
3121331278
if( pItem->pTab ){
3121431279
sqlite3_str_appendf(&x, " tab=%Q nCol=%d ptr=%p used=%llx",
@@ -31247,11 +31312,11 @@
3124731312
if( pItem->pSelect ){
3124831313
if( pItem->pTab ){
3124931314
Table *pTab = pItem->pTab;
3125031315
sqlite3TreeViewColumnList(pView, pTab->aCol, pTab->nCol, 1);
3125131316
}
31252
- assert( pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
31317
+ assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
3125331318
sqlite3TreeViewSelect(pView, pItem->pSelect, (--n)>0);
3125431319
}
3125531320
if( pItem->fg.isTabFunc ){
3125631321
sqlite3TreeViewExprList(pView, pItem->u1.pFuncArg, 0, "func-args:");
3125731322
}
@@ -32014,10 +32079,11 @@
3201432079
pUpsert = pUpsert->pNextUpsert;
3201532080
}
3201632081
sqlite3TreeViewPop(&pView);
3201732082
}
3201832083
32084
+#if TREETRACE_ENABLED
3201932085
/*
3202032086
** Generate a human-readable diagram of the data structure that go
3202132087
** into generating an DELETE statement.
3202232088
*/
3202332089
SQLITE_PRIVATE void sqlite3TreeViewDelete(
@@ -32067,11 +32133,13 @@
3206732133
if( pTrigger ){
3206832134
sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1);
3206932135
}
3207032136
sqlite3TreeViewPop(&pView);
3207132137
}
32138
+#endif /* TREETRACE_ENABLED */
3207232139
32140
+#if TREETRACE_ENABLED
3207332141
/*
3207432142
** Generate a human-readable diagram of the data structure that go
3207532143
** into generating an INSERT statement.
3207632144
*/
3207732145
SQLITE_PRIVATE void sqlite3TreeViewInsert(
@@ -32135,11 +32203,13 @@
3213532203
if( pTrigger ){
3213632204
sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1);
3213732205
}
3213832206
sqlite3TreeViewPop(&pView);
3213932207
}
32208
+#endif /* TREETRACE_ENABLED */
3214032209
32210
+#if TREETRACE_ENABLED
3214132211
/*
3214232212
** Generate a human-readable diagram of the data structure that go
3214332213
** into generating an UPDATE statement.
3214432214
*/
3214532215
SQLITE_PRIVATE void sqlite3TreeViewUpdate(
@@ -32211,10 +32281,11 @@
3221132281
if( pTrigger ){
3221232282
sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1);
3221332283
}
3221432284
sqlite3TreeViewPop(&pView);
3221532285
}
32286
+#endif /* TREETRACE_ENABLED */
3221632287
3221732288
#ifndef SQLITE_OMIT_TRIGGER
3221832289
/*
3221932290
** Show a human-readable graph of a TriggerStep
3222032291
*/
@@ -32324,20 +32395,45 @@
3232432395
3232532396
/* All threads share a single random number generator.
3232632397
** This structure is the current state of the generator.
3232732398
*/
3232832399
static SQLITE_WSD struct sqlite3PrngType {
32329
- unsigned char isInit; /* True if initialized */
32330
- unsigned char i, j; /* State variables */
32331
- unsigned char s[256]; /* State variables */
32400
+ u32 s[16]; /* 64 bytes of chacha20 state */
32401
+ u8 out[64]; /* Output bytes */
32402
+ u8 n; /* Output bytes remaining */
3233232403
} sqlite3Prng;
3233332404
32405
+
32406
+/* The RFC-7539 ChaCha20 block function
32407
+*/
32408
+#define ROTL(a,b) (((a) << (b)) | ((a) >> (32 - (b))))
32409
+#define QR(a, b, c, d) ( \
32410
+ a += b, d ^= a, d = ROTL(d,16), \
32411
+ c += d, b ^= c, b = ROTL(b,12), \
32412
+ a += b, d ^= a, d = ROTL(d, 8), \
32413
+ c += d, b ^= c, b = ROTL(b, 7))
32414
+static void chacha_block(u32 *out, const u32 *in){
32415
+ int i;
32416
+ u32 x[16];
32417
+ memcpy(x, in, 64);
32418
+ for(i=0; i<10; i++){
32419
+ QR(x[0], x[4], x[ 8], x[12]);
32420
+ QR(x[1], x[5], x[ 9], x[13]);
32421
+ QR(x[2], x[6], x[10], x[14]);
32422
+ QR(x[3], x[7], x[11], x[15]);
32423
+ QR(x[0], x[5], x[10], x[15]);
32424
+ QR(x[1], x[6], x[11], x[12]);
32425
+ QR(x[2], x[7], x[ 8], x[13]);
32426
+ QR(x[3], x[4], x[ 9], x[14]);
32427
+ }
32428
+ for(i=0; i<16; i++) out[i] = x[i]+in[i];
32429
+}
32430
+
3233432431
/*
3233532432
** Return N random bytes.
3233632433
*/
3233732434
SQLITE_API void sqlite3_randomness(int N, void *pBuf){
32338
- unsigned char t;
3233932435
unsigned char *zBuf = pBuf;
3234032436
3234132437
/* The "wsdPrng" macro will resolve to the pseudo-random number generator
3234232438
** state vector. If writable static data is unsupported on the target,
3234332439
** we have to locate the state vector at run-time. In the more common
@@ -32363,57 +32459,50 @@
3236332459
mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG);
3236432460
#endif
3236532461
3236632462
sqlite3_mutex_enter(mutex);
3236732463
if( N<=0 || pBuf==0 ){
32368
- wsdPrng.isInit = 0;
32464
+ wsdPrng.s[0] = 0;
3236932465
sqlite3_mutex_leave(mutex);
3237032466
return;
3237132467
}
3237232468
3237332469
/* Initialize the state of the random number generator once,
32374
- ** the first time this routine is called. The seed value does
32375
- ** not need to contain a lot of randomness since we are not
32376
- ** trying to do secure encryption or anything like that...
32377
- **
32378
- ** Nothing in this file or anywhere else in SQLite does any kind of
32379
- ** encryption. The RC4 algorithm is being used as a PRNG (pseudo-random
32380
- ** number generator) not as an encryption device.
32470
+ ** the first time this routine is called.
3238132471
*/
32382
- if( !wsdPrng.isInit ){
32472
+ if( wsdPrng.s[0]==0 ){
3238332473
sqlite3_vfs *pVfs = sqlite3_vfs_find(0);
32384
- int i;
32385
- char k[256];
32386
- wsdPrng.j = 0;
32387
- wsdPrng.i = 0;
32474
+ static const u32 chacha20_init[] = {
32475
+ 0x61707865, 0x3320646e, 0x79622d32, 0x6b206574
32476
+ };
32477
+ memcpy(&wsdPrng.s[0], chacha20_init, 16);
3238832478
if( NEVER(pVfs==0) ){
32389
- memset(k, 0, sizeof(k));
32479
+ memset(&wsdPrng.s[4], 0, 44);
3239032480
}else{
32391
- sqlite3OsRandomness(pVfs, 256, k);
32392
- }
32393
- for(i=0; i<256; i++){
32394
- wsdPrng.s[i] = (u8)i;
32395
- }
32396
- for(i=0; i<256; i++){
32397
- wsdPrng.j += wsdPrng.s[i] + k[i];
32398
- t = wsdPrng.s[wsdPrng.j];
32399
- wsdPrng.s[wsdPrng.j] = wsdPrng.s[i];
32400
- wsdPrng.s[i] = t;
32401
- }
32402
- wsdPrng.isInit = 1;
32481
+ sqlite3OsRandomness(pVfs, 44, (char*)&wsdPrng.s[4]);
32482
+ }
32483
+ wsdPrng.s[15] = wsdPrng.s[12];
32484
+ wsdPrng.s[12] = 0;
32485
+ wsdPrng.n = 0;
3240332486
}
3240432487
3240532488
assert( N>0 );
32406
- do{
32407
- wsdPrng.i++;
32408
- t = wsdPrng.s[wsdPrng.i];
32409
- wsdPrng.j += t;
32410
- wsdPrng.s[wsdPrng.i] = wsdPrng.s[wsdPrng.j];
32411
- wsdPrng.s[wsdPrng.j] = t;
32412
- t += wsdPrng.s[wsdPrng.i];
32413
- *(zBuf++) = wsdPrng.s[t];
32414
- }while( --N );
32489
+ while( 1 /* exit by break */ ){
32490
+ if( N<=wsdPrng.n ){
32491
+ memcpy(zBuf, &wsdPrng.out[wsdPrng.n-N], N);
32492
+ wsdPrng.n -= N;
32493
+ break;
32494
+ }
32495
+ if( wsdPrng.n>0 ){
32496
+ memcpy(zBuf, wsdPrng.out, wsdPrng.n);
32497
+ N -= wsdPrng.n;
32498
+ zBuf += wsdPrng.n;
32499
+ }
32500
+ wsdPrng.s[12]++;
32501
+ chacha_block((u32*)wsdPrng.out, wsdPrng.s);
32502
+ wsdPrng.n = 64;
32503
+ }
3241532504
sqlite3_mutex_leave(mutex);
3241632505
}
3241732506
3241832507
#ifndef SQLITE_UNTESTABLE
3241932508
/*
@@ -33449,11 +33538,11 @@
3344933538
SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
3345033539
char *zMsg;
3345133540
va_list ap;
3345233541
sqlite3 *db = pParse->db;
3345333542
assert( db!=0 );
33454
- assert( db->pParse==pParse );
33543
+ assert( db->pParse==pParse || db->pParse->pToplevel==pParse );
3345533544
db->errByteOffset = -2;
3345633545
va_start(ap, zFormat);
3345733546
zMsg = sqlite3VMPrintf(db, zFormat, ap);
3345833547
va_end(ap);
3345933548
if( db->errByteOffset<-1 ) db->errByteOffset = -1;
@@ -35267,67 +35356,67 @@
3526735356
/* 3 */ "Checkpoint" OpHelp(""),
3526835357
/* 4 */ "JournalMode" OpHelp(""),
3526935358
/* 5 */ "Vacuum" OpHelp(""),
3527035359
/* 6 */ "VFilter" OpHelp("iplan=r[P3] zplan='P4'"),
3527135360
/* 7 */ "VUpdate" OpHelp("data=r[P3@P2]"),
35272
- /* 8 */ "Goto" OpHelp(""),
35273
- /* 9 */ "Gosub" OpHelp(""),
35274
- /* 10 */ "InitCoroutine" OpHelp(""),
35275
- /* 11 */ "Yield" OpHelp(""),
35276
- /* 12 */ "MustBeInt" OpHelp(""),
35277
- /* 13 */ "Jump" OpHelp(""),
35278
- /* 14 */ "Once" OpHelp(""),
35279
- /* 15 */ "If" OpHelp(""),
35280
- /* 16 */ "IfNot" OpHelp(""),
35281
- /* 17 */ "IsNullOrType" OpHelp("if typeof(r[P1]) IN (P3,5) goto P2"),
35282
- /* 18 */ "IfNullRow" OpHelp("if P1.nullRow then r[P3]=NULL, goto P2"),
35361
+ /* 8 */ "Init" OpHelp("Start at P2"),
35362
+ /* 9 */ "Goto" OpHelp(""),
35363
+ /* 10 */ "Gosub" OpHelp(""),
35364
+ /* 11 */ "InitCoroutine" OpHelp(""),
35365
+ /* 12 */ "Yield" OpHelp(""),
35366
+ /* 13 */ "MustBeInt" OpHelp(""),
35367
+ /* 14 */ "Jump" OpHelp(""),
35368
+ /* 15 */ "Once" OpHelp(""),
35369
+ /* 16 */ "If" OpHelp(""),
35370
+ /* 17 */ "IfNot" OpHelp(""),
35371
+ /* 18 */ "IsNullOrType" OpHelp("if typeof(r[P1]) IN (P3,5) goto P2"),
3528335372
/* 19 */ "Not" OpHelp("r[P2]= !r[P1]"),
35284
- /* 20 */ "SeekLT" OpHelp("key=r[P3@P4]"),
35285
- /* 21 */ "SeekLE" OpHelp("key=r[P3@P4]"),
35286
- /* 22 */ "SeekGE" OpHelp("key=r[P3@P4]"),
35287
- /* 23 */ "SeekGT" OpHelp("key=r[P3@P4]"),
35288
- /* 24 */ "IfNotOpen" OpHelp("if( !csr[P1] ) goto P2"),
35289
- /* 25 */ "IfNoHope" OpHelp("key=r[P3@P4]"),
35290
- /* 26 */ "NoConflict" OpHelp("key=r[P3@P4]"),
35291
- /* 27 */ "NotFound" OpHelp("key=r[P3@P4]"),
35292
- /* 28 */ "Found" OpHelp("key=r[P3@P4]"),
35293
- /* 29 */ "SeekRowid" OpHelp("intkey=r[P3]"),
35294
- /* 30 */ "NotExists" OpHelp("intkey=r[P3]"),
35295
- /* 31 */ "Last" OpHelp(""),
35296
- /* 32 */ "IfSmaller" OpHelp(""),
35297
- /* 33 */ "SorterSort" OpHelp(""),
35298
- /* 34 */ "Sort" OpHelp(""),
35299
- /* 35 */ "Rewind" OpHelp(""),
35300
- /* 36 */ "SorterNext" OpHelp(""),
35301
- /* 37 */ "Prev" OpHelp(""),
35302
- /* 38 */ "Next" OpHelp(""),
35303
- /* 39 */ "IdxLE" OpHelp("key=r[P3@P4]"),
35304
- /* 40 */ "IdxGT" OpHelp("key=r[P3@P4]"),
35305
- /* 41 */ "IdxLT" OpHelp("key=r[P3@P4]"),
35306
- /* 42 */ "IdxGE" OpHelp("key=r[P3@P4]"),
35373
+ /* 20 */ "IfNullRow" OpHelp("if P1.nullRow then r[P3]=NULL, goto P2"),
35374
+ /* 21 */ "SeekLT" OpHelp("key=r[P3@P4]"),
35375
+ /* 22 */ "SeekLE" OpHelp("key=r[P3@P4]"),
35376
+ /* 23 */ "SeekGE" OpHelp("key=r[P3@P4]"),
35377
+ /* 24 */ "SeekGT" OpHelp("key=r[P3@P4]"),
35378
+ /* 25 */ "IfNotOpen" OpHelp("if( !csr[P1] ) goto P2"),
35379
+ /* 26 */ "IfNoHope" OpHelp("key=r[P3@P4]"),
35380
+ /* 27 */ "NoConflict" OpHelp("key=r[P3@P4]"),
35381
+ /* 28 */ "NotFound" OpHelp("key=r[P3@P4]"),
35382
+ /* 29 */ "Found" OpHelp("key=r[P3@P4]"),
35383
+ /* 30 */ "SeekRowid" OpHelp("intkey=r[P3]"),
35384
+ /* 31 */ "NotExists" OpHelp("intkey=r[P3]"),
35385
+ /* 32 */ "Last" OpHelp(""),
35386
+ /* 33 */ "IfSmaller" OpHelp(""),
35387
+ /* 34 */ "SorterSort" OpHelp(""),
35388
+ /* 35 */ "Sort" OpHelp(""),
35389
+ /* 36 */ "Rewind" OpHelp(""),
35390
+ /* 37 */ "SorterNext" OpHelp(""),
35391
+ /* 38 */ "Prev" OpHelp(""),
35392
+ /* 39 */ "Next" OpHelp(""),
35393
+ /* 40 */ "IdxLE" OpHelp("key=r[P3@P4]"),
35394
+ /* 41 */ "IdxGT" OpHelp("key=r[P3@P4]"),
35395
+ /* 42 */ "IdxLT" OpHelp("key=r[P3@P4]"),
3530735396
/* 43 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"),
3530835397
/* 44 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"),
35309
- /* 45 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"),
35310
- /* 46 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"),
35311
- /* 47 */ "Program" OpHelp(""),
35312
- /* 48 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"),
35313
- /* 49 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"),
35398
+ /* 45 */ "IdxGE" OpHelp("key=r[P3@P4]"),
35399
+ /* 46 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"),
35400
+ /* 47 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"),
35401
+ /* 48 */ "Program" OpHelp(""),
35402
+ /* 49 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"),
3531435403
/* 50 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"),
3531535404
/* 51 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"),
3531635405
/* 52 */ "Ne" OpHelp("IF r[P3]!=r[P1]"),
3531735406
/* 53 */ "Eq" OpHelp("IF r[P3]==r[P1]"),
3531835407
/* 54 */ "Gt" OpHelp("IF r[P3]>r[P1]"),
3531935408
/* 55 */ "Le" OpHelp("IF r[P3]<=r[P1]"),
3532035409
/* 56 */ "Lt" OpHelp("IF r[P3]<r[P1]"),
3532135410
/* 57 */ "Ge" OpHelp("IF r[P3]>=r[P1]"),
3532235411
/* 58 */ "ElseEq" OpHelp(""),
35323
- /* 59 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"),
35324
- /* 60 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"),
35325
- /* 61 */ "IncrVacuum" OpHelp(""),
35326
- /* 62 */ "VNext" OpHelp(""),
35327
- /* 63 */ "Filter" OpHelp("if key(P3@P4) not in filter(P1) goto P2"),
35328
- /* 64 */ "Init" OpHelp("Start at P2"),
35412
+ /* 59 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"),
35413
+ /* 60 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"),
35414
+ /* 61 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"),
35415
+ /* 62 */ "IncrVacuum" OpHelp(""),
35416
+ /* 63 */ "VNext" OpHelp(""),
35417
+ /* 64 */ "Filter" OpHelp("if key(P3@P4) not in filter(P1) goto P2"),
3532935418
/* 65 */ "PureFunc" OpHelp("r[P3]=func(r[P2@NP])"),
3533035419
/* 66 */ "Function" OpHelp("r[P3]=func(r[P2@NP])"),
3533135420
/* 67 */ "Return" OpHelp(""),
3533235421
/* 68 */ "EndCoroutine" OpHelp(""),
3533335422
/* 69 */ "HaltIfNull" OpHelp("if r[P3]=null halt"),
@@ -41310,30 +41399,39 @@
4131041399
** pVfs->mxPathname bytes.
4131141400
*/
4131241401
static int unixGetTempname(int nBuf, char *zBuf){
4131341402
const char *zDir;
4131441403
int iLimit = 0;
41404
+ int rc = SQLITE_OK;
4131541405
4131641406
/* It's odd to simulate an io-error here, but really this is just
4131741407
** using the io-error infrastructure to test that SQLite handles this
4131841408
** function failing.
4131941409
*/
4132041410
zBuf[0] = 0;
4132141411
SimulateIOError( return SQLITE_IOERR );
4132241412
41413
+ sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
4132341414
zDir = unixTempFileDir();
41324
- if( zDir==0 ) return SQLITE_IOERR_GETTEMPPATH;
41325
- do{
41326
- u64 r;
41327
- sqlite3_randomness(sizeof(r), &r);
41328
- assert( nBuf>2 );
41329
- zBuf[nBuf-2] = 0;
41330
- sqlite3_snprintf(nBuf, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX"%llx%c",
41331
- zDir, r, 0);
41332
- if( zBuf[nBuf-2]!=0 || (iLimit++)>10 ) return SQLITE_ERROR;
41333
- }while( osAccess(zBuf,0)==0 );
41334
- return SQLITE_OK;
41415
+ if( zDir==0 ){
41416
+ rc = SQLITE_IOERR_GETTEMPPATH;
41417
+ }else{
41418
+ do{
41419
+ u64 r;
41420
+ sqlite3_randomness(sizeof(r), &r);
41421
+ assert( nBuf>2 );
41422
+ zBuf[nBuf-2] = 0;
41423
+ sqlite3_snprintf(nBuf, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX"%llx%c",
41424
+ zDir, r, 0);
41425
+ if( zBuf[nBuf-2]!=0 || (iLimit++)>10 ){
41426
+ rc = SQLITE_ERROR;
41427
+ break;
41428
+ }
41429
+ }while( osAccess(zBuf,0)==0 );
41430
+ }
41431
+ sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
41432
+ return rc;
4133541433
}
4133641434
4133741435
#if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
4133841436
/*
4133941437
** Routine to transform a unixFile into a proxy-locking unixFile.
@@ -43504,11 +43602,16 @@
4350443602
** correctly. See ticket [bb3a86e890c8e96ab] */
4350543603
assert( ArraySize(aSyscall)==29 );
4350643604
4350743605
/* Register all VFSes defined in the aVfs[] array */
4350843606
for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){
43607
+#ifdef SQLITE_DEFAULT_UNIX_VFS
43608
+ sqlite3_vfs_register(&aVfs[i],
43609
+ 0==strcmp(aVfs[i].zName,SQLITE_DEFAULT_UNIX_VFS));
43610
+#else
4350943611
sqlite3_vfs_register(&aVfs[i], i==0);
43612
+#endif
4351043613
}
4351143614
unixBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1);
4351243615
4351343616
#ifndef SQLITE_OMIT_WAL
4351443617
/* Validate lock assumptions */
@@ -45472,10 +45575,11 @@
4547245575
char **ppDirectory = 0;
4547345576
#ifndef SQLITE_OMIT_AUTOINIT
4547445577
int rc = sqlite3_initialize();
4547545578
if( rc ) return rc;
4547645579
#endif
45580
+ sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
4547745581
if( type==SQLITE_WIN32_DATA_DIRECTORY_TYPE ){
4547845582
ppDirectory = &sqlite3_data_directory;
4547945583
}else if( type==SQLITE_WIN32_TEMP_DIRECTORY_TYPE ){
4548045584
ppDirectory = &sqlite3_temp_directory;
4548145585
}
@@ -45486,18 +45590,23 @@
4548645590
if( ppDirectory ){
4548745591
char *zCopy = 0;
4548845592
if( zValue && zValue[0] ){
4548945593
zCopy = sqlite3_mprintf("%s", zValue);
4549045594
if ( zCopy==0 ){
45491
- return SQLITE_NOMEM_BKPT;
45595
+ rc = SQLITE_NOMEM_BKPT;
45596
+ goto set_directory8_done;
4549245597
}
4549345598
}
4549445599
sqlite3_free(*ppDirectory);
4549545600
*ppDirectory = zCopy;
45496
- return SQLITE_OK;
45601
+ rc = SQLITE_OK;
45602
+ }else{
45603
+ rc = SQLITE_ERROR;
4549745604
}
45498
- return SQLITE_ERROR;
45605
+set_directory8_done:
45606
+ sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
45607
+ return rc;
4549945608
}
4550045609
4550145610
/*
4550245611
** This function is the same as sqlite3_win32_set_directory (below); however,
4550345612
** it accepts a UTF-16 string.
@@ -48266,10 +48375,22 @@
4826648375
}
4826748376
}
4826848377
}
4826948378
return 0;
4827048379
}
48380
+
48381
+/*
48382
+** If sqlite3_temp_directory is not, take the mutex and return true.
48383
+**
48384
+** If sqlite3_temp_directory is NULL, omit the mutex and return false.
48385
+*/
48386
+static int winTempDirDefined(void){
48387
+ sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
48388
+ if( sqlite3_temp_directory!=0 ) return 1;
48389
+ sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
48390
+ return 0;
48391
+}
4827148392
4827248393
/*
4827348394
** Create a temporary file name and store the resulting pointer into pzBuf.
4827448395
** The pointer returned in pzBuf must be freed via sqlite3_free().
4827548396
*/
@@ -48303,24 +48424,27 @@
4830348424
** has been explicitly set by the application; otherwise, use the one
4830448425
** configured by the operating system.
4830548426
*/
4830648427
nDir = nMax - (nPre + 15);
4830748428
assert( nDir>0 );
48308
- if( sqlite3_temp_directory ){
48429
+ if( winTempDirDefined() ){
4830948430
int nDirLen = sqlite3Strlen30(sqlite3_temp_directory);
4831048431
if( nDirLen>0 ){
4831148432
if( !winIsDirSep(sqlite3_temp_directory[nDirLen-1]) ){
4831248433
nDirLen++;
4831348434
}
4831448435
if( nDirLen>nDir ){
48436
+ sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
4831548437
sqlite3_free(zBuf);
4831648438
OSTRACE(("TEMP-FILENAME rc=SQLITE_ERROR\n"));
4831748439
return winLogError(SQLITE_ERROR, 0, "winGetTempname1", 0);
4831848440
}
4831948441
sqlite3_snprintf(nMax, zBuf, "%s", sqlite3_temp_directory);
4832048442
}
48443
+ sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
4832148444
}
48445
+
4832248446
#if defined(__CYGWIN__)
4832348447
else{
4832448448
static const char *azDirs[] = {
4832548449
0, /* getenv("SQLITE_TMPDIR") */
4832648450
0, /* getenv("TMPDIR") */
@@ -49105,11 +49229,11 @@
4910549229
/*
4910649230
** Turn a relative pathname into a full pathname. Write the full
4910749231
** pathname into zOut[]. zOut[] will be at least pVfs->mxPathname
4910849232
** bytes in size.
4910949233
*/
49110
-static int winFullPathname(
49234
+static int winFullPathnameNoMutex(
4911149235
sqlite3_vfs *pVfs, /* Pointer to vfs object */
4911249236
const char *zRelative, /* Possibly relative input path */
4911349237
int nFull, /* Size of output buffer in bytes */
4911449238
char *zFull /* Output buffer */
4911549239
){
@@ -49283,10 +49407,23 @@
4928349407
return SQLITE_OK;
4928449408
}else{
4928549409
return SQLITE_IOERR_NOMEM_BKPT;
4928649410
}
4928749411
#endif
49412
+}
49413
+static int winFullPathname(
49414
+ sqlite3_vfs *pVfs, /* Pointer to vfs object */
49415
+ const char *zRelative, /* Possibly relative input path */
49416
+ int nFull, /* Size of output buffer in bytes */
49417
+ char *zFull /* Output buffer */
49418
+){
49419
+ int rc;
49420
+ sqlite3_mutex *pMutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR);
49421
+ sqlite3_mutex_enter(pMutex);
49422
+ rc = winFullPathnameNoMutex(pVfs, zRelative, nFull, zFull);
49423
+ sqlite3_mutex_leave(pMutex);
49424
+ return rc;
4928849425
}
4928949426
4929049427
#ifndef SQLITE_OMIT_LOAD_EXTENSION
4929149428
/*
4929249429
** Interfaces for opening a shared library, finding entry points
@@ -51072,39 +51209,58 @@
5107251209
*/
5107351210
#if defined(SQLITE_DEBUG) && 0
5107451211
int sqlite3PcacheTrace = 2; /* 0: off 1: simple 2: cache dumps */
5107551212
int sqlite3PcacheMxDump = 9999; /* Max cache entries for pcacheDump() */
5107651213
# define pcacheTrace(X) if(sqlite3PcacheTrace){sqlite3DebugPrintf X;}
51077
- void pcacheDump(PCache *pCache){
51078
- int N;
51079
- int i, j;
51080
- sqlite3_pcache_page *pLower;
51214
+ static void pcachePageTrace(int i, sqlite3_pcache_page *pLower){
5108151215
PgHdr *pPg;
5108251216
unsigned char *a;
51217
+ int j;
51218
+ pPg = (PgHdr*)pLower->pExtra;
51219
+ printf("%3d: nRef %2d flgs %02x data ", i, pPg->nRef, pPg->flags);
51220
+ a = (unsigned char *)pLower->pBuf;
51221
+ for(j=0; j<12; j++) printf("%02x", a[j]);
51222
+ printf(" ptr %p\n", pPg);
51223
+ }
51224
+ static void pcacheDump(PCache *pCache){
51225
+ int N;
51226
+ int i;
51227
+ sqlite3_pcache_page *pLower;
5108351228
5108451229
if( sqlite3PcacheTrace<2 ) return;
5108551230
if( pCache->pCache==0 ) return;
5108651231
N = sqlite3PcachePagecount(pCache);
5108751232
if( N>sqlite3PcacheMxDump ) N = sqlite3PcacheMxDump;
5108851233
for(i=1; i<=N; i++){
5108951234
pLower = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, i, 0);
5109051235
if( pLower==0 ) continue;
51091
- pPg = (PgHdr*)pLower->pExtra;
51092
- printf("%3d: nRef %2d flgs %02x data ", i, pPg->nRef, pPg->flags);
51093
- a = (unsigned char *)pLower->pBuf;
51094
- for(j=0; j<12; j++) printf("%02x", a[j]);
51095
- printf("\n");
51096
- if( pPg->pPage==0 ){
51236
+ pcachePageTrace(i, pLower);
51237
+ if( ((PgHdr*)pLower)->pPage==0 ){
5109751238
sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, pLower, 0);
5109851239
}
5109951240
}
5110051241
}
51101
- #else
51242
+#else
5110251243
# define pcacheTrace(X)
51244
+# define pcachePageTrace(PGNO, X)
5110351245
# define pcacheDump(X)
5110451246
#endif
5110551247
51248
+/*
51249
+** Return 1 if pPg is on the dirty list for pCache. Return 0 if not.
51250
+** This routine runs inside of assert() statements only.
51251
+*/
51252
+#ifdef SQLITE_DEBUG
51253
+static int pageOnDirtyList(PCache *pCache, PgHdr *pPg){
51254
+ PgHdr *p;
51255
+ for(p=pCache->pDirty; p; p=p->pDirtyNext){
51256
+ if( p==pPg ) return 1;
51257
+ }
51258
+ return 0;
51259
+}
51260
+#endif
51261
+
5110651262
/*
5110751263
** Check invariants on a PgHdr entry. Return true if everything is OK.
5110851264
** Return false if any invariant is violated.
5110951265
**
5111051266
** This routine is for use inside of assert() statements only. For
@@ -51119,12 +51275,17 @@
5111951275
assert( pPg->pgno>0 || pPg->pPager==0 ); /* Page number is 1 or more */
5112051276
pCache = pPg->pCache;
5112151277
assert( pCache!=0 ); /* Every page has an associated PCache */
5112251278
if( pPg->flags & PGHDR_CLEAN ){
5112351279
assert( (pPg->flags & PGHDR_DIRTY)==0 );/* Cannot be both CLEAN and DIRTY */
51124
- assert( pCache->pDirty!=pPg ); /* CLEAN pages not on dirty list */
51125
- assert( pCache->pDirtyTail!=pPg );
51280
+ assert( !pageOnDirtyList(pCache, pPg) );/* CLEAN pages not on dirty list */
51281
+ }else{
51282
+ assert( (pPg->flags & PGHDR_DIRTY)!=0 );/* If not CLEAN must be DIRTY */
51283
+ assert( pPg->pDirtyNext==0 || pPg->pDirtyNext->pDirtyPrev==pPg );
51284
+ assert( pPg->pDirtyPrev==0 || pPg->pDirtyPrev->pDirtyNext==pPg );
51285
+ assert( pPg->pDirtyPrev!=0 || pCache->pDirty==pPg );
51286
+ assert( pageOnDirtyList(pCache, pPg) );
5112651287
}
5112751288
/* WRITEABLE pages must also be DIRTY */
5112851289
if( pPg->flags & PGHDR_WRITEABLE ){
5112951290
assert( pPg->flags & PGHDR_DIRTY ); /* WRITEABLE implies DIRTY */
5113051291
}
@@ -51394,12 +51555,13 @@
5139451555
eCreate = createFlag & pCache->eCreate;
5139551556
assert( eCreate==0 || eCreate==1 || eCreate==2 );
5139651557
assert( createFlag==0 || pCache->eCreate==eCreate );
5139751558
assert( createFlag==0 || eCreate==1+(!pCache->bPurgeable||!pCache->pDirty) );
5139851559
pRes = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, eCreate);
51399
- pcacheTrace(("%p.FETCH %d%s (result: %p)\n",pCache,pgno,
51560
+ pcacheTrace(("%p.FETCH %d%s (result: %p) ",pCache,pgno,
5140051561
createFlag?" create":"",pRes));
51562
+ pcachePageTrace(pgno, pRes);
5140151563
return pRes;
5140251564
}
5140351565
5140451566
/*
5140551567
** If the sqlite3PcacheFetch() routine is unable to allocate a new
@@ -51523,10 +51685,11 @@
5152351685
if( (--p->nRef)==0 ){
5152451686
if( p->flags&PGHDR_CLEAN ){
5152551687
pcacheUnpin(p);
5152651688
}else{
5152751689
pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT);
51690
+ assert( sqlite3PcachePageSanity(p) );
5152851691
}
5152951692
}
5153051693
}
5153151694
5153251695
/*
@@ -51566,10 +51729,11 @@
5156651729
if( p->flags & PGHDR_CLEAN ){
5156751730
p->flags ^= (PGHDR_DIRTY|PGHDR_CLEAN);
5156851731
pcacheTrace(("%p.DIRTY %d\n",p->pCache,p->pgno));
5156951732
assert( (p->flags & (PGHDR_DIRTY|PGHDR_CLEAN))==PGHDR_DIRTY );
5157051733
pcacheManageDirtyList(p, PCACHE_DIRTYLIST_ADD);
51734
+ assert( sqlite3PcachePageSanity(p) );
5157151735
}
5157251736
assert( sqlite3PcachePageSanity(p) );
5157351737
}
5157451738
}
5157551739
@@ -51628,18 +51792,28 @@
5162851792
/*
5162951793
** Change the page number of page p to newPgno.
5163051794
*/
5163151795
SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){
5163251796
PCache *pCache = p->pCache;
51797
+ sqlite3_pcache_page *pOther;
5163351798
assert( p->nRef>0 );
5163451799
assert( newPgno>0 );
5163551800
assert( sqlite3PcachePageSanity(p) );
5163651801
pcacheTrace(("%p.MOVE %d -> %d\n",pCache,p->pgno,newPgno));
51802
+ pOther = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, newPgno, 0);
5163751803
sqlite3GlobalConfig.pcache2.xRekey(pCache->pCache, p->pPage, p->pgno,newPgno);
51804
+ if( pOther ){
51805
+ PgHdr *pPg = (PgHdr*)pOther->pExtra;
51806
+ pPg->pgno = p->pgno;
51807
+ if( pPg->pPage==0 ){
51808
+ sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, pOther, 0);
51809
+ }
51810
+ }
5163851811
p->pgno = newPgno;
5163951812
if( (p->flags&PGHDR_DIRTY) && (p->flags&PGHDR_NEED_SYNC) ){
5164051813
pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT);
51814
+ assert( sqlite3PcachePageSanity(p) );
5164151815
}
5164251816
}
5164351817
5164451818
/*
5164551819
** Drop every cache entry whose page number is greater than "pgno". The
@@ -51933,16 +52107,17 @@
5193352107
** runtime using sqlite3_config(SQLITE_CONFIG_PCACHE_HDRSZ, &size). The
5193452108
** sizes of the extensions sum to 272 bytes on x64 for 3.8.10, but this
5193552109
** size can vary according to architecture, compile-time options, and
5193652110
** SQLite library version number.
5193752111
**
51938
-** If SQLITE_PCACHE_SEPARATE_HEADER is defined, then the extension is obtained
51939
-** using a separate memory allocation from the database page content. This
51940
-** seeks to overcome the "clownshoe" problem (also called "internal
51941
-** fragmentation" in academic literature) of allocating a few bytes more
51942
-** than a power of two with the memory allocator rounding up to the next
51943
-** power of two, and leaving the rounded-up space unused.
52112
+** Historical note: It used to be that if the SQLITE_PCACHE_SEPARATE_HEADER
52113
+** was defined, then the page content would be held in a separate memory
52114
+** allocation from the PgHdr1. This was intended to avoid clownshoe memory
52115
+** allocations. However, the btree layer needs a small (16-byte) overrun
52116
+** area after the page content buffer. The header serves as that overrun
52117
+** area. Therefore SQLITE_PCACHE_SEPARATE_HEADER was discontinued to avoid
52118
+** any possibility of a memory error.
5194452119
**
5194552120
** This module tracks pointers to PgHdr1 objects. Only pcache.c communicates
5194652121
** with this module. Information is passed back and forth as PgHdr1 pointers.
5194752122
**
5194852123
** The pcache.c and pager.c modules deal pointers to PgHdr objects.
@@ -51983,34 +52158,44 @@
5198352158
typedef struct PgFreeslot PgFreeslot;
5198452159
typedef struct PGroup PGroup;
5198552160
5198652161
/*
5198752162
** Each cache entry is represented by an instance of the following
51988
-** structure. Unless SQLITE_PCACHE_SEPARATE_HEADER is defined, a buffer of
51989
-** PgHdr1.pCache->szPage bytes is allocated directly before this structure
51990
-** in memory.
52163
+** structure. A buffer of PgHdr1.pCache->szPage bytes is allocated
52164
+** directly before this structure and is used to cache the page content.
5199152165
**
51992
-** Note: Variables isBulkLocal and isAnchor were once type "u8". That works,
52166
+** When reading a corrupt database file, it is possible that SQLite might
52167
+** read a few bytes (no more than 16 bytes) past the end of the page buffer.
52168
+** It will only read past the end of the page buffer, never write. This
52169
+** object is positioned immediately after the page buffer to serve as an
52170
+** overrun area, so that overreads are harmless.
52171
+**
52172
+** Variables isBulkLocal and isAnchor were once type "u8". That works,
5199352173
** but causes a 2-byte gap in the structure for most architectures (since
5199452174
** pointers must be either 4 or 8-byte aligned). As this structure is located
5199552175
** in memory directly after the associated page data, if the database is
5199652176
** corrupt, code at the b-tree layer may overread the page buffer and
5199752177
** read part of this structure before the corruption is detected. This
5199852178
** can cause a valgrind error if the unitialized gap is accessed. Using u16
51999
-** ensures there is no such gap, and therefore no bytes of unitialized memory
52000
-** in the structure.
52179
+** ensures there is no such gap, and therefore no bytes of uninitialized
52180
+** memory in the structure.
52181
+**
52182
+** The pLruNext and pLruPrev pointers form a double-linked circular list
52183
+** of all pages that are unpinned. The PGroup.lru element (which should be
52184
+** the only element on the list with PgHdr1.isAnchor set to 1) forms the
52185
+** beginning and the end of the list.
5200152186
*/
5200252187
struct PgHdr1 {
52003
- sqlite3_pcache_page page; /* Base class. Must be first. pBuf & pExtra */
52004
- unsigned int iKey; /* Key value (page number) */
52005
- u16 isBulkLocal; /* This page from bulk local storage */
52006
- u16 isAnchor; /* This is the PGroup.lru element */
52007
- PgHdr1 *pNext; /* Next in hash table chain */
52008
- PCache1 *pCache; /* Cache that currently owns this page */
52009
- PgHdr1 *pLruNext; /* Next in LRU list of unpinned pages */
52010
- PgHdr1 *pLruPrev; /* Previous in LRU list of unpinned pages */
52011
- /* NB: pLruPrev is only valid if pLruNext!=0 */
52188
+ sqlite3_pcache_page page; /* Base class. Must be first. pBuf & pExtra */
52189
+ unsigned int iKey; /* Key value (page number) */
52190
+ u16 isBulkLocal; /* This page from bulk local storage */
52191
+ u16 isAnchor; /* This is the PGroup.lru element */
52192
+ PgHdr1 *pNext; /* Next in hash table chain */
52193
+ PCache1 *pCache; /* Cache that currently owns this page */
52194
+ PgHdr1 *pLruNext; /* Next in circular LRU list of unpinned pages */
52195
+ PgHdr1 *pLruPrev; /* Previous in LRU list of unpinned pages */
52196
+ /* NB: pLruPrev is only valid if pLruNext!=0 */
5201252197
};
5201352198
5201452199
/*
5201552200
** A page is pinned if it is not on the LRU list. To be "pinned" means
5201652201
** that the page is in active use and must not be deallocated.
@@ -52332,29 +52517,17 @@
5233252517
assert( pcache1.separateCache==0 );
5233352518
assert( pCache->pGroup==&pcache1.grp );
5233452519
pcache1LeaveMutex(pCache->pGroup);
5233552520
#endif
5233652521
if( benignMalloc ){ sqlite3BeginBenignMalloc(); }
52337
-#ifdef SQLITE_PCACHE_SEPARATE_HEADER
52338
- pPg = pcache1Alloc(pCache->szPage);
52339
- p = sqlite3Malloc(sizeof(PgHdr1) + pCache->szExtra);
52340
- if( !pPg || !p ){
52341
- pcache1Free(pPg);
52342
- sqlite3_free(p);
52343
- pPg = 0;
52344
- }
52345
-#else
5234652522
pPg = pcache1Alloc(pCache->szAlloc);
52347
-#endif
5234852523
if( benignMalloc ){ sqlite3EndBenignMalloc(); }
5234952524
#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
5235052525
pcache1EnterMutex(pCache->pGroup);
5235152526
#endif
5235252527
if( pPg==0 ) return 0;
52353
-#ifndef SQLITE_PCACHE_SEPARATE_HEADER
5235452528
p = (PgHdr1 *)&((u8 *)pPg)[pCache->szPage];
52355
-#endif
5235652529
p->page.pBuf = pPg;
5235752530
p->page.pExtra = &p[1];
5235852531
p->isBulkLocal = 0;
5235952532
p->isAnchor = 0;
5236052533
p->pLruPrev = 0; /* Initializing this saves a valgrind error */
@@ -52374,13 +52547,10 @@
5237452547
if( p->isBulkLocal ){
5237552548
p->pNext = pCache->pFree;
5237652549
pCache->pFree = p;
5237752550
}else{
5237852551
pcache1Free(p->page.pBuf);
52379
-#ifdef SQLITE_PCACHE_SEPARATE_HEADER
52380
- sqlite3_free(p);
52381
-#endif
5238252552
}
5238352553
(*pCache->pnPurgeable)--;
5238452554
}
5238552555
5238652556
/*
@@ -53017,27 +53187,45 @@
5301753187
unsigned int iNew
5301853188
){
5301953189
PCache1 *pCache = (PCache1 *)p;
5302053190
PgHdr1 *pPage = (PgHdr1 *)pPg;
5302153191
PgHdr1 **pp;
53022
- unsigned int h;
53192
+ unsigned int hOld, hNew;
5302353193
assert( pPage->iKey==iOld );
5302453194
assert( pPage->pCache==pCache );
53195
+ assert( iOld!=iNew ); /* The page number really is changing */
5302553196
5302653197
pcache1EnterMutex(pCache->pGroup);
5302753198
53028
- h = iOld%pCache->nHash;
53029
- pp = &pCache->apHash[h];
53199
+ assert( pcache1FetchNoMutex(p, iOld, 0)==pPage ); /* pPg really is iOld */
53200
+ hOld = iOld%pCache->nHash;
53201
+ pp = &pCache->apHash[hOld];
5303053202
while( (*pp)!=pPage ){
5303153203
pp = &(*pp)->pNext;
5303253204
}
5303353205
*pp = pPage->pNext;
5303453206
53035
- h = iNew%pCache->nHash;
53207
+ hNew = iNew%pCache->nHash;
53208
+ pp = &pCache->apHash[hNew];
53209
+ while( *pp ){
53210
+ if( (*pp)->iKey==iNew ){
53211
+ /* If there is already another pcache entry at iNew, change it to iOld,
53212
+ ** thus swapping the positions of iNew and iOld */
53213
+ PgHdr1 *pOld = *pp;
53214
+ *pp = pOld->pNext;
53215
+ pOld->pNext = pCache->apHash[hOld];
53216
+ pCache->apHash[hOld] = pOld;
53217
+ pOld->iKey = iOld;
53218
+ break;
53219
+ }else{
53220
+ pp = &(*pp)->pNext;
53221
+ }
53222
+ }
53223
+
5303653224
pPage->iKey = iNew;
53037
- pPage->pNext = pCache->apHash[h];
53038
- pCache->apHash[h] = pPage;
53225
+ pPage->pNext = pCache->apHash[hNew];
53226
+ pCache->apHash[hNew] = pPage;
5303953227
if( iNew>pCache->iMaxKey ){
5304053228
pCache->iMaxKey = iNew;
5304153229
}
5304253230
5304353231
pcache1LeaveMutex(pCache->pGroup);
@@ -53140,13 +53328,10 @@
5314053328
while( (nReq<0 || nFree<nReq)
5314153329
&& (p=pcache1.grp.lru.pLruPrev)!=0
5314253330
&& p->isAnchor==0
5314353331
){
5314453332
nFree += pcache1MemSize(p->page.pBuf);
53145
-#ifdef SQLITE_PCACHE_SEPARATE_HEADER
53146
- nFree += sqlite3MemSize(p);
53147
-#endif
5314853333
assert( PAGE_IS_UNPINNED(p) );
5314953334
pcache1PinPage(p);
5315053335
pcache1RemoveFromHash(p, 1);
5315153336
}
5315253337
pcache1LeaveMutex(&pcache1.grp);
@@ -59631,10 +59816,11 @@
5963159816
int flags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE;
5963259817
int nSpill;
5963359818
5963459819
if( pPager->tempFile ){
5963559820
flags |= (SQLITE_OPEN_DELETEONCLOSE|SQLITE_OPEN_TEMP_JOURNAL);
59821
+ flags |= SQLITE_OPEN_EXCLUSIVE;
5963659822
nSpill = sqlite3Config.nStmtSpill;
5963759823
}else{
5963859824
flags |= SQLITE_OPEN_MAIN_JOURNAL;
5963959825
nSpill = jrnlBufferSize(pPager);
5964059826
}
@@ -59666,10 +59852,11 @@
5966659852
}
5966759853
5966859854
if( rc!=SQLITE_OK ){
5966959855
sqlite3BitvecDestroy(pPager->pInJournal);
5967059856
pPager->pInJournal = 0;
59857
+ pPager->journalOff = 0;
5967159858
}else{
5967259859
assert( pPager->eState==PAGER_WRITER_LOCKED );
5967359860
pPager->eState = PAGER_WRITER_CACHEMOD;
5967459861
}
5967559862
@@ -66729,10 +66916,11 @@
6672966916
** db using sqlite3SchemaToIndex().
6673066917
*/
6673166918
SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3 *db, int iDb, Schema *pSchema){
6673266919
Btree *p;
6673366920
assert( db!=0 );
66921
+ if( db->pVfs==0 && db->nDb==0 ) return 1;
6673466922
if( pSchema ) iDb = sqlite3SchemaToIndex(db, pSchema);
6673566923
assert( iDb>=0 && iDb<db->nDb );
6673666924
if( !sqlite3_mutex_held(db->mutex) ) return 0;
6673766925
if( iDb==1 ) return 1;
6673866926
p = db->aDb[iDb].pBt;
@@ -68301,12 +68489,11 @@
6830168489
assert( sqlite3PagerIswriteable(pPage->pDbPage) );
6830268490
assert( pPage->pBt!=0 );
6830368491
assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE );
6830468492
assert( pPage->nOverflow==0 );
6830568493
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
68306
- temp = 0;
68307
- src = data = pPage->aData;
68494
+ data = pPage->aData;
6830868495
hdr = pPage->hdrOffset;
6830968496
cellOffset = pPage->cellOffset;
6831068497
nCell = pPage->nCell;
6831168498
assert( nCell==get2byte(&data[hdr+3]) || CORRUPT_DB );
6831268499
iCellFirst = cellOffset + 2*nCell;
@@ -68356,43 +68543,42 @@
6835668543
}
6835768544
6835868545
cbrk = usableSize;
6835968546
iCellLast = usableSize - 4;
6836068547
iCellStart = get2byte(&data[hdr+5]);
68361
- for(i=0; i<nCell; i++){
68362
- u8 *pAddr; /* The i-th cell pointer */
68363
- pAddr = &data[cellOffset + i*2];
68364
- pc = get2byte(pAddr);
68365
- testcase( pc==iCellFirst );
68366
- testcase( pc==iCellLast );
68367
- /* These conditions have already been verified in btreeInitPage()
68368
- ** if PRAGMA cell_size_check=ON.
68369
- */
68370
- if( pc<iCellStart || pc>iCellLast ){
68371
- return SQLITE_CORRUPT_PAGE(pPage);
68372
- }
68373
- assert( pc>=iCellStart && pc<=iCellLast );
68374
- size = pPage->xCellSize(pPage, &src[pc]);
68375
- cbrk -= size;
68376
- if( cbrk<iCellStart || pc+size>usableSize ){
68377
- return SQLITE_CORRUPT_PAGE(pPage);
68378
- }
68379
- assert( cbrk+size<=usableSize && cbrk>=iCellStart );
68380
- testcase( cbrk+size==usableSize );
68381
- testcase( pc+size==usableSize );
68382
- put2byte(pAddr, cbrk);
68383
- if( temp==0 ){
68384
- if( cbrk==pc ) continue;
68385
- temp = sqlite3PagerTempSpace(pPage->pBt->pPager);
68386
- memcpy(&temp[iCellStart], &data[iCellStart], usableSize - iCellStart);
68387
- src = temp;
68388
- }
68389
- memcpy(&data[cbrk], &src[pc], size);
68548
+ if( nCell>0 ){
68549
+ temp = sqlite3PagerTempSpace(pPage->pBt->pPager);
68550
+ memcpy(&temp[iCellStart], &data[iCellStart], usableSize - iCellStart);
68551
+ src = temp;
68552
+ for(i=0; i<nCell; i++){
68553
+ u8 *pAddr; /* The i-th cell pointer */
68554
+ pAddr = &data[cellOffset + i*2];
68555
+ pc = get2byte(pAddr);
68556
+ testcase( pc==iCellFirst );
68557
+ testcase( pc==iCellLast );
68558
+ /* These conditions have already been verified in btreeInitPage()
68559
+ ** if PRAGMA cell_size_check=ON.
68560
+ */
68561
+ if( pc<iCellStart || pc>iCellLast ){
68562
+ return SQLITE_CORRUPT_PAGE(pPage);
68563
+ }
68564
+ assert( pc>=iCellStart && pc<=iCellLast );
68565
+ size = pPage->xCellSize(pPage, &src[pc]);
68566
+ cbrk -= size;
68567
+ if( cbrk<iCellStart || pc+size>usableSize ){
68568
+ return SQLITE_CORRUPT_PAGE(pPage);
68569
+ }
68570
+ assert( cbrk+size<=usableSize && cbrk>=iCellStart );
68571
+ testcase( cbrk+size==usableSize );
68572
+ testcase( pc+size==usableSize );
68573
+ put2byte(pAddr, cbrk);
68574
+ memcpy(&data[cbrk], &src[pc], size);
68575
+ }
6839068576
}
6839168577
data[hdr+7] = 0;
6839268578
68393
- defragment_out:
68579
+defragment_out:
6839468580
assert( pPage->nFree>=0 );
6839568581
if( data[hdr+7]+cbrk-iCellFirst!=pPage->nFree ){
6839668582
return SQLITE_CORRUPT_PAGE(pPage);
6839768583
}
6839868584
assert( cbrk>=iCellFirst );
@@ -68461,13 +68647,13 @@
6846168647
return &aData[pc + x];
6846268648
}
6846368649
iAddr = pc;
6846468650
pTmp = &aData[pc];
6846568651
pc = get2byte(pTmp);
68466
- if( pc<=iAddr+size ){
68652
+ if( pc<=iAddr ){
6846768653
if( pc ){
68468
- /* The next slot in the chain is not past the end of the current slot */
68654
+ /* The next slot in the chain comes before the current slot */
6846968655
*pRc = SQLITE_CORRUPT_PAGE(pPg);
6847068656
}
6847168657
return 0;
6847268658
}
6847368659
}
@@ -68615,11 +68801,11 @@
6861568801
iPtr = hdr + 1;
6861668802
if( data[iPtr+1]==0 && data[iPtr]==0 ){
6861768803
iFreeBlk = 0; /* Shortcut for the case when the freelist is empty */
6861868804
}else{
6861968805
while( (iFreeBlk = get2byte(&data[iPtr]))<iStart ){
68620
- if( iFreeBlk<iPtr+4 ){
68806
+ if( iFreeBlk<=iPtr ){
6862168807
if( iFreeBlk==0 ) break; /* TH3: corrupt082.100 */
6862268808
return SQLITE_CORRUPT_PAGE(pPage);
6862368809
}
6862468810
iPtr = iFreeBlk;
6862568811
}
@@ -69097,13 +69283,11 @@
6909769283
if( pCur ){
6909869284
pCur->iPage--;
6909969285
pCur->pPage = pCur->apPage[pCur->iPage];
6910069286
}
6910169287
testcase( pgno==0 );
69102
- assert( pgno!=0 || rc==SQLITE_CORRUPT
69103
- || rc==SQLITE_IOERR_NOMEM
69104
- || rc==SQLITE_NOMEM );
69288
+ assert( pgno!=0 || rc!=SQLITE_OK );
6910569289
return rc;
6910669290
}
6910769291
6910869292
/*
6910969293
** Release a MemPage. This should be called once for each prior
@@ -72041,12 +72225,10 @@
7204172225
** the new child page does not match the flags field of the parent (i.e.
7204272226
** if an intkey page appears to be the parent of a non-intkey page, or
7204372227
** vice-versa).
7204472228
*/
7204572229
static int moveToChild(BtCursor *pCur, u32 newPgno){
72046
- BtShared *pBt = pCur->pBt;
72047
-
7204872230
assert( cursorOwnsBtShared(pCur) );
7204972231
assert( pCur->eState==CURSOR_VALID );
7205072232
assert( pCur->iPage<BTCURSOR_MAX_DEPTH );
7205172233
assert( pCur->iPage>=0 );
7205272234
if( pCur->iPage>=(BTCURSOR_MAX_DEPTH-1) ){
@@ -72056,11 +72238,12 @@
7205672238
pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
7205772239
pCur->aiIdx[pCur->iPage] = pCur->ix;
7205872240
pCur->apPage[pCur->iPage] = pCur->pPage;
7205972241
pCur->ix = 0;
7206072242
pCur->iPage++;
72061
- return getAndInitPage(pBt, newPgno, &pCur->pPage, pCur, pCur->curPagerFlags);
72243
+ return getAndInitPage(pCur->pBt, newPgno, &pCur->pPage, pCur,
72244
+ pCur->curPagerFlags);
7206272245
}
7206372246
7206472247
#ifdef SQLITE_DEBUG
7206572248
/*
7206672249
** Page pParent is an internal (non-leaf) tree page. This function
@@ -72162,11 +72345,11 @@
7216272345
assert( pCur->skipNext!=SQLITE_OK );
7216372346
return pCur->skipNext;
7216472347
}
7216572348
sqlite3BtreeClearCursor(pCur);
7216672349
}
72167
- rc = getAndInitPage(pCur->pBtree->pBt, pCur->pgnoRoot, &pCur->pPage,
72350
+ rc = getAndInitPage(pCur->pBt, pCur->pgnoRoot, &pCur->pPage,
7216872351
0, pCur->curPagerFlags);
7216972352
if( rc!=SQLITE_OK ){
7217072353
pCur->eState = CURSOR_INVALID;
7217172354
return rc;
7217272355
}
@@ -72635,10 +72818,13 @@
7263572818
if( pCur->iPage>0
7263672819
&& indexCellCompare(pCur, 0, pIdxKey, xRecordCompare)<=0
7263772820
&& pIdxKey->errCode==SQLITE_OK
7263872821
){
7263972822
pCur->curFlags &= ~BTCF_ValidOvfl;
72823
+ if( !pCur->pPage->isInit ){
72824
+ return SQLITE_CORRUPT_BKPT;
72825
+ }
7264072826
goto bypass_moveto_root; /* Start search on the current page */
7264172827
}
7264272828
pIdxKey->errCode = SQLITE_OK;
7264372829
}
7264472830
@@ -73800,16 +73986,10 @@
7380073986
data = pPage->aData;
7380173987
ptr = &pPage->aCellIdx[2*idx];
7380273988
assert( pPage->pBt->usableSize > (u32)(ptr-data) );
7380373989
pc = get2byte(ptr);
7380473990
hdr = pPage->hdrOffset;
73805
-#if 0 /* Not required. Omit for efficiency */
73806
- if( pc<hdr+pPage->nCell*2 ){
73807
- *pRC = SQLITE_CORRUPT_BKPT;
73808
- return;
73809
- }
73810
-#endif
7381173991
testcase( pc==(u32)get2byte(&data[hdr+5]) );
7381273992
testcase( pc+sz==pPage->pBt->usableSize );
7381373993
if( pc+sz > pPage->pBt->usableSize ){
7381473994
*pRC = SQLITE_CORRUPT_BKPT;
7381573995
return;
@@ -74689,12 +74869,10 @@
7468974869
int szNew[NB+2]; /* Combined size of cells placed on i-th page */
7469074870
u8 *aSpace1; /* Space for copies of dividers cells */
7469174871
Pgno pgno; /* Temp var to store a page number in */
7469274872
u8 abDone[NB+2]; /* True after i'th new page is populated */
7469374873
Pgno aPgno[NB+2]; /* Page numbers of new pages before shuffling */
74694
- Pgno aPgOrder[NB+2]; /* Copy of aPgno[] used for sorting pages */
74695
- u16 aPgFlags[NB+2]; /* flags field of new pages before shuffling */
7469674874
CellArray b; /* Parsed information on cells being balanced */
7469774875
7469874876
memset(abDone, 0, sizeof(abDone));
7469974877
memset(&b, 0, sizeof(b));
7470074878
pBt = pParent->pBt;
@@ -75114,46 +75292,43 @@
7511475292
** Reassign page numbers so that the new pages are in ascending order.
7511575293
** This helps to keep entries in the disk file in order so that a scan
7511675294
** of the table is closer to a linear scan through the file. That in turn
7511775295
** helps the operating system to deliver pages from the disk more rapidly.
7511875296
**
75119
- ** An O(n^2) insertion sort algorithm is used, but since n is never more
75120
- ** than (NB+2) (a small constant), that should not be a problem.
75297
+ ** An O(N*N) sort algorithm is used, but since N is never more than NB+2
75298
+ ** (5), that is not a performance concern.
7512175299
**
7512275300
** When NB==3, this one optimization makes the database about 25% faster
7512375301
** for large insertions and deletions.
7512475302
*/
7512575303
for(i=0; i<nNew; i++){
75126
- aPgOrder[i] = aPgno[i] = apNew[i]->pgno;
75127
- aPgFlags[i] = apNew[i]->pDbPage->flags;
75128
- for(j=0; j<i; j++){
75129
- if( NEVER(aPgno[j]==aPgno[i]) ){
75130
- /* This branch is taken if the set of sibling pages somehow contains
75131
- ** duplicate entries. This can happen if the database is corrupt.
75132
- ** It would be simpler to detect this as part of the loop below, but
75133
- ** we do the detection here in order to avoid populating the pager
75134
- ** cache with two separate objects associated with the same
75135
- ** page number. */
75136
- assert( CORRUPT_DB );
75137
- rc = SQLITE_CORRUPT_BKPT;
75138
- goto balance_cleanup;
75139
- }
75140
- }
75141
- }
75142
- for(i=0; i<nNew; i++){
75143
- int iBest = 0; /* aPgno[] index of page number to use */
75144
- for(j=1; j<nNew; j++){
75145
- if( aPgOrder[j]<aPgOrder[iBest] ) iBest = j;
75146
- }
75147
- pgno = aPgOrder[iBest];
75148
- aPgOrder[iBest] = 0xffffffff;
75149
- if( iBest!=i ){
75150
- if( iBest>i ){
75151
- sqlite3PagerRekey(apNew[iBest]->pDbPage, pBt->nPage+iBest+1, 0);
75152
- }
75153
- sqlite3PagerRekey(apNew[i]->pDbPage, pgno, aPgFlags[iBest]);
75154
- apNew[i]->pgno = pgno;
75304
+ aPgno[i] = apNew[i]->pgno;
75305
+ assert( apNew[i]->pDbPage->flags & PGHDR_WRITEABLE );
75306
+ assert( apNew[i]->pDbPage->flags & PGHDR_DIRTY );
75307
+ }
75308
+ for(i=0; i<nNew-1; i++){
75309
+ int iB = i;
75310
+ for(j=i+1; j<nNew; j++){
75311
+ if( apNew[j]->pgno < apNew[iB]->pgno ) iB = j;
75312
+ }
75313
+
75314
+ /* If apNew[i] has a page number that is bigger than any of the
75315
+ ** subsequence apNew[i] entries, then swap apNew[i] with the subsequent
75316
+ ** entry that has the smallest page number (which we know to be
75317
+ ** entry apNew[iB]).
75318
+ */
75319
+ if( iB!=i ){
75320
+ Pgno pgnoA = apNew[i]->pgno;
75321
+ Pgno pgnoB = apNew[iB]->pgno;
75322
+ Pgno pgnoTemp = (PENDING_BYTE/pBt->pageSize)+1;
75323
+ u16 fgA = apNew[i]->pDbPage->flags;
75324
+ u16 fgB = apNew[iB]->pDbPage->flags;
75325
+ sqlite3PagerRekey(apNew[i]->pDbPage, pgnoTemp, fgB);
75326
+ sqlite3PagerRekey(apNew[iB]->pDbPage, pgnoA, fgA);
75327
+ sqlite3PagerRekey(apNew[i]->pDbPage, pgnoB, fgB);
75328
+ apNew[i]->pgno = pgnoB;
75329
+ apNew[iB]->pgno = pgnoA;
7515575330
}
7515675331
}
7515775332
7515875333
TRACE(("BALANCE: new: %d(%d nc=%d) %d(%d nc=%d) %d(%d nc=%d) "
7515975334
"%d(%d nc=%d) %d(%d nc=%d)\n",
@@ -79417,10 +79592,20 @@
7941779592
double r2 = (double)i;
7941879593
return r1==0.0
7941979594
|| (memcmp(&r1, &r2, sizeof(r1))==0
7942079595
&& i >= -2251799813685248LL && i < 2251799813685248LL);
7942179596
}
79597
+
79598
+/* Convert a floating point value to its closest integer. Do so in
79599
+** a way that avoids 'outside the range of representable values' warnings
79600
+** from UBSAN.
79601
+*/
79602
+SQLITE_PRIVATE i64 sqlite3RealToI64(double r){
79603
+ if( r<=(double)SMALLEST_INT64 ) return SMALLEST_INT64;
79604
+ if( r>=(double)LARGEST_INT64) return LARGEST_INT64;
79605
+ return (i64)r;
79606
+}
7942279607
7942379608
/*
7942479609
** Convert pMem so that it has type MEM_Real or MEM_Int.
7942579610
** Invalidate any prior representations.
7942679611
**
@@ -79439,11 +79624,11 @@
7943979624
sqlite3_int64 ix;
7944079625
assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
7944179626
assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
7944279627
rc = sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc);
7944379628
if( ((rc==0 || rc==1) && sqlite3Atoi64(pMem->z, &ix, pMem->n, pMem->enc)<=1)
79444
- || sqlite3RealSameAsInt(pMem->u.r, (ix = (i64)pMem->u.r))
79629
+ || sqlite3RealSameAsInt(pMem->u.r, (ix = sqlite3RealToI64(pMem->u.r)))
7944579630
){
7944679631
pMem->u.i = ix;
7944779632
MemSetTypeFlag(pMem, MEM_Int);
7944879633
}else{
7944979634
MemSetTypeFlag(pMem, MEM_Real);
@@ -80160,11 +80345,12 @@
8016080345
if( pVal==0 ){
8016180346
rc = SQLITE_NOMEM_BKPT;
8016280347
goto value_from_function_out;
8016380348
}
8016480349
80165
- assert( pCtx->pParse->rc==SQLITE_OK );
80350
+ testcase( pCtx->pParse->rc==SQLITE_ERROR );
80351
+ testcase( pCtx->pParse->rc==SQLITE_OK );
8016680352
memset(&ctx, 0, sizeof(ctx));
8016780353
ctx.pOut = pVal;
8016880354
ctx.pFunc = pFunc;
8016980355
ctx.enc = ENC(db);
8017080356
pFunc->xSFunc(&ctx, nVal, apVal);
@@ -80670,14 +80856,14 @@
8067080856
p = sqlite3DbMallocRawNN(db, sizeof(Vdbe) );
8067180857
if( p==0 ) return 0;
8067280858
memset(&p->aOp, 0, sizeof(Vdbe)-offsetof(Vdbe,aOp));
8067380859
p->db = db;
8067480860
if( db->pVdbe ){
80675
- db->pVdbe->pPrev = p;
80861
+ db->pVdbe->ppVPrev = &p->pVNext;
8067680862
}
80677
- p->pNext = db->pVdbe;
80678
- p->pPrev = 0;
80863
+ p->pVNext = db->pVdbe;
80864
+ p->ppVPrev = &db->pVdbe;
8067980865
db->pVdbe = p;
8068080866
assert( p->eVdbeState==VDBE_INIT_STATE );
8068180867
p->pParse = pParse;
8068280868
pParse->pVdbe = p;
8068380869
assert( pParse->aLabel==0 );
@@ -80755,25 +80941,32 @@
8075580941
return 0;
8075680942
}
8075780943
#endif
8075880944
8075980945
/*
80760
-** Swap all content between two VDBE structures.
80946
+** Swap byte-code between two VDBE structures.
80947
+**
80948
+** This happens after pB was previously run and returned
80949
+** SQLITE_SCHEMA. The statement was then reprepared in pA.
80950
+** This routine transfers the new bytecode in pA over to pB
80951
+** so that pB can be run again. The old pB byte code is
80952
+** moved back to pA so that it will be cleaned up when pA is
80953
+** finalized.
8076180954
*/
8076280955
SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){
80763
- Vdbe tmp, *pTmp;
80956
+ Vdbe tmp, *pTmp, **ppTmp;
8076480957
char *zTmp;
8076580958
assert( pA->db==pB->db );
8076680959
tmp = *pA;
8076780960
*pA = *pB;
8076880961
*pB = tmp;
80769
- pTmp = pA->pNext;
80770
- pA->pNext = pB->pNext;
80771
- pB->pNext = pTmp;
80772
- pTmp = pA->pPrev;
80773
- pA->pPrev = pB->pPrev;
80774
- pB->pPrev = pTmp;
80962
+ pTmp = pA->pVNext;
80963
+ pA->pVNext = pB->pVNext;
80964
+ pB->pVNext = pTmp;
80965
+ ppTmp = pA->ppVPrev;
80966
+ pA->ppVPrev = pB->ppVPrev;
80967
+ pB->ppVPrev = ppTmp;
8077580968
zTmp = pA->zSql;
8077680969
pA->zSql = pB->zSql;
8077780970
pB->zSql = zTmp;
8077880971
#ifdef SQLITE_ENABLE_NORMALIZE
8077980972
zTmp = pA->zNormSql;
@@ -81021,10 +81214,11 @@
8102181214
pCtx->argc = nArg;
8102281215
pCtx->iOp = sqlite3VdbeCurrentAddr(v);
8102381216
addr = sqlite3VdbeAddOp4(v, eCallCtx ? OP_PureFunc : OP_Function,
8102481217
p1, p2, p3, (char*)pCtx, P4_FUNCCTX);
8102581218
sqlite3VdbeChangeP5(v, eCallCtx & NC_SelfRef);
81219
+ sqlite3MayAbort(pParse);
8102681220
return addr;
8102781221
}
8102881222
8102981223
/*
8103081224
** Add an opcode that includes the p4 value with a P4_INT64 or
@@ -81089,11 +81283,11 @@
8108981283
va_end(ap);
8109081284
v = pParse->pVdbe;
8109181285
iThis = v->nOp;
8109281286
sqlite3VdbeAddOp4(v, OP_Explain, iThis, pParse->addrExplain, 0,
8109381287
zMsg, P4_DYNAMIC);
81094
- sqlite3ExplainBreakpoint(bPush?"PUSH":"", sqlite3VdbeGetOp(v,-1)->p4.z);
81288
+ sqlite3ExplainBreakpoint(bPush?"PUSH":"", sqlite3VdbeGetLastOp(v)->p4.z);
8109581289
if( bPush){
8109681290
pParse->addrExplain = iThis;
8109781291
}
8109881292
}
8109981293
}
@@ -81232,11 +81426,11 @@
8123281426
SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe *p){
8123381427
sqlite3VdbeAddOp2(p, OP_Expire, 1, 1);
8123481428
}
8123581429
8123681430
/*
81237
-** Mark the VDBE as one that can only be run multiple times.
81431
+** Mark the VDBE as one that can be run multiple times.
8123881432
*/
8123981433
SQLITE_PRIVATE void sqlite3VdbeReusable(Vdbe *p){
8124081434
int i;
8124181435
for(i=1; ALWAYS(i<p->nOp); i++){
8124281436
if( ALWAYS(p->aOp[i].opcode==OP_Expire) ){
@@ -81356,10 +81550,11 @@
8135681550
int opcode = pOp->opcode;
8135781551
if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename
8135881552
|| opcode==OP_VDestroy
8135981553
|| opcode==OP_VCreate
8136081554
|| opcode==OP_ParseSchema
81555
+ || opcode==OP_Function || opcode==OP_PureFunc
8136181556
|| ((opcode==OP_Halt || opcode==OP_HaltIfNull)
8136281557
&& ((pOp->p1)!=SQLITE_OK && pOp->p2==OE_Abort))
8136381558
){
8136481559
hasAbort = 1;
8136581560
break;
@@ -81446,12 +81641,12 @@
8144681641
Parse *pParse = p->pParse;
8144781642
int *aLabel = pParse->aLabel;
8144881643
p->readOnly = 1;
8144981644
p->bIsReader = 0;
8145081645
pOp = &p->aOp[p->nOp-1];
81451
- while(1){
81452
-
81646
+ assert( p->aOp[0].opcode==OP_Init );
81647
+ while( 1 /* Loop termates when it reaches the OP_Init opcode */ ){
8145381648
/* Only JUMP opcodes and the short list of special opcodes in the switch
8145481649
** below need to be considered. The mkopcodeh.tcl generator script groups
8145581650
** all these opcodes together near the front of the opcode list. Skip
8145681651
** any opcode that does not need processing by virtual of the fact that
8145781652
** it is larger than SQLITE_MX_JUMP_OPCODE, as a performance optimization.
@@ -81476,10 +81671,14 @@
8147681671
case OP_JournalMode: {
8147781672
p->readOnly = 0;
8147881673
p->bIsReader = 1;
8147981674
break;
8148081675
}
81676
+ case OP_Init: {
81677
+ assert( pOp->p2>=0 );
81678
+ goto resolve_p2_values_loop_exit;
81679
+ }
8148181680
#ifndef SQLITE_OMIT_VIRTUALTABLE
8148281681
case OP_VUpdate: {
8148381682
if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2;
8148481683
break;
8148581684
}
@@ -81508,15 +81707,16 @@
8150881707
/* The mkopcodeh.tcl script has so arranged things that the only
8150981708
** non-jump opcodes less than SQLITE_MX_JUMP_CODE are guaranteed to
8151081709
** have non-negative values for P2. */
8151181710
assert( (sqlite3OpcodeProperty[pOp->opcode]&OPFLG_JUMP)==0 || pOp->p2>=0);
8151281711
}
81513
- if( pOp==p->aOp ) break;
81712
+ assert( pOp>p->aOp );
8151481713
pOp--;
8151581714
}
81715
+resolve_p2_values_loop_exit:
8151681716
if( aLabel ){
81517
- sqlite3DbFreeNN(p->db, pParse->aLabel);
81717
+ sqlite3DbNNFreeNN(p->db, pParse->aLabel);
8151881718
pParse->aLabel = 0;
8151981719
}
8152081720
pParse->nLabel = 0;
8152181721
*pMaxFuncArgs = nMaxArgs;
8152281722
assert( p->bIsReader!=0 || DbMaskAllZero(p->btreeMask) );
@@ -81761,19 +81961,23 @@
8176181961
/*
8176281962
** Change the value of the opcode, or P1, P2, P3, or P5 operands
8176381963
** for a specific instruction.
8176481964
*/
8176581965
SQLITE_PRIVATE void sqlite3VdbeChangeOpcode(Vdbe *p, int addr, u8 iNewOpcode){
81966
+ assert( addr>=0 );
8176681967
sqlite3VdbeGetOp(p,addr)->opcode = iNewOpcode;
8176781968
}
8176881969
SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, int addr, int val){
81970
+ assert( addr>=0 );
8176981971
sqlite3VdbeGetOp(p,addr)->p1 = val;
8177081972
}
8177181973
SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, int addr, int val){
81974
+ assert( addr>=0 || p->db->mallocFailed );
8177281975
sqlite3VdbeGetOp(p,addr)->p2 = val;
8177381976
}
8177481977
SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, int addr, int val){
81978
+ assert( addr>=0 );
8177581979
sqlite3VdbeGetOp(p,addr)->p3 = val;
8177681980
}
8177781981
SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u16 p5){
8177881982
assert( p->nOp>0 || p->db->mallocFailed );
8177981983
if( p->nOp>0 ) p->aOp[p->nOp-1].p5 = p5;
@@ -81805,11 +82009,11 @@
8180582009
assert( p->aOp[addr].opcode==OP_Once
8180682010
|| p->aOp[addr].opcode==OP_If
8180782011
|| p->aOp[addr].opcode==OP_FkIfZero );
8180882012
assert( p->aOp[addr].p4type==0 );
8180982013
#ifdef SQLITE_VDBE_COVERAGE
81810
- sqlite3VdbeGetOp(p,-1)->iSrcLine = 0; /* Erase VdbeCoverage() macros */
82014
+ sqlite3VdbeGetLastOp(p)->iSrcLine = 0; /* Erase VdbeCoverage() macros */
8181182015
#endif
8181282016
p->nOp--;
8181382017
}else{
8181482018
sqlite3VdbeChangeP2(p, addr, p->nOp);
8181582019
}
@@ -81819,25 +82023,27 @@
8181982023
/*
8182082024
** If the input FuncDef structure is ephemeral, then free it. If
8182182025
** the FuncDef is not ephermal, then do nothing.
8182282026
*/
8182382027
static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){
82028
+ assert( db!=0 );
8182482029
if( (pDef->funcFlags & SQLITE_FUNC_EPHEM)!=0 ){
81825
- sqlite3DbFreeNN(db, pDef);
82030
+ sqlite3DbNNFreeNN(db, pDef);
8182682031
}
8182782032
}
8182882033
8182982034
/*
8183082035
** Delete a P4 value if necessary.
8183182036
*/
8183282037
static SQLITE_NOINLINE void freeP4Mem(sqlite3 *db, Mem *p){
8183382038
if( p->szMalloc ) sqlite3DbFree(db, p->zMalloc);
81834
- sqlite3DbFreeNN(db, p);
82039
+ sqlite3DbNNFreeNN(db, p);
8183582040
}
8183682041
static SQLITE_NOINLINE void freeP4FuncCtx(sqlite3 *db, sqlite3_context *p){
82042
+ assert( db!=0 );
8183782043
freeEphemeralFunction(db, p->pFunc);
81838
- sqlite3DbFreeNN(db, p);
82044
+ sqlite3DbNNFreeNN(db, p);
8183982045
}
8184082046
static void freeP4(sqlite3 *db, int p4type, void *p4){
8184182047
assert( db );
8184282048
switch( p4type ){
8184382049
case P4_FUNCCTX: {
@@ -81846,11 +82052,11 @@
8184682052
}
8184782053
case P4_REAL:
8184882054
case P4_INT64:
8184982055
case P4_DYNAMIC:
8185082056
case P4_INTARRAY: {
81851
- sqlite3DbFree(db, p4);
82057
+ if( p4 ) sqlite3DbNNFreeNN(db, p4);
8185282058
break;
8185382059
}
8185482060
case P4_KEYINFO: {
8185582061
if( db->pnBytesFreed==0 ) sqlite3KeyInfoUnref((KeyInfo*)p4);
8185682062
break;
@@ -81885,10 +82091,11 @@
8188582091
** opcodes contained within. If aOp is not NULL it is assumed to contain
8188682092
** nOp entries.
8188782093
*/
8188882094
static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){
8188982095
assert( nOp>=0 );
82096
+ assert( db!=0 );
8189082097
if( aOp ){
8189182098
Op *pOp = &aOp[nOp-1];
8189282099
while(1){ /* Exit via break */
8189382100
if( pOp->p4type <= P4_FREE_IF_LE ) freeP4(db, pOp->p4type, pOp->p4.p);
8189482101
#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
@@ -81895,11 +82102,11 @@
8189582102
sqlite3DbFree(db, pOp->zComment);
8189682103
#endif
8189782104
if( pOp==aOp ) break;
8189882105
pOp--;
8189982106
}
81900
- sqlite3DbFreeNN(db, aOp);
82107
+ sqlite3DbNNFreeNN(db, aOp);
8190182108
}
8190282109
}
8190382110
8190482111
/*
8190582112
** Link the SubProgram object passed as the second argument into the linked
@@ -82126,17 +82333,17 @@
8212682333
#ifdef SQLITE_VDBE_COVERAGE
8212782334
/*
8212882335
** Set the value if the iSrcLine field for the previously coded instruction.
8212982336
*/
8213082337
SQLITE_PRIVATE void sqlite3VdbeSetLineNumber(Vdbe *v, int iLine){
82131
- sqlite3VdbeGetOp(v,-1)->iSrcLine = iLine;
82338
+ sqlite3VdbeGetLastOp(v)->iSrcLine = iLine;
8213282339
}
8213382340
#endif /* SQLITE_VDBE_COVERAGE */
8213482341
8213582342
/*
82136
-** Return the opcode for a given address. If the address is -1, then
82137
-** return the most recently inserted opcode.
82343
+** Return the opcode for a given address. The address must be non-negative.
82344
+** See sqlite3VdbeGetLastOp() to get the most recently added opcode.
8213882345
**
8213982346
** If a memory allocation error has occurred prior to the calling of this
8214082347
** routine, then a pointer to a dummy VdbeOp will be returned. That opcode
8214182348
** is readable but not writable, though it is cast to a writable value.
8214282349
** The return of a dummy opcode allows the call to continue functioning
@@ -82148,20 +82355,23 @@
8214882355
SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){
8214982356
/* C89 specifies that the constant "dummy" will be initialized to all
8215082357
** zeros, which is correct. MSVC generates a warning, nevertheless. */
8215182358
static VdbeOp dummy; /* Ignore the MSVC warning about no initializer */
8215282359
assert( p->eVdbeState==VDBE_INIT_STATE );
82153
- if( addr<0 ){
82154
- addr = p->nOp - 1;
82155
- }
8215682360
assert( (addr>=0 && addr<p->nOp) || p->db->mallocFailed );
8215782361
if( p->db->mallocFailed ){
8215882362
return (VdbeOp*)&dummy;
8215982363
}else{
8216082364
return &p->aOp[addr];
8216182365
}
8216282366
}
82367
+
82368
+/* Return the most recently added opcode
82369
+*/
82370
+VdbeOp * sqlite3VdbeGetLastOp(Vdbe *p){
82371
+ return sqlite3VdbeGetOp(p, p->nOp - 1);
82372
+}
8216382373
8216482374
#if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS)
8216582375
/*
8216682376
** Return an integer value for one of the parameters to the opcode pOp
8216782377
** determined by character c.
@@ -82646,11 +82856,11 @@
8264682856
if( p->flags&(MEM_Agg|MEM_Dyn) ){
8264782857
testcase( (p->flags & MEM_Dyn)!=0 && p->xDel==sqlite3VdbeFrameMemDel );
8264882858
sqlite3VdbeMemRelease(p);
8264982859
p->flags = MEM_Undefined;
8265082860
}else if( p->szMalloc ){
82651
- sqlite3DbFreeNN(db, p->zMalloc);
82861
+ sqlite3DbNNFreeNN(db, p->zMalloc);
8265282862
p->szMalloc = 0;
8265382863
p->flags = MEM_Undefined;
8265482864
}
8265582865
#ifdef SQLITE_DEBUG
8265682866
else{
@@ -83638,11 +83848,11 @@
8363883848
if( sqlite3_stmt_busy((sqlite3_stmt*)p) ){
8363983849
cnt++;
8364083850
if( p->readOnly==0 ) nWrite++;
8364183851
if( p->bIsReader ) nRead++;
8364283852
}
83643
- p = p->pNext;
83853
+ p = p->pVNext;
8364483854
}
8364583855
assert( cnt==db->nVdbeActive );
8364683856
assert( nWrite==db->nVdbeWrite );
8364783857
assert( nRead==db->nVdbeRead );
8364883858
}
@@ -84167,27 +84377,28 @@
8416784377
** VdbeDelete() also unlinks the Vdbe from the list of VMs associated with
8416884378
** the database connection and frees the object itself.
8416984379
*/
8417084380
static void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){
8417184381
SubProgram *pSub, *pNext;
84382
+ assert( db!=0 );
8417284383
assert( p->db==0 || p->db==db );
8417384384
if( p->aColName ){
8417484385
releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
84175
- sqlite3DbFreeNN(db, p->aColName);
84386
+ sqlite3DbNNFreeNN(db, p->aColName);
8417684387
}
8417784388
for(pSub=p->pProgram; pSub; pSub=pNext){
8417884389
pNext = pSub->pNext;
8417984390
vdbeFreeOpArray(db, pSub->aOp, pSub->nOp);
8418084391
sqlite3DbFree(db, pSub);
8418184392
}
8418284393
if( p->eVdbeState!=VDBE_INIT_STATE ){
8418384394
releaseMemArray(p->aVar, p->nVar);
84184
- if( p->pVList ) sqlite3DbFreeNN(db, p->pVList);
84185
- if( p->pFree ) sqlite3DbFreeNN(db, p->pFree);
84395
+ if( p->pVList ) sqlite3DbNNFreeNN(db, p->pVList);
84396
+ if( p->pFree ) sqlite3DbNNFreeNN(db, p->pFree);
8418684397
}
8418784398
vdbeFreeOpArray(db, p->aOp, p->nOp);
84188
- sqlite3DbFree(db, p->zSql);
84399
+ if( p->zSql ) sqlite3DbNNFreeNN(db, p->zSql);
8418984400
#ifdef SQLITE_ENABLE_NORMALIZE
8419084401
sqlite3DbFree(db, p->zNormSql);
8419184402
{
8419284403
DblquoteStr *pThis, *pNext;
8419384404
for(pThis=p->pDblStr; pThis; pThis=pNext){
@@ -84213,24 +84424,21 @@
8421384424
SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){
8421484425
sqlite3 *db;
8421584426
8421684427
assert( p!=0 );
8421784428
db = p->db;
84429
+ assert( db!=0 );
8421884430
assert( sqlite3_mutex_held(db->mutex) );
8421984431
sqlite3VdbeClearObject(db, p);
8422084432
if( db->pnBytesFreed==0 ){
84221
- if( p->pPrev ){
84222
- p->pPrev->pNext = p->pNext;
84223
- }else{
84224
- assert( db->pVdbe==p );
84225
- db->pVdbe = p->pNext;
84226
- }
84227
- if( p->pNext ){
84228
- p->pNext->pPrev = p->pPrev;
84433
+ assert( p->ppVPrev!=0 );
84434
+ *p->ppVPrev = p->pVNext;
84435
+ if( p->pVNext ){
84436
+ p->pVNext->ppVPrev = p->ppVPrev;
8422984437
}
8423084438
}
84231
- sqlite3DbFreeNN(db, p);
84439
+ sqlite3DbNNFreeNN(db, p);
8423284440
}
8423384441
8423484442
/*
8423584443
** The cursor "p" has a pending seek operation that has not yet been
8423684444
** carried out. Seek the cursor now. If an error occurs, return
@@ -85721,11 +85929,11 @@
8572185929
** prepared statements. The flag is set to 1 for an immediate expiration
8572285930
** and set to 2 for an advisory expiration.
8572385931
*/
8572485932
SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db, int iCode){
8572585933
Vdbe *p;
85726
- for(p = db->pVdbe; p; p=p->pNext){
85934
+ for(p = db->pVdbe; p; p=p->pVNext){
8572785935
p->expired = iCode+1;
8572885936
}
8572985937
}
8573085938
8573185939
/*
@@ -85842,17 +86050,18 @@
8584286050
**
8584386051
** This function is used to free UnpackedRecord structures allocated by
8584486052
** the vdbeUnpackRecord() function found in vdbeapi.c.
8584586053
*/
8584686054
static void vdbeFreeUnpacked(sqlite3 *db, int nField, UnpackedRecord *p){
86055
+ assert( db!=0 );
8584786056
if( p ){
8584886057
int i;
8584986058
for(i=0; i<nField; i++){
8585086059
Mem *pMem = &p->aMem[i];
8585186060
if( pMem->zMalloc ) sqlite3VdbeMemReleaseMalloc(pMem);
8585286061
}
85853
- sqlite3DbFreeNN(db, p);
86062
+ sqlite3DbNNFreeNN(db, p);
8585486063
}
8585586064
}
8585686065
#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
8585786066
8585886067
#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
@@ -85919,11 +86128,11 @@
8591986128
if( preupdate.aNew ){
8592086129
int i;
8592186130
for(i=0; i<pCsr->nField; i++){
8592286131
sqlite3VdbeMemRelease(&preupdate.aNew[i]);
8592386132
}
85924
- sqlite3DbFreeNN(db, preupdate.aNew);
86133
+ sqlite3DbNNFreeNN(db, preupdate.aNew);
8592586134
}
8592686135
}
8592786136
#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
8592886137
8592986138
/************** End of vdbeaux.c *********************************************/
@@ -86036,11 +86245,13 @@
8603686245
Vdbe *v = (Vdbe*)pStmt;
8603786246
sqlite3 *db = v->db;
8603886247
if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT;
8603986248
sqlite3_mutex_enter(db->mutex);
8604086249
checkProfileCallback(db, v);
86041
- rc = sqlite3VdbeFinalize(v);
86250
+ assert( v->eVdbeState>=VDBE_READY_STATE );
86251
+ rc = sqlite3VdbeReset(v);
86252
+ sqlite3VdbeDelete(v);
8604286253
rc = sqlite3ApiExit(db, rc);
8604386254
sqlite3LeaveMutexAndCloseZombie(db);
8604486255
}
8604586256
return rc;
8604686257
}
@@ -86746,13 +86957,13 @@
8674686957
break;
8674786958
}
8674886959
sqlite3_reset(pStmt);
8674986960
if( savedPc>=0 ){
8675086961
/* Setting minWriteFileFormat to 254 is a signal to the OP_Init and
86751
- ** OP_Trace opcodes to *not* perform SQLITE_TRACE_STMT because one
86752
- ** should output has already occurred due to SQLITE_SCHEMA.
86753
- ** tag-20220401a */
86962
+ ** OP_Trace opcodes to *not* perform SQLITE_TRACE_STMT because it has
86963
+ ** already been done once on a prior invocation that failed due to
86964
+ ** SQLITE_SCHEMA. tag-20220401a */
8675486965
v->minWriteFileFormat = 254;
8675586966
}
8675686967
assert( v->expired==0 );
8675786968
}
8675886969
sqlite3_mutex_leave(db->mutex);
@@ -87358,11 +87569,11 @@
8735887569
** the mutex is released if any kind of error occurs.
8735987570
**
8736087571
** The error code stored in database p->db is overwritten with the return
8736187572
** value in any case.
8736287573
*/
87363
-static int vdbeUnbind(Vdbe *p, int i){
87574
+static int vdbeUnbind(Vdbe *p, unsigned int i){
8736487575
Mem *pVar;
8736587576
if( vdbeSafetyNotNull(p) ){
8736687577
return SQLITE_MISUSE_BKPT;
8736787578
}
8736887579
sqlite3_mutex_enter(p->db->mutex);
@@ -87371,16 +87582,15 @@
8737187582
sqlite3_mutex_leave(p->db->mutex);
8737287583
sqlite3_log(SQLITE_MISUSE,
8737387584
"bind on a busy prepared statement: [%s]", p->zSql);
8737487585
return SQLITE_MISUSE_BKPT;
8737587586
}
87376
- if( i<1 || i>p->nVar ){
87587
+ if( i>=(unsigned int)p->nVar ){
8737787588
sqlite3Error(p->db, SQLITE_RANGE);
8737887589
sqlite3_mutex_leave(p->db->mutex);
8737987590
return SQLITE_RANGE;
8738087591
}
87381
- i--;
8738287592
pVar = &p->aVar[i];
8738387593
sqlite3VdbeMemRelease(pVar);
8738487594
pVar->flags = MEM_Null;
8738587595
p->db->errCode = SQLITE_OK;
8738687596
@@ -87413,11 +87623,11 @@
8741387623
){
8741487624
Vdbe *p = (Vdbe *)pStmt;
8741587625
Mem *pVar;
8741687626
int rc;
8741787627
87418
- rc = vdbeUnbind(p, i);
87628
+ rc = vdbeUnbind(p, (u32)(i-1));
8741987629
if( rc==SQLITE_OK ){
8742087630
if( zData!=0 ){
8742187631
pVar = &p->aVar[i-1];
8742287632
rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
8742387633
if( rc==SQLITE_OK && encoding!=0 ){
@@ -87462,11 +87672,11 @@
8746287672
return bindText(pStmt, i, zData, nData, xDel, 0);
8746387673
}
8746487674
SQLITE_API int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
8746587675
int rc;
8746687676
Vdbe *p = (Vdbe *)pStmt;
87467
- rc = vdbeUnbind(p, i);
87677
+ rc = vdbeUnbind(p, (u32)(i-1));
8746887678
if( rc==SQLITE_OK ){
8746987679
sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
8747087680
sqlite3_mutex_leave(p->db->mutex);
8747187681
}
8747287682
return rc;
@@ -87475,21 +87685,21 @@
8747587685
return sqlite3_bind_int64(p, i, (i64)iValue);
8747687686
}
8747787687
SQLITE_API int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
8747887688
int rc;
8747987689
Vdbe *p = (Vdbe *)pStmt;
87480
- rc = vdbeUnbind(p, i);
87690
+ rc = vdbeUnbind(p, (u32)(i-1));
8748187691
if( rc==SQLITE_OK ){
8748287692
sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
8748387693
sqlite3_mutex_leave(p->db->mutex);
8748487694
}
8748587695
return rc;
8748687696
}
8748787697
SQLITE_API int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
8748887698
int rc;
8748987699
Vdbe *p = (Vdbe*)pStmt;
87490
- rc = vdbeUnbind(p, i);
87700
+ rc = vdbeUnbind(p, (u32)(i-1));
8749187701
if( rc==SQLITE_OK ){
8749287702
sqlite3_mutex_leave(p->db->mutex);
8749387703
}
8749487704
return rc;
8749587705
}
@@ -87500,11 +87710,11 @@
8750087710
const char *zPTtype,
8750187711
void (*xDestructor)(void*)
8750287712
){
8750387713
int rc;
8750487714
Vdbe *p = (Vdbe*)pStmt;
87505
- rc = vdbeUnbind(p, i);
87715
+ rc = vdbeUnbind(p, (u32)(i-1));
8750687716
if( rc==SQLITE_OK ){
8750787717
sqlite3VdbeMemSetPointer(&p->aVar[i-1], pPtr, zPTtype, xDestructor);
8750887718
sqlite3_mutex_leave(p->db->mutex);
8750987719
}else if( xDestructor ){
8751087720
xDestructor(pPtr);
@@ -87578,11 +87788,11 @@
8757887788
return rc;
8757987789
}
8758087790
SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
8758187791
int rc;
8758287792
Vdbe *p = (Vdbe *)pStmt;
87583
- rc = vdbeUnbind(p, i);
87793
+ rc = vdbeUnbind(p, (u32)(i-1));
8758487794
if( rc==SQLITE_OK ){
8758587795
#ifndef SQLITE_OMIT_INCRBLOB
8758687796
sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
8758787797
#else
8758887798
rc = sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
@@ -87738,11 +87948,11 @@
8773887948
#endif
8773987949
sqlite3_mutex_enter(pDb->mutex);
8774087950
if( pStmt==0 ){
8774187951
pNext = (sqlite3_stmt*)pDb->pVdbe;
8774287952
}else{
87743
- pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
87953
+ pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pVNext;
8774487954
}
8774587955
sqlite3_mutex_leave(pDb->mutex);
8774687956
return pNext;
8774787957
}
8774887958
@@ -87763,12 +87973,15 @@
8776387973
if( op==SQLITE_STMTSTATUS_MEMUSED ){
8776487974
sqlite3 *db = pVdbe->db;
8776587975
sqlite3_mutex_enter(db->mutex);
8776687976
v = 0;
8776787977
db->pnBytesFreed = (int*)&v;
87978
+ assert( db->lookaside.pEnd==db->lookaside.pTrueEnd );
87979
+ db->lookaside.pEnd = db->lookaside.pStart;
8776887980
sqlite3VdbeDelete(pVdbe);
8776987981
db->pnBytesFreed = 0;
87982
+ db->lookaside.pEnd = db->lookaside.pTrueEnd;
8777087983
sqlite3_mutex_leave(db->mutex);
8777187984
}else{
8777287985
v = pVdbe->aCounter[op];
8777387986
if( resetFlag ) pVdbe->aCounter[op] = 0;
8777487987
}
@@ -88604,11 +88817,12 @@
8860488817
** floating point value of rValue. Return true and set *piValue to the
8860588818
** integer value if the string is in range to be an integer. Otherwise,
8860688819
** return false.
8860788820
*/
8860888821
static int alsoAnInt(Mem *pRec, double rValue, i64 *piValue){
88609
- i64 iValue = (double)rValue;
88822
+ i64 iValue;
88823
+ iValue = sqlite3RealToI64(rValue);
8861088824
if( sqlite3RealSameAsInt(rValue,iValue) ){
8861188825
*piValue = iValue;
8861288826
return 1;
8861388827
}
8861488828
return 0==sqlite3Atoi64(pRec->z, piValue, pRec->n, pRec->enc);
@@ -88766,21 +88980,22 @@
8876688980
**
8876788981
** Unlike applyNumericAffinity(), this routine does not modify pMem->flags.
8876888982
** But it does set pMem->u.r and pMem->u.i appropriately.
8876988983
*/
8877088984
static u16 numericType(Mem *pMem){
88771
- if( pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal) ){
88985
+ assert( (pMem->flags & MEM_Null)==0
88986
+ || pMem->db==0 || pMem->db->mallocFailed );
88987
+ if( pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null) ){
8877288988
testcase( pMem->flags & MEM_Int );
8877388989
testcase( pMem->flags & MEM_Real );
8877488990
testcase( pMem->flags & MEM_IntReal );
88775
- return pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal);
88991
+ return pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null);
8877688992
}
88777
- if( pMem->flags & (MEM_Str|MEM_Blob) ){
88778
- testcase( pMem->flags & MEM_Str );
88779
- testcase( pMem->flags & MEM_Blob );
88780
- return computeNumericType(pMem);
88781
- }
88993
+ assert( pMem->flags & (MEM_Str|MEM_Blob) );
88994
+ testcase( pMem->flags & MEM_Str );
88995
+ testcase( pMem->flags & MEM_Blob );
88996
+ return computeNumericType(pMem);
8878288997
return 0;
8878388998
}
8878488999
8878589000
#ifdef SQLITE_DEBUG
8878689001
/*
@@ -89294,11 +89509,11 @@
8929489509
**
8929589510
** P2 is not used by the byte-code engine. However, if P2 is positive
8929689511
** and also less than the current address, then the "EXPLAIN" output
8929789512
** formatter in the CLI will indent all opcodes from the P2 opcode up
8929889513
** to be not including the current Return. P2 should be the first opcode
89299
-** in the subroutine from which this opcode is returnning. Thus the P2
89514
+** in the subroutine from which this opcode is returning. Thus the P2
8930089515
** value is a byte-code indentation hint. See tag-20220407a in
8930189516
** wherecode.c and shell.c.
8930289517
*/
8930389518
case OP_Return: { /* in1 */
8930489519
pIn1 = &aMem[pOp->p1];
@@ -89956,11 +90171,11 @@
8995690171
}
8995790172
nByte = pIn1->n + pIn2->n;
8995890173
if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
8995990174
goto too_big;
8996090175
}
89961
- if( sqlite3VdbeMemGrow(pOut, (int)nByte+3, pOut==pIn2) ){
90176
+ if( sqlite3VdbeMemGrow(pOut, (int)nByte+2, pOut==pIn2) ){
8996290177
goto no_mem;
8996390178
}
8996490179
MemSetTypeFlag(pOut, MEM_Str);
8996590180
if( pOut!=pIn2 ){
8996690181
memcpy(pOut->z, pIn2->z, pIn2->n);
@@ -89968,13 +90183,13 @@
8996890183
pIn2->flags = flags2;
8996990184
}
8997090185
memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n);
8997190186
assert( (pIn1->flags & MEM_Dyn) == (flags1 & MEM_Dyn) );
8997290187
pIn1->flags = flags1;
90188
+ if( encoding>SQLITE_UTF8 ) nByte &= ~1;
8997390189
pOut->z[nByte]=0;
8997490190
pOut->z[nByte+1] = 0;
89975
- pOut->z[nByte+2] = 0;
8997690191
pOut->flags |= MEM_Term;
8997790192
pOut->n = (int)nByte;
8997890193
pOut->enc = encoding;
8997990194
UPDATE_MAX_BLOBSIZE(pOut);
8998090195
break;
@@ -90021,25 +90236,24 @@
9002190236
case OP_Add: /* same as TK_PLUS, in1, in2, out3 */
9002290237
case OP_Subtract: /* same as TK_MINUS, in1, in2, out3 */
9002390238
case OP_Multiply: /* same as TK_STAR, in1, in2, out3 */
9002490239
case OP_Divide: /* same as TK_SLASH, in1, in2, out3 */
9002590240
case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */
90026
- u16 flags; /* Combined MEM_* flags from both inputs */
9002790241
u16 type1; /* Numeric type of left operand */
9002890242
u16 type2; /* Numeric type of right operand */
9002990243
i64 iA; /* Integer value of left operand */
9003090244
i64 iB; /* Integer value of right operand */
9003190245
double rA; /* Real value of left operand */
9003290246
double rB; /* Real value of right operand */
9003390247
9003490248
pIn1 = &aMem[pOp->p1];
90035
- type1 = numericType(pIn1);
90249
+ type1 = pIn1->flags;
9003690250
pIn2 = &aMem[pOp->p2];
90037
- type2 = numericType(pIn2);
90251
+ type2 = pIn2->flags;
9003890252
pOut = &aMem[pOp->p3];
90039
- flags = pIn1->flags | pIn2->flags;
9004090253
if( (type1 & type2 & MEM_Int)!=0 ){
90254
+int_math:
9004190255
iA = pIn1->u.i;
9004290256
iB = pIn2->u.i;
9004390257
switch( pOp->opcode ){
9004490258
case OP_Add: if( sqlite3AddInt64(&iB,iA) ) goto fp_math; break;
9004590259
case OP_Subtract: if( sqlite3SubInt64(&iB,iA) ) goto fp_math; break;
@@ -90057,13 +90271,16 @@
9005790271
break;
9005890272
}
9005990273
}
9006090274
pOut->u.i = iB;
9006190275
MemSetTypeFlag(pOut, MEM_Int);
90062
- }else if( (flags & MEM_Null)!=0 ){
90276
+ }else if( ((type1 | type2) & MEM_Null)!=0 ){
9006390277
goto arithmetic_result_is_null;
9006490278
}else{
90279
+ type1 = numericType(pIn1);
90280
+ type2 = numericType(pIn2);
90281
+ if( (type1 & type2 & MEM_Int)!=0 ) goto int_math;
9006590282
fp_math:
9006690283
rA = sqlite3VdbeRealValue(pIn1);
9006790284
rB = sqlite3VdbeRealValue(pIn2);
9006890285
switch( pOp->opcode ){
9006990286
case OP_Add: rB += rA; break;
@@ -90929,15 +91146,18 @@
9092991146
**
9093091147
** Check the cursor P1 to see if it is currently pointing at a NULL row.
9093191148
** If it is, then set register P3 to NULL and jump immediately to P2.
9093291149
** If P1 is not on a NULL row, then fall through without making any
9093391150
** changes.
91151
+**
91152
+** If P1 is not an open cursor, then this opcode is a no-op.
9093491153
*/
9093591154
case OP_IfNullRow: { /* jump */
91155
+ VdbeCursor *pC;
9093691156
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
90937
- assert( p->apCsr[pOp->p1]!=0 );
90938
- if( p->apCsr[pOp->p1]->nullRow ){
91157
+ pC = p->apCsr[pOp->p1];
91158
+ if( ALWAYS(pC) && pC->nullRow ){
9093991159
sqlite3VdbeMemSetNull(aMem + pOp->p3);
9094091160
goto jump_to_p2;
9094191161
}
9094291162
break;
9094391163
}
@@ -92249,11 +92469,11 @@
9224992469
assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
9225092470
/* See note about index shifting on OP_ReadCookie */
9225192471
rc = sqlite3BtreeUpdateMeta(pDb->pBt, pOp->p2, pOp->p3);
9225292472
if( pOp->p2==BTREE_SCHEMA_VERSION ){
9225392473
/* When the schema cookie changes, record the new cookie internally */
92254
- pDb->pSchema->schema_cookie = pOp->p3 - pOp->p5;
92474
+ *(u32*)&pDb->pSchema->schema_cookie = *(u32*)&pOp->p3 - pOp->p5;
9225592475
db->mDbFlags |= DBFLAG_SchemaChange;
9225692476
sqlite3FkClearTriggerCache(db, pOp->p1);
9225792477
}else if( pOp->p2==BTREE_FILE_FORMAT ){
9225892478
/* Record changes in the file format */
9225992479
pDb->pSchema->file_format = pOp->p3;
@@ -93040,11 +93260,11 @@
9304093260
**
9304193261
** <li> If the cursor is successfully moved to the target row by 0 or more
9304293262
** sqlite3BtreeNext() calls, then jump to This.P2, which will land just
9304393263
** past the OP_IdxGT or OP_IdxGE opcode that follows the OP_SeekGE.
9304493264
**
93045
-** <li> If the cursor ends up past the target row (indicating the the target
93265
+** <li> If the cursor ends up past the target row (indicating that the target
9304693266
** row does not exist in the btree) then jump to SeekOP.P2.
9304793267
** </ol>
9304893268
*/
9304993269
case OP_SeekScan: {
9305093270
VdbeCursor *pC;
@@ -94376,11 +94596,13 @@
9437694596
rc = sqlite3VdbeSorterNext(db, pC);
9437794597
goto next_tail;
9437894598
9437994599
case OP_Prev: /* jump */
9438094600
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
94381
- assert( pOp->p5<ArraySize(p->aCounter) );
94601
+ assert( pOp->p5==0
94602
+ || pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP
94603
+ || pOp->p5==SQLITE_STMTSTATUS_AUTOINDEX);
9438294604
pC = p->apCsr[pOp->p1];
9438394605
assert( pC!=0 );
9438494606
assert( pC->deferredMoveto==0 );
9438594607
assert( pC->eCurType==CURTYPE_BTREE );
9438694608
assert( pC->seekOp==OP_SeekLT || pC->seekOp==OP_SeekLE
@@ -94389,11 +94611,13 @@
9438994611
rc = sqlite3BtreePrevious(pC->uc.pCursor, pOp->p3);
9439094612
goto next_tail;
9439194613
9439294614
case OP_Next: /* jump */
9439394615
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
94394
- assert( pOp->p5<ArraySize(p->aCounter) );
94616
+ assert( pOp->p5==0
94617
+ || pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP
94618
+ || pOp->p5==SQLITE_STMTSTATUS_AUTOINDEX);
9439594619
pC = p->apCsr[pOp->p1];
9439694620
assert( pC!=0 );
9439794621
assert( pC->deferredMoveto==0 );
9439894622
assert( pC->eCurType==CURTYPE_BTREE );
9439994623
assert( pC->seekOp==OP_SeekGT || pC->seekOp==OP_SeekGE
@@ -94596,14 +94820,14 @@
9459694820
9459794821
/* The IdxRowid and Seek opcodes are combined because of the commonality
9459894822
** of sqlite3VdbeCursorRestore() and sqlite3VdbeIdxRowid(). */
9459994823
rc = sqlite3VdbeCursorRestore(pC);
9460094824
94601
- /* sqlite3VbeCursorRestore() can only fail if the record has been deleted
94602
- ** out from under the cursor. That will never happens for an IdxRowid
94603
- ** or Seek opcode */
94604
- if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error;
94825
+ /* sqlite3VdbeCursorRestore() may fail if the cursor has been disturbed
94826
+ ** since it was last positioned and an error (e.g. OOM or an IO error)
94827
+ ** occurs while trying to reposition it. */
94828
+ if( rc!=SQLITE_OK ) goto abort_due_to_error;
9460594829
9460694830
if( !pC->nullRow ){
9460794831
rowid = 0; /* Not needed. Only used to silence a warning. */
9460894832
rc = sqlite3VdbeIdxRowid(db, pC->uc.pCursor, &rowid);
9460994833
if( rc!=SQLITE_OK ){
@@ -95501,11 +95725,11 @@
9550195725
9550295726
/* Opcode: OffsetLimit P1 P2 P3 * *
9550395727
** Synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)
9550495728
**
9550595729
** This opcode performs a commonly used computation associated with
95506
-** LIMIT and OFFSET process. r[P1] holds the limit counter. r[P3]
95730
+** LIMIT and OFFSET processing. r[P1] holds the limit counter. r[P3]
9550795731
** holds the offset counter. The opcode computes the combined value
9550895732
** of the LIMIT and OFFSET and stores that value in r[P2]. The r[P2]
9550995733
** value computed is the total number of rows that will need to be
9551095734
** visited in order to complete the query.
9551195735
**
@@ -101098,10 +101322,12 @@
101098101322
sqlite3_file *pJfd, /* Preallocated, blank file handle */
101099101323
int flags, /* Opening flags */
101100101324
int nSpill /* Bytes buffered before opening the file */
101101101325
){
101102101326
MemJournal *p = (MemJournal*)pJfd;
101327
+
101328
+ assert( zName || nSpill<0 || (flags & SQLITE_OPEN_EXCLUSIVE) );
101103101329
101104101330
/* Zero the file-handle object. If nSpill was passed zero, initialize
101105101331
** it using the sqlite3OsOpen() function of the underlying VFS. In this
101106101332
** case none of the code in this module is executed as a result of calls
101107101333
** made on the journal file-handle. */
@@ -101526,37 +101752,25 @@
101526101752
pDup = sqlite3ExprDup(db, pOrig, 0);
101527101753
if( db->mallocFailed ){
101528101754
sqlite3ExprDelete(db, pDup);
101529101755
pDup = 0;
101530101756
}else{
101757
+ Expr temp;
101531101758
incrAggFunctionDepth(pDup, nSubquery);
101532101759
if( pExpr->op==TK_COLLATE ){
101533101760
assert( !ExprHasProperty(pExpr, EP_IntValue) );
101534101761
pDup = sqlite3ExprAddCollateString(pParse, pDup, pExpr->u.zToken);
101535101762
}
101536
-
101537
- /* Before calling sqlite3ExprDelete(), set the EP_Static flag. This
101538
- ** prevents ExprDelete() from deleting the Expr structure itself,
101539
- ** allowing it to be repopulated by the memcpy() on the following line.
101540
- ** The pExpr->u.zToken might point into memory that will be freed by the
101541
- ** sqlite3DbFree(db, pDup) on the last line of this block, so be sure to
101542
- ** make a copy of the token before doing the sqlite3DbFree().
101543
- */
101544
- ExprSetProperty(pExpr, EP_Static);
101545
- sqlite3ExprDelete(db, pExpr);
101546
- memcpy(pExpr, pDup, sizeof(*pExpr));
101547
- if( !ExprHasProperty(pExpr, EP_IntValue) && pExpr->u.zToken!=0 ){
101548
- assert( (pExpr->flags & (EP_Reduced|EP_TokenOnly))==0 );
101549
- pExpr->u.zToken = sqlite3DbStrDup(db, pExpr->u.zToken);
101550
- pExpr->flags |= EP_MemToken;
101551
- }
101763
+ memcpy(&temp, pDup, sizeof(Expr));
101764
+ memcpy(pDup, pExpr, sizeof(Expr));
101765
+ memcpy(pExpr, &temp, sizeof(Expr));
101552101766
if( ExprHasProperty(pExpr, EP_WinFunc) ){
101553101767
if( ALWAYS(pExpr->y.pWin!=0) ){
101554101768
pExpr->y.pWin->pOwner = pExpr;
101555101769
}
101556101770
}
101557
- sqlite3DbFree(db, pDup);
101771
+ sqlite3ExprDeferredDelete(pParse, pDup);
101558101772
}
101559101773
}
101560101774
101561101775
/*
101562101776
** Subqueries stores the original database, table and column names for their
@@ -101755,11 +101969,11 @@
101755101969
for(i=0, pItem=pSrcList->a; i<pSrcList->nSrc; i++, pItem++){
101756101970
u8 hCol;
101757101971
pTab = pItem->pTab;
101758101972
assert( pTab!=0 && pTab->zName!=0 );
101759101973
assert( pTab->nCol>0 || pParse->nErr );
101760
- assert( pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
101974
+ assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
101761101975
if( pItem->fg.isNestedFrom ){
101762101976
/* In this case, pItem is a subquery that has been formed from a
101763101977
** parenthesized subset of the FROM clause terms. Example:
101764101978
** .... FROM t1 LEFT JOIN (t2 RIGHT JOIN t3 USING(x)) USING(y) ...
101765101979
** \_________________________/
@@ -103265,12 +103479,12 @@
103265103479
*/
103266103480
assert( (sNC.ncFlags & (NC_UAggInfo|NC_UUpsert|NC_UBaseReg))==0 );
103267103481
sNC.uNC.pEList = p->pEList;
103268103482
sNC.ncFlags |= NC_UEList;
103269103483
if( p->pHaving ){
103270
- if( !pGroupBy ){
103271
- sqlite3ErrorMsg(pParse, "a GROUP BY clause is required before HAVING");
103484
+ if( (p->selFlags & SF_Aggregate)==0 ){
103485
+ sqlite3ErrorMsg(pParse, "HAVING clause on a non-aggregate query");
103272103486
return WRC_Abort;
103273103487
}
103274103488
if( sqlite3ResolveExprNames(&sNC, p->pHaving) ) return WRC_Abort;
103275103489
}
103276103490
if( sqlite3ResolveExprNames(&sNC, p->pWhere) ) return WRC_Abort;
@@ -104361,11 +104575,13 @@
104361104575
** Also propagate EP_Propagate flags up from Expr.x.pList to Expr.flags,
104362104576
** if appropriate.
104363104577
*/
104364104578
static void exprSetHeight(Expr *p){
104365104579
int nHeight = p->pLeft ? p->pLeft->nHeight : 0;
104366
- if( p->pRight && p->pRight->nHeight>nHeight ) nHeight = p->pRight->nHeight;
104580
+ if( NEVER(p->pRight) && p->pRight->nHeight>nHeight ){
104581
+ nHeight = p->pRight->nHeight;
104582
+ }
104367104583
if( ExprUseXSelect(p) ){
104368104584
heightOfSelect(p->x.pSelect, &nHeight);
104369104585
}else if( p->x.pList ){
104370104586
heightOfExprList(p->x.pList, &nHeight);
104371104587
p->flags |= EP_Propagate & sqlite3ExprListFlags(p->x.pList);
@@ -104504,19 +104720,30 @@
104504104720
if( pRoot==0 ){
104505104721
assert( db->mallocFailed );
104506104722
sqlite3ExprDelete(db, pLeft);
104507104723
sqlite3ExprDelete(db, pRight);
104508104724
}else{
104725
+ assert( ExprUseXList(pRoot) );
104726
+ assert( pRoot->x.pSelect==0 );
104509104727
if( pRight ){
104510104728
pRoot->pRight = pRight;
104511104729
pRoot->flags |= EP_Propagate & pRight->flags;
104730
+#if SQLITE_MAX_EXPR_DEPTH>0
104731
+ pRoot->nHeight = pRight->nHeight+1;
104732
+ }else{
104733
+ pRoot->nHeight = 1;
104734
+#endif
104512104735
}
104513104736
if( pLeft ){
104514104737
pRoot->pLeft = pLeft;
104515104738
pRoot->flags |= EP_Propagate & pLeft->flags;
104739
+#if SQLITE_MAX_EXPR_DEPTH>0
104740
+ if( pLeft->nHeight>=pRoot->nHeight ){
104741
+ pRoot->nHeight = pLeft->nHeight+1;
104742
+ }
104743
+#endif
104516104744
}
104517
- exprSetHeight(pRoot);
104518104745
}
104519104746
}
104520104747
104521104748
/*
104522104749
** Allocate an Expr node which joins as many as two subtrees.
@@ -104798,10 +105025,11 @@
104798105025
/*
104799105026
** Recursively delete an expression tree.
104800105027
*/
104801105028
static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){
104802105029
assert( p!=0 );
105030
+ assert( db!=0 );
104803105031
assert( !ExprUseUValue(p) || p->u.iValue>=0 );
104804105032
assert( !ExprUseYWin(p) || !ExprUseYSub(p) );
104805105033
assert( !ExprUseYWin(p) || p->y.pWin!=0 || db->mallocFailed );
104806105034
assert( p->op!=TK_FUNCTION || !ExprUseYSub(p) );
104807105035
#ifdef SQLITE_DEBUG
@@ -104829,16 +105057,12 @@
104829105057
sqlite3WindowDelete(db, p->y.pWin);
104830105058
}
104831105059
#endif
104832105060
}
104833105061
}
104834
- if( ExprHasProperty(p, EP_MemToken) ){
104835
- assert( !ExprHasProperty(p, EP_IntValue) );
104836
- sqlite3DbFree(db, p->u.zToken);
104837
- }
104838105062
if( !ExprHasProperty(p, EP_Static) ){
104839
- sqlite3DbFreeNN(db, p);
105063
+ sqlite3DbNNFreeNN(db, p);
104840105064
}
104841105065
}
104842105066
SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){
104843105067
if( p ) sqlite3ExprDeleteNN(db, p);
104844105068
}
@@ -104865,12 +105089,13 @@
104865105089
**
104866105090
** The deferred delete is (currently) implemented by adding the
104867105091
** pExpr to the pParse->pConstExpr list with a register number of 0.
104868105092
*/
104869105093
SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){
104870
- pParse->pConstExpr =
104871
- sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr);
105094
+ sqlite3ParserAddCleanup(pParse,
105095
+ (void(*)(sqlite3*,void*))sqlite3ExprDelete,
105096
+ pExpr);
104872105097
}
104873105098
104874105099
/* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the
104875105100
** expression.
104876105101
*/
@@ -104940,11 +105165,10 @@
104940105165
){
104941105166
nSize = EXPR_FULLSIZE;
104942105167
}else{
104943105168
assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) );
104944105169
assert( !ExprHasProperty(p, EP_OuterON) );
104945
- assert( !ExprHasProperty(p, EP_MemToken) );
104946105170
assert( !ExprHasVVAProperty(p, EP_NoReduce) );
104947105171
if( p->pLeft || p->x.pList ){
104948105172
nSize = EXPR_REDUCEDSIZE | EP_Reduced;
104949105173
}else{
104950105174
assert( p->pRight==0 );
@@ -105044,11 +105268,11 @@
105044105268
memset(&zAlloc[nSize], 0, EXPR_FULLSIZE-nSize);
105045105269
}
105046105270
}
105047105271
105048105272
/* Set the EP_Reduced, EP_TokenOnly, and EP_Static flags appropriately. */
105049
- pNew->flags &= ~(EP_Reduced|EP_TokenOnly|EP_Static|EP_MemToken);
105273
+ pNew->flags &= ~(EP_Reduced|EP_TokenOnly|EP_Static);
105050105274
pNew->flags |= nStructSize & (EP_Reduced|EP_TokenOnly);
105051105275
pNew->flags |= staticFlag;
105052105276
ExprClearVVAProperties(pNew);
105053105277
if( dupFlags ){
105054105278
ExprSetVVAProperty(pNew, EP_Immutable);
@@ -105620,16 +105844,17 @@
105620105844
*/
105621105845
static SQLITE_NOINLINE void exprListDeleteNN(sqlite3 *db, ExprList *pList){
105622105846
int i = pList->nExpr;
105623105847
struct ExprList_item *pItem = pList->a;
105624105848
assert( pList->nExpr>0 );
105849
+ assert( db!=0 );
105625105850
do{
105626105851
sqlite3ExprDelete(db, pItem->pExpr);
105627
- sqlite3DbFree(db, pItem->zEName);
105852
+ if( pItem->zEName ) sqlite3DbNNFreeNN(db, pItem->zEName);
105628105853
pItem++;
105629105854
}while( --i>0 );
105630
- sqlite3DbFreeNN(db, pList);
105855
+ sqlite3DbNNFreeNN(db, pList);
105631105856
}
105632105857
SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){
105633105858
if( pList ) exprListDeleteNN(db, pList);
105634105859
}
105635105860
@@ -106916,11 +107141,11 @@
106916107141
if( pLimit ){
106917107142
pLimit->affExpr = SQLITE_AFF_NUMERIC;
106918107143
pLimit = sqlite3PExpr(pParse, TK_NE,
106919107144
sqlite3ExprDup(db, pSel->pLimit->pLeft, 0), pLimit);
106920107145
}
106921
- sqlite3ExprDelete(db, pSel->pLimit->pLeft);
107146
+ sqlite3ExprDeferredDelete(pParse, pSel->pLimit->pLeft);
106922107147
pSel->pLimit->pLeft = pLimit;
106923107148
}else{
106924107149
/* If there is no pre-existing limit add a limit of 1 */
106925107150
pLimit = sqlite3Expr(pParse->db, TK_INTEGER, "1");
106926107151
pSel->pLimit = sqlite3PExpr(pParse, TK_LIMIT, pLimit, 0);
@@ -107430,11 +107655,11 @@
107430107655
u8 p5 /* P5 value for OP_Column + FLAGS */
107431107656
){
107432107657
assert( pParse->pVdbe!=0 );
107433107658
sqlite3ExprCodeGetColumnOfTable(pParse->pVdbe, pTab, iTable, iColumn, iReg);
107434107659
if( p5 ){
107435
- VdbeOp *pOp = sqlite3VdbeGetOp(pParse->pVdbe,-1);
107660
+ VdbeOp *pOp = sqlite3VdbeGetLastOp(pParse->pVdbe);
107436107661
if( pOp->opcode==OP_Column ) pOp->p5 = p5;
107437107662
}
107438107663
return iReg;
107439107664
}
107440107665
@@ -107499,11 +107724,11 @@
107499107724
/*
107500107725
** If the last opcode is a OP_Copy, then set the do-not-merge flag (p5)
107501107726
** so that a subsequent copy will not be merged into this one.
107502107727
*/
107503107728
static void setDoNotMergeFlagOnCopy(Vdbe *v){
107504
- if( sqlite3VdbeGetOp(v, -1)->opcode==OP_Copy ){
107729
+ if( sqlite3VdbeGetLastOp(v)->opcode==OP_Copy ){
107505107730
sqlite3VdbeChangeP5(v, 1); /* Tag trailing OP_Copy as not mergable */
107506107731
}
107507107732
}
107508107733
107509107734
/*
@@ -107670,11 +107895,11 @@
107670107895
Table *pTab = pCol->pTab;
107671107896
sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab,
107672107897
pCol->iSorterColumn, target);
107673107898
if( pCol->iColumn<0 ){
107674107899
VdbeComment((v,"%s.rowid",pTab->zName));
107675
- }else{
107900
+ }else if( ALWAYS(pTab!=0) ){
107676107901
VdbeComment((v,"%s.%s",
107677107902
pTab->zName, pTab->aCol[pCol->iColumn].zCnName));
107678107903
if( pTab->aCol[pCol->iColumn].affinity==SQLITE_AFF_REAL ){
107679107904
sqlite3VdbeAddOp1(v, OP_RealAffinity, target);
107680107905
}
@@ -108265,10 +108490,25 @@
108265108490
** on a LEFT JOIN NULL row.
108266108491
*/
108267108492
case TK_IF_NULL_ROW: {
108268108493
int addrINR;
108269108494
u8 okConstFactor = pParse->okConstFactor;
108495
+ AggInfo *pAggInfo = pExpr->pAggInfo;
108496
+ if( pAggInfo ){
108497
+ assert( pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn );
108498
+ if( !pAggInfo->directMode ){
108499
+ inReg = pAggInfo->aCol[pExpr->iAgg].iMem;
108500
+ break;
108501
+ }
108502
+ if( pExpr->pAggInfo->useSortingIdx ){
108503
+ sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab,
108504
+ pAggInfo->aCol[pExpr->iAgg].iSorterColumn,
108505
+ target);
108506
+ inReg = target;
108507
+ break;
108508
+ }
108509
+ }
108270108510
addrINR = sqlite3VdbeAddOp1(v, OP_IfNullRow, pExpr->iTable);
108271108511
/* Temporarily disable factoring of constant expressions, since
108272108512
** even though expressions may appear to be constant, they are not
108273108513
** really constant because they originate from the right-hand side
108274108514
** of a LEFT JOIN. */
@@ -108606,11 +108846,11 @@
108606108846
}else{
108607108847
int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i);
108608108848
if( inReg!=target+i ){
108609108849
VdbeOp *pOp;
108610108850
if( copyOp==OP_Copy
108611
- && (pOp=sqlite3VdbeGetOp(v, -1))->opcode==OP_Copy
108851
+ && (pOp=sqlite3VdbeGetLastOp(v))->opcode==OP_Copy
108612108852
&& pOp->p1+pOp->p3+1==inReg
108613108853
&& pOp->p2+pOp->p3+1==target+i
108614108854
&& pOp->p5==0 /* The do-not-merge flag must be clear */
108615108855
){
108616108856
pOp->p3++;
@@ -109642,10 +109882,11 @@
109642109882
** fact is exploited for efficiency.
109643109883
*/
109644109884
SQLITE_PRIVATE int sqlite3ReferencesSrcList(Parse *pParse, Expr *pExpr, SrcList *pSrcList){
109645109885
Walker w;
109646109886
struct RefSrcList x;
109887
+ assert( pParse->db!=0 );
109647109888
memset(&w, 0, sizeof(w));
109648109889
memset(&x, 0, sizeof(x));
109649109890
w.xExprCallback = exprRefToSrcList;
109650109891
w.xSelectCallback = selectRefEnter;
109651109892
w.xSelectCallback2 = selectRefLeave;
@@ -109658,11 +109899,11 @@
109658109899
#ifndef SQLITE_OMIT_WINDOWFUNC
109659109900
if( ExprHasProperty(pExpr, EP_WinFunc) ){
109660109901
sqlite3WalkExpr(&w, pExpr->y.pWin->pFilter);
109661109902
}
109662109903
#endif
109663
- sqlite3DbFree(pParse->db, x.aiExclude);
109904
+ if( x.aiExclude ) sqlite3DbNNFreeNN(pParse->db, x.aiExclude);
109664109905
if( w.eCode & 0x01 ){
109665109906
return 1;
109666109907
}else if( w.eCode ){
109667109908
return 0;
109668109909
}else{
@@ -109689,21 +109930,22 @@
109689109930
){
109690109931
AggInfo *pAggInfo = pExpr->pAggInfo;
109691109932
int iAgg = pExpr->iAgg;
109692109933
Parse *pParse = pWalker->pParse;
109693109934
sqlite3 *db = pParse->db;
109694
- assert( pExpr->op==TK_AGG_COLUMN || pExpr->op==TK_AGG_FUNCTION );
109695
- if( pExpr->op==TK_AGG_COLUMN ){
109935
+ if( pExpr->op!=TK_AGG_FUNCTION ){
109936
+ assert( pExpr->op==TK_AGG_COLUMN || pExpr->op==TK_IF_NULL_ROW );
109696109937
assert( iAgg>=0 && iAgg<pAggInfo->nColumn );
109697109938
if( pAggInfo->aCol[iAgg].pCExpr==pExpr ){
109698109939
pExpr = sqlite3ExprDup(db, pExpr, 0);
109699109940
if( pExpr ){
109700109941
pAggInfo->aCol[iAgg].pCExpr = pExpr;
109701109942
sqlite3ExprDeferredDelete(pParse, pExpr);
109702109943
}
109703109944
}
109704109945
}else{
109946
+ assert( pExpr->op==TK_AGG_FUNCTION );
109705109947
assert( iAgg>=0 && iAgg<pAggInfo->nFunc );
109706109948
if( pAggInfo->aFunc[iAgg].pFExpr==pExpr ){
109707109949
pExpr = sqlite3ExprDup(db, pExpr, 0);
109708109950
if( pExpr ){
109709109951
pAggInfo->aFunc[iAgg].pFExpr = pExpr;
@@ -109770,14 +110012,16 @@
109770110012
SrcList *pSrcList = pNC->pSrcList;
109771110013
AggInfo *pAggInfo = pNC->uNC.pAggInfo;
109772110014
109773110015
assert( pNC->ncFlags & NC_UAggInfo );
109774110016
switch( pExpr->op ){
110017
+ case TK_IF_NULL_ROW:
109775110018
case TK_AGG_COLUMN:
109776110019
case TK_COLUMN: {
109777110020
testcase( pExpr->op==TK_AGG_COLUMN );
109778110021
testcase( pExpr->op==TK_COLUMN );
110022
+ testcase( pExpr->op==TK_IF_NULL_ROW );
109779110023
/* Check to see if the column is in one of the tables in the FROM
109780110024
** clause of the aggregate query */
109781110025
if( ALWAYS(pSrcList!=0) ){
109782110026
SrcItem *pItem = pSrcList->a;
109783110027
for(i=0; i<pSrcList->nSrc; i++, pItem++){
@@ -109791,12 +110035,14 @@
109791110035
** is not an entry there already.
109792110036
*/
109793110037
int k;
109794110038
pCol = pAggInfo->aCol;
109795110039
for(k=0; k<pAggInfo->nColumn; k++, pCol++){
109796
- if( pCol->iTable==pExpr->iTable &&
109797
- pCol->iColumn==pExpr->iColumn ){
110040
+ if( pCol->iTable==pExpr->iTable
110041
+ && pCol->iColumn==pExpr->iColumn
110042
+ && pExpr->op!=TK_IF_NULL_ROW
110043
+ ){
109798110044
break;
109799110045
}
109800110046
}
109801110047
if( (k>=pAggInfo->nColumn)
109802110048
&& (k = addAggInfoColumn(pParse->db, pAggInfo))>=0
@@ -109807,19 +110053,21 @@
109807110053
pCol->iTable = pExpr->iTable;
109808110054
pCol->iColumn = pExpr->iColumn;
109809110055
pCol->iMem = ++pParse->nMem;
109810110056
pCol->iSorterColumn = -1;
109811110057
pCol->pCExpr = pExpr;
109812
- if( pAggInfo->pGroupBy ){
110058
+ if( pAggInfo->pGroupBy && pExpr->op!=TK_IF_NULL_ROW ){
109813110059
int j, n;
109814110060
ExprList *pGB = pAggInfo->pGroupBy;
109815110061
struct ExprList_item *pTerm = pGB->a;
109816110062
n = pGB->nExpr;
109817110063
for(j=0; j<n; j++, pTerm++){
109818110064
Expr *pE = pTerm->pExpr;
109819
- if( pE->op==TK_COLUMN && pE->iTable==pExpr->iTable &&
109820
- pE->iColumn==pExpr->iColumn ){
110065
+ if( pE->op==TK_COLUMN
110066
+ && pE->iTable==pExpr->iTable
110067
+ && pE->iColumn==pExpr->iColumn
110068
+ ){
109821110069
pCol->iSorterColumn = j;
109822110070
break;
109823110071
}
109824110072
}
109825110073
}
@@ -109832,11 +110080,13 @@
109832110080
** Convert the pExpr to be a TK_AGG_COLUMN referring to that
109833110081
** pAggInfo->aCol[] entry.
109834110082
*/
109835110083
ExprSetVVAProperty(pExpr, EP_NoReduce);
109836110084
pExpr->pAggInfo = pAggInfo;
109837
- pExpr->op = TK_AGG_COLUMN;
110085
+ if( pExpr->op==TK_COLUMN ){
110086
+ pExpr->op = TK_AGG_COLUMN;
110087
+ }
109838110088
pExpr->iAgg = (i16)k;
109839110089
break;
109840110090
} /* endif pExpr->iTable==pItem->iCursor */
109841110091
} /* end loop over pSrcList */
109842110092
}
@@ -115254,10 +115504,11 @@
115254115504
** no VDBE code was generated.
115255115505
*/
115256115506
SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){
115257115507
sqlite3 *db;
115258115508
Vdbe *v;
115509
+ int iDb, i;
115259115510
115260115511
assert( pParse->pToplevel==0 );
115261115512
db = pParse->db;
115262115513
assert( db->pParse==pParse );
115263115514
if( pParse->nested ) return;
@@ -115283,11 +115534,10 @@
115283115534
|| sqlite3VdbeAssertMayAbort(v, pParse->mayAbort));
115284115535
if( v ){
115285115536
if( pParse->bReturning ){
115286115537
Returning *pReturning = pParse->u1.pReturning;
115287115538
int addrRewind;
115288
- int i;
115289115539
int reg;
115290115540
115291115541
if( pReturning->nRetCol ){
115292115542
sqlite3VdbeAddOp0(v, OP_FkCheck);
115293115543
addrRewind =
@@ -115320,80 +115570,73 @@
115320115570
** (Bit 0 is for main, bit 1 is for temp, and so forth.) Bits are
115321115571
** set for each database that is used. Generate code to start a
115322115572
** transaction on each used database and to verify the schema cookie
115323115573
** on each used database.
115324115574
*/
115325
- if( db->mallocFailed==0
115326
- && (DbMaskNonZero(pParse->cookieMask) || pParse->pConstExpr)
115327
- ){
115328
- int iDb, i;
115329
- assert( sqlite3VdbeGetOp(v, 0)->opcode==OP_Init );
115330
- sqlite3VdbeJumpHere(v, 0);
115331
- assert( db->nDb>0 );
115332
- iDb = 0;
115333
- do{
115334
- Schema *pSchema;
115335
- if( DbMaskTest(pParse->cookieMask, iDb)==0 ) continue;
115336
- sqlite3VdbeUsesBtree(v, iDb);
115337
- pSchema = db->aDb[iDb].pSchema;
115338
- sqlite3VdbeAddOp4Int(v,
115339
- OP_Transaction, /* Opcode */
115340
- iDb, /* P1 */
115341
- DbMaskTest(pParse->writeMask,iDb), /* P2 */
115342
- pSchema->schema_cookie, /* P3 */
115343
- pSchema->iGeneration /* P4 */
115344
- );
115345
- if( db->init.busy==0 ) sqlite3VdbeChangeP5(v, 1);
115346
- VdbeComment((v,
115347
- "usesStmtJournal=%d", pParse->mayAbort && pParse->isMultiWrite));
115348
- }while( ++iDb<db->nDb );
115575
+ assert( pParse->nErr>0 || sqlite3VdbeGetOp(v, 0)->opcode==OP_Init );
115576
+ sqlite3VdbeJumpHere(v, 0);
115577
+ assert( db->nDb>0 );
115578
+ iDb = 0;
115579
+ do{
115580
+ Schema *pSchema;
115581
+ if( DbMaskTest(pParse->cookieMask, iDb)==0 ) continue;
115582
+ sqlite3VdbeUsesBtree(v, iDb);
115583
+ pSchema = db->aDb[iDb].pSchema;
115584
+ sqlite3VdbeAddOp4Int(v,
115585
+ OP_Transaction, /* Opcode */
115586
+ iDb, /* P1 */
115587
+ DbMaskTest(pParse->writeMask,iDb), /* P2 */
115588
+ pSchema->schema_cookie, /* P3 */
115589
+ pSchema->iGeneration /* P4 */
115590
+ );
115591
+ if( db->init.busy==0 ) sqlite3VdbeChangeP5(v, 1);
115592
+ VdbeComment((v,
115593
+ "usesStmtJournal=%d", pParse->mayAbort && pParse->isMultiWrite));
115594
+ }while( ++iDb<db->nDb );
115349115595
#ifndef SQLITE_OMIT_VIRTUALTABLE
115350
- for(i=0; i<pParse->nVtabLock; i++){
115351
- char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]);
115352
- sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB);
115353
- }
115354
- pParse->nVtabLock = 0;
115596
+ for(i=0; i<pParse->nVtabLock; i++){
115597
+ char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]);
115598
+ sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB);
115599
+ }
115600
+ pParse->nVtabLock = 0;
115355115601
#endif
115356115602
115357
- /* Once all the cookies have been verified and transactions opened,
115358
- ** obtain the required table-locks. This is a no-op unless the
115359
- ** shared-cache feature is enabled.
115360
- */
115361
- codeTableLocks(pParse);
115362
-
115363
- /* Initialize any AUTOINCREMENT data structures required.
115364
- */
115365
- sqlite3AutoincrementBegin(pParse);
115366
-
115367
- /* Code constant expressions that where factored out of inner loops.
115368
- **
115369
- ** The pConstExpr list might also contain expressions that we simply
115370
- ** want to keep around until the Parse object is deleted. Such
115371
- ** expressions have iConstExprReg==0. Do not generate code for
115372
- ** those expressions, of course.
115373
- */
115374
- if( pParse->pConstExpr ){
115375
- ExprList *pEL = pParse->pConstExpr;
115376
- pParse->okConstFactor = 0;
115377
- for(i=0; i<pEL->nExpr; i++){
115378
- int iReg = pEL->a[i].u.iConstExprReg;
115379
- if( iReg>0 ){
115380
- sqlite3ExprCode(pParse, pEL->a[i].pExpr, iReg);
115381
- }
115382
- }
115383
- }
115384
-
115385
- if( pParse->bReturning ){
115386
- Returning *pRet = pParse->u1.pReturning;
115387
- if( pRet->nRetCol ){
115388
- sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pRet->iRetCur, pRet->nRetCol);
115389
- }
115390
- }
115391
-
115392
- /* Finally, jump back to the beginning of the executable code. */
115393
- sqlite3VdbeGoto(v, 1);
115394
- }
115603
+ /* Once all the cookies have been verified and transactions opened,
115604
+ ** obtain the required table-locks. This is a no-op unless the
115605
+ ** shared-cache feature is enabled.
115606
+ */
115607
+ codeTableLocks(pParse);
115608
+
115609
+ /* Initialize any AUTOINCREMENT data structures required.
115610
+ */
115611
+ sqlite3AutoincrementBegin(pParse);
115612
+
115613
+ /* Code constant expressions that where factored out of inner loops.
115614
+ **
115615
+ ** The pConstExpr list might also contain expressions that we simply
115616
+ ** want to keep around until the Parse object is deleted. Such
115617
+ ** expressions have iConstExprReg==0. Do not generate code for
115618
+ ** those expressions, of course.
115619
+ */
115620
+ if( pParse->pConstExpr ){
115621
+ ExprList *pEL = pParse->pConstExpr;
115622
+ pParse->okConstFactor = 0;
115623
+ for(i=0; i<pEL->nExpr; i++){
115624
+ int iReg = pEL->a[i].u.iConstExprReg;
115625
+ sqlite3ExprCode(pParse, pEL->a[i].pExpr, iReg);
115626
+ }
115627
+ }
115628
+
115629
+ if( pParse->bReturning ){
115630
+ Returning *pRet = pParse->u1.pReturning;
115631
+ if( pRet->nRetCol ){
115632
+ sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pRet->iRetCur, pRet->nRetCol);
115633
+ }
115634
+ }
115635
+
115636
+ /* Finally, jump back to the beginning of the executable code. */
115637
+ sqlite3VdbeGoto(v, 1);
115395115638
}
115396115639
115397115640
/* Get the VDBE program ready for execution
115398115641
*/
115399115642
assert( v!=0 || pParse->nErr );
@@ -115445,12 +115688,10 @@
115445115688
pParse->nested++;
115446115689
memcpy(saveBuf, PARSE_TAIL(pParse), PARSE_TAIL_SZ);
115447115690
memset(PARSE_TAIL(pParse), 0, PARSE_TAIL_SZ);
115448115691
db->mDbFlags |= DBFLAG_PreferBuiltin;
115449115692
sqlite3RunParser(pParse, zSql);
115450
- sqlite3DbFree(db, pParse->zErrMsg);
115451
- pParse->zErrMsg = 0;
115452115693
db->mDbFlags = savedDbFlags;
115453115694
sqlite3DbFree(db, zSql);
115454115695
memcpy(PARSE_TAIL(pParse), saveBuf, PARSE_TAIL_SZ);
115455115696
pParse->nested--;
115456115697
}
@@ -115898,20 +116139,21 @@
115898116139
*/
115899116140
SQLITE_PRIVATE void sqlite3DeleteColumnNames(sqlite3 *db, Table *pTable){
115900116141
int i;
115901116142
Column *pCol;
115902116143
assert( pTable!=0 );
116144
+ assert( db!=0 );
115903116145
if( (pCol = pTable->aCol)!=0 ){
115904116146
for(i=0; i<pTable->nCol; i++, pCol++){
115905116147
assert( pCol->zCnName==0 || pCol->hName==sqlite3StrIHash(pCol->zCnName) );
115906116148
sqlite3DbFree(db, pCol->zCnName);
115907116149
}
115908
- sqlite3DbFree(db, pTable->aCol);
116150
+ sqlite3DbNNFreeNN(db, pTable->aCol);
115909116151
if( IsOrdinaryTable(pTable) ){
115910116152
sqlite3ExprListDelete(db, pTable->u.tab.pDfltList);
115911116153
}
115912
- if( db==0 || db->pnBytesFreed==0 ){
116154
+ if( db->pnBytesFreed==0 ){
115913116155
pTable->aCol = 0;
115914116156
pTable->nCol = 0;
115915116157
if( IsOrdinaryTable(pTable) ){
115916116158
pTable->u.tab.pDfltList = 0;
115917116159
}
@@ -115944,21 +116186,22 @@
115944116186
**
115945116187
** If malloc has already failed, it may be that it failed while allocating
115946116188
** a Table object that was going to be marked ephemeral. So do not check
115947116189
** that no lookaside memory is used in this case either. */
115948116190
int nLookaside = 0;
115949
- if( db && !db->mallocFailed && (pTable->tabFlags & TF_Ephemeral)==0 ){
116191
+ assert( db!=0 );
116192
+ if( !db->mallocFailed && (pTable->tabFlags & TF_Ephemeral)==0 ){
115950116193
nLookaside = sqlite3LookasideUsed(db, 0);
115951116194
}
115952116195
#endif
115953116196
115954116197
/* Delete all indices associated with this table. */
115955116198
for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){
115956116199
pNext = pIndex->pNext;
115957116200
assert( pIndex->pSchema==pTable->pSchema
115958116201
|| (IsVirtual(pTable) && pIndex->idxType!=SQLITE_IDXTYPE_APPDEF) );
115959
- if( (db==0 || db->pnBytesFreed==0) && !IsVirtual(pTable) ){
116202
+ if( db->pnBytesFreed==0 && !IsVirtual(pTable) ){
115960116203
char *zName = pIndex->zName;
115961116204
TESTONLY ( Index *pOld = ) sqlite3HashInsert(
115962116205
&pIndex->pSchema->idxHash, zName, 0
115963116206
);
115964116207
assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
@@ -115991,12 +116234,13 @@
115991116234
/* Verify that no lookaside memory was used by schema tables */
115992116235
assert( nLookaside==0 || nLookaside==sqlite3LookasideUsed(db,0) );
115993116236
}
115994116237
SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){
115995116238
/* Do not delete the table until the reference count reaches zero. */
116239
+ assert( db!=0 );
115996116240
if( !pTable ) return;
115997
- if( ((!db || db->pnBytesFreed==0) && (--pTable->nTabRef)>0) ) return;
116241
+ if( db->pnBytesFreed==0 && (--pTable->nTabRef)>0 ) return;
115998116242
deleteTable(db, pTable);
115999116243
}
116000116244
116001116245
116002116246
/*
@@ -118165,11 +118409,11 @@
118165118409
/*
118166118410
** The Table structure pTable is really a VIEW. Fill in the names of
118167118411
** the columns of the view in the pTable structure. Return the number
118168118412
** of errors. If an error is seen leave an error message in pParse->zErrMsg.
118169118413
*/
118170
-SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
118414
+static SQLITE_NOINLINE int viewGetColumnNames(Parse *pParse, Table *pTable){
118171118415
Table *pSelTab; /* A fake table from which we get the result set */
118172118416
Select *pSel; /* Copy of the SELECT that implements the view */
118173118417
int nErr = 0; /* Number of errors encountered */
118174118418
sqlite3 *db = pParse->db; /* Database connection for malloc errors */
118175118419
#ifndef SQLITE_OMIT_VIRTUALTABLE
@@ -118190,13 +118434,14 @@
118190118434
}
118191118435
#endif
118192118436
118193118437
#ifndef SQLITE_OMIT_VIEW
118194118438
/* A positive nCol means the columns names for this view are
118195
- ** already known.
118439
+ ** already known. This routine is not called unless either the
118440
+ ** table is virtual or nCol is zero.
118196118441
*/
118197
- if( pTable->nCol>0 ) return 0;
118442
+ assert( pTable->nCol<=0 );
118198118443
118199118444
/* A negative nCol is a special marker meaning that we are currently
118200118445
** trying to compute the column names. If we enter this routine with
118201118446
** a negative nCol, it means two or more views form a loop, like this:
118202118447
**
@@ -118287,10 +118532,15 @@
118287118532
if( db->mallocFailed ){
118288118533
sqlite3DeleteColumnNames(db, pTable);
118289118534
}
118290118535
#endif /* SQLITE_OMIT_VIEW */
118291118536
return nErr;
118537
+}
118538
+SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
118539
+ assert( pTable!=0 );
118540
+ if( !IsVirtual(pTable) && pTable->nCol>0 ) return 0;
118541
+ return viewGetColumnNames(pParse, pTable);
118292118542
}
118293118543
#endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */
118294118544
118295118545
#ifndef SQLITE_OMIT_VIEW
118296118546
/*
@@ -119153,11 +119403,11 @@
119153119403
if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName,"index",pTab->zName) ){
119154119404
goto exit_create_index;
119155119405
}
119156119406
if( !IN_RENAME_OBJECT ){
119157119407
if( !db->init.busy ){
119158
- if( sqlite3FindTable(db, zName, 0)!=0 ){
119408
+ if( sqlite3FindTable(db, zName, pDb->zDbSName)!=0 ){
119159119409
sqlite3ErrorMsg(pParse, "there is already a table named %s", zName);
119160119410
goto exit_create_index;
119161119411
}
119162119412
}
119163119413
if( sqlite3FindIndex(db, zName, pDb->zDbSName)!=0 ){
@@ -119806,16 +120056,17 @@
119806120056
/*
119807120057
** Delete an IdList.
119808120058
*/
119809120059
SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){
119810120060
int i;
120061
+ assert( db!=0 );
119811120062
if( pList==0 ) return;
119812120063
assert( pList->eU4!=EU4_EXPR ); /* EU4_EXPR mode is not currently used */
119813120064
for(i=0; i<pList->nId; i++){
119814120065
sqlite3DbFree(db, pList->a[i].zName);
119815120066
}
119816
- sqlite3DbFreeNN(db, pList);
120067
+ sqlite3DbNNFreeNN(db, pList);
119817120068
}
119818120069
119819120070
/*
119820120071
** Return the index in pList of the identifier named zId. Return -1
119821120072
** if not found.
@@ -120014,15 +120265,16 @@
120014120265
** Delete an entire SrcList including all its substructure.
120015120266
*/
120016120267
SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){
120017120268
int i;
120018120269
SrcItem *pItem;
120270
+ assert( db!=0 );
120019120271
if( pList==0 ) return;
120020120272
for(pItem=pList->a, i=0; i<pList->nSrc; i++, pItem++){
120021
- if( pItem->zDatabase ) sqlite3DbFreeNN(db, pItem->zDatabase);
120022
- sqlite3DbFree(db, pItem->zName);
120023
- if( pItem->zAlias ) sqlite3DbFreeNN(db, pItem->zAlias);
120273
+ if( pItem->zDatabase ) sqlite3DbNNFreeNN(db, pItem->zDatabase);
120274
+ if( pItem->zName ) sqlite3DbNNFreeNN(db, pItem->zName);
120275
+ if( pItem->zAlias ) sqlite3DbNNFreeNN(db, pItem->zAlias);
120024120276
if( pItem->fg.isIndexedBy ) sqlite3DbFree(db, pItem->u1.zIndexedBy);
120025120277
if( pItem->fg.isTabFunc ) sqlite3ExprListDelete(db, pItem->u1.pFuncArg);
120026120278
sqlite3DeleteTable(db, pItem->pTab);
120027120279
if( pItem->pSelect ) sqlite3SelectDelete(db, pItem->pSelect);
120028120280
if( pItem->fg.isUsing ){
@@ -120029,11 +120281,11 @@
120029120281
sqlite3IdListDelete(db, pItem->u3.pUsing);
120030120282
}else if( pItem->u3.pOn ){
120031120283
sqlite3ExprDelete(db, pItem->u3.pOn);
120032120284
}
120033120285
}
120034
- sqlite3DbFreeNN(db, pList);
120286
+ sqlite3DbNNFreeNN(db, pList);
120035120287
}
120036120288
120037120289
/*
120038120290
** This routine is called by the parser to add a new term to the
120039120291
** end of a growing FROM clause. The "p" parameter is the part of
@@ -121281,23 +121533,25 @@
121281121533
SQLITE_PRIVATE void sqlite3SchemaClear(void *p){
121282121534
Hash temp1;
121283121535
Hash temp2;
121284121536
HashElem *pElem;
121285121537
Schema *pSchema = (Schema *)p;
121538
+ sqlite3 xdb;
121286121539
121540
+ memset(&xdb, 0, sizeof(xdb));
121287121541
temp1 = pSchema->tblHash;
121288121542
temp2 = pSchema->trigHash;
121289121543
sqlite3HashInit(&pSchema->trigHash);
121290121544
sqlite3HashClear(&pSchema->idxHash);
121291121545
for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){
121292
- sqlite3DeleteTrigger(0, (Trigger*)sqliteHashData(pElem));
121546
+ sqlite3DeleteTrigger(&xdb, (Trigger*)sqliteHashData(pElem));
121293121547
}
121294121548
sqlite3HashClear(&temp2);
121295121549
sqlite3HashInit(&pSchema->tblHash);
121296121550
for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){
121297121551
Table *pTab = sqliteHashData(pElem);
121298
- sqlite3DeleteTable(0, pTab);
121552
+ sqlite3DeleteTable(&xdb, pTab);
121299121553
}
121300121554
sqlite3HashClear(&temp1);
121301121555
sqlite3HashClear(&pSchema->fkeyHash);
121302121556
pSchema->pSeqTab = 0;
121303121557
if( pSchema->schemaFlags & DB_SchemaLoaded ){
@@ -121392,22 +121646,46 @@
121392121646
** A table is read-only if any of the following are true:
121393121647
**
121394121648
** 1) It is a virtual table and no implementation of the xUpdate method
121395121649
** has been provided
121396121650
**
121397
-** 2) It is a system table (i.e. sqlite_schema), this call is not
121651
+** 2) A trigger is currently being coded and the table is a virtual table
121652
+** that is SQLITE_VTAB_DIRECTONLY or if PRAGMA trusted_schema=OFF and
121653
+** the table is not SQLITE_VTAB_INNOCUOUS.
121654
+**
121655
+** 3) It is a system table (i.e. sqlite_schema), this call is not
121398121656
** part of a nested parse and writable_schema pragma has not
121399121657
** been specified
121400121658
**
121401
-** 3) The table is a shadow table, the database connection is in
121659
+** 4) The table is a shadow table, the database connection is in
121402121660
** defensive mode, and the current sqlite3_prepare()
121403121661
** is for a top-level SQL statement.
121404121662
*/
121663
+static int vtabIsReadOnly(Parse *pParse, Table *pTab){
121664
+ if( sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0 ){
121665
+ return 1;
121666
+ }
121667
+
121668
+ /* Within triggers:
121669
+ ** * Do not allow DELETE, INSERT, or UPDATE of SQLITE_VTAB_DIRECTONLY
121670
+ ** virtual tables
121671
+ ** * Only allow DELETE, INSERT, or UPDATE of non-SQLITE_VTAB_INNOCUOUS
121672
+ ** virtual tables if PRAGMA trusted_schema=ON.
121673
+ */
121674
+ if( pParse->pToplevel!=0
121675
+ && pTab->u.vtab.p->eVtabRisk >
121676
+ ((pParse->db->flags & SQLITE_TrustedSchema)!=0)
121677
+ ){
121678
+ sqlite3ErrorMsg(pParse, "unsafe use of virtual table \"%s\"",
121679
+ pTab->zName);
121680
+ }
121681
+ return 0;
121682
+}
121405121683
static int tabIsReadOnly(Parse *pParse, Table *pTab){
121406121684
sqlite3 *db;
121407121685
if( IsVirtual(pTab) ){
121408
- return sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0;
121686
+ return vtabIsReadOnly(pParse, pTab);
121409121687
}
121410121688
if( (pTab->tabFlags & (TF_Readonly|TF_Shadow))==0 ) return 0;
121411121689
db = pParse->db;
121412121690
if( (pTab->tabFlags & TF_Readonly)!=0 ){
121413121691
return sqlite3WritableSchema(db)==0 && pParse->nested==0;
@@ -121415,13 +121693,15 @@
121415121693
assert( pTab->tabFlags & TF_Shadow );
121416121694
return sqlite3ReadOnlyShadowTables(db);
121417121695
}
121418121696
121419121697
/*
121420
-** Check to make sure the given table is writable. If it is not
121421
-** writable, generate an error message and return 1. If it is
121422
-** writable return 0;
121698
+** Check to make sure the given table is writable.
121699
+**
121700
+** If pTab is not writable -> generate an error message and return 1.
121701
+** If pTab is writable but other errors have occurred -> return 1.
121702
+** If pTab is writable and no prior errors -> return 0;
121423121703
*/
121424121704
SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){
121425121705
if( tabIsReadOnly(pParse, pTab) ){
121426121706
sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName);
121427121707
return 1;
@@ -121778,13 +122058,14 @@
121778122058
sqlite3VdbeAddOp4(v, OP_Clear, pTab->tnum, iDb, memCnt ? memCnt : -1,
121779122059
pTab->zName, P4_STATIC);
121780122060
}
121781122061
for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
121782122062
assert( pIdx->pSchema==pTab->pSchema );
121783
- sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb);
121784122063
if( IsPrimaryKeyIndex(pIdx) && !HasRowid(pTab) ){
121785
- sqlite3VdbeChangeP3(v, -1, memCnt ? memCnt : -1);
122064
+ sqlite3VdbeAddOp3(v, OP_Clear, pIdx->tnum, iDb, memCnt ? memCnt : -1);
122065
+ }else{
122066
+ sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb);
121786122067
}
121787122068
}
121788122069
}else
121789122070
#endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */
121790122071
{
@@ -121980,11 +122261,11 @@
121980122261
sqlite3ExprDelete(db, pWhere);
121981122262
#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
121982122263
sqlite3ExprListDelete(db, pOrderBy);
121983122264
sqlite3ExprDelete(db, pLimit);
121984122265
#endif
121985
- sqlite3DbFree(db, aToOpen);
122266
+ if( aToOpen ) sqlite3DbNNFreeNN(db, aToOpen);
121986122267
return;
121987122268
}
121988122269
/* Make sure "isView" and other macros defined above are undefined. Otherwise
121989122270
** they may interfere with compilation of other functions in this file
121990122271
** (or in another file, if this file becomes part of the amalgamation). */
@@ -126148,15 +126429,16 @@
126148126429
SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){
126149126430
FKey *pFKey; /* Iterator variable */
126150126431
FKey *pNext; /* Copy of pFKey->pNextFrom */
126151126432
126152126433
assert( IsOrdinaryTable(pTab) );
126434
+ assert( db!=0 );
126153126435
for(pFKey=pTab->u.tab.pFKey; pFKey; pFKey=pNext){
126154126436
assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pTab->pSchema) );
126155126437
126156126438
/* Remove the FK from the fkeyHash hash table. */
126157
- if( !db || db->pnBytesFreed==0 ){
126439
+ if( db->pnBytesFreed==0 ){
126158126440
if( pFKey->pPrevTo ){
126159126441
pFKey->pPrevTo->pNextTo = pFKey->pNextTo;
126160126442
}else{
126161126443
void *p = (void *)pFKey->pNextTo;
126162126444
const char *z = (p ? pFKey->pNextTo->zTo : pFKey->zTo);
@@ -126345,11 +126627,11 @@
126345126627
/* Move the previous opcode (which should be OP_MakeRecord) forward
126346126628
** by one slot and insert a new OP_TypeCheck where the current
126347126629
** OP_MakeRecord is found */
126348126630
VdbeOp *pPrev;
126349126631
sqlite3VdbeAppendP4(v, pTab, P4_TABLE);
126350
- pPrev = sqlite3VdbeGetOp(v, -1);
126632
+ pPrev = sqlite3VdbeGetLastOp(v);
126351126633
assert( pPrev!=0 );
126352126634
assert( pPrev->opcode==OP_MakeRecord || sqlite3VdbeDb(v)->mallocFailed );
126353126635
pPrev->opcode = OP_TypeCheck;
126354126636
sqlite3VdbeAddOp3(v, OP_MakeRecord, pPrev->p1, pPrev->p2, pPrev->p3);
126355126637
}else{
@@ -126383,11 +126665,11 @@
126383126665
i = sqlite3Strlen30NN(zColAff);
126384126666
if( i ){
126385126667
if( iReg ){
126386126668
sqlite3VdbeAddOp4(v, OP_Affinity, iReg, i, 0, zColAff, i);
126387126669
}else{
126388
- assert( sqlite3VdbeGetOp(v, -1)->opcode==OP_MakeRecord
126670
+ assert( sqlite3VdbeGetLastOp(v)->opcode==OP_MakeRecord
126389126671
|| sqlite3VdbeDb(v)->mallocFailed );
126390126672
sqlite3VdbeChangeP4(v, -1, zColAff, i);
126391126673
}
126392126674
}
126393126675
}
@@ -126469,11 +126751,11 @@
126469126751
/* Before computing generated columns, first go through and make sure
126470126752
** that appropriate affinity has been applied to the regular columns
126471126753
*/
126472126754
sqlite3TableAffinity(pParse->pVdbe, pTab, iRegStore);
126473126755
if( (pTab->tabFlags & TF_HasStored)!=0 ){
126474
- pOp = sqlite3VdbeGetOp(pParse->pVdbe,-1);
126756
+ pOp = sqlite3VdbeGetLastOp(pParse->pVdbe);
126475126757
if( pOp->opcode==OP_Affinity ){
126476126758
/* Change the OP_Affinity argument to '@' (NONE) for all stored
126477126759
** columns. '@' is the no-op affinity and those columns have not
126478126760
** yet been computed. */
126479126761
int ii, jj;
@@ -127375,11 +127657,16 @@
127375127657
}else if( pSelect ){
127376127658
if( regFromSelect!=regData ){
127377127659
sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+k, iRegStore);
127378127660
}
127379127661
}else{
127380
- sqlite3ExprCode(pParse, pList->a[k].pExpr, iRegStore);
127662
+ Expr *pX = pList->a[k].pExpr;
127663
+ int y = sqlite3ExprCodeTarget(pParse, pX, iRegStore);
127664
+ if( y!=iRegStore ){
127665
+ sqlite3VdbeAddOp2(v,
127666
+ ExprHasProperty(pX, EP_Subquery) ? OP_Copy : OP_SCopy, y, iRegStore);
127667
+ }
127381127668
}
127382127669
}
127383127670
127384127671
127385127672
/* Run the BEFORE and INSTEAD OF triggers, if there are any
@@ -127512,11 +127799,13 @@
127512127799
int isReplace = 0;/* Set to true if constraints may cause a replace */
127513127800
int bUseSeek; /* True to use OPFLAG_SEEKRESULT */
127514127801
sqlite3GenerateConstraintChecks(pParse, pTab, aRegIdx, iDataCur, iIdxCur,
127515127802
regIns, 0, ipkColumn>=0, onError, endOfLoop, &isReplace, 0, pUpsert
127516127803
);
127517
- sqlite3FkCheck(pParse, pTab, 0, regIns, 0, 0);
127804
+ if( db->flags & SQLITE_ForeignKeys ){
127805
+ sqlite3FkCheck(pParse, pTab, 0, regIns, 0, 0);
127806
+ }
127518127807
127519127808
/* Set the OPFLAG_USESEEKRESULT flag if either (a) there are no REPLACE
127520127809
** constraints or (b) there are no triggers and this table is not a
127521127810
** parent table in a foreign key constraint. It is safe to set the
127522127811
** flag in the second case as if any REPLACE constraint is hit, an
@@ -127596,11 +127885,11 @@
127596127885
sqlite3SrcListDelete(db, pTabList);
127597127886
sqlite3ExprListDelete(db, pList);
127598127887
sqlite3UpsertDelete(db, pUpsert);
127599127888
sqlite3SelectDelete(db, pSelect);
127600127889
sqlite3IdListDelete(db, pColumn);
127601
- sqlite3DbFree(db, aRegIdx);
127890
+ if( aRegIdx ) sqlite3DbNNFreeNN(db, aRegIdx);
127602127891
}
127603127892
127604127893
/* Make sure "isView" and other macros defined above are undefined. Otherwise
127605127894
** they may interfere with compilation of other functions in this file
127606127895
** (or in another file, if this file becomes part of the amalgamation). */
@@ -132702,19 +132991,21 @@
132702132991
** Setting to a null string reverts to the default temporary directory search.
132703132992
** If temporary directory is changed, then invalidateTempStorage.
132704132993
**
132705132994
*/
132706132995
case PragTyp_TEMP_STORE_DIRECTORY: {
132996
+ sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
132707132997
if( !zRight ){
132708132998
returnSingleText(v, sqlite3_temp_directory);
132709132999
}else{
132710133000
#ifndef SQLITE_OMIT_WSD
132711133001
if( zRight[0] ){
132712133002
int res;
132713133003
rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res);
132714133004
if( rc!=SQLITE_OK || res==0 ){
132715133005
sqlite3ErrorMsg(pParse, "not a writable directory");
133006
+ sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
132716133007
goto pragma_out;
132717133008
}
132718133009
}
132719133010
if( SQLITE_TEMP_STORE==0
132720133011
|| (SQLITE_TEMP_STORE==1 && db->temp_store<=1)
@@ -132728,10 +133019,11 @@
132728133019
}else{
132729133020
sqlite3_temp_directory = 0;
132730133021
}
132731133022
#endif /* SQLITE_OMIT_WSD */
132732133023
}
133024
+ sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
132733133025
break;
132734133026
}
132735133027
132736133028
#if SQLITE_OS_WIN
132737133029
/*
@@ -132746,19 +133038,21 @@
132746133038
** process. Database file specified with an absolute path are not impacted
132747133039
** by this setting, regardless of its value.
132748133040
**
132749133041
*/
132750133042
case PragTyp_DATA_STORE_DIRECTORY: {
133043
+ sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
132751133044
if( !zRight ){
132752133045
returnSingleText(v, sqlite3_data_directory);
132753133046
}else{
132754133047
#ifndef SQLITE_OMIT_WSD
132755133048
if( zRight[0] ){
132756133049
int res;
132757133050
rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res);
132758133051
if( rc!=SQLITE_OK || res==0 ){
132759133052
sqlite3ErrorMsg(pParse, "not a writable directory");
133053
+ sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
132760133054
goto pragma_out;
132761133055
}
132762133056
}
132763133057
sqlite3_free(sqlite3_data_directory);
132764133058
if( zRight[0] ){
@@ -132766,10 +133060,11 @@
132766133060
}else{
132767133061
sqlite3_data_directory = 0;
132768133062
}
132769133063
#endif /* SQLITE_OMIT_WSD */
132770133064
}
133065
+ sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
132771133066
break;
132772133067
}
132773133068
#endif
132774133069
132775133070
#if SQLITE_ENABLE_LOCKING_STYLE
@@ -133479,19 +133774,27 @@
133479133774
/* Make sure all the indices are constructed correctly.
133480133775
*/
133481133776
for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
133482133777
Table *pTab = sqliteHashData(x);
133483133778
Index *pIdx, *pPk;
133484
- Index *pPrior = 0;
133779
+ Index *pPrior = 0; /* Previous index */
133485133780
int loopTop;
133486133781
int iDataCur, iIdxCur;
133487133782
int r1 = -1;
133488133783
int bStrict;
133784
+ int r2; /* Previous key for WITHOUT ROWID tables */
133489133785
133490133786
if( !IsOrdinaryTable(pTab) ) continue;
133491133787
if( pObjTab && pObjTab!=pTab ) continue;
133492
- pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab);
133788
+ if( isQuick || HasRowid(pTab) ){
133789
+ pPk = 0;
133790
+ r2 = 0;
133791
+ }else{
133792
+ pPk = sqlite3PrimaryKeyIndex(pTab);
133793
+ r2 = sqlite3GetTempRange(pParse, pPk->nKeyCol);
133794
+ sqlite3VdbeAddOp3(v, OP_Null, 1, r2, r2+pPk->nKeyCol-1);
133795
+ }
133493133796
sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenRead, 0,
133494133797
1, 0, &iDataCur, &iIdxCur);
133495133798
/* reg[7] counts the number of entries in the table.
133496133799
** reg[8+i] counts the number of entries in the i-th index
133497133800
*/
@@ -133506,10 +133809,28 @@
133506133809
if( !isQuick ){
133507133810
/* Sanity check on record header decoding */
133508133811
sqlite3VdbeAddOp3(v, OP_Column, iDataCur, pTab->nNVCol-1,3);
133509133812
sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG);
133510133813
VdbeComment((v, "(right-most column)"));
133814
+ if( pPk ){
133815
+ /* Verify WITHOUT ROWID keys are in ascending order */
133816
+ int a1;
133817
+ char *zErr;
133818
+ a1 = sqlite3VdbeAddOp4Int(v, OP_IdxGT, iDataCur, 0,r2,pPk->nKeyCol);
133819
+ VdbeCoverage(v);
133820
+ sqlite3VdbeAddOp1(v, OP_IsNull, r2); VdbeCoverage(v);
133821
+ zErr = sqlite3MPrintf(db,
133822
+ "row not in PRIMARY KEY order for %s",
133823
+ pTab->zName);
133824
+ sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC);
133825
+ integrityCheckResultRow(v);
133826
+ sqlite3VdbeJumpHere(v, a1);
133827
+ sqlite3VdbeJumpHere(v, a1+1);
133828
+ for(j=0; j<pPk->nKeyCol; j++){
133829
+ sqlite3ExprCodeLoadIndexColumn(pParse, pPk, iDataCur, j, r2+j);
133830
+ }
133831
+ }
133511133832
}
133512133833
/* Verify that all NOT NULL columns really are NOT NULL. At the
133513133834
** same time verify the type of the content of STRICT tables */
133514133835
bStrict = (pTab->tabFlags & TF_Strict)!=0;
133515133836
for(j=0; j<pTab->nCol; j++){
@@ -133518,11 +133839,11 @@
133518133839
int doError, jmp2;
133519133840
if( j==pTab->iPKey ) continue;
133520133841
if( pCol->notNull==0 && !bStrict ) continue;
133521133842
doError = bStrict ? sqlite3VdbeMakeLabel(pParse) : 0;
133522133843
sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, j, 3);
133523
- if( sqlite3VdbeGetOp(v,-1)->opcode==OP_Column ){
133844
+ if( sqlite3VdbeGetLastOp(v)->opcode==OP_Column ){
133524133845
sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG);
133525133846
}
133526133847
if( pCol->notNull ){
133527133848
jmp2 = sqlite3VdbeAddOp1(v, OP_NotNull, 3); VdbeCoverage(v);
133528133849
zErr = sqlite3MPrintf(db, "NULL value in %s.%s", pTab->zName,
@@ -133533,13 +133854,11 @@
133533133854
}else{
133534133855
integrityCheckResultRow(v);
133535133856
}
133536133857
sqlite3VdbeJumpHere(v, jmp2);
133537133858
}
133538
- if( (pTab->tabFlags & TF_Strict)!=0
133539
- && pCol->eCType!=COLTYPE_ANY
133540
- ){
133859
+ if( bStrict && pCol->eCType!=COLTYPE_ANY ){
133541133860
jmp2 = sqlite3VdbeAddOp3(v, OP_IsNullOrType, 3, 0,
133542133861
sqlite3StdTypeMap[pCol->eCType-1]);
133543133862
VdbeCoverage(v);
133544133863
zErr = sqlite3MPrintf(db, "non-%s value in %s.%s",
133545133864
sqlite3StdType[pCol->eCType-1],
@@ -133634,10 +133953,13 @@
133634133953
sqlite3VdbeLoadString(v, 4, pIdx->zName);
133635133954
sqlite3VdbeAddOp3(v, OP_Concat, 4, 2, 3);
133636133955
integrityCheckResultRow(v);
133637133956
sqlite3VdbeJumpHere(v, addr);
133638133957
}
133958
+ if( pPk ){
133959
+ sqlite3ReleaseTempRange(pParse, r2, pPk->nKeyCol);
133960
+ }
133639133961
}
133640133962
}
133641133963
}
133642133964
{
133643133965
static const int iLn = VDBE_OFFSET_LINENO(2);
@@ -135032,19 +135354,19 @@
135032135354
sqlite3 *db = pParse->db;
135033135355
assert( db!=0 );
135034135356
assert( db->pParse==pParse );
135035135357
assert( pParse->nested==0 );
135036135358
#ifndef SQLITE_OMIT_SHARED_CACHE
135037
- sqlite3DbFree(db, pParse->aTableLock);
135359
+ if( pParse->aTableLock ) sqlite3DbNNFreeNN(db, pParse->aTableLock);
135038135360
#endif
135039135361
while( pParse->pCleanup ){
135040135362
ParseCleanup *pCleanup = pParse->pCleanup;
135041135363
pParse->pCleanup = pCleanup->pNext;
135042135364
pCleanup->xCleanup(db, pCleanup->pPtr);
135043
- sqlite3DbFreeNN(db, pCleanup);
135365
+ sqlite3DbNNFreeNN(db, pCleanup);
135044135366
}
135045
- sqlite3DbFree(db, pParse->aLabel);
135367
+ if( pParse->aLabel ) sqlite3DbNNFreeNN(db, pParse->aLabel);
135046135368
if( pParse->pConstExpr ){
135047135369
sqlite3ExprListDelete(db, pParse->pConstExpr);
135048135370
}
135049135371
assert( db->lookaside.bDisable >= pParse->disableLookaside );
135050135372
db->lookaside.bDisable -= pParse->disableLookaside;
@@ -135599,10 +135921,11 @@
135599135921
**
135600135922
** If bFree==1, call sqlite3DbFree() on the p object.
135601135923
** If bFree==0, Leave the first Select object unfreed
135602135924
*/
135603135925
static void clearSelect(sqlite3 *db, Select *p, int bFree){
135926
+ assert( db!=0 );
135604135927
while( p ){
135605135928
Select *pPrior = p->pPrior;
135606135929
sqlite3ExprListDelete(db, p->pEList);
135607135930
sqlite3SrcListDelete(db, p->pSrc);
135608135931
sqlite3ExprDelete(db, p->pWhere);
@@ -135618,11 +135941,11 @@
135618135941
while( p->pWin ){
135619135942
assert( p->pWin->ppThis==&p->pWin );
135620135943
sqlite3WindowUnlinkFromSelect(p->pWin);
135621135944
}
135622135945
#endif
135623
- if( bFree ) sqlite3DbFreeNN(db, p);
135946
+ if( bFree ) sqlite3DbNNFreeNN(db, p);
135624135947
p = pPrior;
135625135948
bFree = 1;
135626135949
}
135627135950
}
135628135951
@@ -135847,11 +136170,11 @@
135847136170
/*
135848136171
** Mark a subquery result column as having been used.
135849136172
*/
135850136173
SQLITE_PRIVATE void sqlite3SrcItemColumnUsed(SrcItem *pItem, int iCol){
135851136174
assert( pItem!=0 );
135852
- assert( pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
136175
+ assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
135853136176
if( pItem->fg.isNestedFrom ){
135854136177
ExprList *pResults;
135855136178
assert( pItem->pSelect!=0 );
135856136179
pResults = pItem->pSelect->pEList;
135857136180
assert( pResults!=0 );
@@ -135947,28 +136270,29 @@
135947136270
sqlite3SetJoinExpr(p->pLeft, iTable, joinFlag);
135948136271
p = p->pRight;
135949136272
}
135950136273
}
135951136274
135952
-/* Undo the work of sqlite3SetJoinExpr(). In the expression p, convert every
135953
-** term that is marked with EP_OuterON and w.iJoin==iTable into
135954
-** an ordinary term that omits the EP_OuterON mark.
136275
+/* Undo the work of sqlite3SetJoinExpr(). This is used when a LEFT JOIN
136276
+** is simplified into an ordinary JOIN, and when an ON expression is
136277
+** "pushed down" into the WHERE clause of a subquery.
135955136278
**
135956
-** This happens when a LEFT JOIN is simplified into an ordinary JOIN.
136279
+** Convert every term that is marked with EP_OuterON and w.iJoin==iTable into
136280
+** an ordinary term that omits the EP_OuterON mark. Or if iTable<0, then
136281
+** just clear every EP_OuterON and EP_InnerON mark from the expression tree.
135957136282
**
135958136283
** If nullable is true, that means that Expr p might evaluate to NULL even
135959136284
** if it is a reference to a NOT NULL column. This can happen, for example,
135960136285
** if the table that p references is on the left side of a RIGHT JOIN.
135961136286
** If nullable is true, then take care to not remove the EP_CanBeNull bit.
135962136287
** See forum thread https://sqlite.org/forum/forumpost/b40696f50145d21c
135963136288
*/
135964136289
static void unsetJoinExpr(Expr *p, int iTable, int nullable){
135965136290
while( p ){
135966
- if( ExprHasProperty(p, EP_OuterON)
135967
- && (iTable<0 || p->w.iJoin==iTable) ){
135968
- ExprClearProperty(p, EP_OuterON);
135969
- ExprSetProperty(p, EP_InnerON);
136291
+ if( iTable<0 || (ExprHasProperty(p, EP_OuterON) && p->w.iJoin==iTable) ){
136292
+ ExprClearProperty(p, EP_OuterON|EP_InnerON);
136293
+ if( iTable>=0 ) ExprSetProperty(p, EP_InnerON);
135970136294
}
135971136295
if( p->op==TK_COLUMN && p->iTable==iTable && !nullable ){
135972136296
ExprClearProperty(p, EP_CanBeNull);
135973136297
}
135974136298
if( p->op==TK_FUNCTION ){
@@ -137023,13 +137347,14 @@
137023137347
/*
137024137348
** Deallocate a KeyInfo object
137025137349
*/
137026137350
SQLITE_PRIVATE void sqlite3KeyInfoUnref(KeyInfo *p){
137027137351
if( p ){
137352
+ assert( p->db!=0 );
137028137353
assert( p->nRef>0 );
137029137354
p->nRef--;
137030
- if( p->nRef==0 ) sqlite3DbFreeNN(p->db, p);
137355
+ if( p->nRef==0 ) sqlite3DbNNFreeNN(p->db, p);
137031137356
}
137032137357
}
137033137358
137034137359
/*
137035137360
** Make a new pointer to a KeyInfo object
@@ -137210,18 +137535,21 @@
137210137535
sqlite3VdbeAddOp3(v, OP_OpenPseudo, iSortTab, regSortOut,
137211137536
nKey+1+nColumn+nRefKey);
137212137537
if( addrOnce ) sqlite3VdbeJumpHere(v, addrOnce);
137213137538
addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak);
137214137539
VdbeCoverage(v);
137215
- codeOffset(v, p->iOffset, addrContinue);
137540
+ assert( p->iLimit==0 && p->iOffset==0 );
137216137541
sqlite3VdbeAddOp3(v, OP_SorterData, iTab, regSortOut, iSortTab);
137217137542
bSeq = 0;
137218137543
}else{
137219137544
addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak); VdbeCoverage(v);
137220137545
codeOffset(v, p->iOffset, addrContinue);
137221137546
iSortTab = iTab;
137222137547
bSeq = 1;
137548
+ if( p->iOffset>0 ){
137549
+ sqlite3VdbeAddOp2(v, OP_AddImm, p->iLimit, -1);
137550
+ }
137223137551
}
137224137552
for(i=0, iCol=nKey+bSeq-1; i<nColumn; i++){
137225137553
#ifdef SQLITE_ENABLE_SORTER_REFERENCES
137226137554
if( aOutEx[i].fg.bSorterRef ) continue;
137227137555
#endif
@@ -137342,13 +137670,10 @@
137342137670
137343137671
/*
137344137672
** Return a pointer to a string containing the 'declaration type' of the
137345137673
** expression pExpr. The string may be treated as static by the caller.
137346137674
**
137347
-** Also try to estimate the size of the returned value and return that
137348
-** result in *pEstWidth.
137349
-**
137350137675
** The declaration type is the exact datatype definition extracted from the
137351137676
** original CREATE TABLE statement if the expression is a column. The
137352137677
** declaration type for a ROWID field is INTEGER. Exactly when an expression
137353137678
** is considered a column can be complex in the presence of subqueries. The
137354137679
** result-set expression in all of the following SELECT statements is
@@ -139210,14 +139535,15 @@
139210139535
139211139536
/* Jump to the this point in order to terminate the query.
139212139537
*/
139213139538
sqlite3VdbeResolveLabel(v, labelEnd);
139214139539
139215
- /* Reassembly the compound query so that it will be freed correctly
139540
+ /* Reassemble the compound query so that it will be freed correctly
139216139541
** by the calling function */
139217139542
if( pSplit->pPrior ){
139218
- sqlite3SelectDelete(db, pSplit->pPrior);
139543
+ sqlite3ParserAddCleanup(pParse,
139544
+ (void(*)(sqlite3*,void*))sqlite3SelectDelete, pSplit->pPrior);
139219139545
}
139220139546
pSplit->pPrior = pPrior;
139221139547
pPrior->pNext = pSplit;
139222139548
sqlite3ExprListDelete(db, pPrior->pOrderBy);
139223139549
pPrior->pOrderBy = 0;
@@ -139323,10 +139649,11 @@
139323139649
if( pSubst->isOuterJoin && pCopy->op!=TK_COLUMN ){
139324139650
memset(&ifNullRow, 0, sizeof(ifNullRow));
139325139651
ifNullRow.op = TK_IF_NULL_ROW;
139326139652
ifNullRow.pLeft = pCopy;
139327139653
ifNullRow.iTable = pSubst->iNewTable;
139654
+ ifNullRow.iColumn = -99;
139328139655
ifNullRow.flags = EP_IfNullRow;
139329139656
pCopy = &ifNullRow;
139330139657
}
139331139658
testcase( ExprHasProperty(pCopy, EP_Subquery) );
139332139659
pNew = sqlite3ExprDup(db, pCopy, 0);
@@ -139590,11 +139917,12 @@
139590139917
**
139591139918
** (3) If the subquery is the right operand of a LEFT JOIN then
139592139919
** (3a) the subquery may not be a join and
139593139920
** (3b) the FROM clause of the subquery may not contain a virtual
139594139921
** table and
139595
-** (3c) the outer query may not be an aggregate.
139922
+** (**) Was: "The outer query may not have a GROUP BY." This case
139923
+** is now managed correctly
139596139924
** (3d) the outer query may not be DISTINCT.
139597139925
** See also (26) for restrictions on RIGHT JOIN.
139598139926
**
139599139927
** (4) The subquery can not be DISTINCT.
139600139928
**
@@ -139644,10 +139972,13 @@
139644139972
** (17d) the outer query may not be
139645139973
** (17d1) aggregate, or
139646139974
** (17d2) DISTINCT
139647139975
** (17e) the subquery may not contain window functions, and
139648139976
** (17f) the subquery must not be the RHS of a LEFT JOIN.
139977
+** (17g) either the subquery is the first element of the outer
139978
+** query or there are no RIGHT or FULL JOINs in any arm
139979
+** of the subquery. (This is a duplicate of condition (27b).)
139649139980
**
139650139981
** The parent and sub-query may contain WHERE clauses. Subject to
139651139982
** rules (11), (13) and (14), they may also contain ORDER BY,
139652139983
** LIMIT and OFFSET clauses. The subquery cannot use any compound
139653139984
** operator other than UNION ALL because all the other compound
@@ -139695,11 +140026,15 @@
139695140026
**
139696140027
** (26) The subquery may not be the right operand of a RIGHT JOIN.
139697140028
** See also (3) for restrictions on LEFT JOIN.
139698140029
**
139699140030
** (27) The subquery may not contain a FULL or RIGHT JOIN unless it
139700
-** is the first element of the parent query.
140031
+** is the first element of the parent query. This must be the
140032
+** the case if:
140033
+** (27a) the subquery is not compound query, and
140034
+** (27b) the subquery is a compound query and the RIGHT JOIN occurs
140035
+** in any arm of the compound query. (See also (17g).)
139701140036
**
139702140037
** (28) The subquery is not a MATERIALIZED CTE.
139703140038
**
139704140039
** (29) Either the subquery is not the right-hand operand of a join with an
139705140040
** ON or USING clause nor the right-hand operand of a NATURAL JOIN, or
@@ -139795,21 +140130,15 @@
139795140130
**
139796140131
** (t1 LEFT OUTER JOIN t2) JOIN t3
139797140132
**
139798140133
** which is not at all the same thing.
139799140134
**
139800
- ** If the subquery is the right operand of a LEFT JOIN, then the outer
139801
- ** query cannot be an aggregate. (3c) This is an artifact of the way
139802
- ** aggregates are processed - there is no mechanism to determine if
139803
- ** the LEFT JOIN table should be all-NULL.
139804
- **
139805140135
** See also tickets #306, #350, and #3300.
139806140136
*/
139807140137
if( (pSubitem->fg.jointype & (JT_OUTER|JT_LTORJ))!=0 ){
139808140138
if( pSubSrc->nSrc>1 /* (3a) */
139809
- || isAgg /* (3b) */
139810
- || IsVirtual(pSubSrc->a[0].pTab) /* (3c) */
140139
+ || IsVirtual(pSubSrc->a[0].pTab) /* (3b) */
139811140140
|| (p->selFlags & SF_Distinct)!=0 /* (3d) */
139812140141
|| (pSubitem->fg.jointype & JT_RIGHT)!=0 /* (26) */
139813140142
){
139814140143
return 0;
139815140144
}
@@ -139825,11 +140154,11 @@
139825140154
}
139826140155
#endif
139827140156
139828140157
assert( pSubSrc->nSrc>0 ); /* True by restriction (7) */
139829140158
if( iFrom>0 && (pSubSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){
139830
- return 0; /* Restriction (27) */
140159
+ return 0; /* Restriction (27a) */
139831140160
}
139832140161
if( pSubitem->fg.isCte && pSubitem->u2.pCteUse->eM10d==M10d_Yes ){
139833140162
return 0; /* (28) */
139834140163
}
139835140164
@@ -139845,11 +140174,11 @@
139845140174
**
139846140175
** (29b) The subquery itself must not be the right operand of a
139847140176
** NATURAL join or a join that as an ON or USING clause.
139848140177
**
139849140178
** These conditions are sufficient to keep an EP_OuterON from being
139850
- ** flattened into an EP_InnerON. Restrictions (3a) and (27) prevent
140179
+ ** flattened into an EP_InnerON. Restrictions (3a) and (27a) prevent
139851140180
** an EP_InnerON from being flattened into an EP_OuterON.
139852140181
*/
139853140182
if( pSubSrc->nSrc>=2
139854140183
&& (pSubSrc->a[pSubSrc->nSrc-1].fg.jointype & JT_OUTER)!=0
139855140184
){
@@ -139886,10 +140215,16 @@
139886140215
#ifndef SQLITE_OMIT_WINDOWFUNC
139887140216
|| pSub1->pWin /* (17e) */
139888140217
#endif
139889140218
){
139890140219
return 0;
140220
+ }
140221
+ if( iFrom>0 && (pSub1->pSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){
140222
+ /* Without this restriction, the JT_LTORJ flag would end up being
140223
+ ** omitted on left-hand tables of the right join that is being
140224
+ ** flattened. */
140225
+ return 0; /* Restrictions (17g), (27b) */
139891140226
}
139892140227
testcase( pSub1->pSrc->nSrc>1 );
139893140228
}
139894140229
139895140230
/* Restriction (18). */
@@ -140189,10 +140524,12 @@
140189140524
Parse *pParse; /* Parsing context */
140190140525
u8 *pOomFault; /* Pointer to pParse->db->mallocFailed */
140191140526
int nConst; /* Number for COLUMN=CONSTANT terms */
140192140527
int nChng; /* Number of times a constant is propagated */
140193140528
int bHasAffBlob; /* At least one column in apExpr[] as affinity BLOB */
140529
+ u32 mExcludeOn; /* Which ON expressions to exclude from considertion.
140530
+ ** Either EP_OuterON or EP_InnerON|EP_OuterON */
140194140531
Expr **apExpr; /* [i*2] is COLUMN and [i*2+1] is VALUE */
140195140532
};
140196140533
140197140534
/*
140198140535
** Add a new entry to the pConst object. Except, do not add duplicate
@@ -140251,11 +140588,11 @@
140251140588
** found, add it to the pConst structure.
140252140589
*/
140253140590
static void findConstInWhere(WhereConst *pConst, Expr *pExpr){
140254140591
Expr *pRight, *pLeft;
140255140592
if( NEVER(pExpr==0) ) return;
140256
- if( ExprHasProperty(pExpr, EP_OuterON|EP_InnerON) ){
140593
+ if( ExprHasProperty(pExpr, pConst->mExcludeOn) ){
140257140594
testcase( ExprHasProperty(pExpr, EP_OuterON) );
140258140595
testcase( ExprHasProperty(pExpr, EP_InnerON) );
140259140596
return;
140260140597
}
140261140598
if( pExpr->op==TK_AND ){
@@ -140291,13 +140628,14 @@
140291140628
int bIgnoreAffBlob
140292140629
){
140293140630
int i;
140294140631
if( pConst->pOomFault[0] ) return WRC_Prune;
140295140632
if( pExpr->op!=TK_COLUMN ) return WRC_Continue;
140296
- if( ExprHasProperty(pExpr, EP_FixedCol|EP_OuterON) ){
140633
+ if( ExprHasProperty(pExpr, EP_FixedCol|pConst->mExcludeOn) ){
140297140634
testcase( ExprHasProperty(pExpr, EP_FixedCol) );
140298140635
testcase( ExprHasProperty(pExpr, EP_OuterON) );
140636
+ testcase( ExprHasProperty(pExpr, EP_InnerON) );
140299140637
return WRC_Continue;
140300140638
}
140301140639
for(i=0; i<pConst->nConst; i++){
140302140640
Expr *pColumn = pConst->apExpr[i*2];
140303140641
if( pColumn==pExpr ) continue;
@@ -140417,10 +140755,21 @@
140417140755
do{
140418140756
x.nConst = 0;
140419140757
x.nChng = 0;
140420140758
x.apExpr = 0;
140421140759
x.bHasAffBlob = 0;
140760
+ if( ALWAYS(p->pSrc!=0)
140761
+ && p->pSrc->nSrc>0
140762
+ && (p->pSrc->a[0].fg.jointype & JT_LTORJ)!=0
140763
+ ){
140764
+ /* Do not propagate constants on any ON clause if there is a
140765
+ ** RIGHT JOIN anywhere in the query */
140766
+ x.mExcludeOn = EP_InnerON | EP_OuterON;
140767
+ }else{
140768
+ /* Do not propagate constants through the ON clause of a LEFT JOIN */
140769
+ x.mExcludeOn = EP_OuterON;
140770
+ }
140422140771
findConstInWhere(&x, p->pWhere);
140423140772
if( x.nConst ){
140424140773
memset(&w, 0, sizeof(w));
140425140774
w.pParse = pParse;
140426140775
w.xExprCallback = propagateConstantExprRewrite;
@@ -140705,10 +141054,11 @@
140705141054
if( p->pWhere
140706141055
|| p->pEList->nExpr!=1
140707141056
|| p->pSrc->nSrc!=1
140708141057
|| p->pSrc->a[0].pSelect
140709141058
|| pAggInfo->nFunc!=1
141059
+ || p->pHaving
140710141060
){
140711141061
return 0;
140712141062
}
140713141063
pTab = p->pSrc->a[0].pTab;
140714141064
assert( pTab!=0 );
@@ -141406,11 +141756,11 @@
141406141756
141407141757
if( (zTabName = pFrom->zAlias)==0 ){
141408141758
zTabName = pTab->zName;
141409141759
}
141410141760
if( db->mallocFailed ) break;
141411
- assert( pFrom->fg.isNestedFrom == IsNestedFrom(pFrom->pSelect) );
141761
+ assert( (int)pFrom->fg.isNestedFrom == IsNestedFrom(pFrom->pSelect) );
141412141762
if( pFrom->fg.isNestedFrom ){
141413141763
assert( pFrom->pSelect!=0 );
141414141764
pNestedFrom = pFrom->pSelect->pEList;
141415141765
assert( pNestedFrom!=0 );
141416141766
assert( pNestedFrom->nExpr==pTab->nCol );
@@ -142280,10 +142630,11 @@
142280142630
&& OptimizationEnabled(db, SQLITE_SimplifyJoin)
142281142631
){
142282142632
SELECTTRACE(0x100,pParse,p,
142283142633
("LEFT-JOIN simplifies to JOIN on term %d\n",i));
142284142634
pItem->fg.jointype &= ~(JT_LEFT|JT_OUTER);
142635
+ assert( pItem->iCursor>=0 );
142285142636
unsetJoinExpr(p->pWhere, pItem->iCursor,
142286142637
pTabList->a[0].fg.jointype & JT_LTORJ);
142287142638
}
142288142639
142289142640
/* No futher action if this term of the FROM clause is no a subquery */
@@ -142334,11 +142685,13 @@
142334142685
&& (p->selFlags & SF_OrderByReqd)==0 /* Condition (3) and (4) */
142335142686
&& OptimizationEnabled(db, SQLITE_OmitOrderBy)
142336142687
){
142337142688
SELECTTRACE(0x100,pParse,p,
142338142689
("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1));
142339
- sqlite3ExprListDelete(db, pSub->pOrderBy);
142690
+ sqlite3ParserAddCleanup(pParse,
142691
+ (void(*)(sqlite3*,void*))sqlite3ExprListDelete,
142692
+ pSub->pOrderBy);
142340142693
pSub->pOrderBy = 0;
142341142694
}
142342142695
142343142696
/* If the outer query contains a "complex" result set (that is,
142344142697
** if the result set of the outer query uses functions or subqueries)
@@ -142501,11 +142854,11 @@
142501142854
zSavedAuthContext = pParse->zAuthContext;
142502142855
pParse->zAuthContext = pItem->zName;
142503142856
142504142857
/* Generate code to implement the subquery
142505142858
**
142506
- ** The subquery is implemented as a co-routine all if the following are
142859
+ ** The subquery is implemented as a co-routine if all of the following are
142507142860
** true:
142508142861
**
142509142862
** (1) the subquery is guaranteed to be the outer loop (so that
142510142863
** it does not need to be computed more than once), and
142511142864
** (2) the subquery is not a CTE that should be materialized
@@ -142695,11 +143048,11 @@
142695143048
*/
142696143049
iEnd = sqlite3VdbeMakeLabel(pParse);
142697143050
if( (p->selFlags & SF_FixedLimit)==0 ){
142698143051
p->nSelectRow = 320; /* 4 billion rows */
142699143052
}
142700
- computeLimitRegisters(pParse, p, iEnd);
143053
+ if( p->pLimit ) computeLimitRegisters(pParse, p, iEnd);
142701143054
if( p->iLimit==0 && sSort.addrSortIndex>=0 ){
142702143055
sqlite3VdbeChangeOpcode(v, sSort.addrSortIndex, OP_SorterOpen);
142703143056
sSort.sortFlags |= SORTFLAG_UseSorter;
142704143057
}
142705143058
@@ -142917,12 +143270,17 @@
142917143270
if( minMaxFlag ){
142918143271
sqlite3DebugPrintf("MIN/MAX Optimization (0x%02x) adds:\n", minMaxFlag);
142919143272
sqlite3TreeViewExprList(0, pMinMaxOrderBy, 0, "ORDERBY");
142920143273
}
142921143274
for(ii=0; ii<pAggInfo->nColumn; ii++){
142922
- sqlite3DebugPrintf("agg-column[%d] iMem=%d\n",
142923
- ii, pAggInfo->aCol[ii].iMem);
143275
+ struct AggInfo_col *pCol = &pAggInfo->aCol[ii];
143276
+ sqlite3DebugPrintf(
143277
+ "agg-column[%d] pTab=%s iTable=%d iColumn=%d iMem=%d"
143278
+ " iSorterColumn=%d\n",
143279
+ ii, pCol->pTab ? pCol->pTab->zName : "NULL",
143280
+ pCol->iTable, pCol->iColumn, pCol->iMem,
143281
+ pCol->iSorterColumn);
142924143282
sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0);
142925143283
}
142926143284
for(ii=0; ii<pAggInfo->nFunc; ii++){
142927143285
sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n",
142928143286
ii, pAggInfo->aFunc[ii].iMem);
@@ -143039,19 +143397,19 @@
143039143397
}
143040143398
}
143041143399
regBase = sqlite3GetTempRange(pParse, nCol);
143042143400
sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0, 0);
143043143401
j = nGroupBy;
143402
+ pAggInfo->directMode = 1;
143044143403
for(i=0; i<pAggInfo->nColumn; i++){
143045143404
struct AggInfo_col *pCol = &pAggInfo->aCol[i];
143046143405
if( pCol->iSorterColumn>=j ){
143047
- int r1 = j + regBase;
143048
- sqlite3ExprCodeGetColumnOfTable(v,
143049
- pCol->pTab, pCol->iTable, pCol->iColumn, r1);
143406
+ sqlite3ExprCode(pParse, pCol->pCExpr, j + regBase);
143050143407
j++;
143051143408
}
143052143409
}
143410
+ pAggInfo->directMode = 0;
143053143411
regRecord = sqlite3GetTempReg(pParse);
143054143412
sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord);
143055143413
sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord);
143056143414
sqlite3ReleaseTempReg(pParse, regRecord);
143057143415
sqlite3ReleaseTempRange(pParse, regBase, nCol);
@@ -147465,11 +147823,12 @@
147465147823
** in the list are moved to the sqlite3.pDisconnect list of the associated
147466147824
** database connection.
147467147825
*/
147468147826
SQLITE_PRIVATE void sqlite3VtabClear(sqlite3 *db, Table *p){
147469147827
assert( IsVirtual(p) );
147470
- if( !db || db->pnBytesFreed==0 ) vtabDisconnectAll(0, p);
147828
+ assert( db!=0 );
147829
+ if( db->pnBytesFreed==0 ) vtabDisconnectAll(0, p);
147471147830
if( p->u.vtab.azArg ){
147472147831
int i;
147473147832
for(i=0; i<p->u.vtab.nArg; i++){
147474147833
if( i!=1 ) sqlite3DbFree(db, p->u.vtab.azArg[i]);
147475147834
}
@@ -149142,10 +149501,11 @@
149142149501
#define WHERE_IN_SEEKSCAN 0x00100000 /* Seek-scan optimization for IN */
149143149502
#define WHERE_TRANSCONS 0x00200000 /* Uses a transitive constraint */
149144149503
#define WHERE_BLOOMFILTER 0x00400000 /* Consider using a Bloom-filter */
149145149504
#define WHERE_SELFCULL 0x00800000 /* nOut reduced by extra WHERE terms */
149146149505
#define WHERE_OMIT_OFFSET 0x01000000 /* Set offset counter to zero */
149506
+#define WHERE_VIEWSCAN 0x02000000 /* A full-scan of a VIEW or subquery */
149147149507
149148149508
#endif /* !defined(SQLITE_WHEREINT_H) */
149149149509
149150149510
/************** End of whereInt.h ********************************************/
149151149511
/************** Continuing where we left off in wherecode.c ******************/
@@ -149750,11 +150110,12 @@
149750150110
eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap,&iTab);
149751150111
pExpr->iTable = iTab;
149752150112
}
149753150113
sqlite3ExprDelete(db, pX);
149754150114
}else{
149755
- aiMap = (int*)sqlite3DbMallocZero(pParse->db, sizeof(int)*nEq);
150115
+ int n = sqlite3ExprVectorSize(pX->pLeft);
150116
+ aiMap = (int*)sqlite3DbMallocZero(pParse->db, sizeof(int)*MAX(nEq,n));
149756150117
eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap, &iTab);
149757150118
}
149758150119
pX = pExpr;
149759150120
}
149760150121
@@ -150020,11 +150381,11 @@
150020150381
WhereTerm *pTerm /* The upper or lower bound just coded */
150021150382
){
150022150383
if( pTerm->wtFlags & TERM_LIKEOPT ){
150023150384
VdbeOp *pOp;
150024150385
assert( pLevel->iLikeRepCntr>0 );
150025
- pOp = sqlite3VdbeGetOp(v, -1);
150386
+ pOp = sqlite3VdbeGetLastOp(v);
150026150387
assert( pOp!=0 );
150027150388
assert( pOp->opcode==OP_String8
150028150389
|| pTerm->pWC->pWInfo->pParse->db->mallocFailed );
150029150390
pOp->p3 = (int)(pLevel->iLikeRepCntr>>1); /* Register holding counter */
150030150391
pOp->p5 = (u8)(pLevel->iLikeRepCntr&1); /* ASC or DESC */
@@ -151236,12 +151597,12 @@
151236151597
sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq);
151237151598
endEq = 0;
151238151599
}
151239151600
nConstraint++;
151240151601
}
151241
- sqlite3DbFree(db, zStartAff);
151242
- sqlite3DbFree(db, zEndAff);
151602
+ if( zStartAff ) sqlite3DbNNFreeNN(db, zStartAff);
151603
+ if( zEndAff ) sqlite3DbNNFreeNN(db, zEndAff);
151243151604
151244151605
/* Top of the loop body */
151245151606
if( pLevel->p2==0 ) pLevel->p2 = sqlite3VdbeCurrentAddr(v);
151246151607
151247151608
/* Check if the index cursor is past the end of the range. */
@@ -153168,13 +153529,19 @@
153168153529
sqlite3ErrorMsg(pParse, "ON clause references tables to its right");
153169153530
return;
153170153531
}
153171153532
}else if( (prereqAll>>1)>=x ){
153172153533
/* The ON clause of an INNER JOIN references a table to its right.
153173
- ** Most other SQL database engines raise an error. But all versions
153174
- ** of SQLite going back to 3.0.0 have just put the ON clause constraint
153175
- ** into the WHERE clause and carried on. */
153534
+ ** Most other SQL database engines raise an error. But SQLite versions
153535
+ ** 3.0 through 3.38 just put the ON clause constraint into the WHERE
153536
+ ** clause and carried on. Beginning with 3.39, raise an error only
153537
+ ** if there is a RIGHT or FULL JOIN in the query. This makes SQLite
153538
+ ** more like other systems, and also preserves legacy. */
153539
+ if( ALWAYS(pSrc->nSrc>0) && (pSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){
153540
+ sqlite3ErrorMsg(pParse, "ON clause references tables to its right");
153541
+ return;
153542
+ }
153176153543
ExprClearProperty(pExpr, EP_InnerON);
153177153544
}
153178153545
}
153179153546
pTerm->prereqAll = prereqAll;
153180153547
pTerm->leftCursor = -1;
@@ -155328,11 +155695,11 @@
155328155695
#ifndef SQLITE_DEBUG
155329155696
UNUSED_PARAMETER( pParse );
155330155697
#endif
155331155698
assert( pRec!=0 );
155332155699
assert( pIdx->nSample>0 );
155333
- assert( pRec->nField>0 && pRec->nField<=pIdx->nSampleCol );
155700
+ assert( pRec->nField>0 );
155334155701
155335155702
/* Do a binary search to find the first sample greater than or equal
155336155703
** to pRec. If pRec contains a single field, the set of samples to search
155337155704
** is simply the aSample[] array. If the samples in aSample[] contain more
155338155705
** than one fields, all fields following the first are ignored.
@@ -155374,11 +155741,11 @@
155374155741
** appears that it should be 1 field in size. However, that would make it
155375155742
** smaller than sample 1, so the binary search would not work. As a result,
155376155743
** it is extended to two fields. The duplicates that this creates do not
155377155744
** cause any problems.
155378155745
*/
155379
- nField = pRec->nField;
155746
+ nField = MIN(pRec->nField, pIdx->nSample);
155380155747
iCol = 0;
155381155748
iSample = pIdx->nSample * nField;
155382155749
do{
155383155750
int iSamp; /* Index in aSample[] of test sample */
155384155751
int n; /* Number of fields in test sample */
@@ -155462,11 +155829,11 @@
155462155829
/* At this point, the (iCol+1) field prefix of aSample[i] is the first
155463155830
** sample that is greater than pRec. Or, if i==pIdx->nSample then pRec
155464155831
** is larger than all samples in the array. */
155465155832
tRowcnt iUpper, iGap;
155466155833
if( i>=pIdx->nSample ){
155467
- iUpper = sqlite3LogEstToInt(pIdx->aiRowLogEst[0]);
155834
+ iUpper = pIdx->nRowEst0;
155468155835
}else{
155469155836
iUpper = aSample[i].anLt[iCol];
155470155837
}
155471155838
155472155839
if( iLower>=iUpper ){
@@ -156091,16 +156458,22 @@
156091156458
}
156092156459
}
156093156460
}
156094156461
156095156462
/*
156096
-** Deallocate internal memory used by a WhereLoop object
156463
+** Deallocate internal memory used by a WhereLoop object. Leave the
156464
+** object in an initialized state, as if it had been newly allocated.
156097156465
*/
156098156466
static void whereLoopClear(sqlite3 *db, WhereLoop *p){
156099
- if( p->aLTerm!=p->aLTermSpace ) sqlite3DbFreeNN(db, p->aLTerm);
156467
+ if( p->aLTerm!=p->aLTermSpace ){
156468
+ sqlite3DbFreeNN(db, p->aLTerm);
156469
+ p->aLTerm = p->aLTermSpace;
156470
+ p->nLSlot = ArraySize(p->aLTermSpace);
156471
+ }
156100156472
whereLoopClearUnion(db, p);
156101
- whereLoopInit(p);
156473
+ p->nLTerm = 0;
156474
+ p->wsFlags = 0;
156102156475
}
156103156476
156104156477
/*
156105156478
** Increase the memory allocation for pLoop->aLTerm[] to be at least n.
156106156479
*/
@@ -156120,11 +156493,13 @@
156120156493
/*
156121156494
** Transfer content from the second pLoop into the first.
156122156495
*/
156123156496
static int whereLoopXfer(sqlite3 *db, WhereLoop *pTo, WhereLoop *pFrom){
156124156497
whereLoopClearUnion(db, pTo);
156125
- if( whereLoopResize(db, pTo, pFrom->nLTerm) ){
156498
+ if( pFrom->nLTerm > pTo->nLSlot
156499
+ && whereLoopResize(db, pTo, pFrom->nLTerm)
156500
+ ){
156126156501
memset(pTo, 0, WHERE_LOOP_XFER_SZ);
156127156502
return SQLITE_NOMEM_BKPT;
156128156503
}
156129156504
memcpy(pTo, pFrom, WHERE_LOOP_XFER_SZ);
156130156505
memcpy(pTo->aLTerm, pFrom->aLTerm, pTo->nLTerm*sizeof(pTo->aLTerm[0]));
@@ -156138,32 +156513,34 @@
156138156513
156139156514
/*
156140156515
** Delete a WhereLoop object
156141156516
*/
156142156517
static void whereLoopDelete(sqlite3 *db, WhereLoop *p){
156518
+ assert( db!=0 );
156143156519
whereLoopClear(db, p);
156144
- sqlite3DbFreeNN(db, p);
156520
+ sqlite3DbNNFreeNN(db, p);
156145156521
}
156146156522
156147156523
/*
156148156524
** Free a WhereInfo structure
156149156525
*/
156150156526
static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){
156151156527
assert( pWInfo!=0 );
156528
+ assert( db!=0 );
156152156529
sqlite3WhereClauseClear(&pWInfo->sWC);
156153156530
while( pWInfo->pLoops ){
156154156531
WhereLoop *p = pWInfo->pLoops;
156155156532
pWInfo->pLoops = p->pNextLoop;
156156156533
whereLoopDelete(db, p);
156157156534
}
156158156535
assert( pWInfo->pExprMods==0 );
156159156536
while( pWInfo->pMemToFree ){
156160156537
WhereMemBlock *pNext = pWInfo->pMemToFree->pNext;
156161
- sqlite3DbFreeNN(db, pWInfo->pMemToFree);
156538
+ sqlite3DbNNFreeNN(db, pWInfo->pMemToFree);
156162156539
pWInfo->pMemToFree = pNext;
156163156540
}
156164
- sqlite3DbFreeNN(db, pWInfo);
156541
+ sqlite3DbNNFreeNN(db, pWInfo);
156165156542
}
156166156543
156167156544
/* Undo all Expr node modifications
156168156545
*/
156169156546
static void whereUndoExprMods(WhereInfo *pWInfo){
@@ -156773,11 +157150,15 @@
156773157150
pNew->wsFlags = saved_wsFlags;
156774157151
pNew->u.btree.nEq = saved_nEq;
156775157152
pNew->u.btree.nBtm = saved_nBtm;
156776157153
pNew->u.btree.nTop = saved_nTop;
156777157154
pNew->nLTerm = saved_nLTerm;
156778
- if( whereLoopResize(db, pNew, pNew->nLTerm+1) ) break; /* OOM */
157155
+ if( pNew->nLTerm>=pNew->nLSlot
157156
+ && whereLoopResize(db, pNew, pNew->nLTerm+1)
157157
+ ){
157158
+ break; /* OOM while trying to enlarge the pNew->aLTerm array */
157159
+ }
156779157160
pNew->aLTerm[pNew->nLTerm++] = pTerm;
156780157161
pNew->prereq = (saved_prereq | pTerm->prereqRight) & ~pNew->maskSelf;
156781157162
156782157163
assert( nInMul==0
156783157164
|| (pNew->wsFlags & WHERE_COLUMN_NULL)!=0
@@ -156866,42 +157247,43 @@
156866157247
}
156867157248
}
156868157249
if( scan.iEquiv>1 ) pNew->wsFlags |= WHERE_TRANSCONS;
156869157250
}else if( eOp & WO_ISNULL ){
156870157251
pNew->wsFlags |= WHERE_COLUMN_NULL;
156871
- }else if( eOp & (WO_GT|WO_GE) ){
156872
- testcase( eOp & WO_GT );
156873
- testcase( eOp & WO_GE );
156874
- pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_BTM_LIMIT;
156875
- pNew->u.btree.nBtm = whereRangeVectorLen(
156876
- pParse, pSrc->iCursor, pProbe, saved_nEq, pTerm
156877
- );
156878
- pBtm = pTerm;
156879
- pTop = 0;
156880
- if( pTerm->wtFlags & TERM_LIKEOPT ){
156881
- /* Range constraints that come from the LIKE optimization are
156882
- ** always used in pairs. */
156883
- pTop = &pTerm[1];
156884
- assert( (pTop-(pTerm->pWC->a))<pTerm->pWC->nTerm );
156885
- assert( pTop->wtFlags & TERM_LIKEOPT );
156886
- assert( pTop->eOperator==WO_LT );
156887
- if( whereLoopResize(db, pNew, pNew->nLTerm+1) ) break; /* OOM */
156888
- pNew->aLTerm[pNew->nLTerm++] = pTop;
156889
- pNew->wsFlags |= WHERE_TOP_LIMIT;
156890
- pNew->u.btree.nTop = 1;
156891
- }
156892
- }else{
156893
- assert( eOp & (WO_LT|WO_LE) );
156894
- testcase( eOp & WO_LT );
156895
- testcase( eOp & WO_LE );
156896
- pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_TOP_LIMIT;
156897
- pNew->u.btree.nTop = whereRangeVectorLen(
156898
- pParse, pSrc->iCursor, pProbe, saved_nEq, pTerm
156899
- );
156900
- pTop = pTerm;
156901
- pBtm = (pNew->wsFlags & WHERE_BTM_LIMIT)!=0 ?
156902
- pNew->aLTerm[pNew->nLTerm-2] : 0;
157252
+ }else{
157253
+ int nVecLen = whereRangeVectorLen(
157254
+ pParse, pSrc->iCursor, pProbe, saved_nEq, pTerm
157255
+ );
157256
+ if( eOp & (WO_GT|WO_GE) ){
157257
+ testcase( eOp & WO_GT );
157258
+ testcase( eOp & WO_GE );
157259
+ pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_BTM_LIMIT;
157260
+ pNew->u.btree.nBtm = nVecLen;
157261
+ pBtm = pTerm;
157262
+ pTop = 0;
157263
+ if( pTerm->wtFlags & TERM_LIKEOPT ){
157264
+ /* Range constraints that come from the LIKE optimization are
157265
+ ** always used in pairs. */
157266
+ pTop = &pTerm[1];
157267
+ assert( (pTop-(pTerm->pWC->a))<pTerm->pWC->nTerm );
157268
+ assert( pTop->wtFlags & TERM_LIKEOPT );
157269
+ assert( pTop->eOperator==WO_LT );
157270
+ if( whereLoopResize(db, pNew, pNew->nLTerm+1) ) break; /* OOM */
157271
+ pNew->aLTerm[pNew->nLTerm++] = pTop;
157272
+ pNew->wsFlags |= WHERE_TOP_LIMIT;
157273
+ pNew->u.btree.nTop = 1;
157274
+ }
157275
+ }else{
157276
+ assert( eOp & (WO_LT|WO_LE) );
157277
+ testcase( eOp & WO_LT );
157278
+ testcase( eOp & WO_LE );
157279
+ pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_TOP_LIMIT;
157280
+ pNew->u.btree.nTop = nVecLen;
157281
+ pTop = pTerm;
157282
+ pBtm = (pNew->wsFlags & WHERE_BTM_LIMIT)!=0 ?
157283
+ pNew->aLTerm[pNew->nLTerm-2] : 0;
157284
+ }
156903157285
}
156904157286
156905157287
/* At this point pNew->nOut is set to the number of rows expected to
156906157288
** be visited by the index scan before considering term pTerm, or the
156907157289
** values of nIn and nInMul. In other words, assuming that all
@@ -157343,10 +157725,13 @@
157343157725
#ifdef SQLITE_ENABLE_STAT4
157344157726
pNew->rRun = rSize + 16 - 2*((pTab->tabFlags & TF_HasStat4)!=0);
157345157727
#else
157346157728
pNew->rRun = rSize + 16;
157347157729
#endif
157730
+ if( IsView(pTab) || (pTab->tabFlags & TF_Ephemeral)!=0 ){
157731
+ pNew->wsFlags |= WHERE_VIEWSCAN;
157732
+ }
157348157733
ApplyCostMultiplier(pNew->rRun, pTab->costMult);
157349157734
whereLoopOutputAdjust(pWC, pNew, rSize);
157350157735
rc = whereLoopInsert(pBuilder, pNew);
157351157736
pNew->nOut = rSize;
157352157737
if( rc ) break;
@@ -158063,29 +158448,47 @@
158063158448
SrcItem *pItem;
158064158449
SrcItem *pEnd = &pTabList->a[pWInfo->nLevel];
158065158450
sqlite3 *db = pWInfo->pParse->db;
158066158451
int rc = SQLITE_OK;
158067158452
int bFirstPastRJ = 0;
158453
+ int hasRightJoin = 0;
158068158454
WhereLoop *pNew;
158069158455
158070158456
158071158457
/* Loop over the tables in the join, from left to right */
158072158458
pNew = pBuilder->pNew;
158073
- whereLoopInit(pNew);
158459
+
158460
+ /* Verify that pNew has already been initialized */
158461
+ assert( pNew->nLTerm==0 );
158462
+ assert( pNew->wsFlags==0 );
158463
+ assert( pNew->nLSlot>=ArraySize(pNew->aLTermSpace) );
158464
+ assert( pNew->aLTerm!=0 );
158465
+
158074158466
pBuilder->iPlanLimit = SQLITE_QUERY_PLANNER_LIMIT;
158075158467
for(iTab=0, pItem=pTabList->a; pItem<pEnd; iTab++, pItem++){
158076158468
Bitmask mUnusable = 0;
158077158469
pNew->iTab = iTab;
158078158470
pBuilder->iPlanLimit += SQLITE_QUERY_PLANNER_LIMIT_INCR;
158079158471
pNew->maskSelf = sqlite3WhereGetMask(&pWInfo->sMaskSet, pItem->iCursor);
158080
- if( bFirstPastRJ || (pItem->fg.jointype & (JT_OUTER|JT_CROSS))!=0 ){
158472
+ if( bFirstPastRJ
158473
+ || (pItem->fg.jointype & (JT_OUTER|JT_CROSS|JT_LTORJ))!=0
158474
+ ){
158081158475
/* Add prerequisites to prevent reordering of FROM clause terms
158082158476
** across CROSS joins and outer joins. The bFirstPastRJ boolean
158083158477
** prevents the right operand of a RIGHT JOIN from being swapped with
158084
- ** other elements even further to the right. */
158478
+ ** other elements even further to the right.
158479
+ **
158480
+ ** The JT_LTORJ case and the hasRightJoin flag work together to
158481
+ ** prevent FROM-clause terms from moving from the right side of
158482
+ ** a LEFT JOIN over to the left side of that join if the LEFT JOIN
158483
+ ** is itself on the left side of a RIGHT JOIN.
158484
+ */
158485
+ if( pItem->fg.jointype & JT_LTORJ ) hasRightJoin = 1;
158085158486
mPrereq |= mPrior;
158086158487
bFirstPastRJ = (pItem->fg.jointype & JT_RIGHT)!=0;
158488
+ }else if( !hasRightJoin ){
158489
+ mPrereq = 0;
158087158490
}
158088158491
#ifndef SQLITE_OMIT_VIRTUALTABLE
158089158492
if( IsVirtual(pItem->pTab) ){
158090158493
SrcItem *p;
158091158494
for(p=&pItem[1]; p<pEnd; p++){
@@ -158654,13 +159057,13 @@
158654159057
for(ii=0, pFrom=aFrom; ii<nFrom; ii++, pFrom++){
158655159058
for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){
158656159059
LogEst nOut; /* Rows visited by (pFrom+pWLoop) */
158657159060
LogEst rCost; /* Cost of path (pFrom+pWLoop) */
158658159061
LogEst rUnsorted; /* Unsorted cost of (pFrom+pWLoop) */
158659
- i8 isOrdered = pFrom->isOrdered; /* isOrdered for (pFrom+pWLoop) */
159062
+ i8 isOrdered; /* isOrdered for (pFrom+pWLoop) */
158660159063
Bitmask maskNew; /* Mask of src visited by (..) */
158661
- Bitmask revMask = 0; /* Mask of rev-order loops for (..) */
159064
+ Bitmask revMask; /* Mask of rev-order loops for (..) */
158662159065
158663159066
if( (pWLoop->prereq & ~pFrom->maskLoop)!=0 ) continue;
158664159067
if( (pWLoop->maskSelf & pFrom->maskLoop)!=0 ) continue;
158665159068
if( (pWLoop->wsFlags & WHERE_AUTO_INDEX)!=0 && pFrom->nRow<3 ){
158666159069
/* Do not use an automatic index if the this loop is expected
@@ -158675,11 +159078,13 @@
158675159078
** Compute its cost */
158676159079
rUnsorted = sqlite3LogEstAdd(pWLoop->rSetup,pWLoop->rRun + pFrom->nRow);
158677159080
rUnsorted = sqlite3LogEstAdd(rUnsorted, pFrom->rUnsorted);
158678159081
nOut = pFrom->nRow + pWLoop->nOut;
158679159082
maskNew = pFrom->maskLoop | pWLoop->maskSelf;
159083
+ isOrdered = pFrom->isOrdered;
158680159084
if( isOrdered<0 ){
159085
+ revMask = 0;
158681159086
isOrdered = wherePathSatisfiesOrderBy(pWInfo,
158682159087
pWInfo->pOrderBy, pFrom, pWInfo->wctrlFlags,
158683159088
iLoop, pWLoop, &revMask);
158684159089
}else{
158685159090
revMask = pFrom->revLoop;
@@ -158702,10 +159107,17 @@
158702159107
rUnsorted, rCost));
158703159108
}else{
158704159109
rCost = rUnsorted;
158705159110
rUnsorted -= 2; /* TUNING: Slight bias in favor of no-sort plans */
158706159111
}
159112
+
159113
+ /* TUNING: A full-scan of a VIEW or subquery in the outer loop
159114
+ ** is not so bad. */
159115
+ if( iLoop==0 && (pWLoop->wsFlags & WHERE_VIEWSCAN)!=0 ){
159116
+ rCost += -10;
159117
+ nOut += -30;
159118
+ }
158707159119
158708159120
/* Check to see if pWLoop should be added to the set of
158709159121
** mxChoice best-so-far paths.
158710159122
**
158711159123
** First look for an existing path among best-so-far paths
@@ -158935,11 +159347,12 @@
158935159347
158936159348
158937159349
pWInfo->nRowOut = pFrom->nRow;
158938159350
158939159351
/* Free temporary memory and return success */
158940
- sqlite3DbFreeNN(db, pSpace);
159352
+ assert( db!=0 );
159353
+ sqlite3DbNNFreeNN(db, pSpace);
158941159354
return SQLITE_OK;
158942159355
}
158943159356
158944159357
/*
158945159358
** Most queries use only a single table (they are not joins) and have
@@ -158968,11 +159381,15 @@
158968159381
if( pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE ) return 0;
158969159382
assert( pWInfo->pTabList->nSrc>=1 );
158970159383
pItem = pWInfo->pTabList->a;
158971159384
pTab = pItem->pTab;
158972159385
if( IsVirtual(pTab) ) return 0;
158973
- if( pItem->fg.isIndexedBy ) return 0;
159386
+ if( pItem->fg.isIndexedBy || pItem->fg.notIndexed ){
159387
+ testcase( pItem->fg.isIndexedBy );
159388
+ testcase( pItem->fg.notIndexed );
159389
+ return 0;
159390
+ }
158974159391
iCur = pItem->iCursor;
158975159392
pWC = &pWInfo->sWC;
158976159393
pLoop = pBuilder->pNew;
158977159394
pLoop->wsFlags = 0;
158978159395
pLoop->nSkip = 0;
@@ -159141,11 +159558,11 @@
159141159558
WhereTerm *pTerm, *pEnd;
159142159559
SrcItem *pItem;
159143159560
WhereLoop *pLoop;
159144159561
pLoop = pWInfo->a[i].pWLoop;
159145159562
pItem = &pWInfo->pTabList->a[pLoop->iTab];
159146
- if( (pItem->fg.jointype & JT_LEFT)==0 ) continue;
159563
+ if( (pItem->fg.jointype & (JT_LEFT|JT_RIGHT))!=JT_LEFT ) continue;
159147159564
if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT)==0
159148159565
&& (pLoop->wsFlags & WHERE_ONEROW)==0
159149159566
){
159150159567
continue;
159151159568
}
@@ -159473,11 +159890,11 @@
159473159890
}
159474159891
159475159892
/* Analyze all of the subexpressions. */
159476159893
sqlite3WhereExprAnalyze(pTabList, &pWInfo->sWC);
159477159894
sqlite3WhereAddLimit(&pWInfo->sWC, pLimit);
159478
- if( db->mallocFailed ) goto whereBeginError;
159895
+ if( pParse->nErr ) goto whereBeginError;
159479159896
159480159897
/* Special case: WHERE terms that do not refer to any tables in the join
159481159898
** (constant expressions). Evaluate each such term, and jump over all the
159482159899
** generated code if the result is not true.
159483159900
**
@@ -161164,11 +161581,10 @@
161164161581
int i;
161165161582
int nInit = pList ? pList->nExpr : 0;
161166161583
for(i=0; i<pAppend->nExpr; i++){
161167161584
sqlite3 *db = pParse->db;
161168161585
Expr *pDup = sqlite3ExprDup(db, pAppend->a[i].pExpr, 0);
161169
- assert( pDup==0 || !ExprHasProperty(pDup, EP_MemToken) );
161170161586
if( db->mallocFailed ){
161171161587
sqlite3ExprDelete(db, pDup);
161172161588
break;
161173161589
}
161174161590
if( bIntToNull ){
@@ -162435,14 +162851,13 @@
162435162851
}
162436162852
sqlite3VdbeAddOp2(v, OP_Goto, 0, addrDone);
162437162853
162438162854
/* This block runs if reg1 is not NULL, but reg2 is. */
162439162855
sqlite3VdbeJumpHere(v, addr);
162440
- sqlite3VdbeAddOp2(v, OP_IsNull, reg2, lbl); VdbeCoverage(v);
162441
- if( op==OP_Gt || op==OP_Ge ){
162442
- sqlite3VdbeChangeP2(v, -1, addrDone);
162443
- }
162856
+ sqlite3VdbeAddOp2(v, OP_IsNull, reg2,
162857
+ (op==OP_Gt || op==OP_Ge) ? addrDone : lbl);
162858
+ VdbeCoverage(v);
162444162859
}
162445162860
162446162861
/* Register reg1 currently contains csr1.peerVal (the peer-value from csr1).
162447162862
** This block adds (or subtracts for DESC) the numeric value in regVal
162448162863
** from it. Or, if reg1 is not numeric (it is a NULL, a text value or a blob),
@@ -169918,10 +170333,11 @@
169918170333
while( 1 ){
169919170334
n = sqlite3GetToken((u8*)zSql, &tokenType);
169920170335
mxSqlLen -= n;
169921170336
if( mxSqlLen<0 ){
169922170337
pParse->rc = SQLITE_TOOBIG;
170338
+ pParse->nErr++;
169923170339
break;
169924170340
}
169925170341
#ifndef SQLITE_OMIT_WINDOWFUNC
169926170342
if( tokenType>=TK_WINDOW ){
169927170343
assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER
@@ -170014,11 +170430,11 @@
170014170430
sqlite3DeleteTable(db, pParse->pNewTable);
170015170431
}
170016170432
if( pParse->pNewTrigger && !IN_RENAME_OBJECT ){
170017170433
sqlite3DeleteTrigger(db, pParse->pNewTrigger);
170018170434
}
170019
- if( pParse->pVList ) sqlite3DbFreeNN(db, pParse->pVList);
170435
+ if( pParse->pVList ) sqlite3DbNNFreeNN(db, pParse->pVList);
170020170436
db->pParse = pParentParse;
170021170437
assert( nErr==0 || pParse->rc!=SQLITE_OK );
170022170438
return nErr;
170023170439
}
170024170440
@@ -171370,22 +171786,23 @@
171370171786
db->lookaside.pEnd = p;
171371171787
db->lookaside.bDisable = 0;
171372171788
db->lookaside.bMalloced = pBuf==0 ?1:0;
171373171789
db->lookaside.nSlot = nBig+nSm;
171374171790
}else{
171375
- db->lookaside.pStart = db;
171791
+ db->lookaside.pStart = 0;
171376171792
#ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE
171377171793
db->lookaside.pSmallInit = 0;
171378171794
db->lookaside.pSmallFree = 0;
171379
- db->lookaside.pMiddle = db;
171795
+ db->lookaside.pMiddle = 0;
171380171796
#endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */
171381
- db->lookaside.pEnd = db;
171797
+ db->lookaside.pEnd = 0;
171382171798
db->lookaside.bDisable = 1;
171383171799
db->lookaside.sz = 0;
171384171800
db->lookaside.bMalloced = 0;
171385171801
db->lookaside.nSlot = 0;
171386171802
}
171803
+ db->lookaside.pTrueEnd = db->lookaside.pEnd;
171387171804
assert( sqlite3LookasideUsed(db,0)==0 );
171388171805
#endif /* SQLITE_OMIT_LOOKASIDE */
171389171806
return SQLITE_OK;
171390171807
}
171391171808
@@ -171460,10 +171877,11 @@
171460171877
** Configuration settings for an individual database connection
171461171878
*/
171462171879
SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){
171463171880
va_list ap;
171464171881
int rc;
171882
+ sqlite3_mutex_enter(db->mutex);
171465171883
va_start(ap, op);
171466171884
switch( op ){
171467171885
case SQLITE_DBCONFIG_MAINDBNAME: {
171468171886
/* IMP: R-06824-28531 */
171469171887
/* IMP: R-36257-52125 */
@@ -171525,10 +171943,11 @@
171525171943
}
171526171944
break;
171527171945
}
171528171946
}
171529171947
va_end(ap);
171948
+ sqlite3_mutex_leave(db->mutex);
171530171949
return rc;
171531171950
}
171532171951
171533171952
/*
171534171953
** This is the default collating function named "BINARY" which is always
@@ -174658,12 +175077,15 @@
174658175077
sqlite3ShowUpsert(0);
174659175078
sqlite3ShowTriggerStep(0);
174660175079
sqlite3ShowTriggerStepList(0);
174661175080
sqlite3ShowTrigger(0);
174662175081
sqlite3ShowTriggerList(0);
175082
+#ifndef SQLITE_OMIT_WINDOWFUNC
174663175083
sqlite3ShowWindow(0);
174664175084
sqlite3ShowWinFunc(0);
175085
+#endif
175086
+ sqlite3ShowSelect(0);
174665175087
}
174666175088
#endif
174667175089
break;
174668175090
}
174669175091
@@ -180993,12 +181415,11 @@
180993181415
static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){
180994181416
int iToken; /* Used to iterate through phrase tokens */
180995181417
char *aPoslist = 0; /* Position list for deferred tokens */
180996181418
int nPoslist = 0; /* Number of bytes in aPoslist */
180997181419
int iPrev = -1; /* Token number of previous deferred token */
180998
-
180999
- assert( pPhrase->doclist.bFreeList==0 );
181420
+ char *aFree = (pPhrase->doclist.bFreeList ? pPhrase->doclist.pList : 0);
181000181421
181001181422
for(iToken=0; iToken<pPhrase->nToken; iToken++){
181002181423
Fts3PhraseToken *pToken = &pPhrase->aToken[iToken];
181003181424
Fts3DeferredToken *pDeferred = pToken->pDeferred;
181004181425
@@ -181008,10 +181429,11 @@
181008181429
int rc = sqlite3Fts3DeferredTokenList(pDeferred, &pList, &nList);
181009181430
if( rc!=SQLITE_OK ) return rc;
181010181431
181011181432
if( pList==0 ){
181012181433
sqlite3_free(aPoslist);
181434
+ sqlite3_free(aFree);
181013181435
pPhrase->doclist.pList = 0;
181014181436
pPhrase->doclist.nList = 0;
181015181437
return SQLITE_OK;
181016181438
181017181439
}else if( aPoslist==0 ){
@@ -181028,10 +181450,11 @@
181028181450
sqlite3_free(aPoslist);
181029181451
aPoslist = pList;
181030181452
nPoslist = (int)(aOut - aPoslist);
181031181453
if( nPoslist==0 ){
181032181454
sqlite3_free(aPoslist);
181455
+ sqlite3_free(aFree);
181033181456
pPhrase->doclist.pList = 0;
181034181457
pPhrase->doclist.nList = 0;
181035181458
return SQLITE_OK;
181036181459
}
181037181460
}
@@ -181060,17 +181483,18 @@
181060181483
p1 = pPhrase->doclist.pList;
181061181484
p2 = aPoslist;
181062181485
nDistance = iPrev - nMaxUndeferred;
181063181486
}
181064181487
181065
- aOut = (char *)sqlite3_malloc(nPoslist+8);
181488
+ aOut = (char *)sqlite3Fts3MallocZero(nPoslist+FTS3_BUFFER_PADDING);
181066181489
if( !aOut ){
181067181490
sqlite3_free(aPoslist);
181068181491
return SQLITE_NOMEM;
181069181492
}
181070181493
181071181494
pPhrase->doclist.pList = aOut;
181495
+ assert( p1 && p2 );
181072181496
if( fts3PoslistPhraseMerge(&aOut, nDistance, 0, 1, &p1, &p2) ){
181073181497
pPhrase->doclist.bFreeList = 1;
181074181498
pPhrase->doclist.nList = (int)(aOut - pPhrase->doclist.pList);
181075181499
}else{
181076181500
sqlite3_free(aOut);
@@ -181079,10 +181503,11 @@
181079181503
}
181080181504
sqlite3_free(aPoslist);
181081181505
}
181082181506
}
181083181507
181508
+ if( pPhrase->doclist.pList!=aFree ) sqlite3_free(aFree);
181084181509
return SQLITE_OK;
181085181510
}
181086181511
#endif /* SQLITE_DISABLE_FTS4_DEFERRED */
181087181512
181088181513
/*
@@ -182253,15 +182678,14 @@
182253182678
);
182254182679
break;
182255182680
182256182681
default: {
182257182682
#ifndef SQLITE_DISABLE_FTS4_DEFERRED
182258
- if( pCsr->pDeferred
182259
- && (pExpr->iDocid==pCsr->iPrevId || pExpr->bDeferred)
182260
- ){
182683
+ if( pCsr->pDeferred && (pExpr->bDeferred || (
182684
+ pExpr->iDocid==pCsr->iPrevId && pExpr->pPhrase->doclist.pList
182685
+ ))){
182261182686
Fts3Phrase *pPhrase = pExpr->pPhrase;
182262
- assert( pExpr->bDeferred || pPhrase->doclist.bFreeList==0 );
182263182687
if( pExpr->bDeferred ){
182264182688
fts3EvalInvalidatePoslist(pPhrase);
182265182689
}
182266182690
*pRc = fts3EvalDeferredPhrase(pCsr, pPhrase);
182267182691
bHit = (pPhrase->doclist.pList!=0);
@@ -204085,11 +204509,11 @@
204085204509
sqlite3_bind_value(pUp, 2, aData[2]);
204086204510
}
204087204511
sqlite3_free(p);
204088204512
nChange = 1;
204089204513
}
204090
- for(jj=1; jj<pRtree->nAux; jj++){
204514
+ for(jj=1; jj<nData-2; jj++){
204091204515
nChange++;
204092204516
sqlite3_bind_value(pUp, jj+2, aData[jj+2]);
204093204517
}
204094204518
if( nChange ){
204095204519
sqlite3_step(pUp);
@@ -212444,15 +212868,16 @@
212444212868
*/
212445212869
static int dbpageBegin(sqlite3_vtab *pVtab){
212446212870
DbpageTable *pTab = (DbpageTable *)pVtab;
212447212871
sqlite3 *db = pTab->db;
212448212872
int i;
212449
- for(i=0; i<db->nDb; i++){
212873
+ int rc = SQLITE_OK;
212874
+ for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
212450212875
Btree *pBt = db->aDb[i].pBt;
212451
- if( pBt ) sqlite3BtreeBeginTrans(pBt, 1, 0);
212876
+ if( pBt ) rc = sqlite3BtreeBeginTrans(pBt, 1, 0);
212452212877
}
212453
- return SQLITE_OK;
212878
+ return rc;
212454212879
}
212455212880
212456212881
212457212882
/*
212458212883
** Invoke this routine to register the "dbpage" virtual table module
@@ -219172,11 +219597,11 @@
219172219597
static void sqlite3Fts5BufferAppendPrintf(int *, Fts5Buffer*, char *zFmt, ...);
219173219598
219174219599
static char *sqlite3Fts5Mprintf(int *pRc, const char *zFmt, ...);
219175219600
219176219601
#define fts5BufferZero(x) sqlite3Fts5BufferZero(x)
219177
-#define fts5BufferAppendVarint(a,b,c) sqlite3Fts5BufferAppendVarint(a,b,c)
219602
+#define fts5BufferAppendVarint(a,b,c) sqlite3Fts5BufferAppendVarint(a,b,(i64)c)
219178219603
#define fts5BufferFree(a) sqlite3Fts5BufferFree(a)
219179219604
#define fts5BufferAppendBlob(a,b,c,d) sqlite3Fts5BufferAppendBlob(a,b,c,d)
219180219605
#define fts5BufferSet(a,b,c,d) sqlite3Fts5BufferSet(a,b,c,d)
219181219606
219182219607
#define fts5BufferGrow(pRc,pBuf,nn) ( \
@@ -231049,11 +231474,13 @@
231049231474
/* Write the rowid. */
231050231475
if( pWriter->bFirstRowidInDoclist || pWriter->bFirstRowidInPage ){
231051231476
fts5BufferAppendVarint(&p->rc, &pPage->buf, iRowid);
231052231477
}else{
231053231478
assert_nc( p->rc || iRowid>pWriter->iPrevRowid );
231054
- fts5BufferAppendVarint(&p->rc, &pPage->buf, iRowid - pWriter->iPrevRowid);
231479
+ fts5BufferAppendVarint(&p->rc, &pPage->buf,
231480
+ (u64)iRowid - (u64)pWriter->iPrevRowid
231481
+ );
231055231482
}
231056231483
pWriter->iPrevRowid = iRowid;
231057231484
pWriter->bFirstRowidInDoclist = 0;
231058231485
pWriter->bFirstRowidInPage = 0;
231059231486
}
@@ -231813,21 +232240,21 @@
231813232240
return fts5IndexReturn(p);
231814232241
}
231815232242
231816232243
static void fts5AppendRowid(
231817232244
Fts5Index *p,
231818
- i64 iDelta,
232245
+ u64 iDelta,
231819232246
Fts5Iter *pUnused,
231820232247
Fts5Buffer *pBuf
231821232248
){
231822232249
UNUSED_PARAM(pUnused);
231823232250
fts5BufferAppendVarint(&p->rc, pBuf, iDelta);
231824232251
}
231825232252
231826232253
static void fts5AppendPoslist(
231827232254
Fts5Index *p,
231828
- i64 iDelta,
232255
+ u64 iDelta,
231829232256
Fts5Iter *pMulti,
231830232257
Fts5Buffer *pBuf
231831232258
){
231832232259
int nData = pMulti->base.nData;
231833232260
int nByte = nData + 9 + 9 + FTS5_DATA_ZERO_PADDING;
@@ -231898,14 +232325,14 @@
231898232325
fts5BufferSafeAppendVarint(pBuf, iRowid - *piLastRowid);
231899232326
*piLastRowid = iRowid;
231900232327
}
231901232328
#endif
231902232329
231903
-#define fts5MergeAppendDocid(pBuf, iLastRowid, iRowid) { \
231904
- assert( (pBuf)->n!=0 || (iLastRowid)==0 ); \
231905
- fts5BufferSafeAppendVarint((pBuf), (iRowid) - (iLastRowid)); \
231906
- (iLastRowid) = (iRowid); \
232330
+#define fts5MergeAppendDocid(pBuf, iLastRowid, iRowid) { \
232331
+ assert( (pBuf)->n!=0 || (iLastRowid)==0 ); \
232332
+ fts5BufferSafeAppendVarint((pBuf), (u64)(iRowid) - (u64)(iLastRowid)); \
232333
+ (iLastRowid) = (iRowid); \
231907232334
}
231908232335
231909232336
/*
231910232337
** Swap the contents of buffer *p1 with that of *p2.
231911232338
*/
@@ -232172,11 +232599,11 @@
232172232599
Fts5Buffer *aBuf;
232173232600
int nBuf = 32;
232174232601
int nMerge = 1;
232175232602
232176232603
void (*xMerge)(Fts5Index*, Fts5Buffer*, int, Fts5Buffer*);
232177
- void (*xAppend)(Fts5Index*, i64, Fts5Iter*, Fts5Buffer*);
232604
+ void (*xAppend)(Fts5Index*, u64, Fts5Iter*, Fts5Buffer*);
232178232605
if( p->pConfig->eDetail==FTS5_DETAIL_NONE ){
232179232606
xMerge = fts5MergeRowidLists;
232180232607
xAppend = fts5AppendRowid;
232181232608
}else{
232182232609
nMerge = FTS5_MERGE_NLIST-1;
@@ -232211,11 +232638,11 @@
232211232638
fts5MultiIterNext2(p, p1, &dummy)
232212232639
){
232213232640
Fts5SegIter *pSeg = &p1->aSeg[ p1->aFirst[1].iFirst ];
232214232641
p1->xSetOutputs(p1, pSeg);
232215232642
if( p1->base.nData ){
232216
- xAppend(p, p1->base.iRowid-iLastRowid, p1, &doclist);
232643
+ xAppend(p, (u64)p1->base.iRowid-(u64)iLastRowid, p1, &doclist);
232217232644
iLastRowid = p1->base.iRowid;
232218232645
}
232219232646
}
232220232647
fts5MultiIterFree(p1);
232221232648
}
@@ -232259,11 +232686,11 @@
232259232686
}
232260232687
}
232261232688
iLastRowid = 0;
232262232689
}
232263232690
232264
- xAppend(p, p1->base.iRowid-iLastRowid, p1, &doclist);
232691
+ xAppend(p, (u64)p1->base.iRowid-(u64)iLastRowid, p1, &doclist);
232265232692
iLastRowid = p1->base.iRowid;
232266232693
}
232267232694
232268232695
assert( (nBuf%nMerge)==0 );
232269232696
for(i=0; i<nBuf; i+=nMerge){
@@ -236575,11 +237002,11 @@
236575237002
int nArg, /* Number of args */
236576237003
sqlite3_value **apUnused /* Function arguments */
236577237004
){
236578237005
assert( nArg==0 );
236579237006
UNUSED_PARAM2(nArg, apUnused);
236580
- sqlite3_result_text(pCtx, "fts5: 2022-06-15 16:26:37 56c60a35ea457f06db58ec3f694a1ae16fd03e6625da1d7879d63d72bbcb1c62", -1, SQLITE_TRANSIENT);
237007
+ sqlite3_result_text(pCtx, "fts5: 2022-09-02 21:19:24 da7af290960ab8a04a1f55cdc5eeac36b47fa194edf67f0a05daa4b7f2a4071c", -1, SQLITE_TRANSIENT);
236581237008
}
236582237009
236583237010
/*
236584237011
** Return true if zName is the extension on one of the shadow tables used
236585237012
** by this module.
@@ -241246,10 +241673,20 @@
241246241673
/* #include <assert.h> */
241247241674
/* #include <string.h> */
241248241675
241249241676
#ifndef SQLITE_OMIT_VIRTUALTABLE
241250241677
241678
+
241679
+#define STMT_NUM_INTEGER_COLUMN 10
241680
+typedef struct StmtRow StmtRow;
241681
+struct StmtRow {
241682
+ sqlite3_int64 iRowid; /* Rowid value */
241683
+ char *zSql; /* column "sql" */
241684
+ int aCol[STMT_NUM_INTEGER_COLUMN+1]; /* all other column values */
241685
+ StmtRow *pNext; /* Next row to return */
241686
+};
241687
+
241251241688
/* stmt_vtab is a subclass of sqlite3_vtab which will
241252241689
** serve as the underlying representation of a stmt virtual table
241253241690
*/
241254241691
typedef struct stmt_vtab stmt_vtab;
241255241692
struct stmt_vtab {
@@ -241263,12 +241700,11 @@
241263241700
*/
241264241701
typedef struct stmt_cursor stmt_cursor;
241265241702
struct stmt_cursor {
241266241703
sqlite3_vtab_cursor base; /* Base class - must be first */
241267241704
sqlite3 *db; /* Database connection for this cursor */
241268
- sqlite3_stmt *pStmt; /* Statement cursor is currently pointing at */
241269
- sqlite3_int64 iRowid; /* The rowid */
241705
+ StmtRow *pRow; /* Current row */
241270241706
};
241271241707
241272241708
/*
241273241709
** The stmtConnect() method is invoked to create a new
241274241710
** stmt_vtab that describes the stmt virtual table.
@@ -241308,11 +241744,11 @@
241308241744
241309241745
rc = sqlite3_declare_vtab(db,
241310241746
"CREATE TABLE x(sql,ncol,ro,busy,nscan,nsort,naidx,nstep,"
241311241747
"reprep,run,mem)");
241312241748
if( rc==SQLITE_OK ){
241313
- pNew = sqlite3_malloc( sizeof(*pNew) );
241749
+ pNew = sqlite3_malloc64( sizeof(*pNew) );
241314241750
*ppVtab = (sqlite3_vtab*)pNew;
241315241751
if( pNew==0 ) return SQLITE_NOMEM;
241316241752
memset(pNew, 0, sizeof(*pNew));
241317241753
pNew->db = db;
241318241754
}
@@ -241330,22 +241766,33 @@
241330241766
/*
241331241767
** Constructor for a new stmt_cursor object.
241332241768
*/
241333241769
static int stmtOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){
241334241770
stmt_cursor *pCur;
241335
- pCur = sqlite3_malloc( sizeof(*pCur) );
241771
+ pCur = sqlite3_malloc64( sizeof(*pCur) );
241336241772
if( pCur==0 ) return SQLITE_NOMEM;
241337241773
memset(pCur, 0, sizeof(*pCur));
241338241774
pCur->db = ((stmt_vtab*)p)->db;
241339241775
*ppCursor = &pCur->base;
241340241776
return SQLITE_OK;
241341241777
}
241778
+
241779
+static void stmtCsrReset(stmt_cursor *pCur){
241780
+ StmtRow *pRow = 0;
241781
+ StmtRow *pNext = 0;
241782
+ for(pRow=pCur->pRow; pRow; pRow=pNext){
241783
+ pNext = pRow->pNext;
241784
+ sqlite3_free(pRow);
241785
+ }
241786
+ pCur->pRow = 0;
241787
+}
241342241788
241343241789
/*
241344241790
** Destructor for a stmt_cursor.
241345241791
*/
241346241792
static int stmtClose(sqlite3_vtab_cursor *cur){
241793
+ stmtCsrReset((stmt_cursor*)cur);
241347241794
sqlite3_free(cur);
241348241795
return SQLITE_OK;
241349241796
}
241350241797
241351241798
@@ -241352,12 +241799,13 @@
241352241799
/*
241353241800
** Advance a stmt_cursor to its next row of output.
241354241801
*/
241355241802
static int stmtNext(sqlite3_vtab_cursor *cur){
241356241803
stmt_cursor *pCur = (stmt_cursor*)cur;
241357
- pCur->iRowid++;
241358
- pCur->pStmt = sqlite3_next_stmt(pCur->db, pCur->pStmt);
241804
+ StmtRow *pNext = pCur->pRow->pNext;
241805
+ sqlite3_free(pCur->pRow);
241806
+ pCur->pRow = pNext;
241359241807
return SQLITE_OK;
241360241808
}
241361241809
241362241810
/*
241363241811
** Return values of columns for the row at which the stmt_cursor
@@ -241367,43 +241815,15 @@
241367241815
sqlite3_vtab_cursor *cur, /* The cursor */
241368241816
sqlite3_context *ctx, /* First argument to sqlite3_result_...() */
241369241817
int i /* Which column to return */
241370241818
){
241371241819
stmt_cursor *pCur = (stmt_cursor*)cur;
241372
- switch( i ){
241373
- case STMT_COLUMN_SQL: {
241374
- sqlite3_result_text(ctx, sqlite3_sql(pCur->pStmt), -1, SQLITE_TRANSIENT);
241375
- break;
241376
- }
241377
- case STMT_COLUMN_NCOL: {
241378
- sqlite3_result_int(ctx, sqlite3_column_count(pCur->pStmt));
241379
- break;
241380
- }
241381
- case STMT_COLUMN_RO: {
241382
- sqlite3_result_int(ctx, sqlite3_stmt_readonly(pCur->pStmt));
241383
- break;
241384
- }
241385
- case STMT_COLUMN_BUSY: {
241386
- sqlite3_result_int(ctx, sqlite3_stmt_busy(pCur->pStmt));
241387
- break;
241388
- }
241389
- default: {
241390
- assert( i==STMT_COLUMN_MEM );
241391
- i = SQLITE_STMTSTATUS_MEMUSED +
241392
- STMT_COLUMN_NSCAN - SQLITE_STMTSTATUS_FULLSCAN_STEP;
241393
- /* Fall thru */
241394
- }
241395
- case STMT_COLUMN_NSCAN:
241396
- case STMT_COLUMN_NSORT:
241397
- case STMT_COLUMN_NAIDX:
241398
- case STMT_COLUMN_NSTEP:
241399
- case STMT_COLUMN_REPREP:
241400
- case STMT_COLUMN_RUN: {
241401
- sqlite3_result_int(ctx, sqlite3_stmt_status(pCur->pStmt,
241402
- i-STMT_COLUMN_NSCAN+SQLITE_STMTSTATUS_FULLSCAN_STEP, 0));
241403
- break;
241404
- }
241820
+ StmtRow *pRow = pCur->pRow;
241821
+ if( i==STMT_COLUMN_SQL ){
241822
+ sqlite3_result_text(ctx, pRow->zSql, -1, SQLITE_TRANSIENT);
241823
+ }else{
241824
+ sqlite3_result_int(ctx, pRow->aCol[i]);
241405241825
}
241406241826
return SQLITE_OK;
241407241827
}
241408241828
241409241829
/*
@@ -241410,21 +241830,21 @@
241410241830
** Return the rowid for the current row. In this implementation, the
241411241831
** rowid is the same as the output value.
241412241832
*/
241413241833
static int stmtRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){
241414241834
stmt_cursor *pCur = (stmt_cursor*)cur;
241415
- *pRowid = pCur->iRowid;
241835
+ *pRowid = pCur->pRow->iRowid;
241416241836
return SQLITE_OK;
241417241837
}
241418241838
241419241839
/*
241420241840
** Return TRUE if the cursor has been moved off of the last
241421241841
** row of output.
241422241842
*/
241423241843
static int stmtEof(sqlite3_vtab_cursor *cur){
241424241844
stmt_cursor *pCur = (stmt_cursor*)cur;
241425
- return pCur->pStmt==0;
241845
+ return pCur->pRow==0;
241426241846
}
241427241847
241428241848
/*
241429241849
** This method is called to "rewind" the stmt_cursor object back
241430241850
** to the first row of output. This method is always called at least
@@ -241435,13 +241855,57 @@
241435241855
sqlite3_vtab_cursor *pVtabCursor,
241436241856
int idxNum, const char *idxStr,
241437241857
int argc, sqlite3_value **argv
241438241858
){
241439241859
stmt_cursor *pCur = (stmt_cursor *)pVtabCursor;
241440
- pCur->pStmt = 0;
241441
- pCur->iRowid = 0;
241442
- return stmtNext(pVtabCursor);
241860
+ sqlite3_stmt *p = 0;
241861
+ sqlite3_int64 iRowid = 1;
241862
+ StmtRow **ppRow = 0;
241863
+
241864
+ stmtCsrReset(pCur);
241865
+ ppRow = &pCur->pRow;
241866
+ for(p=sqlite3_next_stmt(pCur->db, 0); p; p=sqlite3_next_stmt(pCur->db, p)){
241867
+ const char *zSql = sqlite3_sql(p);
241868
+ sqlite3_int64 nSql = zSql ? strlen(zSql)+1 : 0;
241869
+ StmtRow *pNew = (StmtRow*)sqlite3_malloc64(sizeof(StmtRow) + nSql);
241870
+
241871
+ if( pNew==0 ) return SQLITE_NOMEM;
241872
+ memset(pNew, 0, sizeof(StmtRow));
241873
+ if( zSql ){
241874
+ pNew->zSql = (char*)&pNew[1];
241875
+ memcpy(pNew->zSql, zSql, nSql);
241876
+ }
241877
+ pNew->aCol[STMT_COLUMN_NCOL] = sqlite3_column_count(p);
241878
+ pNew->aCol[STMT_COLUMN_RO] = sqlite3_stmt_readonly(p);
241879
+ pNew->aCol[STMT_COLUMN_BUSY] = sqlite3_stmt_busy(p);
241880
+ pNew->aCol[STMT_COLUMN_NSCAN] = sqlite3_stmt_status(
241881
+ p, SQLITE_STMTSTATUS_FULLSCAN_STEP, 0
241882
+ );
241883
+ pNew->aCol[STMT_COLUMN_NSORT] = sqlite3_stmt_status(
241884
+ p, SQLITE_STMTSTATUS_SORT, 0
241885
+ );
241886
+ pNew->aCol[STMT_COLUMN_NAIDX] = sqlite3_stmt_status(
241887
+ p, SQLITE_STMTSTATUS_AUTOINDEX, 0
241888
+ );
241889
+ pNew->aCol[STMT_COLUMN_NSTEP] = sqlite3_stmt_status(
241890
+ p, SQLITE_STMTSTATUS_VM_STEP, 0
241891
+ );
241892
+ pNew->aCol[STMT_COLUMN_REPREP] = sqlite3_stmt_status(
241893
+ p, SQLITE_STMTSTATUS_REPREPARE, 0
241894
+ );
241895
+ pNew->aCol[STMT_COLUMN_RUN] = sqlite3_stmt_status(
241896
+ p, SQLITE_STMTSTATUS_RUN, 0
241897
+ );
241898
+ pNew->aCol[STMT_COLUMN_MEM] = sqlite3_stmt_status(
241899
+ p, SQLITE_STMTSTATUS_MEMUSED, 0
241900
+ );
241901
+ pNew->iRowid = iRowid++;
241902
+ *ppRow = pNew;
241903
+ ppRow = &pNew->pNext;
241904
+ }
241905
+
241906
+ return SQLITE_OK;
241443241907
}
241444241908
241445241909
/*
241446241910
** SQLite will invoke this method one or more times while planning a query
241447241911
** that uses the stmt virtual table. This routine needs to create
241448241912
--- extsrc/sqlite3.c
+++ extsrc/sqlite3.c
@@ -1,8 +1,8 @@
1 /******************************************************************************
2 ** This file is an amalgamation of many separate C source files from SQLite
3 ** version 3.39.0. By combining all the individual C code files into this
4 ** single large file, the entire code can be compiled as a single translation
5 ** unit. This allows many compilers to do optimizations that would not be
6 ** possible if the files were compiled separately. Performance improvements
7 ** of 5% or more are commonly seen when SQLite is compiled as a single
8 ** translation unit.
@@ -450,13 +450,13 @@
450 **
451 ** See also: [sqlite3_libversion()],
452 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
453 ** [sqlite_version()] and [sqlite_source_id()].
454 */
455 #define SQLITE_VERSION "3.39.0"
456 #define SQLITE_VERSION_NUMBER 3039000
457 #define SQLITE_SOURCE_ID "2022-06-15 16:26:37 56c60a35ea457f06db58ec3f694a1ae16fd03e6625da1d7879d63d72bbcb1c62"
458
459 /*
460 ** CAPI3REF: Run-Time Library Version Numbers
461 ** KEYWORDS: sqlite3_version sqlite3_sourceid
462 **
@@ -3728,10 +3728,13 @@
3728 **
3729 ** ^(<dt>[SQLITE_OPEN_SHAREDCACHE]</dt>
3730 ** <dd>The database is opened [shared cache] enabled, overriding
3731 ** the default shared cache setting provided by
3732 ** [sqlite3_enable_shared_cache()].)^
 
 
 
3733 **
3734 ** ^(<dt>[SQLITE_OPEN_PRIVATECACHE]</dt>
3735 ** <dd>The database is opened [shared cache] disabled, overriding
3736 ** the default shared cache setting provided by
3737 ** [sqlite3_enable_shared_cache()].)^
@@ -3743,11 +3746,11 @@
3743 ** connection as soon as the connection is created. In addition to setting
3744 ** the extended result code mode, this flag also causes [sqlite3_open_v2()]
3745 ** to return an extended result code.</dd>
3746 **
3747 ** [[OPEN_NOFOLLOW]] ^(<dt>[SQLITE_OPEN_NOFOLLOW]</dt>
3748 ** <dd>The database filename is not allowed to be a symbolic link</dd>
3749 ** </dl>)^
3750 **
3751 ** If the 3rd parameter to sqlite3_open_v2() is not one of the
3752 ** required combinations shown above optionally combined with other
3753 ** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits]
@@ -6586,11 +6589,11 @@
6586 ** CAPI3REF: Return The Schema Name For A Database Connection
6587 ** METHOD: sqlite3
6588 **
6589 ** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name
6590 ** for the N-th database on database connection D, or a NULL pointer of N is
6591 ** out of range. An N alue of 0 means the main database file. An N of 1 is
6592 ** the "temp" schema. Larger values of N correspond to various ATTACH-ed
6593 ** databases.
6594 **
6595 ** Space to hold the string that is returned by sqlite3_db_name() is managed
6596 ** by SQLite itself. The string might be deallocated by any operation that
@@ -6769,11 +6772,11 @@
6769 **
6770 ** ^The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback
6771 ** function C that is invoked prior to each autovacuum of the database
6772 ** file. ^The callback is passed a copy of the generic data pointer (P),
6773 ** the schema-name of the attached database that is being autovacuumed,
6774 ** the the size of the database file in pages, the number of free pages,
6775 ** and the number of bytes per page, respectively. The callback should
6776 ** return the number of free pages that should be removed by the
6777 ** autovacuum. ^If the callback returns zero, then no autovacuum happens.
6778 ** ^If the value returned is greater than or equal to the number of
6779 ** free pages, then a complete autovacuum happens.
@@ -6889,10 +6892,15 @@
6889 **
6890 ** ^(This routine enables or disables the sharing of the database cache
6891 ** and schema data structures between [database connection | connections]
6892 ** to the same database. Sharing is enabled if the argument is true
6893 ** and disabled if the argument is false.)^
 
 
 
 
 
6894 **
6895 ** ^Cache sharing is enabled and disabled for an entire process.
6896 ** This is a change as of SQLite [version 3.5.0] ([dateof:3.5.0]).
6897 ** In prior versions of SQLite,
6898 ** sharing was enabled or disabled for each thread separately.
@@ -6988,11 +6996,11 @@
6988 ** ^Setting the heap limits to zero disables the heap limiter mechanism.
6989 **
6990 ** ^The soft heap limit may not be greater than the hard heap limit.
6991 ** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N)
6992 ** is invoked with a value of N that is greater than the hard heap limit,
6993 ** the the soft heap limit is set to the value of the hard heap limit.
6994 ** ^The soft heap limit is automatically enabled whenever the hard heap
6995 ** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and
6996 ** the soft heap limit is outside the range of 1..N, then the soft heap
6997 ** limit is set to N. ^Invoking sqlite3_soft_heap_limit64(0) when the
6998 ** hard heap limit is enabled makes the soft heap limit equal to the
@@ -9283,11 +9291,11 @@
9283 ** sqlite3_backup_init() is called and before the corresponding call to
9284 ** sqlite3_backup_finish(). SQLite does not currently check to see
9285 ** if the application incorrectly accesses the destination [database connection]
9286 ** and so no error code is reported, but the operations may malfunction
9287 ** nevertheless. Use of the destination database connection while a
9288 ** backup is in progress might also also cause a mutex deadlock.
9289 **
9290 ** If running in [shared cache mode], the application must
9291 ** guarantee that the shared cache used by the destination database
9292 ** is not accessed while the backup is running. In practice this means
9293 ** that the application must guarantee that the disk file being
@@ -9711,11 +9719,11 @@
9711 ** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the
9712 ** meaning of each of these checkpoint modes.
9713 */
9714 #define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */
9715 #define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */
9716 #define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for for readers */
9717 #define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */
9718
9719 /*
9720 ** CAPI3REF: Virtual Table Interface Configuration
9721 **
@@ -13142,10 +13150,15 @@
13142 /******** End of fts5.h *********/
13143
13144 /************** End of sqlite3.h *********************************************/
13145 /************** Continuing where we left off in sqliteInt.h ******************/
13146
 
 
 
 
 
13147 /*
13148 ** Include the configuration header output by 'configure' if we're using the
13149 ** autoconf-based build
13150 */
13151 #if defined(_HAVE_SQLITE_CONFIG_H) && !defined(SQLITECONFIG_H)
@@ -15553,67 +15566,67 @@
15553 #define OP_Checkpoint 3
15554 #define OP_JournalMode 4
15555 #define OP_Vacuum 5
15556 #define OP_VFilter 6 /* jump, synopsis: iplan=r[P3] zplan='P4' */
15557 #define OP_VUpdate 7 /* synopsis: data=r[P3@P2] */
15558 #define OP_Goto 8 /* jump */
15559 #define OP_Gosub 9 /* jump */
15560 #define OP_InitCoroutine 10 /* jump */
15561 #define OP_Yield 11 /* jump */
15562 #define OP_MustBeInt 12 /* jump */
15563 #define OP_Jump 13 /* jump */
15564 #define OP_Once 14 /* jump */
15565 #define OP_If 15 /* jump */
15566 #define OP_IfNot 16 /* jump */
15567 #define OP_IsNullOrType 17 /* jump, synopsis: if typeof(r[P1]) IN (P3,5) goto P2 */
15568 #define OP_IfNullRow 18 /* jump, synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */
15569 #define OP_Not 19 /* same as TK_NOT, synopsis: r[P2]= !r[P1] */
15570 #define OP_SeekLT 20 /* jump, synopsis: key=r[P3@P4] */
15571 #define OP_SeekLE 21 /* jump, synopsis: key=r[P3@P4] */
15572 #define OP_SeekGE 22 /* jump, synopsis: key=r[P3@P4] */
15573 #define OP_SeekGT 23 /* jump, synopsis: key=r[P3@P4] */
15574 #define OP_IfNotOpen 24 /* jump, synopsis: if( !csr[P1] ) goto P2 */
15575 #define OP_IfNoHope 25 /* jump, synopsis: key=r[P3@P4] */
15576 #define OP_NoConflict 26 /* jump, synopsis: key=r[P3@P4] */
15577 #define OP_NotFound 27 /* jump, synopsis: key=r[P3@P4] */
15578 #define OP_Found 28 /* jump, synopsis: key=r[P3@P4] */
15579 #define OP_SeekRowid 29 /* jump, synopsis: intkey=r[P3] */
15580 #define OP_NotExists 30 /* jump, synopsis: intkey=r[P3] */
15581 #define OP_Last 31 /* jump */
15582 #define OP_IfSmaller 32 /* jump */
15583 #define OP_SorterSort 33 /* jump */
15584 #define OP_Sort 34 /* jump */
15585 #define OP_Rewind 35 /* jump */
15586 #define OP_SorterNext 36 /* jump */
15587 #define OP_Prev 37 /* jump */
15588 #define OP_Next 38 /* jump */
15589 #define OP_IdxLE 39 /* jump, synopsis: key=r[P3@P4] */
15590 #define OP_IdxGT 40 /* jump, synopsis: key=r[P3@P4] */
15591 #define OP_IdxLT 41 /* jump, synopsis: key=r[P3@P4] */
15592 #define OP_IdxGE 42 /* jump, synopsis: key=r[P3@P4] */
15593 #define OP_Or 43 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */
15594 #define OP_And 44 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */
15595 #define OP_RowSetRead 45 /* jump, synopsis: r[P3]=rowset(P1) */
15596 #define OP_RowSetTest 46 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */
15597 #define OP_Program 47 /* jump */
15598 #define OP_FkIfZero 48 /* jump, synopsis: if fkctr[P1]==0 goto P2 */
15599 #define OP_IfPos 49 /* jump, synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */
15600 #define OP_IsNull 50 /* jump, same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */
15601 #define OP_NotNull 51 /* jump, same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */
15602 #define OP_Ne 52 /* jump, same as TK_NE, synopsis: IF r[P3]!=r[P1] */
15603 #define OP_Eq 53 /* jump, same as TK_EQ, synopsis: IF r[P3]==r[P1] */
15604 #define OP_Gt 54 /* jump, same as TK_GT, synopsis: IF r[P3]>r[P1] */
15605 #define OP_Le 55 /* jump, same as TK_LE, synopsis: IF r[P3]<=r[P1] */
15606 #define OP_Lt 56 /* jump, same as TK_LT, synopsis: IF r[P3]<r[P1] */
15607 #define OP_Ge 57 /* jump, same as TK_GE, synopsis: IF r[P3]>=r[P1] */
15608 #define OP_ElseEq 58 /* jump, same as TK_ESCAPE */
15609 #define OP_IfNotZero 59 /* jump, synopsis: if r[P1]!=0 then r[P1]--, goto P2 */
15610 #define OP_DecrJumpZero 60 /* jump, synopsis: if (--r[P1])==0 goto P2 */
15611 #define OP_IncrVacuum 61 /* jump */
15612 #define OP_VNext 62 /* jump */
15613 #define OP_Filter 63 /* jump, synopsis: if key(P3@P4) not in filter(P1) goto P2 */
15614 #define OP_Init 64 /* jump, synopsis: Start at P2 */
15615 #define OP_PureFunc 65 /* synopsis: r[P3]=func(r[P2@NP]) */
15616 #define OP_Function 66 /* synopsis: r[P3]=func(r[P2@NP]) */
15617 #define OP_Return 67
15618 #define OP_EndCoroutine 68
15619 #define OP_HaltIfNull 69 /* synopsis: if r[P3]=null halt */
@@ -15745,17 +15758,17 @@
15745 #define OPFLG_IN3 0x08 /* in3: P3 is an input */
15746 #define OPFLG_OUT2 0x10 /* out2: P2 is an output */
15747 #define OPFLG_OUT3 0x20 /* out3: P3 is an output */
15748 #define OPFLG_INITIALIZER {\
15749 /* 0 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,\
15750 /* 8 */ 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x03,\
15751 /* 16 */ 0x03, 0x03, 0x01, 0x12, 0x09, 0x09, 0x09, 0x09,\
15752 /* 24 */ 0x01, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x01,\
15753 /* 32 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\
15754 /* 40 */ 0x01, 0x01, 0x01, 0x26, 0x26, 0x23, 0x0b, 0x01,\
15755 /* 48 */ 0x01, 0x03, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\
15756 /* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x01, 0x01, 0x01,\
15757 /* 64 */ 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x00, 0x10,\
15758 /* 72 */ 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x00,\
15759 /* 80 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x02, 0x02,\
15760 /* 88 */ 0x02, 0x00, 0x00, 0x12, 0x1e, 0x20, 0x00, 0x00,\
15761 /* 96 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x26, 0x26,\
@@ -15857,10 +15870,11 @@
15857 SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe*, int addr, const char *zP4, int N);
15858 SQLITE_PRIVATE void sqlite3VdbeAppendP4(Vdbe*, void *pP4, int p4type);
15859 SQLITE_PRIVATE void sqlite3VdbeSetP4KeyInfo(Parse*, Index*);
15860 SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe*, int);
15861 SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe*, int);
 
15862 SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Parse*);
15863 SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe*);
15864 SQLITE_PRIVATE void sqlite3VdbeReusable(Vdbe*);
15865 SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe*);
15866 SQLITE_PRIVATE void sqlite3VdbeMakeReady(Vdbe*,Parse*);
@@ -16741,10 +16755,11 @@
16741 void *pMiddle; /* First byte past end of full-size buffers and
16742 ** the first byte of LOOKASIDE_SMALL buffers */
16743 #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */
16744 void *pStart; /* First byte of available memory space */
16745 void *pEnd; /* First byte past end of available space */
 
16746 };
16747 struct LookasideSlot {
16748 LookasideSlot *pNext; /* Next buffer in the list of free buffers */
16749 };
16750
@@ -18189,11 +18204,11 @@
18189 #define EP_xIsSelect 0x001000 /* x.pSelect is valid (otherwise x.pList is) */
18190 #define EP_Skip 0x002000 /* Operator does not contribute to affinity */
18191 #define EP_Reduced 0x004000 /* Expr struct EXPR_REDUCEDSIZE bytes only */
18192 #define EP_Win 0x008000 /* Contains window functions */
18193 #define EP_TokenOnly 0x010000 /* Expr struct EXPR_TOKENONLYSIZE bytes only */
18194 #define EP_MemToken 0x020000 /* Need to sqlite3DbFree() Expr.zToken */
18195 #define EP_IfNullRow 0x040000 /* The TK_IF_NULL_ROW opcode */
18196 #define EP_Unlikely 0x080000 /* unlikely() or likelihood() function */
18197 #define EP_ConstFunc 0x100000 /* A SQLITE_FUNC_CONSTANT or _SLOCHNG function */
18198 #define EP_CanBeNull 0x200000 /* Can be null despite NOT NULL constraint */
18199 #define EP_Subquery 0x400000 /* Tree contains a TK_SELECT operator */
@@ -19667,10 +19682,11 @@
19667 SQLITE_PRIVATE void *sqlite3Realloc(void*, u64);
19668 SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *, void *, u64);
19669 SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *, void *, u64);
19670 SQLITE_PRIVATE void sqlite3DbFree(sqlite3*, void*);
19671 SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3*, void*);
 
19672 SQLITE_PRIVATE int sqlite3MallocSize(const void*);
19673 SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3*, const void*);
19674 SQLITE_PRIVATE void *sqlite3PageMalloc(int);
19675 SQLITE_PRIVATE void sqlite3PageFree(void*);
19676 SQLITE_PRIVATE void sqlite3MemSetDefault(void);
@@ -19777,18 +19793,20 @@
19777 SQLITE_PRIVATE void sqlite3TreeViewColumnList(TreeView*, const Column*, int, u8);
19778 SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView*, const SrcList*);
19779 SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView*, const Select*, u8);
19780 SQLITE_PRIVATE void sqlite3TreeViewWith(TreeView*, const With*, u8);
19781 SQLITE_PRIVATE void sqlite3TreeViewUpsert(TreeView*, const Upsert*, u8);
 
19782 SQLITE_PRIVATE void sqlite3TreeViewDelete(const With*, const SrcList*, const Expr*,
19783 const ExprList*,const Expr*, const Trigger*);
19784 SQLITE_PRIVATE void sqlite3TreeViewInsert(const With*, const SrcList*,
19785 const IdList*, const Select*, const ExprList*,
19786 int, const Upsert*, const Trigger*);
19787 SQLITE_PRIVATE void sqlite3TreeViewUpdate(const With*, const SrcList*, const ExprList*,
19788 const Expr*, int, const ExprList*, const Expr*,
19789 const Upsert*, const Trigger*);
 
19790 #ifndef SQLITE_OMIT_TRIGGER
19791 SQLITE_PRIVATE void sqlite3TreeViewTriggerStep(TreeView*, const TriggerStep*, u8, u8);
19792 SQLITE_PRIVATE void sqlite3TreeViewTrigger(TreeView*, const Trigger*, u8, u8);
19793 #endif
19794 #ifndef SQLITE_OMIT_WINDOWFUNC
@@ -20189,10 +20207,11 @@
20189 SQLITE_PRIVATE int sqlite3FixSrcList(DbFixer*, SrcList*);
20190 SQLITE_PRIVATE int sqlite3FixSelect(DbFixer*, Select*);
20191 SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*);
20192 SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*);
20193 SQLITE_PRIVATE int sqlite3RealSameAsInt(double,sqlite3_int64);
 
20194 SQLITE_PRIVATE void sqlite3Int64ToText(i64,char*);
20195 SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8);
20196 SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*);
20197 SQLITE_PRIVATE int sqlite3GetUInt32(const char*, u32*);
20198 SQLITE_PRIVATE int sqlite3Atoi(const char*);
@@ -21635,13 +21654,10 @@
21635 "OMIT_WSD",
21636 #endif
21637 #ifdef SQLITE_OMIT_XFER_OPT
21638 "OMIT_XFER_OPT",
21639 #endif
21640 #ifdef SQLITE_PCACHE_SEPARATE_HEADER
21641 "PCACHE_SEPARATE_HEADER",
21642 #endif
21643 #ifdef SQLITE_PERFORMANCE_TRACE
21644 "PERFORMANCE_TRACE",
21645 #endif
21646 #ifdef SQLITE_POWERSAFE_OVERWRITE
21647 # if SQLITE_POWERSAFE_OVERWRITE != 1
@@ -22590,11 +22606,11 @@
22590 ** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare()
22591 ** is really a pointer to an instance of this structure.
22592 */
22593 struct Vdbe {
22594 sqlite3 *db; /* The database connection that owns this statement */
22595 Vdbe *pPrev,*pNext; /* Linked list of VDBEs with the same Vdbe.db */
22596 Parse *pParse; /* Parsing context used to create this Vdbe */
22597 ynVar nVar; /* Number of entries in aVar[] */
22598 int nMem; /* Number of memory locations currently allocated */
22599 int nCursor; /* Number of slots in apCsr[] */
22600 u32 cacheCtr; /* VdbeCursor row cache generation counter */
@@ -23148,10 +23164,12 @@
23148 int i; /* Used to iterate through schemas */
23149 int nByte = 0; /* Used to accumulate return value */
23150
23151 sqlite3BtreeEnterAll(db);
23152 db->pnBytesFreed = &nByte;
 
 
23153 for(i=0; i<db->nDb; i++){
23154 Schema *pSchema = db->aDb[i].pSchema;
23155 if( ALWAYS(pSchema!=0) ){
23156 HashElem *p;
23157
@@ -23173,10 +23191,11 @@
23173 sqlite3DeleteTable(db, (Table *)sqliteHashData(p));
23174 }
23175 }
23176 }
23177 db->pnBytesFreed = 0;
 
23178 sqlite3BtreeLeaveAll(db);
23179
23180 *pHighwater = 0;
23181 *pCurrent = nByte;
23182 break;
@@ -23190,13 +23209,16 @@
23190 case SQLITE_DBSTATUS_STMT_USED: {
23191 struct Vdbe *pVdbe; /* Used to iterate through VMs */
23192 int nByte = 0; /* Used to accumulate return value */
23193
23194 db->pnBytesFreed = &nByte;
23195 for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){
 
 
23196 sqlite3VdbeDelete(pVdbe);
23197 }
 
23198 db->pnBytesFreed = 0;
23199
23200 *pHighwater = 0; /* IMP: R-64479-57858 */
23201 *pCurrent = nByte;
23202
@@ -23528,11 +23550,11 @@
23528 X1 = 36525*(Y+4716)/100;
23529 X2 = 306001*(M+1)/10000;
23530 p->iJD = (sqlite3_int64)((X1 + X2 + D + B - 1524.5 ) * 86400000);
23531 p->validJD = 1;
23532 if( p->validHMS ){
23533 p->iJD += p->h*3600000 + p->m*60000 + (sqlite3_int64)(p->s*1000);
23534 if( p->validTZ ){
23535 p->iJD -= p->tz*60000;
23536 p->validYMD = 0;
23537 p->validHMS = 0;
23538 p->validTZ = 0;
@@ -24037,11 +24059,11 @@
24037 ** weekday N where 0==Sunday, 1==Monday, and so forth. If the
24038 ** date is already on the appropriate weekday, this is a no-op.
24039 */
24040 if( sqlite3_strnicmp(z, "weekday ", 8)==0
24041 && sqlite3AtoF(&z[8], &r, sqlite3Strlen30(&z[8]), SQLITE_UTF8)>0
24042 && (n=(int)r)==r && n>=0 && r<7 ){
24043 sqlite3_int64 Z;
24044 computeYMD_HMS(p);
24045 p->validTZ = 0;
24046 p->validJD = 0;
24047 computeJD(p);
@@ -24835,10 +24857,11 @@
24835 DO_OS_MALLOC_TEST(0);
24836 /* 0x87f7f is a mask of SQLITE_OPEN_ flags that are valid to be passed
24837 ** down into the VFS layer. Some SQLITE_OPEN_ flags (for example,
24838 ** SQLITE_OPEN_FULLMUTEX or SQLITE_OPEN_SHAREDCACHE) are blocked before
24839 ** reaching the VFS. */
 
24840 rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x1087f7f, pFlagsOut);
24841 assert( rc==SQLITE_OK || pFile->pMethods==0 );
24842 return rc;
24843 }
24844 SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){
@@ -29100,11 +29123,11 @@
29100 /*
29101 ** TRUE if p is a lookaside memory allocation from db
29102 */
29103 #ifndef SQLITE_OMIT_LOOKASIDE
29104 static int isLookaside(sqlite3 *db, const void *p){
29105 return SQLITE_WITHIN(p, db->lookaside.pStart, db->lookaside.pEnd);
29106 }
29107 #else
29108 #define isLookaside(A,B) 0
29109 #endif
29110
@@ -29124,22 +29147,20 @@
29124 #endif
29125 }
29126 SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, const void *p){
29127 assert( p!=0 );
29128 #ifdef SQLITE_DEBUG
29129 if( db==0 || !isLookaside(db,p) ){
29130 if( db==0 ){
29131 assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_HEAP) );
29132 assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
29133 }else{
29134 assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
29135 assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
29136 }
29137 }
29138 #endif
29139 if( db ){
29140 if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){
29141 #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE
29142 if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){
29143 assert( sqlite3_mutex_held(db->mutex) );
29144 return LOOKASIDE_SMALL;
29145 }
@@ -29191,18 +29212,15 @@
29191 */
29192 SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3 *db, void *p){
29193 assert( db==0 || sqlite3_mutex_held(db->mutex) );
29194 assert( p!=0 );
29195 if( db ){
29196 if( db->pnBytesFreed ){
29197 measureAllocationSize(db, p);
29198 return;
29199 }
29200 if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){
29201 #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE
29202 if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){
29203 LookasideSlot *pBuf = (LookasideSlot*)p;
 
29204 #ifdef SQLITE_DEBUG
29205 memset(p, 0xaa, LOOKASIDE_SMALL); /* Trash freed content */
29206 #endif
29207 pBuf->pNext = db->lookaside.pSmallFree;
29208 db->lookaside.pSmallFree = pBuf;
@@ -29209,24 +29227,66 @@
29209 return;
29210 }
29211 #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */
29212 if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){
29213 LookasideSlot *pBuf = (LookasideSlot*)p;
 
29214 #ifdef SQLITE_DEBUG
29215 memset(p, 0xaa, db->lookaside.szTrue); /* Trash freed content */
29216 #endif
29217 pBuf->pNext = db->lookaside.pFree;
29218 db->lookaside.pFree = pBuf;
29219 return;
29220 }
29221 }
 
 
 
 
29222 }
29223 assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
29224 assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
29225 assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) );
29226 sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
29227 sqlite3_free(p);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29228 }
29229 SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){
29230 assert( db==0 || sqlite3_mutex_held(db->mutex) );
29231 if( p ) sqlite3DbFreeNN(db, p);
29232 }
@@ -29559,12 +29619,17 @@
29559 if( db->nVdbeExec>0 ){
29560 AtomicStore(&db->u1.isInterrupted, 1);
29561 }
29562 DisableLookaside;
29563 if( db->pParse ){
 
29564 sqlite3ErrorMsg(db->pParse, "out of memory");
29565 db->pParse->rc = SQLITE_NOMEM_BKPT;
 
 
 
 
29566 }
29567 }
29568 return 0;
29569 }
29570
@@ -30426,12 +30491,12 @@
30426 }
30427 break;
30428 case etSQLESCAPE: /* %q: Escape ' characters */
30429 case etSQLESCAPE2: /* %Q: Escape ' and enclose in '...' */
30430 case etSQLESCAPE3: { /* %w: Escape " characters */
30431 int i, j, k, n, isnull;
30432 int needQuote;
30433 char ch;
30434 char q = ((xtype==etSQLESCAPE3)?'"':'\''); /* Quote character */
30435 char *escarg;
30436
30437 if( bArgList ){
@@ -31073,11 +31138,11 @@
31073 */
31074 SQLITE_PRIVATE void sqlite3TreeViewLine(TreeView *p, const char *zFormat, ...){
31075 va_list ap;
31076 int i;
31077 StrAccum acc;
31078 char zBuf[500];
31079 sqlite3StrAccumInit(&acc, 0, zBuf, sizeof(zBuf), 0);
31080 if( p ){
31081 for(i=0; i<p->iLevel && i<(int)sizeof(p->bLine)-1; i++){
31082 sqlite3_str_append(&acc, p->bLine[i] ? "| " : " ", 4);
31083 }
@@ -31115,12 +31180,12 @@
31115 int i;
31116 sqlite3TreeViewPush(&pView, moreToFollow);
31117 sqlite3TreeViewLine(pView, "COLUMNS");
31118 for(i=0; i<nCol; i++){
31119 u16 flg = aCol[i].colFlags;
31120 int moreToFollow = i<(nCol - 1);
31121 sqlite3TreeViewPush(&pView, moreToFollow);
31122 sqlite3TreeViewLine(pView, 0);
31123 printf(" %s", aCol[i].zCnName);
31124 switch( aCol[i].eCType ){
31125 case COLTYPE_ANY: printf(" ANY"); break;
31126 case COLTYPE_BLOB: printf(" BLOB"); break;
@@ -31204,11 +31269,11 @@
31204 if( pSrc==0 ) return;
31205 for(i=0; i<pSrc->nSrc; i++){
31206 const SrcItem *pItem = &pSrc->a[i];
31207 StrAccum x;
31208 int n = 0;
31209 char zLine[100];
31210 sqlite3StrAccumInit(&x, 0, zLine, sizeof(zLine), 0);
31211 x.printfFlags |= SQLITE_PRINTF_INTERNAL;
31212 sqlite3_str_appendf(&x, "{%d:*} %!S", pItem->iCursor, pItem);
31213 if( pItem->pTab ){
31214 sqlite3_str_appendf(&x, " tab=%Q nCol=%d ptr=%p used=%llx",
@@ -31247,11 +31312,11 @@
31247 if( pItem->pSelect ){
31248 if( pItem->pTab ){
31249 Table *pTab = pItem->pTab;
31250 sqlite3TreeViewColumnList(pView, pTab->aCol, pTab->nCol, 1);
31251 }
31252 assert( pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
31253 sqlite3TreeViewSelect(pView, pItem->pSelect, (--n)>0);
31254 }
31255 if( pItem->fg.isTabFunc ){
31256 sqlite3TreeViewExprList(pView, pItem->u1.pFuncArg, 0, "func-args:");
31257 }
@@ -32014,10 +32079,11 @@
32014 pUpsert = pUpsert->pNextUpsert;
32015 }
32016 sqlite3TreeViewPop(&pView);
32017 }
32018
 
32019 /*
32020 ** Generate a human-readable diagram of the data structure that go
32021 ** into generating an DELETE statement.
32022 */
32023 SQLITE_PRIVATE void sqlite3TreeViewDelete(
@@ -32067,11 +32133,13 @@
32067 if( pTrigger ){
32068 sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1);
32069 }
32070 sqlite3TreeViewPop(&pView);
32071 }
 
32072
 
32073 /*
32074 ** Generate a human-readable diagram of the data structure that go
32075 ** into generating an INSERT statement.
32076 */
32077 SQLITE_PRIVATE void sqlite3TreeViewInsert(
@@ -32135,11 +32203,13 @@
32135 if( pTrigger ){
32136 sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1);
32137 }
32138 sqlite3TreeViewPop(&pView);
32139 }
 
32140
 
32141 /*
32142 ** Generate a human-readable diagram of the data structure that go
32143 ** into generating an UPDATE statement.
32144 */
32145 SQLITE_PRIVATE void sqlite3TreeViewUpdate(
@@ -32211,10 +32281,11 @@
32211 if( pTrigger ){
32212 sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1);
32213 }
32214 sqlite3TreeViewPop(&pView);
32215 }
 
32216
32217 #ifndef SQLITE_OMIT_TRIGGER
32218 /*
32219 ** Show a human-readable graph of a TriggerStep
32220 */
@@ -32324,20 +32395,45 @@
32324
32325 /* All threads share a single random number generator.
32326 ** This structure is the current state of the generator.
32327 */
32328 static SQLITE_WSD struct sqlite3PrngType {
32329 unsigned char isInit; /* True if initialized */
32330 unsigned char i, j; /* State variables */
32331 unsigned char s[256]; /* State variables */
32332 } sqlite3Prng;
32333
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32334 /*
32335 ** Return N random bytes.
32336 */
32337 SQLITE_API void sqlite3_randomness(int N, void *pBuf){
32338 unsigned char t;
32339 unsigned char *zBuf = pBuf;
32340
32341 /* The "wsdPrng" macro will resolve to the pseudo-random number generator
32342 ** state vector. If writable static data is unsupported on the target,
32343 ** we have to locate the state vector at run-time. In the more common
@@ -32363,57 +32459,50 @@
32363 mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG);
32364 #endif
32365
32366 sqlite3_mutex_enter(mutex);
32367 if( N<=0 || pBuf==0 ){
32368 wsdPrng.isInit = 0;
32369 sqlite3_mutex_leave(mutex);
32370 return;
32371 }
32372
32373 /* Initialize the state of the random number generator once,
32374 ** the first time this routine is called. The seed value does
32375 ** not need to contain a lot of randomness since we are not
32376 ** trying to do secure encryption or anything like that...
32377 **
32378 ** Nothing in this file or anywhere else in SQLite does any kind of
32379 ** encryption. The RC4 algorithm is being used as a PRNG (pseudo-random
32380 ** number generator) not as an encryption device.
32381 */
32382 if( !wsdPrng.isInit ){
32383 sqlite3_vfs *pVfs = sqlite3_vfs_find(0);
32384 int i;
32385 char k[256];
32386 wsdPrng.j = 0;
32387 wsdPrng.i = 0;
32388 if( NEVER(pVfs==0) ){
32389 memset(k, 0, sizeof(k));
32390 }else{
32391 sqlite3OsRandomness(pVfs, 256, k);
32392 }
32393 for(i=0; i<256; i++){
32394 wsdPrng.s[i] = (u8)i;
32395 }
32396 for(i=0; i<256; i++){
32397 wsdPrng.j += wsdPrng.s[i] + k[i];
32398 t = wsdPrng.s[wsdPrng.j];
32399 wsdPrng.s[wsdPrng.j] = wsdPrng.s[i];
32400 wsdPrng.s[i] = t;
32401 }
32402 wsdPrng.isInit = 1;
32403 }
32404
32405 assert( N>0 );
32406 do{
32407 wsdPrng.i++;
32408 t = wsdPrng.s[wsdPrng.i];
32409 wsdPrng.j += t;
32410 wsdPrng.s[wsdPrng.i] = wsdPrng.s[wsdPrng.j];
32411 wsdPrng.s[wsdPrng.j] = t;
32412 t += wsdPrng.s[wsdPrng.i];
32413 *(zBuf++) = wsdPrng.s[t];
32414 }while( --N );
 
 
 
 
 
 
32415 sqlite3_mutex_leave(mutex);
32416 }
32417
32418 #ifndef SQLITE_UNTESTABLE
32419 /*
@@ -33449,11 +33538,11 @@
33449 SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
33450 char *zMsg;
33451 va_list ap;
33452 sqlite3 *db = pParse->db;
33453 assert( db!=0 );
33454 assert( db->pParse==pParse );
33455 db->errByteOffset = -2;
33456 va_start(ap, zFormat);
33457 zMsg = sqlite3VMPrintf(db, zFormat, ap);
33458 va_end(ap);
33459 if( db->errByteOffset<-1 ) db->errByteOffset = -1;
@@ -35267,67 +35356,67 @@
35267 /* 3 */ "Checkpoint" OpHelp(""),
35268 /* 4 */ "JournalMode" OpHelp(""),
35269 /* 5 */ "Vacuum" OpHelp(""),
35270 /* 6 */ "VFilter" OpHelp("iplan=r[P3] zplan='P4'"),
35271 /* 7 */ "VUpdate" OpHelp("data=r[P3@P2]"),
35272 /* 8 */ "Goto" OpHelp(""),
35273 /* 9 */ "Gosub" OpHelp(""),
35274 /* 10 */ "InitCoroutine" OpHelp(""),
35275 /* 11 */ "Yield" OpHelp(""),
35276 /* 12 */ "MustBeInt" OpHelp(""),
35277 /* 13 */ "Jump" OpHelp(""),
35278 /* 14 */ "Once" OpHelp(""),
35279 /* 15 */ "If" OpHelp(""),
35280 /* 16 */ "IfNot" OpHelp(""),
35281 /* 17 */ "IsNullOrType" OpHelp("if typeof(r[P1]) IN (P3,5) goto P2"),
35282 /* 18 */ "IfNullRow" OpHelp("if P1.nullRow then r[P3]=NULL, goto P2"),
35283 /* 19 */ "Not" OpHelp("r[P2]= !r[P1]"),
35284 /* 20 */ "SeekLT" OpHelp("key=r[P3@P4]"),
35285 /* 21 */ "SeekLE" OpHelp("key=r[P3@P4]"),
35286 /* 22 */ "SeekGE" OpHelp("key=r[P3@P4]"),
35287 /* 23 */ "SeekGT" OpHelp("key=r[P3@P4]"),
35288 /* 24 */ "IfNotOpen" OpHelp("if( !csr[P1] ) goto P2"),
35289 /* 25 */ "IfNoHope" OpHelp("key=r[P3@P4]"),
35290 /* 26 */ "NoConflict" OpHelp("key=r[P3@P4]"),
35291 /* 27 */ "NotFound" OpHelp("key=r[P3@P4]"),
35292 /* 28 */ "Found" OpHelp("key=r[P3@P4]"),
35293 /* 29 */ "SeekRowid" OpHelp("intkey=r[P3]"),
35294 /* 30 */ "NotExists" OpHelp("intkey=r[P3]"),
35295 /* 31 */ "Last" OpHelp(""),
35296 /* 32 */ "IfSmaller" OpHelp(""),
35297 /* 33 */ "SorterSort" OpHelp(""),
35298 /* 34 */ "Sort" OpHelp(""),
35299 /* 35 */ "Rewind" OpHelp(""),
35300 /* 36 */ "SorterNext" OpHelp(""),
35301 /* 37 */ "Prev" OpHelp(""),
35302 /* 38 */ "Next" OpHelp(""),
35303 /* 39 */ "IdxLE" OpHelp("key=r[P3@P4]"),
35304 /* 40 */ "IdxGT" OpHelp("key=r[P3@P4]"),
35305 /* 41 */ "IdxLT" OpHelp("key=r[P3@P4]"),
35306 /* 42 */ "IdxGE" OpHelp("key=r[P3@P4]"),
35307 /* 43 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"),
35308 /* 44 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"),
35309 /* 45 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"),
35310 /* 46 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"),
35311 /* 47 */ "Program" OpHelp(""),
35312 /* 48 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"),
35313 /* 49 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"),
35314 /* 50 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"),
35315 /* 51 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"),
35316 /* 52 */ "Ne" OpHelp("IF r[P3]!=r[P1]"),
35317 /* 53 */ "Eq" OpHelp("IF r[P3]==r[P1]"),
35318 /* 54 */ "Gt" OpHelp("IF r[P3]>r[P1]"),
35319 /* 55 */ "Le" OpHelp("IF r[P3]<=r[P1]"),
35320 /* 56 */ "Lt" OpHelp("IF r[P3]<r[P1]"),
35321 /* 57 */ "Ge" OpHelp("IF r[P3]>=r[P1]"),
35322 /* 58 */ "ElseEq" OpHelp(""),
35323 /* 59 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"),
35324 /* 60 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"),
35325 /* 61 */ "IncrVacuum" OpHelp(""),
35326 /* 62 */ "VNext" OpHelp(""),
35327 /* 63 */ "Filter" OpHelp("if key(P3@P4) not in filter(P1) goto P2"),
35328 /* 64 */ "Init" OpHelp("Start at P2"),
35329 /* 65 */ "PureFunc" OpHelp("r[P3]=func(r[P2@NP])"),
35330 /* 66 */ "Function" OpHelp("r[P3]=func(r[P2@NP])"),
35331 /* 67 */ "Return" OpHelp(""),
35332 /* 68 */ "EndCoroutine" OpHelp(""),
35333 /* 69 */ "HaltIfNull" OpHelp("if r[P3]=null halt"),
@@ -41310,30 +41399,39 @@
41310 ** pVfs->mxPathname bytes.
41311 */
41312 static int unixGetTempname(int nBuf, char *zBuf){
41313 const char *zDir;
41314 int iLimit = 0;
 
41315
41316 /* It's odd to simulate an io-error here, but really this is just
41317 ** using the io-error infrastructure to test that SQLite handles this
41318 ** function failing.
41319 */
41320 zBuf[0] = 0;
41321 SimulateIOError( return SQLITE_IOERR );
41322
 
41323 zDir = unixTempFileDir();
41324 if( zDir==0 ) return SQLITE_IOERR_GETTEMPPATH;
41325 do{
41326 u64 r;
41327 sqlite3_randomness(sizeof(r), &r);
41328 assert( nBuf>2 );
41329 zBuf[nBuf-2] = 0;
41330 sqlite3_snprintf(nBuf, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX"%llx%c",
41331 zDir, r, 0);
41332 if( zBuf[nBuf-2]!=0 || (iLimit++)>10 ) return SQLITE_ERROR;
41333 }while( osAccess(zBuf,0)==0 );
41334 return SQLITE_OK;
 
 
 
 
 
 
 
41335 }
41336
41337 #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
41338 /*
41339 ** Routine to transform a unixFile into a proxy-locking unixFile.
@@ -43504,11 +43602,16 @@
43504 ** correctly. See ticket [bb3a86e890c8e96ab] */
43505 assert( ArraySize(aSyscall)==29 );
43506
43507 /* Register all VFSes defined in the aVfs[] array */
43508 for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){
 
 
 
 
43509 sqlite3_vfs_register(&aVfs[i], i==0);
 
43510 }
43511 unixBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1);
43512
43513 #ifndef SQLITE_OMIT_WAL
43514 /* Validate lock assumptions */
@@ -45472,10 +45575,11 @@
45472 char **ppDirectory = 0;
45473 #ifndef SQLITE_OMIT_AUTOINIT
45474 int rc = sqlite3_initialize();
45475 if( rc ) return rc;
45476 #endif
 
45477 if( type==SQLITE_WIN32_DATA_DIRECTORY_TYPE ){
45478 ppDirectory = &sqlite3_data_directory;
45479 }else if( type==SQLITE_WIN32_TEMP_DIRECTORY_TYPE ){
45480 ppDirectory = &sqlite3_temp_directory;
45481 }
@@ -45486,18 +45590,23 @@
45486 if( ppDirectory ){
45487 char *zCopy = 0;
45488 if( zValue && zValue[0] ){
45489 zCopy = sqlite3_mprintf("%s", zValue);
45490 if ( zCopy==0 ){
45491 return SQLITE_NOMEM_BKPT;
 
45492 }
45493 }
45494 sqlite3_free(*ppDirectory);
45495 *ppDirectory = zCopy;
45496 return SQLITE_OK;
 
 
45497 }
45498 return SQLITE_ERROR;
 
 
45499 }
45500
45501 /*
45502 ** This function is the same as sqlite3_win32_set_directory (below); however,
45503 ** it accepts a UTF-16 string.
@@ -48266,10 +48375,22 @@
48266 }
48267 }
48268 }
48269 return 0;
48270 }
 
 
 
 
 
 
 
 
 
 
 
 
48271
48272 /*
48273 ** Create a temporary file name and store the resulting pointer into pzBuf.
48274 ** The pointer returned in pzBuf must be freed via sqlite3_free().
48275 */
@@ -48303,24 +48424,27 @@
48303 ** has been explicitly set by the application; otherwise, use the one
48304 ** configured by the operating system.
48305 */
48306 nDir = nMax - (nPre + 15);
48307 assert( nDir>0 );
48308 if( sqlite3_temp_directory ){
48309 int nDirLen = sqlite3Strlen30(sqlite3_temp_directory);
48310 if( nDirLen>0 ){
48311 if( !winIsDirSep(sqlite3_temp_directory[nDirLen-1]) ){
48312 nDirLen++;
48313 }
48314 if( nDirLen>nDir ){
 
48315 sqlite3_free(zBuf);
48316 OSTRACE(("TEMP-FILENAME rc=SQLITE_ERROR\n"));
48317 return winLogError(SQLITE_ERROR, 0, "winGetTempname1", 0);
48318 }
48319 sqlite3_snprintf(nMax, zBuf, "%s", sqlite3_temp_directory);
48320 }
 
48321 }
 
48322 #if defined(__CYGWIN__)
48323 else{
48324 static const char *azDirs[] = {
48325 0, /* getenv("SQLITE_TMPDIR") */
48326 0, /* getenv("TMPDIR") */
@@ -49105,11 +49229,11 @@
49105 /*
49106 ** Turn a relative pathname into a full pathname. Write the full
49107 ** pathname into zOut[]. zOut[] will be at least pVfs->mxPathname
49108 ** bytes in size.
49109 */
49110 static int winFullPathname(
49111 sqlite3_vfs *pVfs, /* Pointer to vfs object */
49112 const char *zRelative, /* Possibly relative input path */
49113 int nFull, /* Size of output buffer in bytes */
49114 char *zFull /* Output buffer */
49115 ){
@@ -49283,10 +49407,23 @@
49283 return SQLITE_OK;
49284 }else{
49285 return SQLITE_IOERR_NOMEM_BKPT;
49286 }
49287 #endif
 
 
 
 
 
 
 
 
 
 
 
 
 
49288 }
49289
49290 #ifndef SQLITE_OMIT_LOAD_EXTENSION
49291 /*
49292 ** Interfaces for opening a shared library, finding entry points
@@ -51072,39 +51209,58 @@
51072 */
51073 #if defined(SQLITE_DEBUG) && 0
51074 int sqlite3PcacheTrace = 2; /* 0: off 1: simple 2: cache dumps */
51075 int sqlite3PcacheMxDump = 9999; /* Max cache entries for pcacheDump() */
51076 # define pcacheTrace(X) if(sqlite3PcacheTrace){sqlite3DebugPrintf X;}
51077 void pcacheDump(PCache *pCache){
51078 int N;
51079 int i, j;
51080 sqlite3_pcache_page *pLower;
51081 PgHdr *pPg;
51082 unsigned char *a;
 
 
 
 
 
 
 
 
 
 
 
51083
51084 if( sqlite3PcacheTrace<2 ) return;
51085 if( pCache->pCache==0 ) return;
51086 N = sqlite3PcachePagecount(pCache);
51087 if( N>sqlite3PcacheMxDump ) N = sqlite3PcacheMxDump;
51088 for(i=1; i<=N; i++){
51089 pLower = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, i, 0);
51090 if( pLower==0 ) continue;
51091 pPg = (PgHdr*)pLower->pExtra;
51092 printf("%3d: nRef %2d flgs %02x data ", i, pPg->nRef, pPg->flags);
51093 a = (unsigned char *)pLower->pBuf;
51094 for(j=0; j<12; j++) printf("%02x", a[j]);
51095 printf("\n");
51096 if( pPg->pPage==0 ){
51097 sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, pLower, 0);
51098 }
51099 }
51100 }
51101 #else
51102 # define pcacheTrace(X)
 
51103 # define pcacheDump(X)
51104 #endif
51105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51106 /*
51107 ** Check invariants on a PgHdr entry. Return true if everything is OK.
51108 ** Return false if any invariant is violated.
51109 **
51110 ** This routine is for use inside of assert() statements only. For
@@ -51119,12 +51275,17 @@
51119 assert( pPg->pgno>0 || pPg->pPager==0 ); /* Page number is 1 or more */
51120 pCache = pPg->pCache;
51121 assert( pCache!=0 ); /* Every page has an associated PCache */
51122 if( pPg->flags & PGHDR_CLEAN ){
51123 assert( (pPg->flags & PGHDR_DIRTY)==0 );/* Cannot be both CLEAN and DIRTY */
51124 assert( pCache->pDirty!=pPg ); /* CLEAN pages not on dirty list */
51125 assert( pCache->pDirtyTail!=pPg );
 
 
 
 
 
51126 }
51127 /* WRITEABLE pages must also be DIRTY */
51128 if( pPg->flags & PGHDR_WRITEABLE ){
51129 assert( pPg->flags & PGHDR_DIRTY ); /* WRITEABLE implies DIRTY */
51130 }
@@ -51394,12 +51555,13 @@
51394 eCreate = createFlag & pCache->eCreate;
51395 assert( eCreate==0 || eCreate==1 || eCreate==2 );
51396 assert( createFlag==0 || pCache->eCreate==eCreate );
51397 assert( createFlag==0 || eCreate==1+(!pCache->bPurgeable||!pCache->pDirty) );
51398 pRes = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, eCreate);
51399 pcacheTrace(("%p.FETCH %d%s (result: %p)\n",pCache,pgno,
51400 createFlag?" create":"",pRes));
 
51401 return pRes;
51402 }
51403
51404 /*
51405 ** If the sqlite3PcacheFetch() routine is unable to allocate a new
@@ -51523,10 +51685,11 @@
51523 if( (--p->nRef)==0 ){
51524 if( p->flags&PGHDR_CLEAN ){
51525 pcacheUnpin(p);
51526 }else{
51527 pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT);
 
51528 }
51529 }
51530 }
51531
51532 /*
@@ -51566,10 +51729,11 @@
51566 if( p->flags & PGHDR_CLEAN ){
51567 p->flags ^= (PGHDR_DIRTY|PGHDR_CLEAN);
51568 pcacheTrace(("%p.DIRTY %d\n",p->pCache,p->pgno));
51569 assert( (p->flags & (PGHDR_DIRTY|PGHDR_CLEAN))==PGHDR_DIRTY );
51570 pcacheManageDirtyList(p, PCACHE_DIRTYLIST_ADD);
 
51571 }
51572 assert( sqlite3PcachePageSanity(p) );
51573 }
51574 }
51575
@@ -51628,18 +51792,28 @@
51628 /*
51629 ** Change the page number of page p to newPgno.
51630 */
51631 SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){
51632 PCache *pCache = p->pCache;
 
51633 assert( p->nRef>0 );
51634 assert( newPgno>0 );
51635 assert( sqlite3PcachePageSanity(p) );
51636 pcacheTrace(("%p.MOVE %d -> %d\n",pCache,p->pgno,newPgno));
 
51637 sqlite3GlobalConfig.pcache2.xRekey(pCache->pCache, p->pPage, p->pgno,newPgno);
 
 
 
 
 
 
 
51638 p->pgno = newPgno;
51639 if( (p->flags&PGHDR_DIRTY) && (p->flags&PGHDR_NEED_SYNC) ){
51640 pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT);
 
51641 }
51642 }
51643
51644 /*
51645 ** Drop every cache entry whose page number is greater than "pgno". The
@@ -51933,16 +52107,17 @@
51933 ** runtime using sqlite3_config(SQLITE_CONFIG_PCACHE_HDRSZ, &size). The
51934 ** sizes of the extensions sum to 272 bytes on x64 for 3.8.10, but this
51935 ** size can vary according to architecture, compile-time options, and
51936 ** SQLite library version number.
51937 **
51938 ** If SQLITE_PCACHE_SEPARATE_HEADER is defined, then the extension is obtained
51939 ** using a separate memory allocation from the database page content. This
51940 ** seeks to overcome the "clownshoe" problem (also called "internal
51941 ** fragmentation" in academic literature) of allocating a few bytes more
51942 ** than a power of two with the memory allocator rounding up to the next
51943 ** power of two, and leaving the rounded-up space unused.
 
51944 **
51945 ** This module tracks pointers to PgHdr1 objects. Only pcache.c communicates
51946 ** with this module. Information is passed back and forth as PgHdr1 pointers.
51947 **
51948 ** The pcache.c and pager.c modules deal pointers to PgHdr objects.
@@ -51983,34 +52158,44 @@
51983 typedef struct PgFreeslot PgFreeslot;
51984 typedef struct PGroup PGroup;
51985
51986 /*
51987 ** Each cache entry is represented by an instance of the following
51988 ** structure. Unless SQLITE_PCACHE_SEPARATE_HEADER is defined, a buffer of
51989 ** PgHdr1.pCache->szPage bytes is allocated directly before this structure
51990 ** in memory.
51991 **
51992 ** Note: Variables isBulkLocal and isAnchor were once type "u8". That works,
 
 
 
 
 
 
51993 ** but causes a 2-byte gap in the structure for most architectures (since
51994 ** pointers must be either 4 or 8-byte aligned). As this structure is located
51995 ** in memory directly after the associated page data, if the database is
51996 ** corrupt, code at the b-tree layer may overread the page buffer and
51997 ** read part of this structure before the corruption is detected. This
51998 ** can cause a valgrind error if the unitialized gap is accessed. Using u16
51999 ** ensures there is no such gap, and therefore no bytes of unitialized memory
52000 ** in the structure.
 
 
 
 
 
52001 */
52002 struct PgHdr1 {
52003 sqlite3_pcache_page page; /* Base class. Must be first. pBuf & pExtra */
52004 unsigned int iKey; /* Key value (page number) */
52005 u16 isBulkLocal; /* This page from bulk local storage */
52006 u16 isAnchor; /* This is the PGroup.lru element */
52007 PgHdr1 *pNext; /* Next in hash table chain */
52008 PCache1 *pCache; /* Cache that currently owns this page */
52009 PgHdr1 *pLruNext; /* Next in LRU list of unpinned pages */
52010 PgHdr1 *pLruPrev; /* Previous in LRU list of unpinned pages */
52011 /* NB: pLruPrev is only valid if pLruNext!=0 */
52012 };
52013
52014 /*
52015 ** A page is pinned if it is not on the LRU list. To be "pinned" means
52016 ** that the page is in active use and must not be deallocated.
@@ -52332,29 +52517,17 @@
52332 assert( pcache1.separateCache==0 );
52333 assert( pCache->pGroup==&pcache1.grp );
52334 pcache1LeaveMutex(pCache->pGroup);
52335 #endif
52336 if( benignMalloc ){ sqlite3BeginBenignMalloc(); }
52337 #ifdef SQLITE_PCACHE_SEPARATE_HEADER
52338 pPg = pcache1Alloc(pCache->szPage);
52339 p = sqlite3Malloc(sizeof(PgHdr1) + pCache->szExtra);
52340 if( !pPg || !p ){
52341 pcache1Free(pPg);
52342 sqlite3_free(p);
52343 pPg = 0;
52344 }
52345 #else
52346 pPg = pcache1Alloc(pCache->szAlloc);
52347 #endif
52348 if( benignMalloc ){ sqlite3EndBenignMalloc(); }
52349 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
52350 pcache1EnterMutex(pCache->pGroup);
52351 #endif
52352 if( pPg==0 ) return 0;
52353 #ifndef SQLITE_PCACHE_SEPARATE_HEADER
52354 p = (PgHdr1 *)&((u8 *)pPg)[pCache->szPage];
52355 #endif
52356 p->page.pBuf = pPg;
52357 p->page.pExtra = &p[1];
52358 p->isBulkLocal = 0;
52359 p->isAnchor = 0;
52360 p->pLruPrev = 0; /* Initializing this saves a valgrind error */
@@ -52374,13 +52547,10 @@
52374 if( p->isBulkLocal ){
52375 p->pNext = pCache->pFree;
52376 pCache->pFree = p;
52377 }else{
52378 pcache1Free(p->page.pBuf);
52379 #ifdef SQLITE_PCACHE_SEPARATE_HEADER
52380 sqlite3_free(p);
52381 #endif
52382 }
52383 (*pCache->pnPurgeable)--;
52384 }
52385
52386 /*
@@ -53017,27 +53187,45 @@
53017 unsigned int iNew
53018 ){
53019 PCache1 *pCache = (PCache1 *)p;
53020 PgHdr1 *pPage = (PgHdr1 *)pPg;
53021 PgHdr1 **pp;
53022 unsigned int h;
53023 assert( pPage->iKey==iOld );
53024 assert( pPage->pCache==pCache );
 
53025
53026 pcache1EnterMutex(pCache->pGroup);
53027
53028 h = iOld%pCache->nHash;
53029 pp = &pCache->apHash[h];
 
53030 while( (*pp)!=pPage ){
53031 pp = &(*pp)->pNext;
53032 }
53033 *pp = pPage->pNext;
53034
53035 h = iNew%pCache->nHash;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53036 pPage->iKey = iNew;
53037 pPage->pNext = pCache->apHash[h];
53038 pCache->apHash[h] = pPage;
53039 if( iNew>pCache->iMaxKey ){
53040 pCache->iMaxKey = iNew;
53041 }
53042
53043 pcache1LeaveMutex(pCache->pGroup);
@@ -53140,13 +53328,10 @@
53140 while( (nReq<0 || nFree<nReq)
53141 && (p=pcache1.grp.lru.pLruPrev)!=0
53142 && p->isAnchor==0
53143 ){
53144 nFree += pcache1MemSize(p->page.pBuf);
53145 #ifdef SQLITE_PCACHE_SEPARATE_HEADER
53146 nFree += sqlite3MemSize(p);
53147 #endif
53148 assert( PAGE_IS_UNPINNED(p) );
53149 pcache1PinPage(p);
53150 pcache1RemoveFromHash(p, 1);
53151 }
53152 pcache1LeaveMutex(&pcache1.grp);
@@ -59631,10 +59816,11 @@
59631 int flags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE;
59632 int nSpill;
59633
59634 if( pPager->tempFile ){
59635 flags |= (SQLITE_OPEN_DELETEONCLOSE|SQLITE_OPEN_TEMP_JOURNAL);
 
59636 nSpill = sqlite3Config.nStmtSpill;
59637 }else{
59638 flags |= SQLITE_OPEN_MAIN_JOURNAL;
59639 nSpill = jrnlBufferSize(pPager);
59640 }
@@ -59666,10 +59852,11 @@
59666 }
59667
59668 if( rc!=SQLITE_OK ){
59669 sqlite3BitvecDestroy(pPager->pInJournal);
59670 pPager->pInJournal = 0;
 
59671 }else{
59672 assert( pPager->eState==PAGER_WRITER_LOCKED );
59673 pPager->eState = PAGER_WRITER_CACHEMOD;
59674 }
59675
@@ -66729,10 +66916,11 @@
66729 ** db using sqlite3SchemaToIndex().
66730 */
66731 SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3 *db, int iDb, Schema *pSchema){
66732 Btree *p;
66733 assert( db!=0 );
 
66734 if( pSchema ) iDb = sqlite3SchemaToIndex(db, pSchema);
66735 assert( iDb>=0 && iDb<db->nDb );
66736 if( !sqlite3_mutex_held(db->mutex) ) return 0;
66737 if( iDb==1 ) return 1;
66738 p = db->aDb[iDb].pBt;
@@ -68301,12 +68489,11 @@
68301 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
68302 assert( pPage->pBt!=0 );
68303 assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE );
68304 assert( pPage->nOverflow==0 );
68305 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
68306 temp = 0;
68307 src = data = pPage->aData;
68308 hdr = pPage->hdrOffset;
68309 cellOffset = pPage->cellOffset;
68310 nCell = pPage->nCell;
68311 assert( nCell==get2byte(&data[hdr+3]) || CORRUPT_DB );
68312 iCellFirst = cellOffset + 2*nCell;
@@ -68356,43 +68543,42 @@
68356 }
68357
68358 cbrk = usableSize;
68359 iCellLast = usableSize - 4;
68360 iCellStart = get2byte(&data[hdr+5]);
68361 for(i=0; i<nCell; i++){
68362 u8 *pAddr; /* The i-th cell pointer */
68363 pAddr = &data[cellOffset + i*2];
68364 pc = get2byte(pAddr);
68365 testcase( pc==iCellFirst );
68366 testcase( pc==iCellLast );
68367 /* These conditions have already been verified in btreeInitPage()
68368 ** if PRAGMA cell_size_check=ON.
68369 */
68370 if( pc<iCellStart || pc>iCellLast ){
68371 return SQLITE_CORRUPT_PAGE(pPage);
68372 }
68373 assert( pc>=iCellStart && pc<=iCellLast );
68374 size = pPage->xCellSize(pPage, &src[pc]);
68375 cbrk -= size;
68376 if( cbrk<iCellStart || pc+size>usableSize ){
68377 return SQLITE_CORRUPT_PAGE(pPage);
68378 }
68379 assert( cbrk+size<=usableSize && cbrk>=iCellStart );
68380 testcase( cbrk+size==usableSize );
68381 testcase( pc+size==usableSize );
68382 put2byte(pAddr, cbrk);
68383 if( temp==0 ){
68384 if( cbrk==pc ) continue;
68385 temp = sqlite3PagerTempSpace(pPage->pBt->pPager);
68386 memcpy(&temp[iCellStart], &data[iCellStart], usableSize - iCellStart);
68387 src = temp;
68388 }
68389 memcpy(&data[cbrk], &src[pc], size);
68390 }
68391 data[hdr+7] = 0;
68392
68393 defragment_out:
68394 assert( pPage->nFree>=0 );
68395 if( data[hdr+7]+cbrk-iCellFirst!=pPage->nFree ){
68396 return SQLITE_CORRUPT_PAGE(pPage);
68397 }
68398 assert( cbrk>=iCellFirst );
@@ -68461,13 +68647,13 @@
68461 return &aData[pc + x];
68462 }
68463 iAddr = pc;
68464 pTmp = &aData[pc];
68465 pc = get2byte(pTmp);
68466 if( pc<=iAddr+size ){
68467 if( pc ){
68468 /* The next slot in the chain is not past the end of the current slot */
68469 *pRc = SQLITE_CORRUPT_PAGE(pPg);
68470 }
68471 return 0;
68472 }
68473 }
@@ -68615,11 +68801,11 @@
68615 iPtr = hdr + 1;
68616 if( data[iPtr+1]==0 && data[iPtr]==0 ){
68617 iFreeBlk = 0; /* Shortcut for the case when the freelist is empty */
68618 }else{
68619 while( (iFreeBlk = get2byte(&data[iPtr]))<iStart ){
68620 if( iFreeBlk<iPtr+4 ){
68621 if( iFreeBlk==0 ) break; /* TH3: corrupt082.100 */
68622 return SQLITE_CORRUPT_PAGE(pPage);
68623 }
68624 iPtr = iFreeBlk;
68625 }
@@ -69097,13 +69283,11 @@
69097 if( pCur ){
69098 pCur->iPage--;
69099 pCur->pPage = pCur->apPage[pCur->iPage];
69100 }
69101 testcase( pgno==0 );
69102 assert( pgno!=0 || rc==SQLITE_CORRUPT
69103 || rc==SQLITE_IOERR_NOMEM
69104 || rc==SQLITE_NOMEM );
69105 return rc;
69106 }
69107
69108 /*
69109 ** Release a MemPage. This should be called once for each prior
@@ -72041,12 +72225,10 @@
72041 ** the new child page does not match the flags field of the parent (i.e.
72042 ** if an intkey page appears to be the parent of a non-intkey page, or
72043 ** vice-versa).
72044 */
72045 static int moveToChild(BtCursor *pCur, u32 newPgno){
72046 BtShared *pBt = pCur->pBt;
72047
72048 assert( cursorOwnsBtShared(pCur) );
72049 assert( pCur->eState==CURSOR_VALID );
72050 assert( pCur->iPage<BTCURSOR_MAX_DEPTH );
72051 assert( pCur->iPage>=0 );
72052 if( pCur->iPage>=(BTCURSOR_MAX_DEPTH-1) ){
@@ -72056,11 +72238,12 @@
72056 pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
72057 pCur->aiIdx[pCur->iPage] = pCur->ix;
72058 pCur->apPage[pCur->iPage] = pCur->pPage;
72059 pCur->ix = 0;
72060 pCur->iPage++;
72061 return getAndInitPage(pBt, newPgno, &pCur->pPage, pCur, pCur->curPagerFlags);
 
72062 }
72063
72064 #ifdef SQLITE_DEBUG
72065 /*
72066 ** Page pParent is an internal (non-leaf) tree page. This function
@@ -72162,11 +72345,11 @@
72162 assert( pCur->skipNext!=SQLITE_OK );
72163 return pCur->skipNext;
72164 }
72165 sqlite3BtreeClearCursor(pCur);
72166 }
72167 rc = getAndInitPage(pCur->pBtree->pBt, pCur->pgnoRoot, &pCur->pPage,
72168 0, pCur->curPagerFlags);
72169 if( rc!=SQLITE_OK ){
72170 pCur->eState = CURSOR_INVALID;
72171 return rc;
72172 }
@@ -72635,10 +72818,13 @@
72635 if( pCur->iPage>0
72636 && indexCellCompare(pCur, 0, pIdxKey, xRecordCompare)<=0
72637 && pIdxKey->errCode==SQLITE_OK
72638 ){
72639 pCur->curFlags &= ~BTCF_ValidOvfl;
 
 
 
72640 goto bypass_moveto_root; /* Start search on the current page */
72641 }
72642 pIdxKey->errCode = SQLITE_OK;
72643 }
72644
@@ -73800,16 +73986,10 @@
73800 data = pPage->aData;
73801 ptr = &pPage->aCellIdx[2*idx];
73802 assert( pPage->pBt->usableSize > (u32)(ptr-data) );
73803 pc = get2byte(ptr);
73804 hdr = pPage->hdrOffset;
73805 #if 0 /* Not required. Omit for efficiency */
73806 if( pc<hdr+pPage->nCell*2 ){
73807 *pRC = SQLITE_CORRUPT_BKPT;
73808 return;
73809 }
73810 #endif
73811 testcase( pc==(u32)get2byte(&data[hdr+5]) );
73812 testcase( pc+sz==pPage->pBt->usableSize );
73813 if( pc+sz > pPage->pBt->usableSize ){
73814 *pRC = SQLITE_CORRUPT_BKPT;
73815 return;
@@ -74689,12 +74869,10 @@
74689 int szNew[NB+2]; /* Combined size of cells placed on i-th page */
74690 u8 *aSpace1; /* Space for copies of dividers cells */
74691 Pgno pgno; /* Temp var to store a page number in */
74692 u8 abDone[NB+2]; /* True after i'th new page is populated */
74693 Pgno aPgno[NB+2]; /* Page numbers of new pages before shuffling */
74694 Pgno aPgOrder[NB+2]; /* Copy of aPgno[] used for sorting pages */
74695 u16 aPgFlags[NB+2]; /* flags field of new pages before shuffling */
74696 CellArray b; /* Parsed information on cells being balanced */
74697
74698 memset(abDone, 0, sizeof(abDone));
74699 memset(&b, 0, sizeof(b));
74700 pBt = pParent->pBt;
@@ -75114,46 +75292,43 @@
75114 ** Reassign page numbers so that the new pages are in ascending order.
75115 ** This helps to keep entries in the disk file in order so that a scan
75116 ** of the table is closer to a linear scan through the file. That in turn
75117 ** helps the operating system to deliver pages from the disk more rapidly.
75118 **
75119 ** An O(n^2) insertion sort algorithm is used, but since n is never more
75120 ** than (NB+2) (a small constant), that should not be a problem.
75121 **
75122 ** When NB==3, this one optimization makes the database about 25% faster
75123 ** for large insertions and deletions.
75124 */
75125 for(i=0; i<nNew; i++){
75126 aPgOrder[i] = aPgno[i] = apNew[i]->pgno;
75127 aPgFlags[i] = apNew[i]->pDbPage->flags;
75128 for(j=0; j<i; j++){
75129 if( NEVER(aPgno[j]==aPgno[i]) ){
75130 /* This branch is taken if the set of sibling pages somehow contains
75131 ** duplicate entries. This can happen if the database is corrupt.
75132 ** It would be simpler to detect this as part of the loop below, but
75133 ** we do the detection here in order to avoid populating the pager
75134 ** cache with two separate objects associated with the same
75135 ** page number. */
75136 assert( CORRUPT_DB );
75137 rc = SQLITE_CORRUPT_BKPT;
75138 goto balance_cleanup;
75139 }
75140 }
75141 }
75142 for(i=0; i<nNew; i++){
75143 int iBest = 0; /* aPgno[] index of page number to use */
75144 for(j=1; j<nNew; j++){
75145 if( aPgOrder[j]<aPgOrder[iBest] ) iBest = j;
75146 }
75147 pgno = aPgOrder[iBest];
75148 aPgOrder[iBest] = 0xffffffff;
75149 if( iBest!=i ){
75150 if( iBest>i ){
75151 sqlite3PagerRekey(apNew[iBest]->pDbPage, pBt->nPage+iBest+1, 0);
75152 }
75153 sqlite3PagerRekey(apNew[i]->pDbPage, pgno, aPgFlags[iBest]);
75154 apNew[i]->pgno = pgno;
75155 }
75156 }
75157
75158 TRACE(("BALANCE: new: %d(%d nc=%d) %d(%d nc=%d) %d(%d nc=%d) "
75159 "%d(%d nc=%d) %d(%d nc=%d)\n",
@@ -79417,10 +79592,20 @@
79417 double r2 = (double)i;
79418 return r1==0.0
79419 || (memcmp(&r1, &r2, sizeof(r1))==0
79420 && i >= -2251799813685248LL && i < 2251799813685248LL);
79421 }
 
 
 
 
 
 
 
 
 
 
79422
79423 /*
79424 ** Convert pMem so that it has type MEM_Real or MEM_Int.
79425 ** Invalidate any prior representations.
79426 **
@@ -79439,11 +79624,11 @@
79439 sqlite3_int64 ix;
79440 assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
79441 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
79442 rc = sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc);
79443 if( ((rc==0 || rc==1) && sqlite3Atoi64(pMem->z, &ix, pMem->n, pMem->enc)<=1)
79444 || sqlite3RealSameAsInt(pMem->u.r, (ix = (i64)pMem->u.r))
79445 ){
79446 pMem->u.i = ix;
79447 MemSetTypeFlag(pMem, MEM_Int);
79448 }else{
79449 MemSetTypeFlag(pMem, MEM_Real);
@@ -80160,11 +80345,12 @@
80160 if( pVal==0 ){
80161 rc = SQLITE_NOMEM_BKPT;
80162 goto value_from_function_out;
80163 }
80164
80165 assert( pCtx->pParse->rc==SQLITE_OK );
 
80166 memset(&ctx, 0, sizeof(ctx));
80167 ctx.pOut = pVal;
80168 ctx.pFunc = pFunc;
80169 ctx.enc = ENC(db);
80170 pFunc->xSFunc(&ctx, nVal, apVal);
@@ -80670,14 +80856,14 @@
80670 p = sqlite3DbMallocRawNN(db, sizeof(Vdbe) );
80671 if( p==0 ) return 0;
80672 memset(&p->aOp, 0, sizeof(Vdbe)-offsetof(Vdbe,aOp));
80673 p->db = db;
80674 if( db->pVdbe ){
80675 db->pVdbe->pPrev = p;
80676 }
80677 p->pNext = db->pVdbe;
80678 p->pPrev = 0;
80679 db->pVdbe = p;
80680 assert( p->eVdbeState==VDBE_INIT_STATE );
80681 p->pParse = pParse;
80682 pParse->pVdbe = p;
80683 assert( pParse->aLabel==0 );
@@ -80755,25 +80941,32 @@
80755 return 0;
80756 }
80757 #endif
80758
80759 /*
80760 ** Swap all content between two VDBE structures.
 
 
 
 
 
 
 
80761 */
80762 SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){
80763 Vdbe tmp, *pTmp;
80764 char *zTmp;
80765 assert( pA->db==pB->db );
80766 tmp = *pA;
80767 *pA = *pB;
80768 *pB = tmp;
80769 pTmp = pA->pNext;
80770 pA->pNext = pB->pNext;
80771 pB->pNext = pTmp;
80772 pTmp = pA->pPrev;
80773 pA->pPrev = pB->pPrev;
80774 pB->pPrev = pTmp;
80775 zTmp = pA->zSql;
80776 pA->zSql = pB->zSql;
80777 pB->zSql = zTmp;
80778 #ifdef SQLITE_ENABLE_NORMALIZE
80779 zTmp = pA->zNormSql;
@@ -81021,10 +81214,11 @@
81021 pCtx->argc = nArg;
81022 pCtx->iOp = sqlite3VdbeCurrentAddr(v);
81023 addr = sqlite3VdbeAddOp4(v, eCallCtx ? OP_PureFunc : OP_Function,
81024 p1, p2, p3, (char*)pCtx, P4_FUNCCTX);
81025 sqlite3VdbeChangeP5(v, eCallCtx & NC_SelfRef);
 
81026 return addr;
81027 }
81028
81029 /*
81030 ** Add an opcode that includes the p4 value with a P4_INT64 or
@@ -81089,11 +81283,11 @@
81089 va_end(ap);
81090 v = pParse->pVdbe;
81091 iThis = v->nOp;
81092 sqlite3VdbeAddOp4(v, OP_Explain, iThis, pParse->addrExplain, 0,
81093 zMsg, P4_DYNAMIC);
81094 sqlite3ExplainBreakpoint(bPush?"PUSH":"", sqlite3VdbeGetOp(v,-1)->p4.z);
81095 if( bPush){
81096 pParse->addrExplain = iThis;
81097 }
81098 }
81099 }
@@ -81232,11 +81426,11 @@
81232 SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe *p){
81233 sqlite3VdbeAddOp2(p, OP_Expire, 1, 1);
81234 }
81235
81236 /*
81237 ** Mark the VDBE as one that can only be run multiple times.
81238 */
81239 SQLITE_PRIVATE void sqlite3VdbeReusable(Vdbe *p){
81240 int i;
81241 for(i=1; ALWAYS(i<p->nOp); i++){
81242 if( ALWAYS(p->aOp[i].opcode==OP_Expire) ){
@@ -81356,10 +81550,11 @@
81356 int opcode = pOp->opcode;
81357 if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename
81358 || opcode==OP_VDestroy
81359 || opcode==OP_VCreate
81360 || opcode==OP_ParseSchema
 
81361 || ((opcode==OP_Halt || opcode==OP_HaltIfNull)
81362 && ((pOp->p1)!=SQLITE_OK && pOp->p2==OE_Abort))
81363 ){
81364 hasAbort = 1;
81365 break;
@@ -81446,12 +81641,12 @@
81446 Parse *pParse = p->pParse;
81447 int *aLabel = pParse->aLabel;
81448 p->readOnly = 1;
81449 p->bIsReader = 0;
81450 pOp = &p->aOp[p->nOp-1];
81451 while(1){
81452
81453 /* Only JUMP opcodes and the short list of special opcodes in the switch
81454 ** below need to be considered. The mkopcodeh.tcl generator script groups
81455 ** all these opcodes together near the front of the opcode list. Skip
81456 ** any opcode that does not need processing by virtual of the fact that
81457 ** it is larger than SQLITE_MX_JUMP_OPCODE, as a performance optimization.
@@ -81476,10 +81671,14 @@
81476 case OP_JournalMode: {
81477 p->readOnly = 0;
81478 p->bIsReader = 1;
81479 break;
81480 }
 
 
 
 
81481 #ifndef SQLITE_OMIT_VIRTUALTABLE
81482 case OP_VUpdate: {
81483 if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2;
81484 break;
81485 }
@@ -81508,15 +81707,16 @@
81508 /* The mkopcodeh.tcl script has so arranged things that the only
81509 ** non-jump opcodes less than SQLITE_MX_JUMP_CODE are guaranteed to
81510 ** have non-negative values for P2. */
81511 assert( (sqlite3OpcodeProperty[pOp->opcode]&OPFLG_JUMP)==0 || pOp->p2>=0);
81512 }
81513 if( pOp==p->aOp ) break;
81514 pOp--;
81515 }
 
81516 if( aLabel ){
81517 sqlite3DbFreeNN(p->db, pParse->aLabel);
81518 pParse->aLabel = 0;
81519 }
81520 pParse->nLabel = 0;
81521 *pMaxFuncArgs = nMaxArgs;
81522 assert( p->bIsReader!=0 || DbMaskAllZero(p->btreeMask) );
@@ -81761,19 +81961,23 @@
81761 /*
81762 ** Change the value of the opcode, or P1, P2, P3, or P5 operands
81763 ** for a specific instruction.
81764 */
81765 SQLITE_PRIVATE void sqlite3VdbeChangeOpcode(Vdbe *p, int addr, u8 iNewOpcode){
 
81766 sqlite3VdbeGetOp(p,addr)->opcode = iNewOpcode;
81767 }
81768 SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, int addr, int val){
 
81769 sqlite3VdbeGetOp(p,addr)->p1 = val;
81770 }
81771 SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, int addr, int val){
 
81772 sqlite3VdbeGetOp(p,addr)->p2 = val;
81773 }
81774 SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, int addr, int val){
 
81775 sqlite3VdbeGetOp(p,addr)->p3 = val;
81776 }
81777 SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u16 p5){
81778 assert( p->nOp>0 || p->db->mallocFailed );
81779 if( p->nOp>0 ) p->aOp[p->nOp-1].p5 = p5;
@@ -81805,11 +82009,11 @@
81805 assert( p->aOp[addr].opcode==OP_Once
81806 || p->aOp[addr].opcode==OP_If
81807 || p->aOp[addr].opcode==OP_FkIfZero );
81808 assert( p->aOp[addr].p4type==0 );
81809 #ifdef SQLITE_VDBE_COVERAGE
81810 sqlite3VdbeGetOp(p,-1)->iSrcLine = 0; /* Erase VdbeCoverage() macros */
81811 #endif
81812 p->nOp--;
81813 }else{
81814 sqlite3VdbeChangeP2(p, addr, p->nOp);
81815 }
@@ -81819,25 +82023,27 @@
81819 /*
81820 ** If the input FuncDef structure is ephemeral, then free it. If
81821 ** the FuncDef is not ephermal, then do nothing.
81822 */
81823 static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){
 
81824 if( (pDef->funcFlags & SQLITE_FUNC_EPHEM)!=0 ){
81825 sqlite3DbFreeNN(db, pDef);
81826 }
81827 }
81828
81829 /*
81830 ** Delete a P4 value if necessary.
81831 */
81832 static SQLITE_NOINLINE void freeP4Mem(sqlite3 *db, Mem *p){
81833 if( p->szMalloc ) sqlite3DbFree(db, p->zMalloc);
81834 sqlite3DbFreeNN(db, p);
81835 }
81836 static SQLITE_NOINLINE void freeP4FuncCtx(sqlite3 *db, sqlite3_context *p){
 
81837 freeEphemeralFunction(db, p->pFunc);
81838 sqlite3DbFreeNN(db, p);
81839 }
81840 static void freeP4(sqlite3 *db, int p4type, void *p4){
81841 assert( db );
81842 switch( p4type ){
81843 case P4_FUNCCTX: {
@@ -81846,11 +82052,11 @@
81846 }
81847 case P4_REAL:
81848 case P4_INT64:
81849 case P4_DYNAMIC:
81850 case P4_INTARRAY: {
81851 sqlite3DbFree(db, p4);
81852 break;
81853 }
81854 case P4_KEYINFO: {
81855 if( db->pnBytesFreed==0 ) sqlite3KeyInfoUnref((KeyInfo*)p4);
81856 break;
@@ -81885,10 +82091,11 @@
81885 ** opcodes contained within. If aOp is not NULL it is assumed to contain
81886 ** nOp entries.
81887 */
81888 static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){
81889 assert( nOp>=0 );
 
81890 if( aOp ){
81891 Op *pOp = &aOp[nOp-1];
81892 while(1){ /* Exit via break */
81893 if( pOp->p4type <= P4_FREE_IF_LE ) freeP4(db, pOp->p4type, pOp->p4.p);
81894 #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
@@ -81895,11 +82102,11 @@
81895 sqlite3DbFree(db, pOp->zComment);
81896 #endif
81897 if( pOp==aOp ) break;
81898 pOp--;
81899 }
81900 sqlite3DbFreeNN(db, aOp);
81901 }
81902 }
81903
81904 /*
81905 ** Link the SubProgram object passed as the second argument into the linked
@@ -82126,17 +82333,17 @@
82126 #ifdef SQLITE_VDBE_COVERAGE
82127 /*
82128 ** Set the value if the iSrcLine field for the previously coded instruction.
82129 */
82130 SQLITE_PRIVATE void sqlite3VdbeSetLineNumber(Vdbe *v, int iLine){
82131 sqlite3VdbeGetOp(v,-1)->iSrcLine = iLine;
82132 }
82133 #endif /* SQLITE_VDBE_COVERAGE */
82134
82135 /*
82136 ** Return the opcode for a given address. If the address is -1, then
82137 ** return the most recently inserted opcode.
82138 **
82139 ** If a memory allocation error has occurred prior to the calling of this
82140 ** routine, then a pointer to a dummy VdbeOp will be returned. That opcode
82141 ** is readable but not writable, though it is cast to a writable value.
82142 ** The return of a dummy opcode allows the call to continue functioning
@@ -82148,20 +82355,23 @@
82148 SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){
82149 /* C89 specifies that the constant "dummy" will be initialized to all
82150 ** zeros, which is correct. MSVC generates a warning, nevertheless. */
82151 static VdbeOp dummy; /* Ignore the MSVC warning about no initializer */
82152 assert( p->eVdbeState==VDBE_INIT_STATE );
82153 if( addr<0 ){
82154 addr = p->nOp - 1;
82155 }
82156 assert( (addr>=0 && addr<p->nOp) || p->db->mallocFailed );
82157 if( p->db->mallocFailed ){
82158 return (VdbeOp*)&dummy;
82159 }else{
82160 return &p->aOp[addr];
82161 }
82162 }
 
 
 
 
 
 
82163
82164 #if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS)
82165 /*
82166 ** Return an integer value for one of the parameters to the opcode pOp
82167 ** determined by character c.
@@ -82646,11 +82856,11 @@
82646 if( p->flags&(MEM_Agg|MEM_Dyn) ){
82647 testcase( (p->flags & MEM_Dyn)!=0 && p->xDel==sqlite3VdbeFrameMemDel );
82648 sqlite3VdbeMemRelease(p);
82649 p->flags = MEM_Undefined;
82650 }else if( p->szMalloc ){
82651 sqlite3DbFreeNN(db, p->zMalloc);
82652 p->szMalloc = 0;
82653 p->flags = MEM_Undefined;
82654 }
82655 #ifdef SQLITE_DEBUG
82656 else{
@@ -83638,11 +83848,11 @@
83638 if( sqlite3_stmt_busy((sqlite3_stmt*)p) ){
83639 cnt++;
83640 if( p->readOnly==0 ) nWrite++;
83641 if( p->bIsReader ) nRead++;
83642 }
83643 p = p->pNext;
83644 }
83645 assert( cnt==db->nVdbeActive );
83646 assert( nWrite==db->nVdbeWrite );
83647 assert( nRead==db->nVdbeRead );
83648 }
@@ -84167,27 +84377,28 @@
84167 ** VdbeDelete() also unlinks the Vdbe from the list of VMs associated with
84168 ** the database connection and frees the object itself.
84169 */
84170 static void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){
84171 SubProgram *pSub, *pNext;
 
84172 assert( p->db==0 || p->db==db );
84173 if( p->aColName ){
84174 releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
84175 sqlite3DbFreeNN(db, p->aColName);
84176 }
84177 for(pSub=p->pProgram; pSub; pSub=pNext){
84178 pNext = pSub->pNext;
84179 vdbeFreeOpArray(db, pSub->aOp, pSub->nOp);
84180 sqlite3DbFree(db, pSub);
84181 }
84182 if( p->eVdbeState!=VDBE_INIT_STATE ){
84183 releaseMemArray(p->aVar, p->nVar);
84184 if( p->pVList ) sqlite3DbFreeNN(db, p->pVList);
84185 if( p->pFree ) sqlite3DbFreeNN(db, p->pFree);
84186 }
84187 vdbeFreeOpArray(db, p->aOp, p->nOp);
84188 sqlite3DbFree(db, p->zSql);
84189 #ifdef SQLITE_ENABLE_NORMALIZE
84190 sqlite3DbFree(db, p->zNormSql);
84191 {
84192 DblquoteStr *pThis, *pNext;
84193 for(pThis=p->pDblStr; pThis; pThis=pNext){
@@ -84213,24 +84424,21 @@
84213 SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){
84214 sqlite3 *db;
84215
84216 assert( p!=0 );
84217 db = p->db;
 
84218 assert( sqlite3_mutex_held(db->mutex) );
84219 sqlite3VdbeClearObject(db, p);
84220 if( db->pnBytesFreed==0 ){
84221 if( p->pPrev ){
84222 p->pPrev->pNext = p->pNext;
84223 }else{
84224 assert( db->pVdbe==p );
84225 db->pVdbe = p->pNext;
84226 }
84227 if( p->pNext ){
84228 p->pNext->pPrev = p->pPrev;
84229 }
84230 }
84231 sqlite3DbFreeNN(db, p);
84232 }
84233
84234 /*
84235 ** The cursor "p" has a pending seek operation that has not yet been
84236 ** carried out. Seek the cursor now. If an error occurs, return
@@ -85721,11 +85929,11 @@
85721 ** prepared statements. The flag is set to 1 for an immediate expiration
85722 ** and set to 2 for an advisory expiration.
85723 */
85724 SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db, int iCode){
85725 Vdbe *p;
85726 for(p = db->pVdbe; p; p=p->pNext){
85727 p->expired = iCode+1;
85728 }
85729 }
85730
85731 /*
@@ -85842,17 +86050,18 @@
85842 **
85843 ** This function is used to free UnpackedRecord structures allocated by
85844 ** the vdbeUnpackRecord() function found in vdbeapi.c.
85845 */
85846 static void vdbeFreeUnpacked(sqlite3 *db, int nField, UnpackedRecord *p){
 
85847 if( p ){
85848 int i;
85849 for(i=0; i<nField; i++){
85850 Mem *pMem = &p->aMem[i];
85851 if( pMem->zMalloc ) sqlite3VdbeMemReleaseMalloc(pMem);
85852 }
85853 sqlite3DbFreeNN(db, p);
85854 }
85855 }
85856 #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
85857
85858 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
@@ -85919,11 +86128,11 @@
85919 if( preupdate.aNew ){
85920 int i;
85921 for(i=0; i<pCsr->nField; i++){
85922 sqlite3VdbeMemRelease(&preupdate.aNew[i]);
85923 }
85924 sqlite3DbFreeNN(db, preupdate.aNew);
85925 }
85926 }
85927 #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
85928
85929 /************** End of vdbeaux.c *********************************************/
@@ -86036,11 +86245,13 @@
86036 Vdbe *v = (Vdbe*)pStmt;
86037 sqlite3 *db = v->db;
86038 if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT;
86039 sqlite3_mutex_enter(db->mutex);
86040 checkProfileCallback(db, v);
86041 rc = sqlite3VdbeFinalize(v);
 
 
86042 rc = sqlite3ApiExit(db, rc);
86043 sqlite3LeaveMutexAndCloseZombie(db);
86044 }
86045 return rc;
86046 }
@@ -86746,13 +86957,13 @@
86746 break;
86747 }
86748 sqlite3_reset(pStmt);
86749 if( savedPc>=0 ){
86750 /* Setting minWriteFileFormat to 254 is a signal to the OP_Init and
86751 ** OP_Trace opcodes to *not* perform SQLITE_TRACE_STMT because one
86752 ** should output has already occurred due to SQLITE_SCHEMA.
86753 ** tag-20220401a */
86754 v->minWriteFileFormat = 254;
86755 }
86756 assert( v->expired==0 );
86757 }
86758 sqlite3_mutex_leave(db->mutex);
@@ -87358,11 +87569,11 @@
87358 ** the mutex is released if any kind of error occurs.
87359 **
87360 ** The error code stored in database p->db is overwritten with the return
87361 ** value in any case.
87362 */
87363 static int vdbeUnbind(Vdbe *p, int i){
87364 Mem *pVar;
87365 if( vdbeSafetyNotNull(p) ){
87366 return SQLITE_MISUSE_BKPT;
87367 }
87368 sqlite3_mutex_enter(p->db->mutex);
@@ -87371,16 +87582,15 @@
87371 sqlite3_mutex_leave(p->db->mutex);
87372 sqlite3_log(SQLITE_MISUSE,
87373 "bind on a busy prepared statement: [%s]", p->zSql);
87374 return SQLITE_MISUSE_BKPT;
87375 }
87376 if( i<1 || i>p->nVar ){
87377 sqlite3Error(p->db, SQLITE_RANGE);
87378 sqlite3_mutex_leave(p->db->mutex);
87379 return SQLITE_RANGE;
87380 }
87381 i--;
87382 pVar = &p->aVar[i];
87383 sqlite3VdbeMemRelease(pVar);
87384 pVar->flags = MEM_Null;
87385 p->db->errCode = SQLITE_OK;
87386
@@ -87413,11 +87623,11 @@
87413 ){
87414 Vdbe *p = (Vdbe *)pStmt;
87415 Mem *pVar;
87416 int rc;
87417
87418 rc = vdbeUnbind(p, i);
87419 if( rc==SQLITE_OK ){
87420 if( zData!=0 ){
87421 pVar = &p->aVar[i-1];
87422 rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
87423 if( rc==SQLITE_OK && encoding!=0 ){
@@ -87462,11 +87672,11 @@
87462 return bindText(pStmt, i, zData, nData, xDel, 0);
87463 }
87464 SQLITE_API int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
87465 int rc;
87466 Vdbe *p = (Vdbe *)pStmt;
87467 rc = vdbeUnbind(p, i);
87468 if( rc==SQLITE_OK ){
87469 sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
87470 sqlite3_mutex_leave(p->db->mutex);
87471 }
87472 return rc;
@@ -87475,21 +87685,21 @@
87475 return sqlite3_bind_int64(p, i, (i64)iValue);
87476 }
87477 SQLITE_API int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
87478 int rc;
87479 Vdbe *p = (Vdbe *)pStmt;
87480 rc = vdbeUnbind(p, i);
87481 if( rc==SQLITE_OK ){
87482 sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
87483 sqlite3_mutex_leave(p->db->mutex);
87484 }
87485 return rc;
87486 }
87487 SQLITE_API int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
87488 int rc;
87489 Vdbe *p = (Vdbe*)pStmt;
87490 rc = vdbeUnbind(p, i);
87491 if( rc==SQLITE_OK ){
87492 sqlite3_mutex_leave(p->db->mutex);
87493 }
87494 return rc;
87495 }
@@ -87500,11 +87710,11 @@
87500 const char *zPTtype,
87501 void (*xDestructor)(void*)
87502 ){
87503 int rc;
87504 Vdbe *p = (Vdbe*)pStmt;
87505 rc = vdbeUnbind(p, i);
87506 if( rc==SQLITE_OK ){
87507 sqlite3VdbeMemSetPointer(&p->aVar[i-1], pPtr, zPTtype, xDestructor);
87508 sqlite3_mutex_leave(p->db->mutex);
87509 }else if( xDestructor ){
87510 xDestructor(pPtr);
@@ -87578,11 +87788,11 @@
87578 return rc;
87579 }
87580 SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
87581 int rc;
87582 Vdbe *p = (Vdbe *)pStmt;
87583 rc = vdbeUnbind(p, i);
87584 if( rc==SQLITE_OK ){
87585 #ifndef SQLITE_OMIT_INCRBLOB
87586 sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
87587 #else
87588 rc = sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
@@ -87738,11 +87948,11 @@
87738 #endif
87739 sqlite3_mutex_enter(pDb->mutex);
87740 if( pStmt==0 ){
87741 pNext = (sqlite3_stmt*)pDb->pVdbe;
87742 }else{
87743 pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
87744 }
87745 sqlite3_mutex_leave(pDb->mutex);
87746 return pNext;
87747 }
87748
@@ -87763,12 +87973,15 @@
87763 if( op==SQLITE_STMTSTATUS_MEMUSED ){
87764 sqlite3 *db = pVdbe->db;
87765 sqlite3_mutex_enter(db->mutex);
87766 v = 0;
87767 db->pnBytesFreed = (int*)&v;
 
 
87768 sqlite3VdbeDelete(pVdbe);
87769 db->pnBytesFreed = 0;
 
87770 sqlite3_mutex_leave(db->mutex);
87771 }else{
87772 v = pVdbe->aCounter[op];
87773 if( resetFlag ) pVdbe->aCounter[op] = 0;
87774 }
@@ -88604,11 +88817,12 @@
88604 ** floating point value of rValue. Return true and set *piValue to the
88605 ** integer value if the string is in range to be an integer. Otherwise,
88606 ** return false.
88607 */
88608 static int alsoAnInt(Mem *pRec, double rValue, i64 *piValue){
88609 i64 iValue = (double)rValue;
 
88610 if( sqlite3RealSameAsInt(rValue,iValue) ){
88611 *piValue = iValue;
88612 return 1;
88613 }
88614 return 0==sqlite3Atoi64(pRec->z, piValue, pRec->n, pRec->enc);
@@ -88766,21 +88980,22 @@
88766 **
88767 ** Unlike applyNumericAffinity(), this routine does not modify pMem->flags.
88768 ** But it does set pMem->u.r and pMem->u.i appropriately.
88769 */
88770 static u16 numericType(Mem *pMem){
88771 if( pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal) ){
 
 
88772 testcase( pMem->flags & MEM_Int );
88773 testcase( pMem->flags & MEM_Real );
88774 testcase( pMem->flags & MEM_IntReal );
88775 return pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal);
88776 }
88777 if( pMem->flags & (MEM_Str|MEM_Blob) ){
88778 testcase( pMem->flags & MEM_Str );
88779 testcase( pMem->flags & MEM_Blob );
88780 return computeNumericType(pMem);
88781 }
88782 return 0;
88783 }
88784
88785 #ifdef SQLITE_DEBUG
88786 /*
@@ -89294,11 +89509,11 @@
89294 **
89295 ** P2 is not used by the byte-code engine. However, if P2 is positive
89296 ** and also less than the current address, then the "EXPLAIN" output
89297 ** formatter in the CLI will indent all opcodes from the P2 opcode up
89298 ** to be not including the current Return. P2 should be the first opcode
89299 ** in the subroutine from which this opcode is returnning. Thus the P2
89300 ** value is a byte-code indentation hint. See tag-20220407a in
89301 ** wherecode.c and shell.c.
89302 */
89303 case OP_Return: { /* in1 */
89304 pIn1 = &aMem[pOp->p1];
@@ -89956,11 +90171,11 @@
89956 }
89957 nByte = pIn1->n + pIn2->n;
89958 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
89959 goto too_big;
89960 }
89961 if( sqlite3VdbeMemGrow(pOut, (int)nByte+3, pOut==pIn2) ){
89962 goto no_mem;
89963 }
89964 MemSetTypeFlag(pOut, MEM_Str);
89965 if( pOut!=pIn2 ){
89966 memcpy(pOut->z, pIn2->z, pIn2->n);
@@ -89968,13 +90183,13 @@
89968 pIn2->flags = flags2;
89969 }
89970 memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n);
89971 assert( (pIn1->flags & MEM_Dyn) == (flags1 & MEM_Dyn) );
89972 pIn1->flags = flags1;
 
89973 pOut->z[nByte]=0;
89974 pOut->z[nByte+1] = 0;
89975 pOut->z[nByte+2] = 0;
89976 pOut->flags |= MEM_Term;
89977 pOut->n = (int)nByte;
89978 pOut->enc = encoding;
89979 UPDATE_MAX_BLOBSIZE(pOut);
89980 break;
@@ -90021,25 +90236,24 @@
90021 case OP_Add: /* same as TK_PLUS, in1, in2, out3 */
90022 case OP_Subtract: /* same as TK_MINUS, in1, in2, out3 */
90023 case OP_Multiply: /* same as TK_STAR, in1, in2, out3 */
90024 case OP_Divide: /* same as TK_SLASH, in1, in2, out3 */
90025 case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */
90026 u16 flags; /* Combined MEM_* flags from both inputs */
90027 u16 type1; /* Numeric type of left operand */
90028 u16 type2; /* Numeric type of right operand */
90029 i64 iA; /* Integer value of left operand */
90030 i64 iB; /* Integer value of right operand */
90031 double rA; /* Real value of left operand */
90032 double rB; /* Real value of right operand */
90033
90034 pIn1 = &aMem[pOp->p1];
90035 type1 = numericType(pIn1);
90036 pIn2 = &aMem[pOp->p2];
90037 type2 = numericType(pIn2);
90038 pOut = &aMem[pOp->p3];
90039 flags = pIn1->flags | pIn2->flags;
90040 if( (type1 & type2 & MEM_Int)!=0 ){
 
90041 iA = pIn1->u.i;
90042 iB = pIn2->u.i;
90043 switch( pOp->opcode ){
90044 case OP_Add: if( sqlite3AddInt64(&iB,iA) ) goto fp_math; break;
90045 case OP_Subtract: if( sqlite3SubInt64(&iB,iA) ) goto fp_math; break;
@@ -90057,13 +90271,16 @@
90057 break;
90058 }
90059 }
90060 pOut->u.i = iB;
90061 MemSetTypeFlag(pOut, MEM_Int);
90062 }else if( (flags & MEM_Null)!=0 ){
90063 goto arithmetic_result_is_null;
90064 }else{
 
 
 
90065 fp_math:
90066 rA = sqlite3VdbeRealValue(pIn1);
90067 rB = sqlite3VdbeRealValue(pIn2);
90068 switch( pOp->opcode ){
90069 case OP_Add: rB += rA; break;
@@ -90929,15 +91146,18 @@
90929 **
90930 ** Check the cursor P1 to see if it is currently pointing at a NULL row.
90931 ** If it is, then set register P3 to NULL and jump immediately to P2.
90932 ** If P1 is not on a NULL row, then fall through without making any
90933 ** changes.
 
 
90934 */
90935 case OP_IfNullRow: { /* jump */
 
90936 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
90937 assert( p->apCsr[pOp->p1]!=0 );
90938 if( p->apCsr[pOp->p1]->nullRow ){
90939 sqlite3VdbeMemSetNull(aMem + pOp->p3);
90940 goto jump_to_p2;
90941 }
90942 break;
90943 }
@@ -92249,11 +92469,11 @@
92249 assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
92250 /* See note about index shifting on OP_ReadCookie */
92251 rc = sqlite3BtreeUpdateMeta(pDb->pBt, pOp->p2, pOp->p3);
92252 if( pOp->p2==BTREE_SCHEMA_VERSION ){
92253 /* When the schema cookie changes, record the new cookie internally */
92254 pDb->pSchema->schema_cookie = pOp->p3 - pOp->p5;
92255 db->mDbFlags |= DBFLAG_SchemaChange;
92256 sqlite3FkClearTriggerCache(db, pOp->p1);
92257 }else if( pOp->p2==BTREE_FILE_FORMAT ){
92258 /* Record changes in the file format */
92259 pDb->pSchema->file_format = pOp->p3;
@@ -93040,11 +93260,11 @@
93040 **
93041 ** <li> If the cursor is successfully moved to the target row by 0 or more
93042 ** sqlite3BtreeNext() calls, then jump to This.P2, which will land just
93043 ** past the OP_IdxGT or OP_IdxGE opcode that follows the OP_SeekGE.
93044 **
93045 ** <li> If the cursor ends up past the target row (indicating the the target
93046 ** row does not exist in the btree) then jump to SeekOP.P2.
93047 ** </ol>
93048 */
93049 case OP_SeekScan: {
93050 VdbeCursor *pC;
@@ -94376,11 +94596,13 @@
94376 rc = sqlite3VdbeSorterNext(db, pC);
94377 goto next_tail;
94378
94379 case OP_Prev: /* jump */
94380 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
94381 assert( pOp->p5<ArraySize(p->aCounter) );
 
 
94382 pC = p->apCsr[pOp->p1];
94383 assert( pC!=0 );
94384 assert( pC->deferredMoveto==0 );
94385 assert( pC->eCurType==CURTYPE_BTREE );
94386 assert( pC->seekOp==OP_SeekLT || pC->seekOp==OP_SeekLE
@@ -94389,11 +94611,13 @@
94389 rc = sqlite3BtreePrevious(pC->uc.pCursor, pOp->p3);
94390 goto next_tail;
94391
94392 case OP_Next: /* jump */
94393 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
94394 assert( pOp->p5<ArraySize(p->aCounter) );
 
 
94395 pC = p->apCsr[pOp->p1];
94396 assert( pC!=0 );
94397 assert( pC->deferredMoveto==0 );
94398 assert( pC->eCurType==CURTYPE_BTREE );
94399 assert( pC->seekOp==OP_SeekGT || pC->seekOp==OP_SeekGE
@@ -94596,14 +94820,14 @@
94596
94597 /* The IdxRowid and Seek opcodes are combined because of the commonality
94598 ** of sqlite3VdbeCursorRestore() and sqlite3VdbeIdxRowid(). */
94599 rc = sqlite3VdbeCursorRestore(pC);
94600
94601 /* sqlite3VbeCursorRestore() can only fail if the record has been deleted
94602 ** out from under the cursor. That will never happens for an IdxRowid
94603 ** or Seek opcode */
94604 if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error;
94605
94606 if( !pC->nullRow ){
94607 rowid = 0; /* Not needed. Only used to silence a warning. */
94608 rc = sqlite3VdbeIdxRowid(db, pC->uc.pCursor, &rowid);
94609 if( rc!=SQLITE_OK ){
@@ -95501,11 +95725,11 @@
95501
95502 /* Opcode: OffsetLimit P1 P2 P3 * *
95503 ** Synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)
95504 **
95505 ** This opcode performs a commonly used computation associated with
95506 ** LIMIT and OFFSET process. r[P1] holds the limit counter. r[P3]
95507 ** holds the offset counter. The opcode computes the combined value
95508 ** of the LIMIT and OFFSET and stores that value in r[P2]. The r[P2]
95509 ** value computed is the total number of rows that will need to be
95510 ** visited in order to complete the query.
95511 **
@@ -101098,10 +101322,12 @@
101098 sqlite3_file *pJfd, /* Preallocated, blank file handle */
101099 int flags, /* Opening flags */
101100 int nSpill /* Bytes buffered before opening the file */
101101 ){
101102 MemJournal *p = (MemJournal*)pJfd;
 
 
101103
101104 /* Zero the file-handle object. If nSpill was passed zero, initialize
101105 ** it using the sqlite3OsOpen() function of the underlying VFS. In this
101106 ** case none of the code in this module is executed as a result of calls
101107 ** made on the journal file-handle. */
@@ -101526,37 +101752,25 @@
101526 pDup = sqlite3ExprDup(db, pOrig, 0);
101527 if( db->mallocFailed ){
101528 sqlite3ExprDelete(db, pDup);
101529 pDup = 0;
101530 }else{
 
101531 incrAggFunctionDepth(pDup, nSubquery);
101532 if( pExpr->op==TK_COLLATE ){
101533 assert( !ExprHasProperty(pExpr, EP_IntValue) );
101534 pDup = sqlite3ExprAddCollateString(pParse, pDup, pExpr->u.zToken);
101535 }
101536
101537 /* Before calling sqlite3ExprDelete(), set the EP_Static flag. This
101538 ** prevents ExprDelete() from deleting the Expr structure itself,
101539 ** allowing it to be repopulated by the memcpy() on the following line.
101540 ** The pExpr->u.zToken might point into memory that will be freed by the
101541 ** sqlite3DbFree(db, pDup) on the last line of this block, so be sure to
101542 ** make a copy of the token before doing the sqlite3DbFree().
101543 */
101544 ExprSetProperty(pExpr, EP_Static);
101545 sqlite3ExprDelete(db, pExpr);
101546 memcpy(pExpr, pDup, sizeof(*pExpr));
101547 if( !ExprHasProperty(pExpr, EP_IntValue) && pExpr->u.zToken!=0 ){
101548 assert( (pExpr->flags & (EP_Reduced|EP_TokenOnly))==0 );
101549 pExpr->u.zToken = sqlite3DbStrDup(db, pExpr->u.zToken);
101550 pExpr->flags |= EP_MemToken;
101551 }
101552 if( ExprHasProperty(pExpr, EP_WinFunc) ){
101553 if( ALWAYS(pExpr->y.pWin!=0) ){
101554 pExpr->y.pWin->pOwner = pExpr;
101555 }
101556 }
101557 sqlite3DbFree(db, pDup);
101558 }
101559 }
101560
101561 /*
101562 ** Subqueries stores the original database, table and column names for their
@@ -101755,11 +101969,11 @@
101755 for(i=0, pItem=pSrcList->a; i<pSrcList->nSrc; i++, pItem++){
101756 u8 hCol;
101757 pTab = pItem->pTab;
101758 assert( pTab!=0 && pTab->zName!=0 );
101759 assert( pTab->nCol>0 || pParse->nErr );
101760 assert( pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
101761 if( pItem->fg.isNestedFrom ){
101762 /* In this case, pItem is a subquery that has been formed from a
101763 ** parenthesized subset of the FROM clause terms. Example:
101764 ** .... FROM t1 LEFT JOIN (t2 RIGHT JOIN t3 USING(x)) USING(y) ...
101765 ** \_________________________/
@@ -103265,12 +103479,12 @@
103265 */
103266 assert( (sNC.ncFlags & (NC_UAggInfo|NC_UUpsert|NC_UBaseReg))==0 );
103267 sNC.uNC.pEList = p->pEList;
103268 sNC.ncFlags |= NC_UEList;
103269 if( p->pHaving ){
103270 if( !pGroupBy ){
103271 sqlite3ErrorMsg(pParse, "a GROUP BY clause is required before HAVING");
103272 return WRC_Abort;
103273 }
103274 if( sqlite3ResolveExprNames(&sNC, p->pHaving) ) return WRC_Abort;
103275 }
103276 if( sqlite3ResolveExprNames(&sNC, p->pWhere) ) return WRC_Abort;
@@ -104361,11 +104575,13 @@
104361 ** Also propagate EP_Propagate flags up from Expr.x.pList to Expr.flags,
104362 ** if appropriate.
104363 */
104364 static void exprSetHeight(Expr *p){
104365 int nHeight = p->pLeft ? p->pLeft->nHeight : 0;
104366 if( p->pRight && p->pRight->nHeight>nHeight ) nHeight = p->pRight->nHeight;
 
 
104367 if( ExprUseXSelect(p) ){
104368 heightOfSelect(p->x.pSelect, &nHeight);
104369 }else if( p->x.pList ){
104370 heightOfExprList(p->x.pList, &nHeight);
104371 p->flags |= EP_Propagate & sqlite3ExprListFlags(p->x.pList);
@@ -104504,19 +104720,30 @@
104504 if( pRoot==0 ){
104505 assert( db->mallocFailed );
104506 sqlite3ExprDelete(db, pLeft);
104507 sqlite3ExprDelete(db, pRight);
104508 }else{
 
 
104509 if( pRight ){
104510 pRoot->pRight = pRight;
104511 pRoot->flags |= EP_Propagate & pRight->flags;
 
 
 
 
 
104512 }
104513 if( pLeft ){
104514 pRoot->pLeft = pLeft;
104515 pRoot->flags |= EP_Propagate & pLeft->flags;
 
 
 
 
 
104516 }
104517 exprSetHeight(pRoot);
104518 }
104519 }
104520
104521 /*
104522 ** Allocate an Expr node which joins as many as two subtrees.
@@ -104798,10 +105025,11 @@
104798 /*
104799 ** Recursively delete an expression tree.
104800 */
104801 static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){
104802 assert( p!=0 );
 
104803 assert( !ExprUseUValue(p) || p->u.iValue>=0 );
104804 assert( !ExprUseYWin(p) || !ExprUseYSub(p) );
104805 assert( !ExprUseYWin(p) || p->y.pWin!=0 || db->mallocFailed );
104806 assert( p->op!=TK_FUNCTION || !ExprUseYSub(p) );
104807 #ifdef SQLITE_DEBUG
@@ -104829,16 +105057,12 @@
104829 sqlite3WindowDelete(db, p->y.pWin);
104830 }
104831 #endif
104832 }
104833 }
104834 if( ExprHasProperty(p, EP_MemToken) ){
104835 assert( !ExprHasProperty(p, EP_IntValue) );
104836 sqlite3DbFree(db, p->u.zToken);
104837 }
104838 if( !ExprHasProperty(p, EP_Static) ){
104839 sqlite3DbFreeNN(db, p);
104840 }
104841 }
104842 SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){
104843 if( p ) sqlite3ExprDeleteNN(db, p);
104844 }
@@ -104865,12 +105089,13 @@
104865 **
104866 ** The deferred delete is (currently) implemented by adding the
104867 ** pExpr to the pParse->pConstExpr list with a register number of 0.
104868 */
104869 SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){
104870 pParse->pConstExpr =
104871 sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr);
 
104872 }
104873
104874 /* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the
104875 ** expression.
104876 */
@@ -104940,11 +105165,10 @@
104940 ){
104941 nSize = EXPR_FULLSIZE;
104942 }else{
104943 assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) );
104944 assert( !ExprHasProperty(p, EP_OuterON) );
104945 assert( !ExprHasProperty(p, EP_MemToken) );
104946 assert( !ExprHasVVAProperty(p, EP_NoReduce) );
104947 if( p->pLeft || p->x.pList ){
104948 nSize = EXPR_REDUCEDSIZE | EP_Reduced;
104949 }else{
104950 assert( p->pRight==0 );
@@ -105044,11 +105268,11 @@
105044 memset(&zAlloc[nSize], 0, EXPR_FULLSIZE-nSize);
105045 }
105046 }
105047
105048 /* Set the EP_Reduced, EP_TokenOnly, and EP_Static flags appropriately. */
105049 pNew->flags &= ~(EP_Reduced|EP_TokenOnly|EP_Static|EP_MemToken);
105050 pNew->flags |= nStructSize & (EP_Reduced|EP_TokenOnly);
105051 pNew->flags |= staticFlag;
105052 ExprClearVVAProperties(pNew);
105053 if( dupFlags ){
105054 ExprSetVVAProperty(pNew, EP_Immutable);
@@ -105620,16 +105844,17 @@
105620 */
105621 static SQLITE_NOINLINE void exprListDeleteNN(sqlite3 *db, ExprList *pList){
105622 int i = pList->nExpr;
105623 struct ExprList_item *pItem = pList->a;
105624 assert( pList->nExpr>0 );
 
105625 do{
105626 sqlite3ExprDelete(db, pItem->pExpr);
105627 sqlite3DbFree(db, pItem->zEName);
105628 pItem++;
105629 }while( --i>0 );
105630 sqlite3DbFreeNN(db, pList);
105631 }
105632 SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){
105633 if( pList ) exprListDeleteNN(db, pList);
105634 }
105635
@@ -106916,11 +107141,11 @@
106916 if( pLimit ){
106917 pLimit->affExpr = SQLITE_AFF_NUMERIC;
106918 pLimit = sqlite3PExpr(pParse, TK_NE,
106919 sqlite3ExprDup(db, pSel->pLimit->pLeft, 0), pLimit);
106920 }
106921 sqlite3ExprDelete(db, pSel->pLimit->pLeft);
106922 pSel->pLimit->pLeft = pLimit;
106923 }else{
106924 /* If there is no pre-existing limit add a limit of 1 */
106925 pLimit = sqlite3Expr(pParse->db, TK_INTEGER, "1");
106926 pSel->pLimit = sqlite3PExpr(pParse, TK_LIMIT, pLimit, 0);
@@ -107430,11 +107655,11 @@
107430 u8 p5 /* P5 value for OP_Column + FLAGS */
107431 ){
107432 assert( pParse->pVdbe!=0 );
107433 sqlite3ExprCodeGetColumnOfTable(pParse->pVdbe, pTab, iTable, iColumn, iReg);
107434 if( p5 ){
107435 VdbeOp *pOp = sqlite3VdbeGetOp(pParse->pVdbe,-1);
107436 if( pOp->opcode==OP_Column ) pOp->p5 = p5;
107437 }
107438 return iReg;
107439 }
107440
@@ -107499,11 +107724,11 @@
107499 /*
107500 ** If the last opcode is a OP_Copy, then set the do-not-merge flag (p5)
107501 ** so that a subsequent copy will not be merged into this one.
107502 */
107503 static void setDoNotMergeFlagOnCopy(Vdbe *v){
107504 if( sqlite3VdbeGetOp(v, -1)->opcode==OP_Copy ){
107505 sqlite3VdbeChangeP5(v, 1); /* Tag trailing OP_Copy as not mergable */
107506 }
107507 }
107508
107509 /*
@@ -107670,11 +107895,11 @@
107670 Table *pTab = pCol->pTab;
107671 sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab,
107672 pCol->iSorterColumn, target);
107673 if( pCol->iColumn<0 ){
107674 VdbeComment((v,"%s.rowid",pTab->zName));
107675 }else{
107676 VdbeComment((v,"%s.%s",
107677 pTab->zName, pTab->aCol[pCol->iColumn].zCnName));
107678 if( pTab->aCol[pCol->iColumn].affinity==SQLITE_AFF_REAL ){
107679 sqlite3VdbeAddOp1(v, OP_RealAffinity, target);
107680 }
@@ -108265,10 +108490,25 @@
108265 ** on a LEFT JOIN NULL row.
108266 */
108267 case TK_IF_NULL_ROW: {
108268 int addrINR;
108269 u8 okConstFactor = pParse->okConstFactor;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108270 addrINR = sqlite3VdbeAddOp1(v, OP_IfNullRow, pExpr->iTable);
108271 /* Temporarily disable factoring of constant expressions, since
108272 ** even though expressions may appear to be constant, they are not
108273 ** really constant because they originate from the right-hand side
108274 ** of a LEFT JOIN. */
@@ -108606,11 +108846,11 @@
108606 }else{
108607 int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i);
108608 if( inReg!=target+i ){
108609 VdbeOp *pOp;
108610 if( copyOp==OP_Copy
108611 && (pOp=sqlite3VdbeGetOp(v, -1))->opcode==OP_Copy
108612 && pOp->p1+pOp->p3+1==inReg
108613 && pOp->p2+pOp->p3+1==target+i
108614 && pOp->p5==0 /* The do-not-merge flag must be clear */
108615 ){
108616 pOp->p3++;
@@ -109642,10 +109882,11 @@
109642 ** fact is exploited for efficiency.
109643 */
109644 SQLITE_PRIVATE int sqlite3ReferencesSrcList(Parse *pParse, Expr *pExpr, SrcList *pSrcList){
109645 Walker w;
109646 struct RefSrcList x;
 
109647 memset(&w, 0, sizeof(w));
109648 memset(&x, 0, sizeof(x));
109649 w.xExprCallback = exprRefToSrcList;
109650 w.xSelectCallback = selectRefEnter;
109651 w.xSelectCallback2 = selectRefLeave;
@@ -109658,11 +109899,11 @@
109658 #ifndef SQLITE_OMIT_WINDOWFUNC
109659 if( ExprHasProperty(pExpr, EP_WinFunc) ){
109660 sqlite3WalkExpr(&w, pExpr->y.pWin->pFilter);
109661 }
109662 #endif
109663 sqlite3DbFree(pParse->db, x.aiExclude);
109664 if( w.eCode & 0x01 ){
109665 return 1;
109666 }else if( w.eCode ){
109667 return 0;
109668 }else{
@@ -109689,21 +109930,22 @@
109689 ){
109690 AggInfo *pAggInfo = pExpr->pAggInfo;
109691 int iAgg = pExpr->iAgg;
109692 Parse *pParse = pWalker->pParse;
109693 sqlite3 *db = pParse->db;
109694 assert( pExpr->op==TK_AGG_COLUMN || pExpr->op==TK_AGG_FUNCTION );
109695 if( pExpr->op==TK_AGG_COLUMN ){
109696 assert( iAgg>=0 && iAgg<pAggInfo->nColumn );
109697 if( pAggInfo->aCol[iAgg].pCExpr==pExpr ){
109698 pExpr = sqlite3ExprDup(db, pExpr, 0);
109699 if( pExpr ){
109700 pAggInfo->aCol[iAgg].pCExpr = pExpr;
109701 sqlite3ExprDeferredDelete(pParse, pExpr);
109702 }
109703 }
109704 }else{
 
109705 assert( iAgg>=0 && iAgg<pAggInfo->nFunc );
109706 if( pAggInfo->aFunc[iAgg].pFExpr==pExpr ){
109707 pExpr = sqlite3ExprDup(db, pExpr, 0);
109708 if( pExpr ){
109709 pAggInfo->aFunc[iAgg].pFExpr = pExpr;
@@ -109770,14 +110012,16 @@
109770 SrcList *pSrcList = pNC->pSrcList;
109771 AggInfo *pAggInfo = pNC->uNC.pAggInfo;
109772
109773 assert( pNC->ncFlags & NC_UAggInfo );
109774 switch( pExpr->op ){
 
109775 case TK_AGG_COLUMN:
109776 case TK_COLUMN: {
109777 testcase( pExpr->op==TK_AGG_COLUMN );
109778 testcase( pExpr->op==TK_COLUMN );
 
109779 /* Check to see if the column is in one of the tables in the FROM
109780 ** clause of the aggregate query */
109781 if( ALWAYS(pSrcList!=0) ){
109782 SrcItem *pItem = pSrcList->a;
109783 for(i=0; i<pSrcList->nSrc; i++, pItem++){
@@ -109791,12 +110035,14 @@
109791 ** is not an entry there already.
109792 */
109793 int k;
109794 pCol = pAggInfo->aCol;
109795 for(k=0; k<pAggInfo->nColumn; k++, pCol++){
109796 if( pCol->iTable==pExpr->iTable &&
109797 pCol->iColumn==pExpr->iColumn ){
 
 
109798 break;
109799 }
109800 }
109801 if( (k>=pAggInfo->nColumn)
109802 && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0
@@ -109807,19 +110053,21 @@
109807 pCol->iTable = pExpr->iTable;
109808 pCol->iColumn = pExpr->iColumn;
109809 pCol->iMem = ++pParse->nMem;
109810 pCol->iSorterColumn = -1;
109811 pCol->pCExpr = pExpr;
109812 if( pAggInfo->pGroupBy ){
109813 int j, n;
109814 ExprList *pGB = pAggInfo->pGroupBy;
109815 struct ExprList_item *pTerm = pGB->a;
109816 n = pGB->nExpr;
109817 for(j=0; j<n; j++, pTerm++){
109818 Expr *pE = pTerm->pExpr;
109819 if( pE->op==TK_COLUMN && pE->iTable==pExpr->iTable &&
109820 pE->iColumn==pExpr->iColumn ){
 
 
109821 pCol->iSorterColumn = j;
109822 break;
109823 }
109824 }
109825 }
@@ -109832,11 +110080,13 @@
109832 ** Convert the pExpr to be a TK_AGG_COLUMN referring to that
109833 ** pAggInfo->aCol[] entry.
109834 */
109835 ExprSetVVAProperty(pExpr, EP_NoReduce);
109836 pExpr->pAggInfo = pAggInfo;
109837 pExpr->op = TK_AGG_COLUMN;
 
 
109838 pExpr->iAgg = (i16)k;
109839 break;
109840 } /* endif pExpr->iTable==pItem->iCursor */
109841 } /* end loop over pSrcList */
109842 }
@@ -115254,10 +115504,11 @@
115254 ** no VDBE code was generated.
115255 */
115256 SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){
115257 sqlite3 *db;
115258 Vdbe *v;
 
115259
115260 assert( pParse->pToplevel==0 );
115261 db = pParse->db;
115262 assert( db->pParse==pParse );
115263 if( pParse->nested ) return;
@@ -115283,11 +115534,10 @@
115283 || sqlite3VdbeAssertMayAbort(v, pParse->mayAbort));
115284 if( v ){
115285 if( pParse->bReturning ){
115286 Returning *pReturning = pParse->u1.pReturning;
115287 int addrRewind;
115288 int i;
115289 int reg;
115290
115291 if( pReturning->nRetCol ){
115292 sqlite3VdbeAddOp0(v, OP_FkCheck);
115293 addrRewind =
@@ -115320,80 +115570,73 @@
115320 ** (Bit 0 is for main, bit 1 is for temp, and so forth.) Bits are
115321 ** set for each database that is used. Generate code to start a
115322 ** transaction on each used database and to verify the schema cookie
115323 ** on each used database.
115324 */
115325 if( db->mallocFailed==0
115326 && (DbMaskNonZero(pParse->cookieMask) || pParse->pConstExpr)
115327 ){
115328 int iDb, i;
115329 assert( sqlite3VdbeGetOp(v, 0)->opcode==OP_Init );
115330 sqlite3VdbeJumpHere(v, 0);
115331 assert( db->nDb>0 );
115332 iDb = 0;
115333 do{
115334 Schema *pSchema;
115335 if( DbMaskTest(pParse->cookieMask, iDb)==0 ) continue;
115336 sqlite3VdbeUsesBtree(v, iDb);
115337 pSchema = db->aDb[iDb].pSchema;
115338 sqlite3VdbeAddOp4Int(v,
115339 OP_Transaction, /* Opcode */
115340 iDb, /* P1 */
115341 DbMaskTest(pParse->writeMask,iDb), /* P2 */
115342 pSchema->schema_cookie, /* P3 */
115343 pSchema->iGeneration /* P4 */
115344 );
115345 if( db->init.busy==0 ) sqlite3VdbeChangeP5(v, 1);
115346 VdbeComment((v,
115347 "usesStmtJournal=%d", pParse->mayAbort && pParse->isMultiWrite));
115348 }while( ++iDb<db->nDb );
115349 #ifndef SQLITE_OMIT_VIRTUALTABLE
115350 for(i=0; i<pParse->nVtabLock; i++){
115351 char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]);
115352 sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB);
115353 }
115354 pParse->nVtabLock = 0;
115355 #endif
115356
115357 /* Once all the cookies have been verified and transactions opened,
115358 ** obtain the required table-locks. This is a no-op unless the
115359 ** shared-cache feature is enabled.
115360 */
115361 codeTableLocks(pParse);
115362
115363 /* Initialize any AUTOINCREMENT data structures required.
115364 */
115365 sqlite3AutoincrementBegin(pParse);
115366
115367 /* Code constant expressions that where factored out of inner loops.
115368 **
115369 ** The pConstExpr list might also contain expressions that we simply
115370 ** want to keep around until the Parse object is deleted. Such
115371 ** expressions have iConstExprReg==0. Do not generate code for
115372 ** those expressions, of course.
115373 */
115374 if( pParse->pConstExpr ){
115375 ExprList *pEL = pParse->pConstExpr;
115376 pParse->okConstFactor = 0;
115377 for(i=0; i<pEL->nExpr; i++){
115378 int iReg = pEL->a[i].u.iConstExprReg;
115379 if( iReg>0 ){
115380 sqlite3ExprCode(pParse, pEL->a[i].pExpr, iReg);
115381 }
115382 }
115383 }
115384
115385 if( pParse->bReturning ){
115386 Returning *pRet = pParse->u1.pReturning;
115387 if( pRet->nRetCol ){
115388 sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pRet->iRetCur, pRet->nRetCol);
115389 }
115390 }
115391
115392 /* Finally, jump back to the beginning of the executable code. */
115393 sqlite3VdbeGoto(v, 1);
115394 }
115395 }
115396
115397 /* Get the VDBE program ready for execution
115398 */
115399 assert( v!=0 || pParse->nErr );
@@ -115445,12 +115688,10 @@
115445 pParse->nested++;
115446 memcpy(saveBuf, PARSE_TAIL(pParse), PARSE_TAIL_SZ);
115447 memset(PARSE_TAIL(pParse), 0, PARSE_TAIL_SZ);
115448 db->mDbFlags |= DBFLAG_PreferBuiltin;
115449 sqlite3RunParser(pParse, zSql);
115450 sqlite3DbFree(db, pParse->zErrMsg);
115451 pParse->zErrMsg = 0;
115452 db->mDbFlags = savedDbFlags;
115453 sqlite3DbFree(db, zSql);
115454 memcpy(PARSE_TAIL(pParse), saveBuf, PARSE_TAIL_SZ);
115455 pParse->nested--;
115456 }
@@ -115898,20 +116139,21 @@
115898 */
115899 SQLITE_PRIVATE void sqlite3DeleteColumnNames(sqlite3 *db, Table *pTable){
115900 int i;
115901 Column *pCol;
115902 assert( pTable!=0 );
 
115903 if( (pCol = pTable->aCol)!=0 ){
115904 for(i=0; i<pTable->nCol; i++, pCol++){
115905 assert( pCol->zCnName==0 || pCol->hName==sqlite3StrIHash(pCol->zCnName) );
115906 sqlite3DbFree(db, pCol->zCnName);
115907 }
115908 sqlite3DbFree(db, pTable->aCol);
115909 if( IsOrdinaryTable(pTable) ){
115910 sqlite3ExprListDelete(db, pTable->u.tab.pDfltList);
115911 }
115912 if( db==0 || db->pnBytesFreed==0 ){
115913 pTable->aCol = 0;
115914 pTable->nCol = 0;
115915 if( IsOrdinaryTable(pTable) ){
115916 pTable->u.tab.pDfltList = 0;
115917 }
@@ -115944,21 +116186,22 @@
115944 **
115945 ** If malloc has already failed, it may be that it failed while allocating
115946 ** a Table object that was going to be marked ephemeral. So do not check
115947 ** that no lookaside memory is used in this case either. */
115948 int nLookaside = 0;
115949 if( db && !db->mallocFailed && (pTable->tabFlags & TF_Ephemeral)==0 ){
 
115950 nLookaside = sqlite3LookasideUsed(db, 0);
115951 }
115952 #endif
115953
115954 /* Delete all indices associated with this table. */
115955 for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){
115956 pNext = pIndex->pNext;
115957 assert( pIndex->pSchema==pTable->pSchema
115958 || (IsVirtual(pTable) && pIndex->idxType!=SQLITE_IDXTYPE_APPDEF) );
115959 if( (db==0 || db->pnBytesFreed==0) && !IsVirtual(pTable) ){
115960 char *zName = pIndex->zName;
115961 TESTONLY ( Index *pOld = ) sqlite3HashInsert(
115962 &pIndex->pSchema->idxHash, zName, 0
115963 );
115964 assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
@@ -115991,12 +116234,13 @@
115991 /* Verify that no lookaside memory was used by schema tables */
115992 assert( nLookaside==0 || nLookaside==sqlite3LookasideUsed(db,0) );
115993 }
115994 SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){
115995 /* Do not delete the table until the reference count reaches zero. */
 
115996 if( !pTable ) return;
115997 if( ((!db || db->pnBytesFreed==0) && (--pTable->nTabRef)>0) ) return;
115998 deleteTable(db, pTable);
115999 }
116000
116001
116002 /*
@@ -118165,11 +118409,11 @@
118165 /*
118166 ** The Table structure pTable is really a VIEW. Fill in the names of
118167 ** the columns of the view in the pTable structure. Return the number
118168 ** of errors. If an error is seen leave an error message in pParse->zErrMsg.
118169 */
118170 SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
118171 Table *pSelTab; /* A fake table from which we get the result set */
118172 Select *pSel; /* Copy of the SELECT that implements the view */
118173 int nErr = 0; /* Number of errors encountered */
118174 sqlite3 *db = pParse->db; /* Database connection for malloc errors */
118175 #ifndef SQLITE_OMIT_VIRTUALTABLE
@@ -118190,13 +118434,14 @@
118190 }
118191 #endif
118192
118193 #ifndef SQLITE_OMIT_VIEW
118194 /* A positive nCol means the columns names for this view are
118195 ** already known.
 
118196 */
118197 if( pTable->nCol>0 ) return 0;
118198
118199 /* A negative nCol is a special marker meaning that we are currently
118200 ** trying to compute the column names. If we enter this routine with
118201 ** a negative nCol, it means two or more views form a loop, like this:
118202 **
@@ -118287,10 +118532,15 @@
118287 if( db->mallocFailed ){
118288 sqlite3DeleteColumnNames(db, pTable);
118289 }
118290 #endif /* SQLITE_OMIT_VIEW */
118291 return nErr;
 
 
 
 
 
118292 }
118293 #endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */
118294
118295 #ifndef SQLITE_OMIT_VIEW
118296 /*
@@ -119153,11 +119403,11 @@
119153 if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName,"index",pTab->zName) ){
119154 goto exit_create_index;
119155 }
119156 if( !IN_RENAME_OBJECT ){
119157 if( !db->init.busy ){
119158 if( sqlite3FindTable(db, zName, 0)!=0 ){
119159 sqlite3ErrorMsg(pParse, "there is already a table named %s", zName);
119160 goto exit_create_index;
119161 }
119162 }
119163 if( sqlite3FindIndex(db, zName, pDb->zDbSName)!=0 ){
@@ -119806,16 +120056,17 @@
119806 /*
119807 ** Delete an IdList.
119808 */
119809 SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){
119810 int i;
 
119811 if( pList==0 ) return;
119812 assert( pList->eU4!=EU4_EXPR ); /* EU4_EXPR mode is not currently used */
119813 for(i=0; i<pList->nId; i++){
119814 sqlite3DbFree(db, pList->a[i].zName);
119815 }
119816 sqlite3DbFreeNN(db, pList);
119817 }
119818
119819 /*
119820 ** Return the index in pList of the identifier named zId. Return -1
119821 ** if not found.
@@ -120014,15 +120265,16 @@
120014 ** Delete an entire SrcList including all its substructure.
120015 */
120016 SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){
120017 int i;
120018 SrcItem *pItem;
 
120019 if( pList==0 ) return;
120020 for(pItem=pList->a, i=0; i<pList->nSrc; i++, pItem++){
120021 if( pItem->zDatabase ) sqlite3DbFreeNN(db, pItem->zDatabase);
120022 sqlite3DbFree(db, pItem->zName);
120023 if( pItem->zAlias ) sqlite3DbFreeNN(db, pItem->zAlias);
120024 if( pItem->fg.isIndexedBy ) sqlite3DbFree(db, pItem->u1.zIndexedBy);
120025 if( pItem->fg.isTabFunc ) sqlite3ExprListDelete(db, pItem->u1.pFuncArg);
120026 sqlite3DeleteTable(db, pItem->pTab);
120027 if( pItem->pSelect ) sqlite3SelectDelete(db, pItem->pSelect);
120028 if( pItem->fg.isUsing ){
@@ -120029,11 +120281,11 @@
120029 sqlite3IdListDelete(db, pItem->u3.pUsing);
120030 }else if( pItem->u3.pOn ){
120031 sqlite3ExprDelete(db, pItem->u3.pOn);
120032 }
120033 }
120034 sqlite3DbFreeNN(db, pList);
120035 }
120036
120037 /*
120038 ** This routine is called by the parser to add a new term to the
120039 ** end of a growing FROM clause. The "p" parameter is the part of
@@ -121281,23 +121533,25 @@
121281 SQLITE_PRIVATE void sqlite3SchemaClear(void *p){
121282 Hash temp1;
121283 Hash temp2;
121284 HashElem *pElem;
121285 Schema *pSchema = (Schema *)p;
 
121286
 
121287 temp1 = pSchema->tblHash;
121288 temp2 = pSchema->trigHash;
121289 sqlite3HashInit(&pSchema->trigHash);
121290 sqlite3HashClear(&pSchema->idxHash);
121291 for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){
121292 sqlite3DeleteTrigger(0, (Trigger*)sqliteHashData(pElem));
121293 }
121294 sqlite3HashClear(&temp2);
121295 sqlite3HashInit(&pSchema->tblHash);
121296 for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){
121297 Table *pTab = sqliteHashData(pElem);
121298 sqlite3DeleteTable(0, pTab);
121299 }
121300 sqlite3HashClear(&temp1);
121301 sqlite3HashClear(&pSchema->fkeyHash);
121302 pSchema->pSeqTab = 0;
121303 if( pSchema->schemaFlags & DB_SchemaLoaded ){
@@ -121392,22 +121646,46 @@
121392 ** A table is read-only if any of the following are true:
121393 **
121394 ** 1) It is a virtual table and no implementation of the xUpdate method
121395 ** has been provided
121396 **
121397 ** 2) It is a system table (i.e. sqlite_schema), this call is not
 
 
 
 
121398 ** part of a nested parse and writable_schema pragma has not
121399 ** been specified
121400 **
121401 ** 3) The table is a shadow table, the database connection is in
121402 ** defensive mode, and the current sqlite3_prepare()
121403 ** is for a top-level SQL statement.
121404 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121405 static int tabIsReadOnly(Parse *pParse, Table *pTab){
121406 sqlite3 *db;
121407 if( IsVirtual(pTab) ){
121408 return sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0;
121409 }
121410 if( (pTab->tabFlags & (TF_Readonly|TF_Shadow))==0 ) return 0;
121411 db = pParse->db;
121412 if( (pTab->tabFlags & TF_Readonly)!=0 ){
121413 return sqlite3WritableSchema(db)==0 && pParse->nested==0;
@@ -121415,13 +121693,15 @@
121415 assert( pTab->tabFlags & TF_Shadow );
121416 return sqlite3ReadOnlyShadowTables(db);
121417 }
121418
121419 /*
121420 ** Check to make sure the given table is writable. If it is not
121421 ** writable, generate an error message and return 1. If it is
121422 ** writable return 0;
 
 
121423 */
121424 SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){
121425 if( tabIsReadOnly(pParse, pTab) ){
121426 sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName);
121427 return 1;
@@ -121778,13 +122058,14 @@
121778 sqlite3VdbeAddOp4(v, OP_Clear, pTab->tnum, iDb, memCnt ? memCnt : -1,
121779 pTab->zName, P4_STATIC);
121780 }
121781 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
121782 assert( pIdx->pSchema==pTab->pSchema );
121783 sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb);
121784 if( IsPrimaryKeyIndex(pIdx) && !HasRowid(pTab) ){
121785 sqlite3VdbeChangeP3(v, -1, memCnt ? memCnt : -1);
 
 
121786 }
121787 }
121788 }else
121789 #endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */
121790 {
@@ -121980,11 +122261,11 @@
121980 sqlite3ExprDelete(db, pWhere);
121981 #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
121982 sqlite3ExprListDelete(db, pOrderBy);
121983 sqlite3ExprDelete(db, pLimit);
121984 #endif
121985 sqlite3DbFree(db, aToOpen);
121986 return;
121987 }
121988 /* Make sure "isView" and other macros defined above are undefined. Otherwise
121989 ** they may interfere with compilation of other functions in this file
121990 ** (or in another file, if this file becomes part of the amalgamation). */
@@ -126148,15 +126429,16 @@
126148 SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){
126149 FKey *pFKey; /* Iterator variable */
126150 FKey *pNext; /* Copy of pFKey->pNextFrom */
126151
126152 assert( IsOrdinaryTable(pTab) );
 
126153 for(pFKey=pTab->u.tab.pFKey; pFKey; pFKey=pNext){
126154 assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pTab->pSchema) );
126155
126156 /* Remove the FK from the fkeyHash hash table. */
126157 if( !db || db->pnBytesFreed==0 ){
126158 if( pFKey->pPrevTo ){
126159 pFKey->pPrevTo->pNextTo = pFKey->pNextTo;
126160 }else{
126161 void *p = (void *)pFKey->pNextTo;
126162 const char *z = (p ? pFKey->pNextTo->zTo : pFKey->zTo);
@@ -126345,11 +126627,11 @@
126345 /* Move the previous opcode (which should be OP_MakeRecord) forward
126346 ** by one slot and insert a new OP_TypeCheck where the current
126347 ** OP_MakeRecord is found */
126348 VdbeOp *pPrev;
126349 sqlite3VdbeAppendP4(v, pTab, P4_TABLE);
126350 pPrev = sqlite3VdbeGetOp(v, -1);
126351 assert( pPrev!=0 );
126352 assert( pPrev->opcode==OP_MakeRecord || sqlite3VdbeDb(v)->mallocFailed );
126353 pPrev->opcode = OP_TypeCheck;
126354 sqlite3VdbeAddOp3(v, OP_MakeRecord, pPrev->p1, pPrev->p2, pPrev->p3);
126355 }else{
@@ -126383,11 +126665,11 @@
126383 i = sqlite3Strlen30NN(zColAff);
126384 if( i ){
126385 if( iReg ){
126386 sqlite3VdbeAddOp4(v, OP_Affinity, iReg, i, 0, zColAff, i);
126387 }else{
126388 assert( sqlite3VdbeGetOp(v, -1)->opcode==OP_MakeRecord
126389 || sqlite3VdbeDb(v)->mallocFailed );
126390 sqlite3VdbeChangeP4(v, -1, zColAff, i);
126391 }
126392 }
126393 }
@@ -126469,11 +126751,11 @@
126469 /* Before computing generated columns, first go through and make sure
126470 ** that appropriate affinity has been applied to the regular columns
126471 */
126472 sqlite3TableAffinity(pParse->pVdbe, pTab, iRegStore);
126473 if( (pTab->tabFlags & TF_HasStored)!=0 ){
126474 pOp = sqlite3VdbeGetOp(pParse->pVdbe,-1);
126475 if( pOp->opcode==OP_Affinity ){
126476 /* Change the OP_Affinity argument to '@' (NONE) for all stored
126477 ** columns. '@' is the no-op affinity and those columns have not
126478 ** yet been computed. */
126479 int ii, jj;
@@ -127375,11 +127657,16 @@
127375 }else if( pSelect ){
127376 if( regFromSelect!=regData ){
127377 sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+k, iRegStore);
127378 }
127379 }else{
127380 sqlite3ExprCode(pParse, pList->a[k].pExpr, iRegStore);
 
 
 
 
 
127381 }
127382 }
127383
127384
127385 /* Run the BEFORE and INSTEAD OF triggers, if there are any
@@ -127512,11 +127799,13 @@
127512 int isReplace = 0;/* Set to true if constraints may cause a replace */
127513 int bUseSeek; /* True to use OPFLAG_SEEKRESULT */
127514 sqlite3GenerateConstraintChecks(pParse, pTab, aRegIdx, iDataCur, iIdxCur,
127515 regIns, 0, ipkColumn>=0, onError, endOfLoop, &isReplace, 0, pUpsert
127516 );
127517 sqlite3FkCheck(pParse, pTab, 0, regIns, 0, 0);
 
 
127518
127519 /* Set the OPFLAG_USESEEKRESULT flag if either (a) there are no REPLACE
127520 ** constraints or (b) there are no triggers and this table is not a
127521 ** parent table in a foreign key constraint. It is safe to set the
127522 ** flag in the second case as if any REPLACE constraint is hit, an
@@ -127596,11 +127885,11 @@
127596 sqlite3SrcListDelete(db, pTabList);
127597 sqlite3ExprListDelete(db, pList);
127598 sqlite3UpsertDelete(db, pUpsert);
127599 sqlite3SelectDelete(db, pSelect);
127600 sqlite3IdListDelete(db, pColumn);
127601 sqlite3DbFree(db, aRegIdx);
127602 }
127603
127604 /* Make sure "isView" and other macros defined above are undefined. Otherwise
127605 ** they may interfere with compilation of other functions in this file
127606 ** (or in another file, if this file becomes part of the amalgamation). */
@@ -132702,19 +132991,21 @@
132702 ** Setting to a null string reverts to the default temporary directory search.
132703 ** If temporary directory is changed, then invalidateTempStorage.
132704 **
132705 */
132706 case PragTyp_TEMP_STORE_DIRECTORY: {
 
132707 if( !zRight ){
132708 returnSingleText(v, sqlite3_temp_directory);
132709 }else{
132710 #ifndef SQLITE_OMIT_WSD
132711 if( zRight[0] ){
132712 int res;
132713 rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res);
132714 if( rc!=SQLITE_OK || res==0 ){
132715 sqlite3ErrorMsg(pParse, "not a writable directory");
 
132716 goto pragma_out;
132717 }
132718 }
132719 if( SQLITE_TEMP_STORE==0
132720 || (SQLITE_TEMP_STORE==1 && db->temp_store<=1)
@@ -132728,10 +133019,11 @@
132728 }else{
132729 sqlite3_temp_directory = 0;
132730 }
132731 #endif /* SQLITE_OMIT_WSD */
132732 }
 
132733 break;
132734 }
132735
132736 #if SQLITE_OS_WIN
132737 /*
@@ -132746,19 +133038,21 @@
132746 ** process. Database file specified with an absolute path are not impacted
132747 ** by this setting, regardless of its value.
132748 **
132749 */
132750 case PragTyp_DATA_STORE_DIRECTORY: {
 
132751 if( !zRight ){
132752 returnSingleText(v, sqlite3_data_directory);
132753 }else{
132754 #ifndef SQLITE_OMIT_WSD
132755 if( zRight[0] ){
132756 int res;
132757 rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res);
132758 if( rc!=SQLITE_OK || res==0 ){
132759 sqlite3ErrorMsg(pParse, "not a writable directory");
 
132760 goto pragma_out;
132761 }
132762 }
132763 sqlite3_free(sqlite3_data_directory);
132764 if( zRight[0] ){
@@ -132766,10 +133060,11 @@
132766 }else{
132767 sqlite3_data_directory = 0;
132768 }
132769 #endif /* SQLITE_OMIT_WSD */
132770 }
 
132771 break;
132772 }
132773 #endif
132774
132775 #if SQLITE_ENABLE_LOCKING_STYLE
@@ -133479,19 +133774,27 @@
133479 /* Make sure all the indices are constructed correctly.
133480 */
133481 for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
133482 Table *pTab = sqliteHashData(x);
133483 Index *pIdx, *pPk;
133484 Index *pPrior = 0;
133485 int loopTop;
133486 int iDataCur, iIdxCur;
133487 int r1 = -1;
133488 int bStrict;
 
133489
133490 if( !IsOrdinaryTable(pTab) ) continue;
133491 if( pObjTab && pObjTab!=pTab ) continue;
133492 pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab);
 
 
 
 
 
 
 
133493 sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenRead, 0,
133494 1, 0, &iDataCur, &iIdxCur);
133495 /* reg[7] counts the number of entries in the table.
133496 ** reg[8+i] counts the number of entries in the i-th index
133497 */
@@ -133506,10 +133809,28 @@
133506 if( !isQuick ){
133507 /* Sanity check on record header decoding */
133508 sqlite3VdbeAddOp3(v, OP_Column, iDataCur, pTab->nNVCol-1,3);
133509 sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG);
133510 VdbeComment((v, "(right-most column)"));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133511 }
133512 /* Verify that all NOT NULL columns really are NOT NULL. At the
133513 ** same time verify the type of the content of STRICT tables */
133514 bStrict = (pTab->tabFlags & TF_Strict)!=0;
133515 for(j=0; j<pTab->nCol; j++){
@@ -133518,11 +133839,11 @@
133518 int doError, jmp2;
133519 if( j==pTab->iPKey ) continue;
133520 if( pCol->notNull==0 && !bStrict ) continue;
133521 doError = bStrict ? sqlite3VdbeMakeLabel(pParse) : 0;
133522 sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, j, 3);
133523 if( sqlite3VdbeGetOp(v,-1)->opcode==OP_Column ){
133524 sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG);
133525 }
133526 if( pCol->notNull ){
133527 jmp2 = sqlite3VdbeAddOp1(v, OP_NotNull, 3); VdbeCoverage(v);
133528 zErr = sqlite3MPrintf(db, "NULL value in %s.%s", pTab->zName,
@@ -133533,13 +133854,11 @@
133533 }else{
133534 integrityCheckResultRow(v);
133535 }
133536 sqlite3VdbeJumpHere(v, jmp2);
133537 }
133538 if( (pTab->tabFlags & TF_Strict)!=0
133539 && pCol->eCType!=COLTYPE_ANY
133540 ){
133541 jmp2 = sqlite3VdbeAddOp3(v, OP_IsNullOrType, 3, 0,
133542 sqlite3StdTypeMap[pCol->eCType-1]);
133543 VdbeCoverage(v);
133544 zErr = sqlite3MPrintf(db, "non-%s value in %s.%s",
133545 sqlite3StdType[pCol->eCType-1],
@@ -133634,10 +133953,13 @@
133634 sqlite3VdbeLoadString(v, 4, pIdx->zName);
133635 sqlite3VdbeAddOp3(v, OP_Concat, 4, 2, 3);
133636 integrityCheckResultRow(v);
133637 sqlite3VdbeJumpHere(v, addr);
133638 }
 
 
 
133639 }
133640 }
133641 }
133642 {
133643 static const int iLn = VDBE_OFFSET_LINENO(2);
@@ -135032,19 +135354,19 @@
135032 sqlite3 *db = pParse->db;
135033 assert( db!=0 );
135034 assert( db->pParse==pParse );
135035 assert( pParse->nested==0 );
135036 #ifndef SQLITE_OMIT_SHARED_CACHE
135037 sqlite3DbFree(db, pParse->aTableLock);
135038 #endif
135039 while( pParse->pCleanup ){
135040 ParseCleanup *pCleanup = pParse->pCleanup;
135041 pParse->pCleanup = pCleanup->pNext;
135042 pCleanup->xCleanup(db, pCleanup->pPtr);
135043 sqlite3DbFreeNN(db, pCleanup);
135044 }
135045 sqlite3DbFree(db, pParse->aLabel);
135046 if( pParse->pConstExpr ){
135047 sqlite3ExprListDelete(db, pParse->pConstExpr);
135048 }
135049 assert( db->lookaside.bDisable >= pParse->disableLookaside );
135050 db->lookaside.bDisable -= pParse->disableLookaside;
@@ -135599,10 +135921,11 @@
135599 **
135600 ** If bFree==1, call sqlite3DbFree() on the p object.
135601 ** If bFree==0, Leave the first Select object unfreed
135602 */
135603 static void clearSelect(sqlite3 *db, Select *p, int bFree){
 
135604 while( p ){
135605 Select *pPrior = p->pPrior;
135606 sqlite3ExprListDelete(db, p->pEList);
135607 sqlite3SrcListDelete(db, p->pSrc);
135608 sqlite3ExprDelete(db, p->pWhere);
@@ -135618,11 +135941,11 @@
135618 while( p->pWin ){
135619 assert( p->pWin->ppThis==&p->pWin );
135620 sqlite3WindowUnlinkFromSelect(p->pWin);
135621 }
135622 #endif
135623 if( bFree ) sqlite3DbFreeNN(db, p);
135624 p = pPrior;
135625 bFree = 1;
135626 }
135627 }
135628
@@ -135847,11 +136170,11 @@
135847 /*
135848 ** Mark a subquery result column as having been used.
135849 */
135850 SQLITE_PRIVATE void sqlite3SrcItemColumnUsed(SrcItem *pItem, int iCol){
135851 assert( pItem!=0 );
135852 assert( pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
135853 if( pItem->fg.isNestedFrom ){
135854 ExprList *pResults;
135855 assert( pItem->pSelect!=0 );
135856 pResults = pItem->pSelect->pEList;
135857 assert( pResults!=0 );
@@ -135947,28 +136270,29 @@
135947 sqlite3SetJoinExpr(p->pLeft, iTable, joinFlag);
135948 p = p->pRight;
135949 }
135950 }
135951
135952 /* Undo the work of sqlite3SetJoinExpr(). In the expression p, convert every
135953 ** term that is marked with EP_OuterON and w.iJoin==iTable into
135954 ** an ordinary term that omits the EP_OuterON mark.
135955 **
135956 ** This happens when a LEFT JOIN is simplified into an ordinary JOIN.
 
 
135957 **
135958 ** If nullable is true, that means that Expr p might evaluate to NULL even
135959 ** if it is a reference to a NOT NULL column. This can happen, for example,
135960 ** if the table that p references is on the left side of a RIGHT JOIN.
135961 ** If nullable is true, then take care to not remove the EP_CanBeNull bit.
135962 ** See forum thread https://sqlite.org/forum/forumpost/b40696f50145d21c
135963 */
135964 static void unsetJoinExpr(Expr *p, int iTable, int nullable){
135965 while( p ){
135966 if( ExprHasProperty(p, EP_OuterON)
135967 && (iTable<0 || p->w.iJoin==iTable) ){
135968 ExprClearProperty(p, EP_OuterON);
135969 ExprSetProperty(p, EP_InnerON);
135970 }
135971 if( p->op==TK_COLUMN && p->iTable==iTable && !nullable ){
135972 ExprClearProperty(p, EP_CanBeNull);
135973 }
135974 if( p->op==TK_FUNCTION ){
@@ -137023,13 +137347,14 @@
137023 /*
137024 ** Deallocate a KeyInfo object
137025 */
137026 SQLITE_PRIVATE void sqlite3KeyInfoUnref(KeyInfo *p){
137027 if( p ){
 
137028 assert( p->nRef>0 );
137029 p->nRef--;
137030 if( p->nRef==0 ) sqlite3DbFreeNN(p->db, p);
137031 }
137032 }
137033
137034 /*
137035 ** Make a new pointer to a KeyInfo object
@@ -137210,18 +137535,21 @@
137210 sqlite3VdbeAddOp3(v, OP_OpenPseudo, iSortTab, regSortOut,
137211 nKey+1+nColumn+nRefKey);
137212 if( addrOnce ) sqlite3VdbeJumpHere(v, addrOnce);
137213 addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak);
137214 VdbeCoverage(v);
137215 codeOffset(v, p->iOffset, addrContinue);
137216 sqlite3VdbeAddOp3(v, OP_SorterData, iTab, regSortOut, iSortTab);
137217 bSeq = 0;
137218 }else{
137219 addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak); VdbeCoverage(v);
137220 codeOffset(v, p->iOffset, addrContinue);
137221 iSortTab = iTab;
137222 bSeq = 1;
 
 
 
137223 }
137224 for(i=0, iCol=nKey+bSeq-1; i<nColumn; i++){
137225 #ifdef SQLITE_ENABLE_SORTER_REFERENCES
137226 if( aOutEx[i].fg.bSorterRef ) continue;
137227 #endif
@@ -137342,13 +137670,10 @@
137342
137343 /*
137344 ** Return a pointer to a string containing the 'declaration type' of the
137345 ** expression pExpr. The string may be treated as static by the caller.
137346 **
137347 ** Also try to estimate the size of the returned value and return that
137348 ** result in *pEstWidth.
137349 **
137350 ** The declaration type is the exact datatype definition extracted from the
137351 ** original CREATE TABLE statement if the expression is a column. The
137352 ** declaration type for a ROWID field is INTEGER. Exactly when an expression
137353 ** is considered a column can be complex in the presence of subqueries. The
137354 ** result-set expression in all of the following SELECT statements is
@@ -139210,14 +139535,15 @@
139210
139211 /* Jump to the this point in order to terminate the query.
139212 */
139213 sqlite3VdbeResolveLabel(v, labelEnd);
139214
139215 /* Reassembly the compound query so that it will be freed correctly
139216 ** by the calling function */
139217 if( pSplit->pPrior ){
139218 sqlite3SelectDelete(db, pSplit->pPrior);
 
139219 }
139220 pSplit->pPrior = pPrior;
139221 pPrior->pNext = pSplit;
139222 sqlite3ExprListDelete(db, pPrior->pOrderBy);
139223 pPrior->pOrderBy = 0;
@@ -139323,10 +139649,11 @@
139323 if( pSubst->isOuterJoin && pCopy->op!=TK_COLUMN ){
139324 memset(&ifNullRow, 0, sizeof(ifNullRow));
139325 ifNullRow.op = TK_IF_NULL_ROW;
139326 ifNullRow.pLeft = pCopy;
139327 ifNullRow.iTable = pSubst->iNewTable;
 
139328 ifNullRow.flags = EP_IfNullRow;
139329 pCopy = &ifNullRow;
139330 }
139331 testcase( ExprHasProperty(pCopy, EP_Subquery) );
139332 pNew = sqlite3ExprDup(db, pCopy, 0);
@@ -139590,11 +139917,12 @@
139590 **
139591 ** (3) If the subquery is the right operand of a LEFT JOIN then
139592 ** (3a) the subquery may not be a join and
139593 ** (3b) the FROM clause of the subquery may not contain a virtual
139594 ** table and
139595 ** (3c) the outer query may not be an aggregate.
 
139596 ** (3d) the outer query may not be DISTINCT.
139597 ** See also (26) for restrictions on RIGHT JOIN.
139598 **
139599 ** (4) The subquery can not be DISTINCT.
139600 **
@@ -139644,10 +139972,13 @@
139644 ** (17d) the outer query may not be
139645 ** (17d1) aggregate, or
139646 ** (17d2) DISTINCT
139647 ** (17e) the subquery may not contain window functions, and
139648 ** (17f) the subquery must not be the RHS of a LEFT JOIN.
 
 
 
139649 **
139650 ** The parent and sub-query may contain WHERE clauses. Subject to
139651 ** rules (11), (13) and (14), they may also contain ORDER BY,
139652 ** LIMIT and OFFSET clauses. The subquery cannot use any compound
139653 ** operator other than UNION ALL because all the other compound
@@ -139695,11 +140026,15 @@
139695 **
139696 ** (26) The subquery may not be the right operand of a RIGHT JOIN.
139697 ** See also (3) for restrictions on LEFT JOIN.
139698 **
139699 ** (27) The subquery may not contain a FULL or RIGHT JOIN unless it
139700 ** is the first element of the parent query.
 
 
 
 
139701 **
139702 ** (28) The subquery is not a MATERIALIZED CTE.
139703 **
139704 ** (29) Either the subquery is not the right-hand operand of a join with an
139705 ** ON or USING clause nor the right-hand operand of a NATURAL JOIN, or
@@ -139795,21 +140130,15 @@
139795 **
139796 ** (t1 LEFT OUTER JOIN t2) JOIN t3
139797 **
139798 ** which is not at all the same thing.
139799 **
139800 ** If the subquery is the right operand of a LEFT JOIN, then the outer
139801 ** query cannot be an aggregate. (3c) This is an artifact of the way
139802 ** aggregates are processed - there is no mechanism to determine if
139803 ** the LEFT JOIN table should be all-NULL.
139804 **
139805 ** See also tickets #306, #350, and #3300.
139806 */
139807 if( (pSubitem->fg.jointype & (JT_OUTER|JT_LTORJ))!=0 ){
139808 if( pSubSrc->nSrc>1 /* (3a) */
139809 || isAgg /* (3b) */
139810 || IsVirtual(pSubSrc->a[0].pTab) /* (3c) */
139811 || (p->selFlags & SF_Distinct)!=0 /* (3d) */
139812 || (pSubitem->fg.jointype & JT_RIGHT)!=0 /* (26) */
139813 ){
139814 return 0;
139815 }
@@ -139825,11 +140154,11 @@
139825 }
139826 #endif
139827
139828 assert( pSubSrc->nSrc>0 ); /* True by restriction (7) */
139829 if( iFrom>0 && (pSubSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){
139830 return 0; /* Restriction (27) */
139831 }
139832 if( pSubitem->fg.isCte && pSubitem->u2.pCteUse->eM10d==M10d_Yes ){
139833 return 0; /* (28) */
139834 }
139835
@@ -139845,11 +140174,11 @@
139845 **
139846 ** (29b) The subquery itself must not be the right operand of a
139847 ** NATURAL join or a join that as an ON or USING clause.
139848 **
139849 ** These conditions are sufficient to keep an EP_OuterON from being
139850 ** flattened into an EP_InnerON. Restrictions (3a) and (27) prevent
139851 ** an EP_InnerON from being flattened into an EP_OuterON.
139852 */
139853 if( pSubSrc->nSrc>=2
139854 && (pSubSrc->a[pSubSrc->nSrc-1].fg.jointype & JT_OUTER)!=0
139855 ){
@@ -139886,10 +140215,16 @@
139886 #ifndef SQLITE_OMIT_WINDOWFUNC
139887 || pSub1->pWin /* (17e) */
139888 #endif
139889 ){
139890 return 0;
 
 
 
 
 
 
139891 }
139892 testcase( pSub1->pSrc->nSrc>1 );
139893 }
139894
139895 /* Restriction (18). */
@@ -140189,10 +140524,12 @@
140189 Parse *pParse; /* Parsing context */
140190 u8 *pOomFault; /* Pointer to pParse->db->mallocFailed */
140191 int nConst; /* Number for COLUMN=CONSTANT terms */
140192 int nChng; /* Number of times a constant is propagated */
140193 int bHasAffBlob; /* At least one column in apExpr[] as affinity BLOB */
 
 
140194 Expr **apExpr; /* [i*2] is COLUMN and [i*2+1] is VALUE */
140195 };
140196
140197 /*
140198 ** Add a new entry to the pConst object. Except, do not add duplicate
@@ -140251,11 +140588,11 @@
140251 ** found, add it to the pConst structure.
140252 */
140253 static void findConstInWhere(WhereConst *pConst, Expr *pExpr){
140254 Expr *pRight, *pLeft;
140255 if( NEVER(pExpr==0) ) return;
140256 if( ExprHasProperty(pExpr, EP_OuterON|EP_InnerON) ){
140257 testcase( ExprHasProperty(pExpr, EP_OuterON) );
140258 testcase( ExprHasProperty(pExpr, EP_InnerON) );
140259 return;
140260 }
140261 if( pExpr->op==TK_AND ){
@@ -140291,13 +140628,14 @@
140291 int bIgnoreAffBlob
140292 ){
140293 int i;
140294 if( pConst->pOomFault[0] ) return WRC_Prune;
140295 if( pExpr->op!=TK_COLUMN ) return WRC_Continue;
140296 if( ExprHasProperty(pExpr, EP_FixedCol|EP_OuterON) ){
140297 testcase( ExprHasProperty(pExpr, EP_FixedCol) );
140298 testcase( ExprHasProperty(pExpr, EP_OuterON) );
 
140299 return WRC_Continue;
140300 }
140301 for(i=0; i<pConst->nConst; i++){
140302 Expr *pColumn = pConst->apExpr[i*2];
140303 if( pColumn==pExpr ) continue;
@@ -140417,10 +140755,21 @@
140417 do{
140418 x.nConst = 0;
140419 x.nChng = 0;
140420 x.apExpr = 0;
140421 x.bHasAffBlob = 0;
 
 
 
 
 
 
 
 
 
 
 
140422 findConstInWhere(&x, p->pWhere);
140423 if( x.nConst ){
140424 memset(&w, 0, sizeof(w));
140425 w.pParse = pParse;
140426 w.xExprCallback = propagateConstantExprRewrite;
@@ -140705,10 +141054,11 @@
140705 if( p->pWhere
140706 || p->pEList->nExpr!=1
140707 || p->pSrc->nSrc!=1
140708 || p->pSrc->a[0].pSelect
140709 || pAggInfo->nFunc!=1
 
140710 ){
140711 return 0;
140712 }
140713 pTab = p->pSrc->a[0].pTab;
140714 assert( pTab!=0 );
@@ -141406,11 +141756,11 @@
141406
141407 if( (zTabName = pFrom->zAlias)==0 ){
141408 zTabName = pTab->zName;
141409 }
141410 if( db->mallocFailed ) break;
141411 assert( pFrom->fg.isNestedFrom == IsNestedFrom(pFrom->pSelect) );
141412 if( pFrom->fg.isNestedFrom ){
141413 assert( pFrom->pSelect!=0 );
141414 pNestedFrom = pFrom->pSelect->pEList;
141415 assert( pNestedFrom!=0 );
141416 assert( pNestedFrom->nExpr==pTab->nCol );
@@ -142280,10 +142630,11 @@
142280 && OptimizationEnabled(db, SQLITE_SimplifyJoin)
142281 ){
142282 SELECTTRACE(0x100,pParse,p,
142283 ("LEFT-JOIN simplifies to JOIN on term %d\n",i));
142284 pItem->fg.jointype &= ~(JT_LEFT|JT_OUTER);
 
142285 unsetJoinExpr(p->pWhere, pItem->iCursor,
142286 pTabList->a[0].fg.jointype & JT_LTORJ);
142287 }
142288
142289 /* No futher action if this term of the FROM clause is no a subquery */
@@ -142334,11 +142685,13 @@
142334 && (p->selFlags & SF_OrderByReqd)==0 /* Condition (3) and (4) */
142335 && OptimizationEnabled(db, SQLITE_OmitOrderBy)
142336 ){
142337 SELECTTRACE(0x100,pParse,p,
142338 ("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1));
142339 sqlite3ExprListDelete(db, pSub->pOrderBy);
 
 
142340 pSub->pOrderBy = 0;
142341 }
142342
142343 /* If the outer query contains a "complex" result set (that is,
142344 ** if the result set of the outer query uses functions or subqueries)
@@ -142501,11 +142854,11 @@
142501 zSavedAuthContext = pParse->zAuthContext;
142502 pParse->zAuthContext = pItem->zName;
142503
142504 /* Generate code to implement the subquery
142505 **
142506 ** The subquery is implemented as a co-routine all if the following are
142507 ** true:
142508 **
142509 ** (1) the subquery is guaranteed to be the outer loop (so that
142510 ** it does not need to be computed more than once), and
142511 ** (2) the subquery is not a CTE that should be materialized
@@ -142695,11 +143048,11 @@
142695 */
142696 iEnd = sqlite3VdbeMakeLabel(pParse);
142697 if( (p->selFlags & SF_FixedLimit)==0 ){
142698 p->nSelectRow = 320; /* 4 billion rows */
142699 }
142700 computeLimitRegisters(pParse, p, iEnd);
142701 if( p->iLimit==0 && sSort.addrSortIndex>=0 ){
142702 sqlite3VdbeChangeOpcode(v, sSort.addrSortIndex, OP_SorterOpen);
142703 sSort.sortFlags |= SORTFLAG_UseSorter;
142704 }
142705
@@ -142917,12 +143270,17 @@
142917 if( minMaxFlag ){
142918 sqlite3DebugPrintf("MIN/MAX Optimization (0x%02x) adds:\n", minMaxFlag);
142919 sqlite3TreeViewExprList(0, pMinMaxOrderBy, 0, "ORDERBY");
142920 }
142921 for(ii=0; ii<pAggInfo->nColumn; ii++){
142922 sqlite3DebugPrintf("agg-column[%d] iMem=%d\n",
142923 ii, pAggInfo->aCol[ii].iMem);
 
 
 
 
 
142924 sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0);
142925 }
142926 for(ii=0; ii<pAggInfo->nFunc; ii++){
142927 sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n",
142928 ii, pAggInfo->aFunc[ii].iMem);
@@ -143039,19 +143397,19 @@
143039 }
143040 }
143041 regBase = sqlite3GetTempRange(pParse, nCol);
143042 sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0, 0);
143043 j = nGroupBy;
 
143044 for(i=0; i<pAggInfo->nColumn; i++){
143045 struct AggInfo_col *pCol = &pAggInfo->aCol[i];
143046 if( pCol->iSorterColumn>=j ){
143047 int r1 = j + regBase;
143048 sqlite3ExprCodeGetColumnOfTable(v,
143049 pCol->pTab, pCol->iTable, pCol->iColumn, r1);
143050 j++;
143051 }
143052 }
 
143053 regRecord = sqlite3GetTempReg(pParse);
143054 sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord);
143055 sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord);
143056 sqlite3ReleaseTempReg(pParse, regRecord);
143057 sqlite3ReleaseTempRange(pParse, regBase, nCol);
@@ -147465,11 +147823,12 @@
147465 ** in the list are moved to the sqlite3.pDisconnect list of the associated
147466 ** database connection.
147467 */
147468 SQLITE_PRIVATE void sqlite3VtabClear(sqlite3 *db, Table *p){
147469 assert( IsVirtual(p) );
147470 if( !db || db->pnBytesFreed==0 ) vtabDisconnectAll(0, p);
 
147471 if( p->u.vtab.azArg ){
147472 int i;
147473 for(i=0; i<p->u.vtab.nArg; i++){
147474 if( i!=1 ) sqlite3DbFree(db, p->u.vtab.azArg[i]);
147475 }
@@ -149142,10 +149501,11 @@
149142 #define WHERE_IN_SEEKSCAN 0x00100000 /* Seek-scan optimization for IN */
149143 #define WHERE_TRANSCONS 0x00200000 /* Uses a transitive constraint */
149144 #define WHERE_BLOOMFILTER 0x00400000 /* Consider using a Bloom-filter */
149145 #define WHERE_SELFCULL 0x00800000 /* nOut reduced by extra WHERE terms */
149146 #define WHERE_OMIT_OFFSET 0x01000000 /* Set offset counter to zero */
 
149147
149148 #endif /* !defined(SQLITE_WHEREINT_H) */
149149
149150 /************** End of whereInt.h ********************************************/
149151 /************** Continuing where we left off in wherecode.c ******************/
@@ -149750,11 +150110,12 @@
149750 eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap,&iTab);
149751 pExpr->iTable = iTab;
149752 }
149753 sqlite3ExprDelete(db, pX);
149754 }else{
149755 aiMap = (int*)sqlite3DbMallocZero(pParse->db, sizeof(int)*nEq);
 
149756 eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap, &iTab);
149757 }
149758 pX = pExpr;
149759 }
149760
@@ -150020,11 +150381,11 @@
150020 WhereTerm *pTerm /* The upper or lower bound just coded */
150021 ){
150022 if( pTerm->wtFlags & TERM_LIKEOPT ){
150023 VdbeOp *pOp;
150024 assert( pLevel->iLikeRepCntr>0 );
150025 pOp = sqlite3VdbeGetOp(v, -1);
150026 assert( pOp!=0 );
150027 assert( pOp->opcode==OP_String8
150028 || pTerm->pWC->pWInfo->pParse->db->mallocFailed );
150029 pOp->p3 = (int)(pLevel->iLikeRepCntr>>1); /* Register holding counter */
150030 pOp->p5 = (u8)(pLevel->iLikeRepCntr&1); /* ASC or DESC */
@@ -151236,12 +151597,12 @@
151236 sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq);
151237 endEq = 0;
151238 }
151239 nConstraint++;
151240 }
151241 sqlite3DbFree(db, zStartAff);
151242 sqlite3DbFree(db, zEndAff);
151243
151244 /* Top of the loop body */
151245 if( pLevel->p2==0 ) pLevel->p2 = sqlite3VdbeCurrentAddr(v);
151246
151247 /* Check if the index cursor is past the end of the range. */
@@ -153168,13 +153529,19 @@
153168 sqlite3ErrorMsg(pParse, "ON clause references tables to its right");
153169 return;
153170 }
153171 }else if( (prereqAll>>1)>=x ){
153172 /* The ON clause of an INNER JOIN references a table to its right.
153173 ** Most other SQL database engines raise an error. But all versions
153174 ** of SQLite going back to 3.0.0 have just put the ON clause constraint
153175 ** into the WHERE clause and carried on. */
 
 
 
 
 
 
153176 ExprClearProperty(pExpr, EP_InnerON);
153177 }
153178 }
153179 pTerm->prereqAll = prereqAll;
153180 pTerm->leftCursor = -1;
@@ -155328,11 +155695,11 @@
155328 #ifndef SQLITE_DEBUG
155329 UNUSED_PARAMETER( pParse );
155330 #endif
155331 assert( pRec!=0 );
155332 assert( pIdx->nSample>0 );
155333 assert( pRec->nField>0 && pRec->nField<=pIdx->nSampleCol );
155334
155335 /* Do a binary search to find the first sample greater than or equal
155336 ** to pRec. If pRec contains a single field, the set of samples to search
155337 ** is simply the aSample[] array. If the samples in aSample[] contain more
155338 ** than one fields, all fields following the first are ignored.
@@ -155374,11 +155741,11 @@
155374 ** appears that it should be 1 field in size. However, that would make it
155375 ** smaller than sample 1, so the binary search would not work. As a result,
155376 ** it is extended to two fields. The duplicates that this creates do not
155377 ** cause any problems.
155378 */
155379 nField = pRec->nField;
155380 iCol = 0;
155381 iSample = pIdx->nSample * nField;
155382 do{
155383 int iSamp; /* Index in aSample[] of test sample */
155384 int n; /* Number of fields in test sample */
@@ -155462,11 +155829,11 @@
155462 /* At this point, the (iCol+1) field prefix of aSample[i] is the first
155463 ** sample that is greater than pRec. Or, if i==pIdx->nSample then pRec
155464 ** is larger than all samples in the array. */
155465 tRowcnt iUpper, iGap;
155466 if( i>=pIdx->nSample ){
155467 iUpper = sqlite3LogEstToInt(pIdx->aiRowLogEst[0]);
155468 }else{
155469 iUpper = aSample[i].anLt[iCol];
155470 }
155471
155472 if( iLower>=iUpper ){
@@ -156091,16 +156458,22 @@
156091 }
156092 }
156093 }
156094
156095 /*
156096 ** Deallocate internal memory used by a WhereLoop object
 
156097 */
156098 static void whereLoopClear(sqlite3 *db, WhereLoop *p){
156099 if( p->aLTerm!=p->aLTermSpace ) sqlite3DbFreeNN(db, p->aLTerm);
 
 
 
 
156100 whereLoopClearUnion(db, p);
156101 whereLoopInit(p);
 
156102 }
156103
156104 /*
156105 ** Increase the memory allocation for pLoop->aLTerm[] to be at least n.
156106 */
@@ -156120,11 +156493,13 @@
156120 /*
156121 ** Transfer content from the second pLoop into the first.
156122 */
156123 static int whereLoopXfer(sqlite3 *db, WhereLoop *pTo, WhereLoop *pFrom){
156124 whereLoopClearUnion(db, pTo);
156125 if( whereLoopResize(db, pTo, pFrom->nLTerm) ){
 
 
156126 memset(pTo, 0, WHERE_LOOP_XFER_SZ);
156127 return SQLITE_NOMEM_BKPT;
156128 }
156129 memcpy(pTo, pFrom, WHERE_LOOP_XFER_SZ);
156130 memcpy(pTo->aLTerm, pFrom->aLTerm, pTo->nLTerm*sizeof(pTo->aLTerm[0]));
@@ -156138,32 +156513,34 @@
156138
156139 /*
156140 ** Delete a WhereLoop object
156141 */
156142 static void whereLoopDelete(sqlite3 *db, WhereLoop *p){
 
156143 whereLoopClear(db, p);
156144 sqlite3DbFreeNN(db, p);
156145 }
156146
156147 /*
156148 ** Free a WhereInfo structure
156149 */
156150 static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){
156151 assert( pWInfo!=0 );
 
156152 sqlite3WhereClauseClear(&pWInfo->sWC);
156153 while( pWInfo->pLoops ){
156154 WhereLoop *p = pWInfo->pLoops;
156155 pWInfo->pLoops = p->pNextLoop;
156156 whereLoopDelete(db, p);
156157 }
156158 assert( pWInfo->pExprMods==0 );
156159 while( pWInfo->pMemToFree ){
156160 WhereMemBlock *pNext = pWInfo->pMemToFree->pNext;
156161 sqlite3DbFreeNN(db, pWInfo->pMemToFree);
156162 pWInfo->pMemToFree = pNext;
156163 }
156164 sqlite3DbFreeNN(db, pWInfo);
156165 }
156166
156167 /* Undo all Expr node modifications
156168 */
156169 static void whereUndoExprMods(WhereInfo *pWInfo){
@@ -156773,11 +157150,15 @@
156773 pNew->wsFlags = saved_wsFlags;
156774 pNew->u.btree.nEq = saved_nEq;
156775 pNew->u.btree.nBtm = saved_nBtm;
156776 pNew->u.btree.nTop = saved_nTop;
156777 pNew->nLTerm = saved_nLTerm;
156778 if( whereLoopResize(db, pNew, pNew->nLTerm+1) ) break; /* OOM */
 
 
 
 
156779 pNew->aLTerm[pNew->nLTerm++] = pTerm;
156780 pNew->prereq = (saved_prereq | pTerm->prereqRight) & ~pNew->maskSelf;
156781
156782 assert( nInMul==0
156783 || (pNew->wsFlags & WHERE_COLUMN_NULL)!=0
@@ -156866,42 +157247,43 @@
156866 }
156867 }
156868 if( scan.iEquiv>1 ) pNew->wsFlags |= WHERE_TRANSCONS;
156869 }else if( eOp & WO_ISNULL ){
156870 pNew->wsFlags |= WHERE_COLUMN_NULL;
156871 }else if( eOp & (WO_GT|WO_GE) ){
156872 testcase( eOp & WO_GT );
156873 testcase( eOp & WO_GE );
156874 pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_BTM_LIMIT;
156875 pNew->u.btree.nBtm = whereRangeVectorLen(
156876 pParse, pSrc->iCursor, pProbe, saved_nEq, pTerm
156877 );
156878 pBtm = pTerm;
156879 pTop = 0;
156880 if( pTerm->wtFlags & TERM_LIKEOPT ){
156881 /* Range constraints that come from the LIKE optimization are
156882 ** always used in pairs. */
156883 pTop = &pTerm[1];
156884 assert( (pTop-(pTerm->pWC->a))<pTerm->pWC->nTerm );
156885 assert( pTop->wtFlags & TERM_LIKEOPT );
156886 assert( pTop->eOperator==WO_LT );
156887 if( whereLoopResize(db, pNew, pNew->nLTerm+1) ) break; /* OOM */
156888 pNew->aLTerm[pNew->nLTerm++] = pTop;
156889 pNew->wsFlags |= WHERE_TOP_LIMIT;
156890 pNew->u.btree.nTop = 1;
156891 }
156892 }else{
156893 assert( eOp & (WO_LT|WO_LE) );
156894 testcase( eOp & WO_LT );
156895 testcase( eOp & WO_LE );
156896 pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_TOP_LIMIT;
156897 pNew->u.btree.nTop = whereRangeVectorLen(
156898 pParse, pSrc->iCursor, pProbe, saved_nEq, pTerm
156899 );
156900 pTop = pTerm;
156901 pBtm = (pNew->wsFlags & WHERE_BTM_LIMIT)!=0 ?
156902 pNew->aLTerm[pNew->nLTerm-2] : 0;
 
156903 }
156904
156905 /* At this point pNew->nOut is set to the number of rows expected to
156906 ** be visited by the index scan before considering term pTerm, or the
156907 ** values of nIn and nInMul. In other words, assuming that all
@@ -157343,10 +157725,13 @@
157343 #ifdef SQLITE_ENABLE_STAT4
157344 pNew->rRun = rSize + 16 - 2*((pTab->tabFlags & TF_HasStat4)!=0);
157345 #else
157346 pNew->rRun = rSize + 16;
157347 #endif
 
 
 
157348 ApplyCostMultiplier(pNew->rRun, pTab->costMult);
157349 whereLoopOutputAdjust(pWC, pNew, rSize);
157350 rc = whereLoopInsert(pBuilder, pNew);
157351 pNew->nOut = rSize;
157352 if( rc ) break;
@@ -158063,29 +158448,47 @@
158063 SrcItem *pItem;
158064 SrcItem *pEnd = &pTabList->a[pWInfo->nLevel];
158065 sqlite3 *db = pWInfo->pParse->db;
158066 int rc = SQLITE_OK;
158067 int bFirstPastRJ = 0;
 
158068 WhereLoop *pNew;
158069
158070
158071 /* Loop over the tables in the join, from left to right */
158072 pNew = pBuilder->pNew;
158073 whereLoopInit(pNew);
 
 
 
 
 
 
158074 pBuilder->iPlanLimit = SQLITE_QUERY_PLANNER_LIMIT;
158075 for(iTab=0, pItem=pTabList->a; pItem<pEnd; iTab++, pItem++){
158076 Bitmask mUnusable = 0;
158077 pNew->iTab = iTab;
158078 pBuilder->iPlanLimit += SQLITE_QUERY_PLANNER_LIMIT_INCR;
158079 pNew->maskSelf = sqlite3WhereGetMask(&pWInfo->sMaskSet, pItem->iCursor);
158080 if( bFirstPastRJ || (pItem->fg.jointype & (JT_OUTER|JT_CROSS))!=0 ){
 
 
158081 /* Add prerequisites to prevent reordering of FROM clause terms
158082 ** across CROSS joins and outer joins. The bFirstPastRJ boolean
158083 ** prevents the right operand of a RIGHT JOIN from being swapped with
158084 ** other elements even further to the right. */
 
 
 
 
 
 
 
158085 mPrereq |= mPrior;
158086 bFirstPastRJ = (pItem->fg.jointype & JT_RIGHT)!=0;
 
 
158087 }
158088 #ifndef SQLITE_OMIT_VIRTUALTABLE
158089 if( IsVirtual(pItem->pTab) ){
158090 SrcItem *p;
158091 for(p=&pItem[1]; p<pEnd; p++){
@@ -158654,13 +159057,13 @@
158654 for(ii=0, pFrom=aFrom; ii<nFrom; ii++, pFrom++){
158655 for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){
158656 LogEst nOut; /* Rows visited by (pFrom+pWLoop) */
158657 LogEst rCost; /* Cost of path (pFrom+pWLoop) */
158658 LogEst rUnsorted; /* Unsorted cost of (pFrom+pWLoop) */
158659 i8 isOrdered = pFrom->isOrdered; /* isOrdered for (pFrom+pWLoop) */
158660 Bitmask maskNew; /* Mask of src visited by (..) */
158661 Bitmask revMask = 0; /* Mask of rev-order loops for (..) */
158662
158663 if( (pWLoop->prereq & ~pFrom->maskLoop)!=0 ) continue;
158664 if( (pWLoop->maskSelf & pFrom->maskLoop)!=0 ) continue;
158665 if( (pWLoop->wsFlags & WHERE_AUTO_INDEX)!=0 && pFrom->nRow<3 ){
158666 /* Do not use an automatic index if the this loop is expected
@@ -158675,11 +159078,13 @@
158675 ** Compute its cost */
158676 rUnsorted = sqlite3LogEstAdd(pWLoop->rSetup,pWLoop->rRun + pFrom->nRow);
158677 rUnsorted = sqlite3LogEstAdd(rUnsorted, pFrom->rUnsorted);
158678 nOut = pFrom->nRow + pWLoop->nOut;
158679 maskNew = pFrom->maskLoop | pWLoop->maskSelf;
 
158680 if( isOrdered<0 ){
 
158681 isOrdered = wherePathSatisfiesOrderBy(pWInfo,
158682 pWInfo->pOrderBy, pFrom, pWInfo->wctrlFlags,
158683 iLoop, pWLoop, &revMask);
158684 }else{
158685 revMask = pFrom->revLoop;
@@ -158702,10 +159107,17 @@
158702 rUnsorted, rCost));
158703 }else{
158704 rCost = rUnsorted;
158705 rUnsorted -= 2; /* TUNING: Slight bias in favor of no-sort plans */
158706 }
 
 
 
 
 
 
 
158707
158708 /* Check to see if pWLoop should be added to the set of
158709 ** mxChoice best-so-far paths.
158710 **
158711 ** First look for an existing path among best-so-far paths
@@ -158935,11 +159347,12 @@
158935
158936
158937 pWInfo->nRowOut = pFrom->nRow;
158938
158939 /* Free temporary memory and return success */
158940 sqlite3DbFreeNN(db, pSpace);
 
158941 return SQLITE_OK;
158942 }
158943
158944 /*
158945 ** Most queries use only a single table (they are not joins) and have
@@ -158968,11 +159381,15 @@
158968 if( pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE ) return 0;
158969 assert( pWInfo->pTabList->nSrc>=1 );
158970 pItem = pWInfo->pTabList->a;
158971 pTab = pItem->pTab;
158972 if( IsVirtual(pTab) ) return 0;
158973 if( pItem->fg.isIndexedBy ) return 0;
 
 
 
 
158974 iCur = pItem->iCursor;
158975 pWC = &pWInfo->sWC;
158976 pLoop = pBuilder->pNew;
158977 pLoop->wsFlags = 0;
158978 pLoop->nSkip = 0;
@@ -159141,11 +159558,11 @@
159141 WhereTerm *pTerm, *pEnd;
159142 SrcItem *pItem;
159143 WhereLoop *pLoop;
159144 pLoop = pWInfo->a[i].pWLoop;
159145 pItem = &pWInfo->pTabList->a[pLoop->iTab];
159146 if( (pItem->fg.jointype & JT_LEFT)==0 ) continue;
159147 if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT)==0
159148 && (pLoop->wsFlags & WHERE_ONEROW)==0
159149 ){
159150 continue;
159151 }
@@ -159473,11 +159890,11 @@
159473 }
159474
159475 /* Analyze all of the subexpressions. */
159476 sqlite3WhereExprAnalyze(pTabList, &pWInfo->sWC);
159477 sqlite3WhereAddLimit(&pWInfo->sWC, pLimit);
159478 if( db->mallocFailed ) goto whereBeginError;
159479
159480 /* Special case: WHERE terms that do not refer to any tables in the join
159481 ** (constant expressions). Evaluate each such term, and jump over all the
159482 ** generated code if the result is not true.
159483 **
@@ -161164,11 +161581,10 @@
161164 int i;
161165 int nInit = pList ? pList->nExpr : 0;
161166 for(i=0; i<pAppend->nExpr; i++){
161167 sqlite3 *db = pParse->db;
161168 Expr *pDup = sqlite3ExprDup(db, pAppend->a[i].pExpr, 0);
161169 assert( pDup==0 || !ExprHasProperty(pDup, EP_MemToken) );
161170 if( db->mallocFailed ){
161171 sqlite3ExprDelete(db, pDup);
161172 break;
161173 }
161174 if( bIntToNull ){
@@ -162435,14 +162851,13 @@
162435 }
162436 sqlite3VdbeAddOp2(v, OP_Goto, 0, addrDone);
162437
162438 /* This block runs if reg1 is not NULL, but reg2 is. */
162439 sqlite3VdbeJumpHere(v, addr);
162440 sqlite3VdbeAddOp2(v, OP_IsNull, reg2, lbl); VdbeCoverage(v);
162441 if( op==OP_Gt || op==OP_Ge ){
162442 sqlite3VdbeChangeP2(v, -1, addrDone);
162443 }
162444 }
162445
162446 /* Register reg1 currently contains csr1.peerVal (the peer-value from csr1).
162447 ** This block adds (or subtracts for DESC) the numeric value in regVal
162448 ** from it. Or, if reg1 is not numeric (it is a NULL, a text value or a blob),
@@ -169918,10 +170333,11 @@
169918 while( 1 ){
169919 n = sqlite3GetToken((u8*)zSql, &tokenType);
169920 mxSqlLen -= n;
169921 if( mxSqlLen<0 ){
169922 pParse->rc = SQLITE_TOOBIG;
 
169923 break;
169924 }
169925 #ifndef SQLITE_OMIT_WINDOWFUNC
169926 if( tokenType>=TK_WINDOW ){
169927 assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER
@@ -170014,11 +170430,11 @@
170014 sqlite3DeleteTable(db, pParse->pNewTable);
170015 }
170016 if( pParse->pNewTrigger && !IN_RENAME_OBJECT ){
170017 sqlite3DeleteTrigger(db, pParse->pNewTrigger);
170018 }
170019 if( pParse->pVList ) sqlite3DbFreeNN(db, pParse->pVList);
170020 db->pParse = pParentParse;
170021 assert( nErr==0 || pParse->rc!=SQLITE_OK );
170022 return nErr;
170023 }
170024
@@ -171370,22 +171786,23 @@
171370 db->lookaside.pEnd = p;
171371 db->lookaside.bDisable = 0;
171372 db->lookaside.bMalloced = pBuf==0 ?1:0;
171373 db->lookaside.nSlot = nBig+nSm;
171374 }else{
171375 db->lookaside.pStart = db;
171376 #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE
171377 db->lookaside.pSmallInit = 0;
171378 db->lookaside.pSmallFree = 0;
171379 db->lookaside.pMiddle = db;
171380 #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */
171381 db->lookaside.pEnd = db;
171382 db->lookaside.bDisable = 1;
171383 db->lookaside.sz = 0;
171384 db->lookaside.bMalloced = 0;
171385 db->lookaside.nSlot = 0;
171386 }
 
171387 assert( sqlite3LookasideUsed(db,0)==0 );
171388 #endif /* SQLITE_OMIT_LOOKASIDE */
171389 return SQLITE_OK;
171390 }
171391
@@ -171460,10 +171877,11 @@
171460 ** Configuration settings for an individual database connection
171461 */
171462 SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){
171463 va_list ap;
171464 int rc;
 
171465 va_start(ap, op);
171466 switch( op ){
171467 case SQLITE_DBCONFIG_MAINDBNAME: {
171468 /* IMP: R-06824-28531 */
171469 /* IMP: R-36257-52125 */
@@ -171525,10 +171943,11 @@
171525 }
171526 break;
171527 }
171528 }
171529 va_end(ap);
 
171530 return rc;
171531 }
171532
171533 /*
171534 ** This is the default collating function named "BINARY" which is always
@@ -174658,12 +175077,15 @@
174658 sqlite3ShowUpsert(0);
174659 sqlite3ShowTriggerStep(0);
174660 sqlite3ShowTriggerStepList(0);
174661 sqlite3ShowTrigger(0);
174662 sqlite3ShowTriggerList(0);
 
174663 sqlite3ShowWindow(0);
174664 sqlite3ShowWinFunc(0);
 
 
174665 }
174666 #endif
174667 break;
174668 }
174669
@@ -180993,12 +181415,11 @@
180993 static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){
180994 int iToken; /* Used to iterate through phrase tokens */
180995 char *aPoslist = 0; /* Position list for deferred tokens */
180996 int nPoslist = 0; /* Number of bytes in aPoslist */
180997 int iPrev = -1; /* Token number of previous deferred token */
180998
180999 assert( pPhrase->doclist.bFreeList==0 );
181000
181001 for(iToken=0; iToken<pPhrase->nToken; iToken++){
181002 Fts3PhraseToken *pToken = &pPhrase->aToken[iToken];
181003 Fts3DeferredToken *pDeferred = pToken->pDeferred;
181004
@@ -181008,10 +181429,11 @@
181008 int rc = sqlite3Fts3DeferredTokenList(pDeferred, &pList, &nList);
181009 if( rc!=SQLITE_OK ) return rc;
181010
181011 if( pList==0 ){
181012 sqlite3_free(aPoslist);
 
181013 pPhrase->doclist.pList = 0;
181014 pPhrase->doclist.nList = 0;
181015 return SQLITE_OK;
181016
181017 }else if( aPoslist==0 ){
@@ -181028,10 +181450,11 @@
181028 sqlite3_free(aPoslist);
181029 aPoslist = pList;
181030 nPoslist = (int)(aOut - aPoslist);
181031 if( nPoslist==0 ){
181032 sqlite3_free(aPoslist);
 
181033 pPhrase->doclist.pList = 0;
181034 pPhrase->doclist.nList = 0;
181035 return SQLITE_OK;
181036 }
181037 }
@@ -181060,17 +181483,18 @@
181060 p1 = pPhrase->doclist.pList;
181061 p2 = aPoslist;
181062 nDistance = iPrev - nMaxUndeferred;
181063 }
181064
181065 aOut = (char *)sqlite3_malloc(nPoslist+8);
181066 if( !aOut ){
181067 sqlite3_free(aPoslist);
181068 return SQLITE_NOMEM;
181069 }
181070
181071 pPhrase->doclist.pList = aOut;
 
181072 if( fts3PoslistPhraseMerge(&aOut, nDistance, 0, 1, &p1, &p2) ){
181073 pPhrase->doclist.bFreeList = 1;
181074 pPhrase->doclist.nList = (int)(aOut - pPhrase->doclist.pList);
181075 }else{
181076 sqlite3_free(aOut);
@@ -181079,10 +181503,11 @@
181079 }
181080 sqlite3_free(aPoslist);
181081 }
181082 }
181083
 
181084 return SQLITE_OK;
181085 }
181086 #endif /* SQLITE_DISABLE_FTS4_DEFERRED */
181087
181088 /*
@@ -182253,15 +182678,14 @@
182253 );
182254 break;
182255
182256 default: {
182257 #ifndef SQLITE_DISABLE_FTS4_DEFERRED
182258 if( pCsr->pDeferred
182259 && (pExpr->iDocid==pCsr->iPrevId || pExpr->bDeferred)
182260 ){
182261 Fts3Phrase *pPhrase = pExpr->pPhrase;
182262 assert( pExpr->bDeferred || pPhrase->doclist.bFreeList==0 );
182263 if( pExpr->bDeferred ){
182264 fts3EvalInvalidatePoslist(pPhrase);
182265 }
182266 *pRc = fts3EvalDeferredPhrase(pCsr, pPhrase);
182267 bHit = (pPhrase->doclist.pList!=0);
@@ -204085,11 +204509,11 @@
204085 sqlite3_bind_value(pUp, 2, aData[2]);
204086 }
204087 sqlite3_free(p);
204088 nChange = 1;
204089 }
204090 for(jj=1; jj<pRtree->nAux; jj++){
204091 nChange++;
204092 sqlite3_bind_value(pUp, jj+2, aData[jj+2]);
204093 }
204094 if( nChange ){
204095 sqlite3_step(pUp);
@@ -212444,15 +212868,16 @@
212444 */
212445 static int dbpageBegin(sqlite3_vtab *pVtab){
212446 DbpageTable *pTab = (DbpageTable *)pVtab;
212447 sqlite3 *db = pTab->db;
212448 int i;
212449 for(i=0; i<db->nDb; i++){
 
212450 Btree *pBt = db->aDb[i].pBt;
212451 if( pBt ) sqlite3BtreeBeginTrans(pBt, 1, 0);
212452 }
212453 return SQLITE_OK;
212454 }
212455
212456
212457 /*
212458 ** Invoke this routine to register the "dbpage" virtual table module
@@ -219172,11 +219597,11 @@
219172 static void sqlite3Fts5BufferAppendPrintf(int *, Fts5Buffer*, char *zFmt, ...);
219173
219174 static char *sqlite3Fts5Mprintf(int *pRc, const char *zFmt, ...);
219175
219176 #define fts5BufferZero(x) sqlite3Fts5BufferZero(x)
219177 #define fts5BufferAppendVarint(a,b,c) sqlite3Fts5BufferAppendVarint(a,b,c)
219178 #define fts5BufferFree(a) sqlite3Fts5BufferFree(a)
219179 #define fts5BufferAppendBlob(a,b,c,d) sqlite3Fts5BufferAppendBlob(a,b,c,d)
219180 #define fts5BufferSet(a,b,c,d) sqlite3Fts5BufferSet(a,b,c,d)
219181
219182 #define fts5BufferGrow(pRc,pBuf,nn) ( \
@@ -231049,11 +231474,13 @@
231049 /* Write the rowid. */
231050 if( pWriter->bFirstRowidInDoclist || pWriter->bFirstRowidInPage ){
231051 fts5BufferAppendVarint(&p->rc, &pPage->buf, iRowid);
231052 }else{
231053 assert_nc( p->rc || iRowid>pWriter->iPrevRowid );
231054 fts5BufferAppendVarint(&p->rc, &pPage->buf, iRowid - pWriter->iPrevRowid);
 
 
231055 }
231056 pWriter->iPrevRowid = iRowid;
231057 pWriter->bFirstRowidInDoclist = 0;
231058 pWriter->bFirstRowidInPage = 0;
231059 }
@@ -231813,21 +232240,21 @@
231813 return fts5IndexReturn(p);
231814 }
231815
231816 static void fts5AppendRowid(
231817 Fts5Index *p,
231818 i64 iDelta,
231819 Fts5Iter *pUnused,
231820 Fts5Buffer *pBuf
231821 ){
231822 UNUSED_PARAM(pUnused);
231823 fts5BufferAppendVarint(&p->rc, pBuf, iDelta);
231824 }
231825
231826 static void fts5AppendPoslist(
231827 Fts5Index *p,
231828 i64 iDelta,
231829 Fts5Iter *pMulti,
231830 Fts5Buffer *pBuf
231831 ){
231832 int nData = pMulti->base.nData;
231833 int nByte = nData + 9 + 9 + FTS5_DATA_ZERO_PADDING;
@@ -231898,14 +232325,14 @@
231898 fts5BufferSafeAppendVarint(pBuf, iRowid - *piLastRowid);
231899 *piLastRowid = iRowid;
231900 }
231901 #endif
231902
231903 #define fts5MergeAppendDocid(pBuf, iLastRowid, iRowid) { \
231904 assert( (pBuf)->n!=0 || (iLastRowid)==0 ); \
231905 fts5BufferSafeAppendVarint((pBuf), (iRowid) - (iLastRowid)); \
231906 (iLastRowid) = (iRowid); \
231907 }
231908
231909 /*
231910 ** Swap the contents of buffer *p1 with that of *p2.
231911 */
@@ -232172,11 +232599,11 @@
232172 Fts5Buffer *aBuf;
232173 int nBuf = 32;
232174 int nMerge = 1;
232175
232176 void (*xMerge)(Fts5Index*, Fts5Buffer*, int, Fts5Buffer*);
232177 void (*xAppend)(Fts5Index*, i64, Fts5Iter*, Fts5Buffer*);
232178 if( p->pConfig->eDetail==FTS5_DETAIL_NONE ){
232179 xMerge = fts5MergeRowidLists;
232180 xAppend = fts5AppendRowid;
232181 }else{
232182 nMerge = FTS5_MERGE_NLIST-1;
@@ -232211,11 +232638,11 @@
232211 fts5MultiIterNext2(p, p1, &dummy)
232212 ){
232213 Fts5SegIter *pSeg = &p1->aSeg[ p1->aFirst[1].iFirst ];
232214 p1->xSetOutputs(p1, pSeg);
232215 if( p1->base.nData ){
232216 xAppend(p, p1->base.iRowid-iLastRowid, p1, &doclist);
232217 iLastRowid = p1->base.iRowid;
232218 }
232219 }
232220 fts5MultiIterFree(p1);
232221 }
@@ -232259,11 +232686,11 @@
232259 }
232260 }
232261 iLastRowid = 0;
232262 }
232263
232264 xAppend(p, p1->base.iRowid-iLastRowid, p1, &doclist);
232265 iLastRowid = p1->base.iRowid;
232266 }
232267
232268 assert( (nBuf%nMerge)==0 );
232269 for(i=0; i<nBuf; i+=nMerge){
@@ -236575,11 +237002,11 @@
236575 int nArg, /* Number of args */
236576 sqlite3_value **apUnused /* Function arguments */
236577 ){
236578 assert( nArg==0 );
236579 UNUSED_PARAM2(nArg, apUnused);
236580 sqlite3_result_text(pCtx, "fts5: 2022-06-15 16:26:37 56c60a35ea457f06db58ec3f694a1ae16fd03e6625da1d7879d63d72bbcb1c62", -1, SQLITE_TRANSIENT);
236581 }
236582
236583 /*
236584 ** Return true if zName is the extension on one of the shadow tables used
236585 ** by this module.
@@ -241246,10 +241673,20 @@
241246 /* #include <assert.h> */
241247 /* #include <string.h> */
241248
241249 #ifndef SQLITE_OMIT_VIRTUALTABLE
241250
 
 
 
 
 
 
 
 
 
 
241251 /* stmt_vtab is a subclass of sqlite3_vtab which will
241252 ** serve as the underlying representation of a stmt virtual table
241253 */
241254 typedef struct stmt_vtab stmt_vtab;
241255 struct stmt_vtab {
@@ -241263,12 +241700,11 @@
241263 */
241264 typedef struct stmt_cursor stmt_cursor;
241265 struct stmt_cursor {
241266 sqlite3_vtab_cursor base; /* Base class - must be first */
241267 sqlite3 *db; /* Database connection for this cursor */
241268 sqlite3_stmt *pStmt; /* Statement cursor is currently pointing at */
241269 sqlite3_int64 iRowid; /* The rowid */
241270 };
241271
241272 /*
241273 ** The stmtConnect() method is invoked to create a new
241274 ** stmt_vtab that describes the stmt virtual table.
@@ -241308,11 +241744,11 @@
241308
241309 rc = sqlite3_declare_vtab(db,
241310 "CREATE TABLE x(sql,ncol,ro,busy,nscan,nsort,naidx,nstep,"
241311 "reprep,run,mem)");
241312 if( rc==SQLITE_OK ){
241313 pNew = sqlite3_malloc( sizeof(*pNew) );
241314 *ppVtab = (sqlite3_vtab*)pNew;
241315 if( pNew==0 ) return SQLITE_NOMEM;
241316 memset(pNew, 0, sizeof(*pNew));
241317 pNew->db = db;
241318 }
@@ -241330,22 +241766,33 @@
241330 /*
241331 ** Constructor for a new stmt_cursor object.
241332 */
241333 static int stmtOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){
241334 stmt_cursor *pCur;
241335 pCur = sqlite3_malloc( sizeof(*pCur) );
241336 if( pCur==0 ) return SQLITE_NOMEM;
241337 memset(pCur, 0, sizeof(*pCur));
241338 pCur->db = ((stmt_vtab*)p)->db;
241339 *ppCursor = &pCur->base;
241340 return SQLITE_OK;
241341 }
 
 
 
 
 
 
 
 
 
 
241342
241343 /*
241344 ** Destructor for a stmt_cursor.
241345 */
241346 static int stmtClose(sqlite3_vtab_cursor *cur){
 
241347 sqlite3_free(cur);
241348 return SQLITE_OK;
241349 }
241350
241351
@@ -241352,12 +241799,13 @@
241352 /*
241353 ** Advance a stmt_cursor to its next row of output.
241354 */
241355 static int stmtNext(sqlite3_vtab_cursor *cur){
241356 stmt_cursor *pCur = (stmt_cursor*)cur;
241357 pCur->iRowid++;
241358 pCur->pStmt = sqlite3_next_stmt(pCur->db, pCur->pStmt);
 
241359 return SQLITE_OK;
241360 }
241361
241362 /*
241363 ** Return values of columns for the row at which the stmt_cursor
@@ -241367,43 +241815,15 @@
241367 sqlite3_vtab_cursor *cur, /* The cursor */
241368 sqlite3_context *ctx, /* First argument to sqlite3_result_...() */
241369 int i /* Which column to return */
241370 ){
241371 stmt_cursor *pCur = (stmt_cursor*)cur;
241372 switch( i ){
241373 case STMT_COLUMN_SQL: {
241374 sqlite3_result_text(ctx, sqlite3_sql(pCur->pStmt), -1, SQLITE_TRANSIENT);
241375 break;
241376 }
241377 case STMT_COLUMN_NCOL: {
241378 sqlite3_result_int(ctx, sqlite3_column_count(pCur->pStmt));
241379 break;
241380 }
241381 case STMT_COLUMN_RO: {
241382 sqlite3_result_int(ctx, sqlite3_stmt_readonly(pCur->pStmt));
241383 break;
241384 }
241385 case STMT_COLUMN_BUSY: {
241386 sqlite3_result_int(ctx, sqlite3_stmt_busy(pCur->pStmt));
241387 break;
241388 }
241389 default: {
241390 assert( i==STMT_COLUMN_MEM );
241391 i = SQLITE_STMTSTATUS_MEMUSED +
241392 STMT_COLUMN_NSCAN - SQLITE_STMTSTATUS_FULLSCAN_STEP;
241393 /* Fall thru */
241394 }
241395 case STMT_COLUMN_NSCAN:
241396 case STMT_COLUMN_NSORT:
241397 case STMT_COLUMN_NAIDX:
241398 case STMT_COLUMN_NSTEP:
241399 case STMT_COLUMN_REPREP:
241400 case STMT_COLUMN_RUN: {
241401 sqlite3_result_int(ctx, sqlite3_stmt_status(pCur->pStmt,
241402 i-STMT_COLUMN_NSCAN+SQLITE_STMTSTATUS_FULLSCAN_STEP, 0));
241403 break;
241404 }
241405 }
241406 return SQLITE_OK;
241407 }
241408
241409 /*
@@ -241410,21 +241830,21 @@
241410 ** Return the rowid for the current row. In this implementation, the
241411 ** rowid is the same as the output value.
241412 */
241413 static int stmtRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){
241414 stmt_cursor *pCur = (stmt_cursor*)cur;
241415 *pRowid = pCur->iRowid;
241416 return SQLITE_OK;
241417 }
241418
241419 /*
241420 ** Return TRUE if the cursor has been moved off of the last
241421 ** row of output.
241422 */
241423 static int stmtEof(sqlite3_vtab_cursor *cur){
241424 stmt_cursor *pCur = (stmt_cursor*)cur;
241425 return pCur->pStmt==0;
241426 }
241427
241428 /*
241429 ** This method is called to "rewind" the stmt_cursor object back
241430 ** to the first row of output. This method is always called at least
@@ -241435,13 +241855,57 @@
241435 sqlite3_vtab_cursor *pVtabCursor,
241436 int idxNum, const char *idxStr,
241437 int argc, sqlite3_value **argv
241438 ){
241439 stmt_cursor *pCur = (stmt_cursor *)pVtabCursor;
241440 pCur->pStmt = 0;
241441 pCur->iRowid = 0;
241442 return stmtNext(pVtabCursor);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
241443 }
241444
241445 /*
241446 ** SQLite will invoke this method one or more times while planning a query
241447 ** that uses the stmt virtual table. This routine needs to create
241448
--- extsrc/sqlite3.c
+++ extsrc/sqlite3.c
@@ -1,8 +1,8 @@
1 /******************************************************************************
2 ** This file is an amalgamation of many separate C source files from SQLite
3 ** version 3.40.0. By combining all the individual C code files into this
4 ** single large file, the entire code can be compiled as a single translation
5 ** unit. This allows many compilers to do optimizations that would not be
6 ** possible if the files were compiled separately. Performance improvements
7 ** of 5% or more are commonly seen when SQLite is compiled as a single
8 ** translation unit.
@@ -450,13 +450,13 @@
450 **
451 ** See also: [sqlite3_libversion()],
452 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
453 ** [sqlite_version()] and [sqlite_source_id()].
454 */
455 #define SQLITE_VERSION "3.40.0"
456 #define SQLITE_VERSION_NUMBER 3040000
457 #define SQLITE_SOURCE_ID "2022-09-02 21:19:24 da7af290960ab8a04a1f55cdc5eeac36b47fa194edf67f0a05daa4b7f2a4071c"
458
459 /*
460 ** CAPI3REF: Run-Time Library Version Numbers
461 ** KEYWORDS: sqlite3_version sqlite3_sourceid
462 **
@@ -3728,10 +3728,13 @@
3728 **
3729 ** ^(<dt>[SQLITE_OPEN_SHAREDCACHE]</dt>
3730 ** <dd>The database is opened [shared cache] enabled, overriding
3731 ** the default shared cache setting provided by
3732 ** [sqlite3_enable_shared_cache()].)^
3733 ** The [use of shared cache mode is discouraged] and hence shared cache
3734 ** capabilities may be omitted from many builds of SQLite. In such cases,
3735 ** this option is a no-op.
3736 **
3737 ** ^(<dt>[SQLITE_OPEN_PRIVATECACHE]</dt>
3738 ** <dd>The database is opened [shared cache] disabled, overriding
3739 ** the default shared cache setting provided by
3740 ** [sqlite3_enable_shared_cache()].)^
@@ -3743,11 +3746,11 @@
3746 ** connection as soon as the connection is created. In addition to setting
3747 ** the extended result code mode, this flag also causes [sqlite3_open_v2()]
3748 ** to return an extended result code.</dd>
3749 **
3750 ** [[OPEN_NOFOLLOW]] ^(<dt>[SQLITE_OPEN_NOFOLLOW]</dt>
3751 ** <dd>The database filename is not allowed to contain a symbolic link</dd>
3752 ** </dl>)^
3753 **
3754 ** If the 3rd parameter to sqlite3_open_v2() is not one of the
3755 ** required combinations shown above optionally combined with other
3756 ** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits]
@@ -6586,11 +6589,11 @@
6589 ** CAPI3REF: Return The Schema Name For A Database Connection
6590 ** METHOD: sqlite3
6591 **
6592 ** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name
6593 ** for the N-th database on database connection D, or a NULL pointer of N is
6594 ** out of range. An N value of 0 means the main database file. An N of 1 is
6595 ** the "temp" schema. Larger values of N correspond to various ATTACH-ed
6596 ** databases.
6597 **
6598 ** Space to hold the string that is returned by sqlite3_db_name() is managed
6599 ** by SQLite itself. The string might be deallocated by any operation that
@@ -6769,11 +6772,11 @@
6772 **
6773 ** ^The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback
6774 ** function C that is invoked prior to each autovacuum of the database
6775 ** file. ^The callback is passed a copy of the generic data pointer (P),
6776 ** the schema-name of the attached database that is being autovacuumed,
6777 ** the size of the database file in pages, the number of free pages,
6778 ** and the number of bytes per page, respectively. The callback should
6779 ** return the number of free pages that should be removed by the
6780 ** autovacuum. ^If the callback returns zero, then no autovacuum happens.
6781 ** ^If the value returned is greater than or equal to the number of
6782 ** free pages, then a complete autovacuum happens.
@@ -6889,10 +6892,15 @@
6892 **
6893 ** ^(This routine enables or disables the sharing of the database cache
6894 ** and schema data structures between [database connection | connections]
6895 ** to the same database. Sharing is enabled if the argument is true
6896 ** and disabled if the argument is false.)^
6897 **
6898 ** This interface is omitted if SQLite is compiled with
6899 ** [-DSQLITE_OMIT_SHARED_CACHE]. The [-DSQLITE_OMIT_SHARED_CACHE]
6900 ** compile-time option is recommended because the
6901 ** [use of shared cache mode is discouraged].
6902 **
6903 ** ^Cache sharing is enabled and disabled for an entire process.
6904 ** This is a change as of SQLite [version 3.5.0] ([dateof:3.5.0]).
6905 ** In prior versions of SQLite,
6906 ** sharing was enabled or disabled for each thread separately.
@@ -6988,11 +6996,11 @@
6996 ** ^Setting the heap limits to zero disables the heap limiter mechanism.
6997 **
6998 ** ^The soft heap limit may not be greater than the hard heap limit.
6999 ** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N)
7000 ** is invoked with a value of N that is greater than the hard heap limit,
7001 ** the soft heap limit is set to the value of the hard heap limit.
7002 ** ^The soft heap limit is automatically enabled whenever the hard heap
7003 ** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and
7004 ** the soft heap limit is outside the range of 1..N, then the soft heap
7005 ** limit is set to N. ^Invoking sqlite3_soft_heap_limit64(0) when the
7006 ** hard heap limit is enabled makes the soft heap limit equal to the
@@ -9283,11 +9291,11 @@
9291 ** sqlite3_backup_init() is called and before the corresponding call to
9292 ** sqlite3_backup_finish(). SQLite does not currently check to see
9293 ** if the application incorrectly accesses the destination [database connection]
9294 ** and so no error code is reported, but the operations may malfunction
9295 ** nevertheless. Use of the destination database connection while a
9296 ** backup is in progress might also cause a mutex deadlock.
9297 **
9298 ** If running in [shared cache mode], the application must
9299 ** guarantee that the shared cache used by the destination database
9300 ** is not accessed while the backup is running. In practice this means
9301 ** that the application must guarantee that the disk file being
@@ -9711,11 +9719,11 @@
9719 ** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the
9720 ** meaning of each of these checkpoint modes.
9721 */
9722 #define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */
9723 #define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */
9724 #define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for readers */
9725 #define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */
9726
9727 /*
9728 ** CAPI3REF: Virtual Table Interface Configuration
9729 **
@@ -13142,10 +13150,15 @@
13150 /******** End of fts5.h *********/
13151
13152 /************** End of sqlite3.h *********************************************/
13153 /************** Continuing where we left off in sqliteInt.h ******************/
13154
13155 /*
13156 ** Reuse the STATIC_LRU for mutex access to sqlite3_temp_directory.
13157 */
13158 #define SQLITE_MUTEX_STATIC_TEMPDIR SQLITE_MUTEX_STATIC_VFS1
13159
13160 /*
13161 ** Include the configuration header output by 'configure' if we're using the
13162 ** autoconf-based build
13163 */
13164 #if defined(_HAVE_SQLITE_CONFIG_H) && !defined(SQLITECONFIG_H)
@@ -15553,67 +15566,67 @@
15566 #define OP_Checkpoint 3
15567 #define OP_JournalMode 4
15568 #define OP_Vacuum 5
15569 #define OP_VFilter 6 /* jump, synopsis: iplan=r[P3] zplan='P4' */
15570 #define OP_VUpdate 7 /* synopsis: data=r[P3@P2] */
15571 #define OP_Init 8 /* jump, synopsis: Start at P2 */
15572 #define OP_Goto 9 /* jump */
15573 #define OP_Gosub 10 /* jump */
15574 #define OP_InitCoroutine 11 /* jump */
15575 #define OP_Yield 12 /* jump */
15576 #define OP_MustBeInt 13 /* jump */
15577 #define OP_Jump 14 /* jump */
15578 #define OP_Once 15 /* jump */
15579 #define OP_If 16 /* jump */
15580 #define OP_IfNot 17 /* jump */
15581 #define OP_IsNullOrType 18 /* jump, synopsis: if typeof(r[P1]) IN (P3,5) goto P2 */
15582 #define OP_Not 19 /* same as TK_NOT, synopsis: r[P2]= !r[P1] */
15583 #define OP_IfNullRow 20 /* jump, synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */
15584 #define OP_SeekLT 21 /* jump, synopsis: key=r[P3@P4] */
15585 #define OP_SeekLE 22 /* jump, synopsis: key=r[P3@P4] */
15586 #define OP_SeekGE 23 /* jump, synopsis: key=r[P3@P4] */
15587 #define OP_SeekGT 24 /* jump, synopsis: key=r[P3@P4] */
15588 #define OP_IfNotOpen 25 /* jump, synopsis: if( !csr[P1] ) goto P2 */
15589 #define OP_IfNoHope 26 /* jump, synopsis: key=r[P3@P4] */
15590 #define OP_NoConflict 27 /* jump, synopsis: key=r[P3@P4] */
15591 #define OP_NotFound 28 /* jump, synopsis: key=r[P3@P4] */
15592 #define OP_Found 29 /* jump, synopsis: key=r[P3@P4] */
15593 #define OP_SeekRowid 30 /* jump, synopsis: intkey=r[P3] */
15594 #define OP_NotExists 31 /* jump, synopsis: intkey=r[P3] */
15595 #define OP_Last 32 /* jump */
15596 #define OP_IfSmaller 33 /* jump */
15597 #define OP_SorterSort 34 /* jump */
15598 #define OP_Sort 35 /* jump */
15599 #define OP_Rewind 36 /* jump */
15600 #define OP_SorterNext 37 /* jump */
15601 #define OP_Prev 38 /* jump */
15602 #define OP_Next 39 /* jump */
15603 #define OP_IdxLE 40 /* jump, synopsis: key=r[P3@P4] */
15604 #define OP_IdxGT 41 /* jump, synopsis: key=r[P3@P4] */
15605 #define OP_IdxLT 42 /* jump, synopsis: key=r[P3@P4] */
15606 #define OP_Or 43 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */
15607 #define OP_And 44 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */
15608 #define OP_IdxGE 45 /* jump, synopsis: key=r[P3@P4] */
15609 #define OP_RowSetRead 46 /* jump, synopsis: r[P3]=rowset(P1) */
15610 #define OP_RowSetTest 47 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */
15611 #define OP_Program 48 /* jump */
15612 #define OP_FkIfZero 49 /* jump, synopsis: if fkctr[P1]==0 goto P2 */
15613 #define OP_IsNull 50 /* jump, same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */
15614 #define OP_NotNull 51 /* jump, same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */
15615 #define OP_Ne 52 /* jump, same as TK_NE, synopsis: IF r[P3]!=r[P1] */
15616 #define OP_Eq 53 /* jump, same as TK_EQ, synopsis: IF r[P3]==r[P1] */
15617 #define OP_Gt 54 /* jump, same as TK_GT, synopsis: IF r[P3]>r[P1] */
15618 #define OP_Le 55 /* jump, same as TK_LE, synopsis: IF r[P3]<=r[P1] */
15619 #define OP_Lt 56 /* jump, same as TK_LT, synopsis: IF r[P3]<r[P1] */
15620 #define OP_Ge 57 /* jump, same as TK_GE, synopsis: IF r[P3]>=r[P1] */
15621 #define OP_ElseEq 58 /* jump, same as TK_ESCAPE */
15622 #define OP_IfPos 59 /* jump, synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */
15623 #define OP_IfNotZero 60 /* jump, synopsis: if r[P1]!=0 then r[P1]--, goto P2 */
15624 #define OP_DecrJumpZero 61 /* jump, synopsis: if (--r[P1])==0 goto P2 */
15625 #define OP_IncrVacuum 62 /* jump */
15626 #define OP_VNext 63 /* jump */
15627 #define OP_Filter 64 /* jump, synopsis: if key(P3@P4) not in filter(P1) goto P2 */
15628 #define OP_PureFunc 65 /* synopsis: r[P3]=func(r[P2@NP]) */
15629 #define OP_Function 66 /* synopsis: r[P3]=func(r[P2@NP]) */
15630 #define OP_Return 67
15631 #define OP_EndCoroutine 68
15632 #define OP_HaltIfNull 69 /* synopsis: if r[P3]=null halt */
@@ -15745,17 +15758,17 @@
15758 #define OPFLG_IN3 0x08 /* in3: P3 is an input */
15759 #define OPFLG_OUT2 0x10 /* out2: P2 is an output */
15760 #define OPFLG_OUT3 0x20 /* out3: P3 is an output */
15761 #define OPFLG_INITIALIZER {\
15762 /* 0 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,\
15763 /* 8 */ 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,\
15764 /* 16 */ 0x03, 0x03, 0x03, 0x12, 0x01, 0x09, 0x09, 0x09,\
15765 /* 24 */ 0x09, 0x01, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,\
15766 /* 32 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\
15767 /* 40 */ 0x01, 0x01, 0x01, 0x26, 0x26, 0x01, 0x23, 0x0b,\
15768 /* 48 */ 0x01, 0x01, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\
15769 /* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01,\
15770 /* 64 */ 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x00, 0x10,\
15771 /* 72 */ 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x00,\
15772 /* 80 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x02, 0x02,\
15773 /* 88 */ 0x02, 0x00, 0x00, 0x12, 0x1e, 0x20, 0x00, 0x00,\
15774 /* 96 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x26, 0x26,\
@@ -15857,10 +15870,11 @@
15870 SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe*, int addr, const char *zP4, int N);
15871 SQLITE_PRIVATE void sqlite3VdbeAppendP4(Vdbe*, void *pP4, int p4type);
15872 SQLITE_PRIVATE void sqlite3VdbeSetP4KeyInfo(Parse*, Index*);
15873 SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe*, int);
15874 SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe*, int);
15875 SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetLastOp(Vdbe*);
15876 SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Parse*);
15877 SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe*);
15878 SQLITE_PRIVATE void sqlite3VdbeReusable(Vdbe*);
15879 SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe*);
15880 SQLITE_PRIVATE void sqlite3VdbeMakeReady(Vdbe*,Parse*);
@@ -16741,10 +16755,11 @@
16755 void *pMiddle; /* First byte past end of full-size buffers and
16756 ** the first byte of LOOKASIDE_SMALL buffers */
16757 #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */
16758 void *pStart; /* First byte of available memory space */
16759 void *pEnd; /* First byte past end of available space */
16760 void *pTrueEnd; /* True value of pEnd, when db->pnBytesFreed!=0 */
16761 };
16762 struct LookasideSlot {
16763 LookasideSlot *pNext; /* Next buffer in the list of free buffers */
16764 };
16765
@@ -18189,11 +18204,11 @@
18204 #define EP_xIsSelect 0x001000 /* x.pSelect is valid (otherwise x.pList is) */
18205 #define EP_Skip 0x002000 /* Operator does not contribute to affinity */
18206 #define EP_Reduced 0x004000 /* Expr struct EXPR_REDUCEDSIZE bytes only */
18207 #define EP_Win 0x008000 /* Contains window functions */
18208 #define EP_TokenOnly 0x010000 /* Expr struct EXPR_TOKENONLYSIZE bytes only */
18209 /* 0x020000 // Available for reuse */
18210 #define EP_IfNullRow 0x040000 /* The TK_IF_NULL_ROW opcode */
18211 #define EP_Unlikely 0x080000 /* unlikely() or likelihood() function */
18212 #define EP_ConstFunc 0x100000 /* A SQLITE_FUNC_CONSTANT or _SLOCHNG function */
18213 #define EP_CanBeNull 0x200000 /* Can be null despite NOT NULL constraint */
18214 #define EP_Subquery 0x400000 /* Tree contains a TK_SELECT operator */
@@ -19667,10 +19682,11 @@
19682 SQLITE_PRIVATE void *sqlite3Realloc(void*, u64);
19683 SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *, void *, u64);
19684 SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *, void *, u64);
19685 SQLITE_PRIVATE void sqlite3DbFree(sqlite3*, void*);
19686 SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3*, void*);
19687 SQLITE_PRIVATE void sqlite3DbNNFreeNN(sqlite3*, void*);
19688 SQLITE_PRIVATE int sqlite3MallocSize(const void*);
19689 SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3*, const void*);
19690 SQLITE_PRIVATE void *sqlite3PageMalloc(int);
19691 SQLITE_PRIVATE void sqlite3PageFree(void*);
19692 SQLITE_PRIVATE void sqlite3MemSetDefault(void);
@@ -19777,18 +19793,20 @@
19793 SQLITE_PRIVATE void sqlite3TreeViewColumnList(TreeView*, const Column*, int, u8);
19794 SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView*, const SrcList*);
19795 SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView*, const Select*, u8);
19796 SQLITE_PRIVATE void sqlite3TreeViewWith(TreeView*, const With*, u8);
19797 SQLITE_PRIVATE void sqlite3TreeViewUpsert(TreeView*, const Upsert*, u8);
19798 #if TREETRACE_ENABLED
19799 SQLITE_PRIVATE void sqlite3TreeViewDelete(const With*, const SrcList*, const Expr*,
19800 const ExprList*,const Expr*, const Trigger*);
19801 SQLITE_PRIVATE void sqlite3TreeViewInsert(const With*, const SrcList*,
19802 const IdList*, const Select*, const ExprList*,
19803 int, const Upsert*, const Trigger*);
19804 SQLITE_PRIVATE void sqlite3TreeViewUpdate(const With*, const SrcList*, const ExprList*,
19805 const Expr*, int, const ExprList*, const Expr*,
19806 const Upsert*, const Trigger*);
19807 #endif
19808 #ifndef SQLITE_OMIT_TRIGGER
19809 SQLITE_PRIVATE void sqlite3TreeViewTriggerStep(TreeView*, const TriggerStep*, u8, u8);
19810 SQLITE_PRIVATE void sqlite3TreeViewTrigger(TreeView*, const Trigger*, u8, u8);
19811 #endif
19812 #ifndef SQLITE_OMIT_WINDOWFUNC
@@ -20189,10 +20207,11 @@
20207 SQLITE_PRIVATE int sqlite3FixSrcList(DbFixer*, SrcList*);
20208 SQLITE_PRIVATE int sqlite3FixSelect(DbFixer*, Select*);
20209 SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*);
20210 SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*);
20211 SQLITE_PRIVATE int sqlite3RealSameAsInt(double,sqlite3_int64);
20212 SQLITE_PRIVATE i64 sqlite3RealToI64(double);
20213 SQLITE_PRIVATE void sqlite3Int64ToText(i64,char*);
20214 SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8);
20215 SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*);
20216 SQLITE_PRIVATE int sqlite3GetUInt32(const char*, u32*);
20217 SQLITE_PRIVATE int sqlite3Atoi(const char*);
@@ -21635,13 +21654,10 @@
21654 "OMIT_WSD",
21655 #endif
21656 #ifdef SQLITE_OMIT_XFER_OPT
21657 "OMIT_XFER_OPT",
21658 #endif
 
 
 
21659 #ifdef SQLITE_PERFORMANCE_TRACE
21660 "PERFORMANCE_TRACE",
21661 #endif
21662 #ifdef SQLITE_POWERSAFE_OVERWRITE
21663 # if SQLITE_POWERSAFE_OVERWRITE != 1
@@ -22590,11 +22606,11 @@
22606 ** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare()
22607 ** is really a pointer to an instance of this structure.
22608 */
22609 struct Vdbe {
22610 sqlite3 *db; /* The database connection that owns this statement */
22611 Vdbe **ppVPrev,*pVNext; /* Linked list of VDBEs with the same Vdbe.db */
22612 Parse *pParse; /* Parsing context used to create this Vdbe */
22613 ynVar nVar; /* Number of entries in aVar[] */
22614 int nMem; /* Number of memory locations currently allocated */
22615 int nCursor; /* Number of slots in apCsr[] */
22616 u32 cacheCtr; /* VdbeCursor row cache generation counter */
@@ -23148,10 +23164,12 @@
23164 int i; /* Used to iterate through schemas */
23165 int nByte = 0; /* Used to accumulate return value */
23166
23167 sqlite3BtreeEnterAll(db);
23168 db->pnBytesFreed = &nByte;
23169 assert( db->lookaside.pEnd==db->lookaside.pTrueEnd );
23170 db->lookaside.pEnd = db->lookaside.pStart;
23171 for(i=0; i<db->nDb; i++){
23172 Schema *pSchema = db->aDb[i].pSchema;
23173 if( ALWAYS(pSchema!=0) ){
23174 HashElem *p;
23175
@@ -23173,10 +23191,11 @@
23191 sqlite3DeleteTable(db, (Table *)sqliteHashData(p));
23192 }
23193 }
23194 }
23195 db->pnBytesFreed = 0;
23196 db->lookaside.pEnd = db->lookaside.pTrueEnd;
23197 sqlite3BtreeLeaveAll(db);
23198
23199 *pHighwater = 0;
23200 *pCurrent = nByte;
23201 break;
@@ -23190,13 +23209,16 @@
23209 case SQLITE_DBSTATUS_STMT_USED: {
23210 struct Vdbe *pVdbe; /* Used to iterate through VMs */
23211 int nByte = 0; /* Used to accumulate return value */
23212
23213 db->pnBytesFreed = &nByte;
23214 assert( db->lookaside.pEnd==db->lookaside.pTrueEnd );
23215 db->lookaside.pEnd = db->lookaside.pStart;
23216 for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pVNext){
23217 sqlite3VdbeDelete(pVdbe);
23218 }
23219 db->lookaside.pEnd = db->lookaside.pTrueEnd;
23220 db->pnBytesFreed = 0;
23221
23222 *pHighwater = 0; /* IMP: R-64479-57858 */
23223 *pCurrent = nByte;
23224
@@ -23528,11 +23550,11 @@
23550 X1 = 36525*(Y+4716)/100;
23551 X2 = 306001*(M+1)/10000;
23552 p->iJD = (sqlite3_int64)((X1 + X2 + D + B - 1524.5 ) * 86400000);
23553 p->validJD = 1;
23554 if( p->validHMS ){
23555 p->iJD += p->h*3600000 + p->m*60000 + (sqlite3_int64)(p->s*1000 + 0.5);
23556 if( p->validTZ ){
23557 p->iJD -= p->tz*60000;
23558 p->validYMD = 0;
23559 p->validHMS = 0;
23560 p->validTZ = 0;
@@ -24037,11 +24059,11 @@
24059 ** weekday N where 0==Sunday, 1==Monday, and so forth. If the
24060 ** date is already on the appropriate weekday, this is a no-op.
24061 */
24062 if( sqlite3_strnicmp(z, "weekday ", 8)==0
24063 && sqlite3AtoF(&z[8], &r, sqlite3Strlen30(&z[8]), SQLITE_UTF8)>0
24064 && r>=0.0 && r<7.0 && (n=(int)r)==r ){
24065 sqlite3_int64 Z;
24066 computeYMD_HMS(p);
24067 p->validTZ = 0;
24068 p->validJD = 0;
24069 computeJD(p);
@@ -24835,10 +24857,11 @@
24857 DO_OS_MALLOC_TEST(0);
24858 /* 0x87f7f is a mask of SQLITE_OPEN_ flags that are valid to be passed
24859 ** down into the VFS layer. Some SQLITE_OPEN_ flags (for example,
24860 ** SQLITE_OPEN_FULLMUTEX or SQLITE_OPEN_SHAREDCACHE) are blocked before
24861 ** reaching the VFS. */
24862 assert( zPath || (flags & SQLITE_OPEN_EXCLUSIVE) );
24863 rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x1087f7f, pFlagsOut);
24864 assert( rc==SQLITE_OK || pFile->pMethods==0 );
24865 return rc;
24866 }
24867 SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){
@@ -29100,11 +29123,11 @@
29123 /*
29124 ** TRUE if p is a lookaside memory allocation from db
29125 */
29126 #ifndef SQLITE_OMIT_LOOKASIDE
29127 static int isLookaside(sqlite3 *db, const void *p){
29128 return SQLITE_WITHIN(p, db->lookaside.pStart, db->lookaside.pTrueEnd);
29129 }
29130 #else
29131 #define isLookaside(A,B) 0
29132 #endif
29133
@@ -29124,22 +29147,20 @@
29147 #endif
29148 }
29149 SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, const void *p){
29150 assert( p!=0 );
29151 #ifdef SQLITE_DEBUG
29152 if( db==0 ){
29153 assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_HEAP) );
29154 assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
29155 }else if( !isLookaside(db,p) ){
29156 assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
29157 assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
 
 
29158 }
29159 #endif
29160 if( db ){
29161 if( ((uptr)p)<(uptr)(db->lookaside.pTrueEnd) ){
29162 #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE
29163 if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){
29164 assert( sqlite3_mutex_held(db->mutex) );
29165 return LOOKASIDE_SMALL;
29166 }
@@ -29191,18 +29212,15 @@
29212 */
29213 SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3 *db, void *p){
29214 assert( db==0 || sqlite3_mutex_held(db->mutex) );
29215 assert( p!=0 );
29216 if( db ){
 
 
 
 
29217 if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){
29218 #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE
29219 if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){
29220 LookasideSlot *pBuf = (LookasideSlot*)p;
29221 assert( db->pnBytesFreed==0 );
29222 #ifdef SQLITE_DEBUG
29223 memset(p, 0xaa, LOOKASIDE_SMALL); /* Trash freed content */
29224 #endif
29225 pBuf->pNext = db->lookaside.pSmallFree;
29226 db->lookaside.pSmallFree = pBuf;
@@ -29209,24 +29227,66 @@
29227 return;
29228 }
29229 #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */
29230 if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){
29231 LookasideSlot *pBuf = (LookasideSlot*)p;
29232 assert( db->pnBytesFreed==0 );
29233 #ifdef SQLITE_DEBUG
29234 memset(p, 0xaa, db->lookaside.szTrue); /* Trash freed content */
29235 #endif
29236 pBuf->pNext = db->lookaside.pFree;
29237 db->lookaside.pFree = pBuf;
29238 return;
29239 }
29240 }
29241 if( db->pnBytesFreed ){
29242 measureAllocationSize(db, p);
29243 return;
29244 }
29245 }
29246 assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
29247 assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
29248 assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) );
29249 sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
29250 sqlite3_free(p);
29251 }
29252 SQLITE_PRIVATE void sqlite3DbNNFreeNN(sqlite3 *db, void *p){
29253 assert( db!=0 );
29254 assert( sqlite3_mutex_held(db->mutex) );
29255 assert( p!=0 );
29256 if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){
29257 #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE
29258 if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){
29259 LookasideSlot *pBuf = (LookasideSlot*)p;
29260 assert( db->pnBytesFreed==0 );
29261 #ifdef SQLITE_DEBUG
29262 memset(p, 0xaa, LOOKASIDE_SMALL); /* Trash freed content */
29263 #endif
29264 pBuf->pNext = db->lookaside.pSmallFree;
29265 db->lookaside.pSmallFree = pBuf;
29266 return;
29267 }
29268 #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */
29269 if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){
29270 LookasideSlot *pBuf = (LookasideSlot*)p;
29271 assert( db->pnBytesFreed==0 );
29272 #ifdef SQLITE_DEBUG
29273 memset(p, 0xaa, db->lookaside.szTrue); /* Trash freed content */
29274 #endif
29275 pBuf->pNext = db->lookaside.pFree;
29276 db->lookaside.pFree = pBuf;
29277 return;
29278 }
29279 }
29280 if( db->pnBytesFreed ){
29281 measureAllocationSize(db, p);
29282 return;
29283 }
29284 assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
29285 assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
29286 sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
29287 sqlite3_free(p);
29288 }
29289 SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){
29290 assert( db==0 || sqlite3_mutex_held(db->mutex) );
29291 if( p ) sqlite3DbFreeNN(db, p);
29292 }
@@ -29559,12 +29619,17 @@
29619 if( db->nVdbeExec>0 ){
29620 AtomicStore(&db->u1.isInterrupted, 1);
29621 }
29622 DisableLookaside;
29623 if( db->pParse ){
29624 Parse *pParse;
29625 sqlite3ErrorMsg(db->pParse, "out of memory");
29626 db->pParse->rc = SQLITE_NOMEM_BKPT;
29627 for(pParse=db->pParse->pOuterParse; pParse; pParse = pParse->pOuterParse){
29628 pParse->nErr++;
29629 pParse->rc = SQLITE_NOMEM;
29630 }
29631 }
29632 }
29633 return 0;
29634 }
29635
@@ -30426,12 +30491,12 @@
30491 }
30492 break;
30493 case etSQLESCAPE: /* %q: Escape ' characters */
30494 case etSQLESCAPE2: /* %Q: Escape ' and enclose in '...' */
30495 case etSQLESCAPE3: { /* %w: Escape " characters */
30496 i64 i, j, k, n;
30497 int needQuote, isnull;
30498 char ch;
30499 char q = ((xtype==etSQLESCAPE3)?'"':'\''); /* Quote character */
30500 char *escarg;
30501
30502 if( bArgList ){
@@ -31073,11 +31138,11 @@
31138 */
31139 SQLITE_PRIVATE void sqlite3TreeViewLine(TreeView *p, const char *zFormat, ...){
31140 va_list ap;
31141 int i;
31142 StrAccum acc;
31143 char zBuf[1000];
31144 sqlite3StrAccumInit(&acc, 0, zBuf, sizeof(zBuf), 0);
31145 if( p ){
31146 for(i=0; i<p->iLevel && i<(int)sizeof(p->bLine)-1; i++){
31147 sqlite3_str_append(&acc, p->bLine[i] ? "| " : " ", 4);
31148 }
@@ -31115,12 +31180,12 @@
31180 int i;
31181 sqlite3TreeViewPush(&pView, moreToFollow);
31182 sqlite3TreeViewLine(pView, "COLUMNS");
31183 for(i=0; i<nCol; i++){
31184 u16 flg = aCol[i].colFlags;
31185 int colMoreToFollow = i<(nCol - 1);
31186 sqlite3TreeViewPush(&pView, colMoreToFollow);
31187 sqlite3TreeViewLine(pView, 0);
31188 printf(" %s", aCol[i].zCnName);
31189 switch( aCol[i].eCType ){
31190 case COLTYPE_ANY: printf(" ANY"); break;
31191 case COLTYPE_BLOB: printf(" BLOB"); break;
@@ -31204,11 +31269,11 @@
31269 if( pSrc==0 ) return;
31270 for(i=0; i<pSrc->nSrc; i++){
31271 const SrcItem *pItem = &pSrc->a[i];
31272 StrAccum x;
31273 int n = 0;
31274 char zLine[1000];
31275 sqlite3StrAccumInit(&x, 0, zLine, sizeof(zLine), 0);
31276 x.printfFlags |= SQLITE_PRINTF_INTERNAL;
31277 sqlite3_str_appendf(&x, "{%d:*} %!S", pItem->iCursor, pItem);
31278 if( pItem->pTab ){
31279 sqlite3_str_appendf(&x, " tab=%Q nCol=%d ptr=%p used=%llx",
@@ -31247,11 +31312,11 @@
31312 if( pItem->pSelect ){
31313 if( pItem->pTab ){
31314 Table *pTab = pItem->pTab;
31315 sqlite3TreeViewColumnList(pView, pTab->aCol, pTab->nCol, 1);
31316 }
31317 assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
31318 sqlite3TreeViewSelect(pView, pItem->pSelect, (--n)>0);
31319 }
31320 if( pItem->fg.isTabFunc ){
31321 sqlite3TreeViewExprList(pView, pItem->u1.pFuncArg, 0, "func-args:");
31322 }
@@ -32014,10 +32079,11 @@
32079 pUpsert = pUpsert->pNextUpsert;
32080 }
32081 sqlite3TreeViewPop(&pView);
32082 }
32083
32084 #if TREETRACE_ENABLED
32085 /*
32086 ** Generate a human-readable diagram of the data structure that go
32087 ** into generating an DELETE statement.
32088 */
32089 SQLITE_PRIVATE void sqlite3TreeViewDelete(
@@ -32067,11 +32133,13 @@
32133 if( pTrigger ){
32134 sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1);
32135 }
32136 sqlite3TreeViewPop(&pView);
32137 }
32138 #endif /* TREETRACE_ENABLED */
32139
32140 #if TREETRACE_ENABLED
32141 /*
32142 ** Generate a human-readable diagram of the data structure that go
32143 ** into generating an INSERT statement.
32144 */
32145 SQLITE_PRIVATE void sqlite3TreeViewInsert(
@@ -32135,11 +32203,13 @@
32203 if( pTrigger ){
32204 sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1);
32205 }
32206 sqlite3TreeViewPop(&pView);
32207 }
32208 #endif /* TREETRACE_ENABLED */
32209
32210 #if TREETRACE_ENABLED
32211 /*
32212 ** Generate a human-readable diagram of the data structure that go
32213 ** into generating an UPDATE statement.
32214 */
32215 SQLITE_PRIVATE void sqlite3TreeViewUpdate(
@@ -32211,10 +32281,11 @@
32281 if( pTrigger ){
32282 sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1);
32283 }
32284 sqlite3TreeViewPop(&pView);
32285 }
32286 #endif /* TREETRACE_ENABLED */
32287
32288 #ifndef SQLITE_OMIT_TRIGGER
32289 /*
32290 ** Show a human-readable graph of a TriggerStep
32291 */
@@ -32324,20 +32395,45 @@
32395
32396 /* All threads share a single random number generator.
32397 ** This structure is the current state of the generator.
32398 */
32399 static SQLITE_WSD struct sqlite3PrngType {
32400 u32 s[16]; /* 64 bytes of chacha20 state */
32401 u8 out[64]; /* Output bytes */
32402 u8 n; /* Output bytes remaining */
32403 } sqlite3Prng;
32404
32405
32406 /* The RFC-7539 ChaCha20 block function
32407 */
32408 #define ROTL(a,b) (((a) << (b)) | ((a) >> (32 - (b))))
32409 #define QR(a, b, c, d) ( \
32410 a += b, d ^= a, d = ROTL(d,16), \
32411 c += d, b ^= c, b = ROTL(b,12), \
32412 a += b, d ^= a, d = ROTL(d, 8), \
32413 c += d, b ^= c, b = ROTL(b, 7))
32414 static void chacha_block(u32 *out, const u32 *in){
32415 int i;
32416 u32 x[16];
32417 memcpy(x, in, 64);
32418 for(i=0; i<10; i++){
32419 QR(x[0], x[4], x[ 8], x[12]);
32420 QR(x[1], x[5], x[ 9], x[13]);
32421 QR(x[2], x[6], x[10], x[14]);
32422 QR(x[3], x[7], x[11], x[15]);
32423 QR(x[0], x[5], x[10], x[15]);
32424 QR(x[1], x[6], x[11], x[12]);
32425 QR(x[2], x[7], x[ 8], x[13]);
32426 QR(x[3], x[4], x[ 9], x[14]);
32427 }
32428 for(i=0; i<16; i++) out[i] = x[i]+in[i];
32429 }
32430
32431 /*
32432 ** Return N random bytes.
32433 */
32434 SQLITE_API void sqlite3_randomness(int N, void *pBuf){
 
32435 unsigned char *zBuf = pBuf;
32436
32437 /* The "wsdPrng" macro will resolve to the pseudo-random number generator
32438 ** state vector. If writable static data is unsupported on the target,
32439 ** we have to locate the state vector at run-time. In the more common
@@ -32363,57 +32459,50 @@
32459 mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG);
32460 #endif
32461
32462 sqlite3_mutex_enter(mutex);
32463 if( N<=0 || pBuf==0 ){
32464 wsdPrng.s[0] = 0;
32465 sqlite3_mutex_leave(mutex);
32466 return;
32467 }
32468
32469 /* Initialize the state of the random number generator once,
32470 ** the first time this routine is called.
 
 
 
 
 
 
32471 */
32472 if( wsdPrng.s[0]==0 ){
32473 sqlite3_vfs *pVfs = sqlite3_vfs_find(0);
32474 static const u32 chacha20_init[] = {
32475 0x61707865, 0x3320646e, 0x79622d32, 0x6b206574
32476 };
32477 memcpy(&wsdPrng.s[0], chacha20_init, 16);
32478 if( NEVER(pVfs==0) ){
32479 memset(&wsdPrng.s[4], 0, 44);
32480 }else{
32481 sqlite3OsRandomness(pVfs, 44, (char*)&wsdPrng.s[4]);
32482 }
32483 wsdPrng.s[15] = wsdPrng.s[12];
32484 wsdPrng.s[12] = 0;
32485 wsdPrng.n = 0;
 
 
 
 
 
 
 
32486 }
32487
32488 assert( N>0 );
32489 while( 1 /* exit by break */ ){
32490 if( N<=wsdPrng.n ){
32491 memcpy(zBuf, &wsdPrng.out[wsdPrng.n-N], N);
32492 wsdPrng.n -= N;
32493 break;
32494 }
32495 if( wsdPrng.n>0 ){
32496 memcpy(zBuf, wsdPrng.out, wsdPrng.n);
32497 N -= wsdPrng.n;
32498 zBuf += wsdPrng.n;
32499 }
32500 wsdPrng.s[12]++;
32501 chacha_block((u32*)wsdPrng.out, wsdPrng.s);
32502 wsdPrng.n = 64;
32503 }
32504 sqlite3_mutex_leave(mutex);
32505 }
32506
32507 #ifndef SQLITE_UNTESTABLE
32508 /*
@@ -33449,11 +33538,11 @@
33538 SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
33539 char *zMsg;
33540 va_list ap;
33541 sqlite3 *db = pParse->db;
33542 assert( db!=0 );
33543 assert( db->pParse==pParse || db->pParse->pToplevel==pParse );
33544 db->errByteOffset = -2;
33545 va_start(ap, zFormat);
33546 zMsg = sqlite3VMPrintf(db, zFormat, ap);
33547 va_end(ap);
33548 if( db->errByteOffset<-1 ) db->errByteOffset = -1;
@@ -35267,67 +35356,67 @@
35356 /* 3 */ "Checkpoint" OpHelp(""),
35357 /* 4 */ "JournalMode" OpHelp(""),
35358 /* 5 */ "Vacuum" OpHelp(""),
35359 /* 6 */ "VFilter" OpHelp("iplan=r[P3] zplan='P4'"),
35360 /* 7 */ "VUpdate" OpHelp("data=r[P3@P2]"),
35361 /* 8 */ "Init" OpHelp("Start at P2"),
35362 /* 9 */ "Goto" OpHelp(""),
35363 /* 10 */ "Gosub" OpHelp(""),
35364 /* 11 */ "InitCoroutine" OpHelp(""),
35365 /* 12 */ "Yield" OpHelp(""),
35366 /* 13 */ "MustBeInt" OpHelp(""),
35367 /* 14 */ "Jump" OpHelp(""),
35368 /* 15 */ "Once" OpHelp(""),
35369 /* 16 */ "If" OpHelp(""),
35370 /* 17 */ "IfNot" OpHelp(""),
35371 /* 18 */ "IsNullOrType" OpHelp("if typeof(r[P1]) IN (P3,5) goto P2"),
35372 /* 19 */ "Not" OpHelp("r[P2]= !r[P1]"),
35373 /* 20 */ "IfNullRow" OpHelp("if P1.nullRow then r[P3]=NULL, goto P2"),
35374 /* 21 */ "SeekLT" OpHelp("key=r[P3@P4]"),
35375 /* 22 */ "SeekLE" OpHelp("key=r[P3@P4]"),
35376 /* 23 */ "SeekGE" OpHelp("key=r[P3@P4]"),
35377 /* 24 */ "SeekGT" OpHelp("key=r[P3@P4]"),
35378 /* 25 */ "IfNotOpen" OpHelp("if( !csr[P1] ) goto P2"),
35379 /* 26 */ "IfNoHope" OpHelp("key=r[P3@P4]"),
35380 /* 27 */ "NoConflict" OpHelp("key=r[P3@P4]"),
35381 /* 28 */ "NotFound" OpHelp("key=r[P3@P4]"),
35382 /* 29 */ "Found" OpHelp("key=r[P3@P4]"),
35383 /* 30 */ "SeekRowid" OpHelp("intkey=r[P3]"),
35384 /* 31 */ "NotExists" OpHelp("intkey=r[P3]"),
35385 /* 32 */ "Last" OpHelp(""),
35386 /* 33 */ "IfSmaller" OpHelp(""),
35387 /* 34 */ "SorterSort" OpHelp(""),
35388 /* 35 */ "Sort" OpHelp(""),
35389 /* 36 */ "Rewind" OpHelp(""),
35390 /* 37 */ "SorterNext" OpHelp(""),
35391 /* 38 */ "Prev" OpHelp(""),
35392 /* 39 */ "Next" OpHelp(""),
35393 /* 40 */ "IdxLE" OpHelp("key=r[P3@P4]"),
35394 /* 41 */ "IdxGT" OpHelp("key=r[P3@P4]"),
35395 /* 42 */ "IdxLT" OpHelp("key=r[P3@P4]"),
35396 /* 43 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"),
35397 /* 44 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"),
35398 /* 45 */ "IdxGE" OpHelp("key=r[P3@P4]"),
35399 /* 46 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"),
35400 /* 47 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"),
35401 /* 48 */ "Program" OpHelp(""),
35402 /* 49 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"),
35403 /* 50 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"),
35404 /* 51 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"),
35405 /* 52 */ "Ne" OpHelp("IF r[P3]!=r[P1]"),
35406 /* 53 */ "Eq" OpHelp("IF r[P3]==r[P1]"),
35407 /* 54 */ "Gt" OpHelp("IF r[P3]>r[P1]"),
35408 /* 55 */ "Le" OpHelp("IF r[P3]<=r[P1]"),
35409 /* 56 */ "Lt" OpHelp("IF r[P3]<r[P1]"),
35410 /* 57 */ "Ge" OpHelp("IF r[P3]>=r[P1]"),
35411 /* 58 */ "ElseEq" OpHelp(""),
35412 /* 59 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"),
35413 /* 60 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"),
35414 /* 61 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"),
35415 /* 62 */ "IncrVacuum" OpHelp(""),
35416 /* 63 */ "VNext" OpHelp(""),
35417 /* 64 */ "Filter" OpHelp("if key(P3@P4) not in filter(P1) goto P2"),
35418 /* 65 */ "PureFunc" OpHelp("r[P3]=func(r[P2@NP])"),
35419 /* 66 */ "Function" OpHelp("r[P3]=func(r[P2@NP])"),
35420 /* 67 */ "Return" OpHelp(""),
35421 /* 68 */ "EndCoroutine" OpHelp(""),
35422 /* 69 */ "HaltIfNull" OpHelp("if r[P3]=null halt"),
@@ -41310,30 +41399,39 @@
41399 ** pVfs->mxPathname bytes.
41400 */
41401 static int unixGetTempname(int nBuf, char *zBuf){
41402 const char *zDir;
41403 int iLimit = 0;
41404 int rc = SQLITE_OK;
41405
41406 /* It's odd to simulate an io-error here, but really this is just
41407 ** using the io-error infrastructure to test that SQLite handles this
41408 ** function failing.
41409 */
41410 zBuf[0] = 0;
41411 SimulateIOError( return SQLITE_IOERR );
41412
41413 sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
41414 zDir = unixTempFileDir();
41415 if( zDir==0 ){
41416 rc = SQLITE_IOERR_GETTEMPPATH;
41417 }else{
41418 do{
41419 u64 r;
41420 sqlite3_randomness(sizeof(r), &r);
41421 assert( nBuf>2 );
41422 zBuf[nBuf-2] = 0;
41423 sqlite3_snprintf(nBuf, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX"%llx%c",
41424 zDir, r, 0);
41425 if( zBuf[nBuf-2]!=0 || (iLimit++)>10 ){
41426 rc = SQLITE_ERROR;
41427 break;
41428 }
41429 }while( osAccess(zBuf,0)==0 );
41430 }
41431 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
41432 return rc;
41433 }
41434
41435 #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
41436 /*
41437 ** Routine to transform a unixFile into a proxy-locking unixFile.
@@ -43504,11 +43602,16 @@
43602 ** correctly. See ticket [bb3a86e890c8e96ab] */
43603 assert( ArraySize(aSyscall)==29 );
43604
43605 /* Register all VFSes defined in the aVfs[] array */
43606 for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){
43607 #ifdef SQLITE_DEFAULT_UNIX_VFS
43608 sqlite3_vfs_register(&aVfs[i],
43609 0==strcmp(aVfs[i].zName,SQLITE_DEFAULT_UNIX_VFS));
43610 #else
43611 sqlite3_vfs_register(&aVfs[i], i==0);
43612 #endif
43613 }
43614 unixBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1);
43615
43616 #ifndef SQLITE_OMIT_WAL
43617 /* Validate lock assumptions */
@@ -45472,10 +45575,11 @@
45575 char **ppDirectory = 0;
45576 #ifndef SQLITE_OMIT_AUTOINIT
45577 int rc = sqlite3_initialize();
45578 if( rc ) return rc;
45579 #endif
45580 sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
45581 if( type==SQLITE_WIN32_DATA_DIRECTORY_TYPE ){
45582 ppDirectory = &sqlite3_data_directory;
45583 }else if( type==SQLITE_WIN32_TEMP_DIRECTORY_TYPE ){
45584 ppDirectory = &sqlite3_temp_directory;
45585 }
@@ -45486,18 +45590,23 @@
45590 if( ppDirectory ){
45591 char *zCopy = 0;
45592 if( zValue && zValue[0] ){
45593 zCopy = sqlite3_mprintf("%s", zValue);
45594 if ( zCopy==0 ){
45595 rc = SQLITE_NOMEM_BKPT;
45596 goto set_directory8_done;
45597 }
45598 }
45599 sqlite3_free(*ppDirectory);
45600 *ppDirectory = zCopy;
45601 rc = SQLITE_OK;
45602 }else{
45603 rc = SQLITE_ERROR;
45604 }
45605 set_directory8_done:
45606 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
45607 return rc;
45608 }
45609
45610 /*
45611 ** This function is the same as sqlite3_win32_set_directory (below); however,
45612 ** it accepts a UTF-16 string.
@@ -48266,10 +48375,22 @@
48375 }
48376 }
48377 }
48378 return 0;
48379 }
48380
48381 /*
48382 ** If sqlite3_temp_directory is not, take the mutex and return true.
48383 **
48384 ** If sqlite3_temp_directory is NULL, omit the mutex and return false.
48385 */
48386 static int winTempDirDefined(void){
48387 sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
48388 if( sqlite3_temp_directory!=0 ) return 1;
48389 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
48390 return 0;
48391 }
48392
48393 /*
48394 ** Create a temporary file name and store the resulting pointer into pzBuf.
48395 ** The pointer returned in pzBuf must be freed via sqlite3_free().
48396 */
@@ -48303,24 +48424,27 @@
48424 ** has been explicitly set by the application; otherwise, use the one
48425 ** configured by the operating system.
48426 */
48427 nDir = nMax - (nPre + 15);
48428 assert( nDir>0 );
48429 if( winTempDirDefined() ){
48430 int nDirLen = sqlite3Strlen30(sqlite3_temp_directory);
48431 if( nDirLen>0 ){
48432 if( !winIsDirSep(sqlite3_temp_directory[nDirLen-1]) ){
48433 nDirLen++;
48434 }
48435 if( nDirLen>nDir ){
48436 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
48437 sqlite3_free(zBuf);
48438 OSTRACE(("TEMP-FILENAME rc=SQLITE_ERROR\n"));
48439 return winLogError(SQLITE_ERROR, 0, "winGetTempname1", 0);
48440 }
48441 sqlite3_snprintf(nMax, zBuf, "%s", sqlite3_temp_directory);
48442 }
48443 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
48444 }
48445
48446 #if defined(__CYGWIN__)
48447 else{
48448 static const char *azDirs[] = {
48449 0, /* getenv("SQLITE_TMPDIR") */
48450 0, /* getenv("TMPDIR") */
@@ -49105,11 +49229,11 @@
49229 /*
49230 ** Turn a relative pathname into a full pathname. Write the full
49231 ** pathname into zOut[]. zOut[] will be at least pVfs->mxPathname
49232 ** bytes in size.
49233 */
49234 static int winFullPathnameNoMutex(
49235 sqlite3_vfs *pVfs, /* Pointer to vfs object */
49236 const char *zRelative, /* Possibly relative input path */
49237 int nFull, /* Size of output buffer in bytes */
49238 char *zFull /* Output buffer */
49239 ){
@@ -49283,10 +49407,23 @@
49407 return SQLITE_OK;
49408 }else{
49409 return SQLITE_IOERR_NOMEM_BKPT;
49410 }
49411 #endif
49412 }
49413 static int winFullPathname(
49414 sqlite3_vfs *pVfs, /* Pointer to vfs object */
49415 const char *zRelative, /* Possibly relative input path */
49416 int nFull, /* Size of output buffer in bytes */
49417 char *zFull /* Output buffer */
49418 ){
49419 int rc;
49420 sqlite3_mutex *pMutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR);
49421 sqlite3_mutex_enter(pMutex);
49422 rc = winFullPathnameNoMutex(pVfs, zRelative, nFull, zFull);
49423 sqlite3_mutex_leave(pMutex);
49424 return rc;
49425 }
49426
49427 #ifndef SQLITE_OMIT_LOAD_EXTENSION
49428 /*
49429 ** Interfaces for opening a shared library, finding entry points
@@ -51072,39 +51209,58 @@
51209 */
51210 #if defined(SQLITE_DEBUG) && 0
51211 int sqlite3PcacheTrace = 2; /* 0: off 1: simple 2: cache dumps */
51212 int sqlite3PcacheMxDump = 9999; /* Max cache entries for pcacheDump() */
51213 # define pcacheTrace(X) if(sqlite3PcacheTrace){sqlite3DebugPrintf X;}
51214 static void pcachePageTrace(int i, sqlite3_pcache_page *pLower){
 
 
 
51215 PgHdr *pPg;
51216 unsigned char *a;
51217 int j;
51218 pPg = (PgHdr*)pLower->pExtra;
51219 printf("%3d: nRef %2d flgs %02x data ", i, pPg->nRef, pPg->flags);
51220 a = (unsigned char *)pLower->pBuf;
51221 for(j=0; j<12; j++) printf("%02x", a[j]);
51222 printf(" ptr %p\n", pPg);
51223 }
51224 static void pcacheDump(PCache *pCache){
51225 int N;
51226 int i;
51227 sqlite3_pcache_page *pLower;
51228
51229 if( sqlite3PcacheTrace<2 ) return;
51230 if( pCache->pCache==0 ) return;
51231 N = sqlite3PcachePagecount(pCache);
51232 if( N>sqlite3PcacheMxDump ) N = sqlite3PcacheMxDump;
51233 for(i=1; i<=N; i++){
51234 pLower = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, i, 0);
51235 if( pLower==0 ) continue;
51236 pcachePageTrace(i, pLower);
51237 if( ((PgHdr*)pLower)->pPage==0 ){
 
 
 
 
51238 sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, pLower, 0);
51239 }
51240 }
51241 }
51242 #else
51243 # define pcacheTrace(X)
51244 # define pcachePageTrace(PGNO, X)
51245 # define pcacheDump(X)
51246 #endif
51247
51248 /*
51249 ** Return 1 if pPg is on the dirty list for pCache. Return 0 if not.
51250 ** This routine runs inside of assert() statements only.
51251 */
51252 #ifdef SQLITE_DEBUG
51253 static int pageOnDirtyList(PCache *pCache, PgHdr *pPg){
51254 PgHdr *p;
51255 for(p=pCache->pDirty; p; p=p->pDirtyNext){
51256 if( p==pPg ) return 1;
51257 }
51258 return 0;
51259 }
51260 #endif
51261
51262 /*
51263 ** Check invariants on a PgHdr entry. Return true if everything is OK.
51264 ** Return false if any invariant is violated.
51265 **
51266 ** This routine is for use inside of assert() statements only. For
@@ -51119,12 +51275,17 @@
51275 assert( pPg->pgno>0 || pPg->pPager==0 ); /* Page number is 1 or more */
51276 pCache = pPg->pCache;
51277 assert( pCache!=0 ); /* Every page has an associated PCache */
51278 if( pPg->flags & PGHDR_CLEAN ){
51279 assert( (pPg->flags & PGHDR_DIRTY)==0 );/* Cannot be both CLEAN and DIRTY */
51280 assert( !pageOnDirtyList(pCache, pPg) );/* CLEAN pages not on dirty list */
51281 }else{
51282 assert( (pPg->flags & PGHDR_DIRTY)!=0 );/* If not CLEAN must be DIRTY */
51283 assert( pPg->pDirtyNext==0 || pPg->pDirtyNext->pDirtyPrev==pPg );
51284 assert( pPg->pDirtyPrev==0 || pPg->pDirtyPrev->pDirtyNext==pPg );
51285 assert( pPg->pDirtyPrev!=0 || pCache->pDirty==pPg );
51286 assert( pageOnDirtyList(pCache, pPg) );
51287 }
51288 /* WRITEABLE pages must also be DIRTY */
51289 if( pPg->flags & PGHDR_WRITEABLE ){
51290 assert( pPg->flags & PGHDR_DIRTY ); /* WRITEABLE implies DIRTY */
51291 }
@@ -51394,12 +51555,13 @@
51555 eCreate = createFlag & pCache->eCreate;
51556 assert( eCreate==0 || eCreate==1 || eCreate==2 );
51557 assert( createFlag==0 || pCache->eCreate==eCreate );
51558 assert( createFlag==0 || eCreate==1+(!pCache->bPurgeable||!pCache->pDirty) );
51559 pRes = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, eCreate);
51560 pcacheTrace(("%p.FETCH %d%s (result: %p) ",pCache,pgno,
51561 createFlag?" create":"",pRes));
51562 pcachePageTrace(pgno, pRes);
51563 return pRes;
51564 }
51565
51566 /*
51567 ** If the sqlite3PcacheFetch() routine is unable to allocate a new
@@ -51523,10 +51685,11 @@
51685 if( (--p->nRef)==0 ){
51686 if( p->flags&PGHDR_CLEAN ){
51687 pcacheUnpin(p);
51688 }else{
51689 pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT);
51690 assert( sqlite3PcachePageSanity(p) );
51691 }
51692 }
51693 }
51694
51695 /*
@@ -51566,10 +51729,11 @@
51729 if( p->flags & PGHDR_CLEAN ){
51730 p->flags ^= (PGHDR_DIRTY|PGHDR_CLEAN);
51731 pcacheTrace(("%p.DIRTY %d\n",p->pCache,p->pgno));
51732 assert( (p->flags & (PGHDR_DIRTY|PGHDR_CLEAN))==PGHDR_DIRTY );
51733 pcacheManageDirtyList(p, PCACHE_DIRTYLIST_ADD);
51734 assert( sqlite3PcachePageSanity(p) );
51735 }
51736 assert( sqlite3PcachePageSanity(p) );
51737 }
51738 }
51739
@@ -51628,18 +51792,28 @@
51792 /*
51793 ** Change the page number of page p to newPgno.
51794 */
51795 SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){
51796 PCache *pCache = p->pCache;
51797 sqlite3_pcache_page *pOther;
51798 assert( p->nRef>0 );
51799 assert( newPgno>0 );
51800 assert( sqlite3PcachePageSanity(p) );
51801 pcacheTrace(("%p.MOVE %d -> %d\n",pCache,p->pgno,newPgno));
51802 pOther = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, newPgno, 0);
51803 sqlite3GlobalConfig.pcache2.xRekey(pCache->pCache, p->pPage, p->pgno,newPgno);
51804 if( pOther ){
51805 PgHdr *pPg = (PgHdr*)pOther->pExtra;
51806 pPg->pgno = p->pgno;
51807 if( pPg->pPage==0 ){
51808 sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, pOther, 0);
51809 }
51810 }
51811 p->pgno = newPgno;
51812 if( (p->flags&PGHDR_DIRTY) && (p->flags&PGHDR_NEED_SYNC) ){
51813 pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT);
51814 assert( sqlite3PcachePageSanity(p) );
51815 }
51816 }
51817
51818 /*
51819 ** Drop every cache entry whose page number is greater than "pgno". The
@@ -51933,16 +52107,17 @@
52107 ** runtime using sqlite3_config(SQLITE_CONFIG_PCACHE_HDRSZ, &size). The
52108 ** sizes of the extensions sum to 272 bytes on x64 for 3.8.10, but this
52109 ** size can vary according to architecture, compile-time options, and
52110 ** SQLite library version number.
52111 **
52112 ** Historical note: It used to be that if the SQLITE_PCACHE_SEPARATE_HEADER
52113 ** was defined, then the page content would be held in a separate memory
52114 ** allocation from the PgHdr1. This was intended to avoid clownshoe memory
52115 ** allocations. However, the btree layer needs a small (16-byte) overrun
52116 ** area after the page content buffer. The header serves as that overrun
52117 ** area. Therefore SQLITE_PCACHE_SEPARATE_HEADER was discontinued to avoid
52118 ** any possibility of a memory error.
52119 **
52120 ** This module tracks pointers to PgHdr1 objects. Only pcache.c communicates
52121 ** with this module. Information is passed back and forth as PgHdr1 pointers.
52122 **
52123 ** The pcache.c and pager.c modules deal pointers to PgHdr objects.
@@ -51983,34 +52158,44 @@
52158 typedef struct PgFreeslot PgFreeslot;
52159 typedef struct PGroup PGroup;
52160
52161 /*
52162 ** Each cache entry is represented by an instance of the following
52163 ** structure. A buffer of PgHdr1.pCache->szPage bytes is allocated
52164 ** directly before this structure and is used to cache the page content.
 
52165 **
52166 ** When reading a corrupt database file, it is possible that SQLite might
52167 ** read a few bytes (no more than 16 bytes) past the end of the page buffer.
52168 ** It will only read past the end of the page buffer, never write. This
52169 ** object is positioned immediately after the page buffer to serve as an
52170 ** overrun area, so that overreads are harmless.
52171 **
52172 ** Variables isBulkLocal and isAnchor were once type "u8". That works,
52173 ** but causes a 2-byte gap in the structure for most architectures (since
52174 ** pointers must be either 4 or 8-byte aligned). As this structure is located
52175 ** in memory directly after the associated page data, if the database is
52176 ** corrupt, code at the b-tree layer may overread the page buffer and
52177 ** read part of this structure before the corruption is detected. This
52178 ** can cause a valgrind error if the unitialized gap is accessed. Using u16
52179 ** ensures there is no such gap, and therefore no bytes of uninitialized
52180 ** memory in the structure.
52181 **
52182 ** The pLruNext and pLruPrev pointers form a double-linked circular list
52183 ** of all pages that are unpinned. The PGroup.lru element (which should be
52184 ** the only element on the list with PgHdr1.isAnchor set to 1) forms the
52185 ** beginning and the end of the list.
52186 */
52187 struct PgHdr1 {
52188 sqlite3_pcache_page page; /* Base class. Must be first. pBuf & pExtra */
52189 unsigned int iKey; /* Key value (page number) */
52190 u16 isBulkLocal; /* This page from bulk local storage */
52191 u16 isAnchor; /* This is the PGroup.lru element */
52192 PgHdr1 *pNext; /* Next in hash table chain */
52193 PCache1 *pCache; /* Cache that currently owns this page */
52194 PgHdr1 *pLruNext; /* Next in circular LRU list of unpinned pages */
52195 PgHdr1 *pLruPrev; /* Previous in LRU list of unpinned pages */
52196 /* NB: pLruPrev is only valid if pLruNext!=0 */
52197 };
52198
52199 /*
52200 ** A page is pinned if it is not on the LRU list. To be "pinned" means
52201 ** that the page is in active use and must not be deallocated.
@@ -52332,29 +52517,17 @@
52517 assert( pcache1.separateCache==0 );
52518 assert( pCache->pGroup==&pcache1.grp );
52519 pcache1LeaveMutex(pCache->pGroup);
52520 #endif
52521 if( benignMalloc ){ sqlite3BeginBenignMalloc(); }
 
 
 
 
 
 
 
 
 
52522 pPg = pcache1Alloc(pCache->szAlloc);
 
52523 if( benignMalloc ){ sqlite3EndBenignMalloc(); }
52524 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
52525 pcache1EnterMutex(pCache->pGroup);
52526 #endif
52527 if( pPg==0 ) return 0;
 
52528 p = (PgHdr1 *)&((u8 *)pPg)[pCache->szPage];
 
52529 p->page.pBuf = pPg;
52530 p->page.pExtra = &p[1];
52531 p->isBulkLocal = 0;
52532 p->isAnchor = 0;
52533 p->pLruPrev = 0; /* Initializing this saves a valgrind error */
@@ -52374,13 +52547,10 @@
52547 if( p->isBulkLocal ){
52548 p->pNext = pCache->pFree;
52549 pCache->pFree = p;
52550 }else{
52551 pcache1Free(p->page.pBuf);
 
 
 
52552 }
52553 (*pCache->pnPurgeable)--;
52554 }
52555
52556 /*
@@ -53017,27 +53187,45 @@
53187 unsigned int iNew
53188 ){
53189 PCache1 *pCache = (PCache1 *)p;
53190 PgHdr1 *pPage = (PgHdr1 *)pPg;
53191 PgHdr1 **pp;
53192 unsigned int hOld, hNew;
53193 assert( pPage->iKey==iOld );
53194 assert( pPage->pCache==pCache );
53195 assert( iOld!=iNew ); /* The page number really is changing */
53196
53197 pcache1EnterMutex(pCache->pGroup);
53198
53199 assert( pcache1FetchNoMutex(p, iOld, 0)==pPage ); /* pPg really is iOld */
53200 hOld = iOld%pCache->nHash;
53201 pp = &pCache->apHash[hOld];
53202 while( (*pp)!=pPage ){
53203 pp = &(*pp)->pNext;
53204 }
53205 *pp = pPage->pNext;
53206
53207 hNew = iNew%pCache->nHash;
53208 pp = &pCache->apHash[hNew];
53209 while( *pp ){
53210 if( (*pp)->iKey==iNew ){
53211 /* If there is already another pcache entry at iNew, change it to iOld,
53212 ** thus swapping the positions of iNew and iOld */
53213 PgHdr1 *pOld = *pp;
53214 *pp = pOld->pNext;
53215 pOld->pNext = pCache->apHash[hOld];
53216 pCache->apHash[hOld] = pOld;
53217 pOld->iKey = iOld;
53218 break;
53219 }else{
53220 pp = &(*pp)->pNext;
53221 }
53222 }
53223
53224 pPage->iKey = iNew;
53225 pPage->pNext = pCache->apHash[hNew];
53226 pCache->apHash[hNew] = pPage;
53227 if( iNew>pCache->iMaxKey ){
53228 pCache->iMaxKey = iNew;
53229 }
53230
53231 pcache1LeaveMutex(pCache->pGroup);
@@ -53140,13 +53328,10 @@
53328 while( (nReq<0 || nFree<nReq)
53329 && (p=pcache1.grp.lru.pLruPrev)!=0
53330 && p->isAnchor==0
53331 ){
53332 nFree += pcache1MemSize(p->page.pBuf);
 
 
 
53333 assert( PAGE_IS_UNPINNED(p) );
53334 pcache1PinPage(p);
53335 pcache1RemoveFromHash(p, 1);
53336 }
53337 pcache1LeaveMutex(&pcache1.grp);
@@ -59631,10 +59816,11 @@
59816 int flags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE;
59817 int nSpill;
59818
59819 if( pPager->tempFile ){
59820 flags |= (SQLITE_OPEN_DELETEONCLOSE|SQLITE_OPEN_TEMP_JOURNAL);
59821 flags |= SQLITE_OPEN_EXCLUSIVE;
59822 nSpill = sqlite3Config.nStmtSpill;
59823 }else{
59824 flags |= SQLITE_OPEN_MAIN_JOURNAL;
59825 nSpill = jrnlBufferSize(pPager);
59826 }
@@ -59666,10 +59852,11 @@
59852 }
59853
59854 if( rc!=SQLITE_OK ){
59855 sqlite3BitvecDestroy(pPager->pInJournal);
59856 pPager->pInJournal = 0;
59857 pPager->journalOff = 0;
59858 }else{
59859 assert( pPager->eState==PAGER_WRITER_LOCKED );
59860 pPager->eState = PAGER_WRITER_CACHEMOD;
59861 }
59862
@@ -66729,10 +66916,11 @@
66916 ** db using sqlite3SchemaToIndex().
66917 */
66918 SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3 *db, int iDb, Schema *pSchema){
66919 Btree *p;
66920 assert( db!=0 );
66921 if( db->pVfs==0 && db->nDb==0 ) return 1;
66922 if( pSchema ) iDb = sqlite3SchemaToIndex(db, pSchema);
66923 assert( iDb>=0 && iDb<db->nDb );
66924 if( !sqlite3_mutex_held(db->mutex) ) return 0;
66925 if( iDb==1 ) return 1;
66926 p = db->aDb[iDb].pBt;
@@ -68301,12 +68489,11 @@
68489 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
68490 assert( pPage->pBt!=0 );
68491 assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE );
68492 assert( pPage->nOverflow==0 );
68493 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
68494 data = pPage->aData;
 
68495 hdr = pPage->hdrOffset;
68496 cellOffset = pPage->cellOffset;
68497 nCell = pPage->nCell;
68498 assert( nCell==get2byte(&data[hdr+3]) || CORRUPT_DB );
68499 iCellFirst = cellOffset + 2*nCell;
@@ -68356,43 +68543,42 @@
68543 }
68544
68545 cbrk = usableSize;
68546 iCellLast = usableSize - 4;
68547 iCellStart = get2byte(&data[hdr+5]);
68548 if( nCell>0 ){
68549 temp = sqlite3PagerTempSpace(pPage->pBt->pPager);
68550 memcpy(&temp[iCellStart], &data[iCellStart], usableSize - iCellStart);
68551 src = temp;
68552 for(i=0; i<nCell; i++){
68553 u8 *pAddr; /* The i-th cell pointer */
68554 pAddr = &data[cellOffset + i*2];
68555 pc = get2byte(pAddr);
68556 testcase( pc==iCellFirst );
68557 testcase( pc==iCellLast );
68558 /* These conditions have already been verified in btreeInitPage()
68559 ** if PRAGMA cell_size_check=ON.
68560 */
68561 if( pc<iCellStart || pc>iCellLast ){
68562 return SQLITE_CORRUPT_PAGE(pPage);
68563 }
68564 assert( pc>=iCellStart && pc<=iCellLast );
68565 size = pPage->xCellSize(pPage, &src[pc]);
68566 cbrk -= size;
68567 if( cbrk<iCellStart || pc+size>usableSize ){
68568 return SQLITE_CORRUPT_PAGE(pPage);
68569 }
68570 assert( cbrk+size<=usableSize && cbrk>=iCellStart );
68571 testcase( cbrk+size==usableSize );
68572 testcase( pc+size==usableSize );
68573 put2byte(pAddr, cbrk);
68574 memcpy(&data[cbrk], &src[pc], size);
68575 }
 
68576 }
68577 data[hdr+7] = 0;
68578
68579 defragment_out:
68580 assert( pPage->nFree>=0 );
68581 if( data[hdr+7]+cbrk-iCellFirst!=pPage->nFree ){
68582 return SQLITE_CORRUPT_PAGE(pPage);
68583 }
68584 assert( cbrk>=iCellFirst );
@@ -68461,13 +68647,13 @@
68647 return &aData[pc + x];
68648 }
68649 iAddr = pc;
68650 pTmp = &aData[pc];
68651 pc = get2byte(pTmp);
68652 if( pc<=iAddr ){
68653 if( pc ){
68654 /* The next slot in the chain comes before the current slot */
68655 *pRc = SQLITE_CORRUPT_PAGE(pPg);
68656 }
68657 return 0;
68658 }
68659 }
@@ -68615,11 +68801,11 @@
68801 iPtr = hdr + 1;
68802 if( data[iPtr+1]==0 && data[iPtr]==0 ){
68803 iFreeBlk = 0; /* Shortcut for the case when the freelist is empty */
68804 }else{
68805 while( (iFreeBlk = get2byte(&data[iPtr]))<iStart ){
68806 if( iFreeBlk<=iPtr ){
68807 if( iFreeBlk==0 ) break; /* TH3: corrupt082.100 */
68808 return SQLITE_CORRUPT_PAGE(pPage);
68809 }
68810 iPtr = iFreeBlk;
68811 }
@@ -69097,13 +69283,11 @@
69283 if( pCur ){
69284 pCur->iPage--;
69285 pCur->pPage = pCur->apPage[pCur->iPage];
69286 }
69287 testcase( pgno==0 );
69288 assert( pgno!=0 || rc!=SQLITE_OK );
 
 
69289 return rc;
69290 }
69291
69292 /*
69293 ** Release a MemPage. This should be called once for each prior
@@ -72041,12 +72225,10 @@
72225 ** the new child page does not match the flags field of the parent (i.e.
72226 ** if an intkey page appears to be the parent of a non-intkey page, or
72227 ** vice-versa).
72228 */
72229 static int moveToChild(BtCursor *pCur, u32 newPgno){
 
 
72230 assert( cursorOwnsBtShared(pCur) );
72231 assert( pCur->eState==CURSOR_VALID );
72232 assert( pCur->iPage<BTCURSOR_MAX_DEPTH );
72233 assert( pCur->iPage>=0 );
72234 if( pCur->iPage>=(BTCURSOR_MAX_DEPTH-1) ){
@@ -72056,11 +72238,12 @@
72238 pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
72239 pCur->aiIdx[pCur->iPage] = pCur->ix;
72240 pCur->apPage[pCur->iPage] = pCur->pPage;
72241 pCur->ix = 0;
72242 pCur->iPage++;
72243 return getAndInitPage(pCur->pBt, newPgno, &pCur->pPage, pCur,
72244 pCur->curPagerFlags);
72245 }
72246
72247 #ifdef SQLITE_DEBUG
72248 /*
72249 ** Page pParent is an internal (non-leaf) tree page. This function
@@ -72162,11 +72345,11 @@
72345 assert( pCur->skipNext!=SQLITE_OK );
72346 return pCur->skipNext;
72347 }
72348 sqlite3BtreeClearCursor(pCur);
72349 }
72350 rc = getAndInitPage(pCur->pBt, pCur->pgnoRoot, &pCur->pPage,
72351 0, pCur->curPagerFlags);
72352 if( rc!=SQLITE_OK ){
72353 pCur->eState = CURSOR_INVALID;
72354 return rc;
72355 }
@@ -72635,10 +72818,13 @@
72818 if( pCur->iPage>0
72819 && indexCellCompare(pCur, 0, pIdxKey, xRecordCompare)<=0
72820 && pIdxKey->errCode==SQLITE_OK
72821 ){
72822 pCur->curFlags &= ~BTCF_ValidOvfl;
72823 if( !pCur->pPage->isInit ){
72824 return SQLITE_CORRUPT_BKPT;
72825 }
72826 goto bypass_moveto_root; /* Start search on the current page */
72827 }
72828 pIdxKey->errCode = SQLITE_OK;
72829 }
72830
@@ -73800,16 +73986,10 @@
73986 data = pPage->aData;
73987 ptr = &pPage->aCellIdx[2*idx];
73988 assert( pPage->pBt->usableSize > (u32)(ptr-data) );
73989 pc = get2byte(ptr);
73990 hdr = pPage->hdrOffset;
 
 
 
 
 
 
73991 testcase( pc==(u32)get2byte(&data[hdr+5]) );
73992 testcase( pc+sz==pPage->pBt->usableSize );
73993 if( pc+sz > pPage->pBt->usableSize ){
73994 *pRC = SQLITE_CORRUPT_BKPT;
73995 return;
@@ -74689,12 +74869,10 @@
74869 int szNew[NB+2]; /* Combined size of cells placed on i-th page */
74870 u8 *aSpace1; /* Space for copies of dividers cells */
74871 Pgno pgno; /* Temp var to store a page number in */
74872 u8 abDone[NB+2]; /* True after i'th new page is populated */
74873 Pgno aPgno[NB+2]; /* Page numbers of new pages before shuffling */
 
 
74874 CellArray b; /* Parsed information on cells being balanced */
74875
74876 memset(abDone, 0, sizeof(abDone));
74877 memset(&b, 0, sizeof(b));
74878 pBt = pParent->pBt;
@@ -75114,46 +75292,43 @@
75292 ** Reassign page numbers so that the new pages are in ascending order.
75293 ** This helps to keep entries in the disk file in order so that a scan
75294 ** of the table is closer to a linear scan through the file. That in turn
75295 ** helps the operating system to deliver pages from the disk more rapidly.
75296 **
75297 ** An O(N*N) sort algorithm is used, but since N is never more than NB+2
75298 ** (5), that is not a performance concern.
75299 **
75300 ** When NB==3, this one optimization makes the database about 25% faster
75301 ** for large insertions and deletions.
75302 */
75303 for(i=0; i<nNew; i++){
75304 aPgno[i] = apNew[i]->pgno;
75305 assert( apNew[i]->pDbPage->flags & PGHDR_WRITEABLE );
75306 assert( apNew[i]->pDbPage->flags & PGHDR_DIRTY );
75307 }
75308 for(i=0; i<nNew-1; i++){
75309 int iB = i;
75310 for(j=i+1; j<nNew; j++){
75311 if( apNew[j]->pgno < apNew[iB]->pgno ) iB = j;
75312 }
75313
75314 /* If apNew[i] has a page number that is bigger than any of the
75315 ** subsequence apNew[i] entries, then swap apNew[i] with the subsequent
75316 ** entry that has the smallest page number (which we know to be
75317 ** entry apNew[iB]).
75318 */
75319 if( iB!=i ){
75320 Pgno pgnoA = apNew[i]->pgno;
75321 Pgno pgnoB = apNew[iB]->pgno;
75322 Pgno pgnoTemp = (PENDING_BYTE/pBt->pageSize)+1;
75323 u16 fgA = apNew[i]->pDbPage->flags;
75324 u16 fgB = apNew[iB]->pDbPage->flags;
75325 sqlite3PagerRekey(apNew[i]->pDbPage, pgnoTemp, fgB);
75326 sqlite3PagerRekey(apNew[iB]->pDbPage, pgnoA, fgA);
75327 sqlite3PagerRekey(apNew[i]->pDbPage, pgnoB, fgB);
75328 apNew[i]->pgno = pgnoB;
75329 apNew[iB]->pgno = pgnoA;
 
 
 
75330 }
75331 }
75332
75333 TRACE(("BALANCE: new: %d(%d nc=%d) %d(%d nc=%d) %d(%d nc=%d) "
75334 "%d(%d nc=%d) %d(%d nc=%d)\n",
@@ -79417,10 +79592,20 @@
79592 double r2 = (double)i;
79593 return r1==0.0
79594 || (memcmp(&r1, &r2, sizeof(r1))==0
79595 && i >= -2251799813685248LL && i < 2251799813685248LL);
79596 }
79597
79598 /* Convert a floating point value to its closest integer. Do so in
79599 ** a way that avoids 'outside the range of representable values' warnings
79600 ** from UBSAN.
79601 */
79602 SQLITE_PRIVATE i64 sqlite3RealToI64(double r){
79603 if( r<=(double)SMALLEST_INT64 ) return SMALLEST_INT64;
79604 if( r>=(double)LARGEST_INT64) return LARGEST_INT64;
79605 return (i64)r;
79606 }
79607
79608 /*
79609 ** Convert pMem so that it has type MEM_Real or MEM_Int.
79610 ** Invalidate any prior representations.
79611 **
@@ -79439,11 +79624,11 @@
79624 sqlite3_int64 ix;
79625 assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
79626 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
79627 rc = sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc);
79628 if( ((rc==0 || rc==1) && sqlite3Atoi64(pMem->z, &ix, pMem->n, pMem->enc)<=1)
79629 || sqlite3RealSameAsInt(pMem->u.r, (ix = sqlite3RealToI64(pMem->u.r)))
79630 ){
79631 pMem->u.i = ix;
79632 MemSetTypeFlag(pMem, MEM_Int);
79633 }else{
79634 MemSetTypeFlag(pMem, MEM_Real);
@@ -80160,11 +80345,12 @@
80345 if( pVal==0 ){
80346 rc = SQLITE_NOMEM_BKPT;
80347 goto value_from_function_out;
80348 }
80349
80350 testcase( pCtx->pParse->rc==SQLITE_ERROR );
80351 testcase( pCtx->pParse->rc==SQLITE_OK );
80352 memset(&ctx, 0, sizeof(ctx));
80353 ctx.pOut = pVal;
80354 ctx.pFunc = pFunc;
80355 ctx.enc = ENC(db);
80356 pFunc->xSFunc(&ctx, nVal, apVal);
@@ -80670,14 +80856,14 @@
80856 p = sqlite3DbMallocRawNN(db, sizeof(Vdbe) );
80857 if( p==0 ) return 0;
80858 memset(&p->aOp, 0, sizeof(Vdbe)-offsetof(Vdbe,aOp));
80859 p->db = db;
80860 if( db->pVdbe ){
80861 db->pVdbe->ppVPrev = &p->pVNext;
80862 }
80863 p->pVNext = db->pVdbe;
80864 p->ppVPrev = &db->pVdbe;
80865 db->pVdbe = p;
80866 assert( p->eVdbeState==VDBE_INIT_STATE );
80867 p->pParse = pParse;
80868 pParse->pVdbe = p;
80869 assert( pParse->aLabel==0 );
@@ -80755,25 +80941,32 @@
80941 return 0;
80942 }
80943 #endif
80944
80945 /*
80946 ** Swap byte-code between two VDBE structures.
80947 **
80948 ** This happens after pB was previously run and returned
80949 ** SQLITE_SCHEMA. The statement was then reprepared in pA.
80950 ** This routine transfers the new bytecode in pA over to pB
80951 ** so that pB can be run again. The old pB byte code is
80952 ** moved back to pA so that it will be cleaned up when pA is
80953 ** finalized.
80954 */
80955 SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){
80956 Vdbe tmp, *pTmp, **ppTmp;
80957 char *zTmp;
80958 assert( pA->db==pB->db );
80959 tmp = *pA;
80960 *pA = *pB;
80961 *pB = tmp;
80962 pTmp = pA->pVNext;
80963 pA->pVNext = pB->pVNext;
80964 pB->pVNext = pTmp;
80965 ppTmp = pA->ppVPrev;
80966 pA->ppVPrev = pB->ppVPrev;
80967 pB->ppVPrev = ppTmp;
80968 zTmp = pA->zSql;
80969 pA->zSql = pB->zSql;
80970 pB->zSql = zTmp;
80971 #ifdef SQLITE_ENABLE_NORMALIZE
80972 zTmp = pA->zNormSql;
@@ -81021,10 +81214,11 @@
81214 pCtx->argc = nArg;
81215 pCtx->iOp = sqlite3VdbeCurrentAddr(v);
81216 addr = sqlite3VdbeAddOp4(v, eCallCtx ? OP_PureFunc : OP_Function,
81217 p1, p2, p3, (char*)pCtx, P4_FUNCCTX);
81218 sqlite3VdbeChangeP5(v, eCallCtx & NC_SelfRef);
81219 sqlite3MayAbort(pParse);
81220 return addr;
81221 }
81222
81223 /*
81224 ** Add an opcode that includes the p4 value with a P4_INT64 or
@@ -81089,11 +81283,11 @@
81283 va_end(ap);
81284 v = pParse->pVdbe;
81285 iThis = v->nOp;
81286 sqlite3VdbeAddOp4(v, OP_Explain, iThis, pParse->addrExplain, 0,
81287 zMsg, P4_DYNAMIC);
81288 sqlite3ExplainBreakpoint(bPush?"PUSH":"", sqlite3VdbeGetLastOp(v)->p4.z);
81289 if( bPush){
81290 pParse->addrExplain = iThis;
81291 }
81292 }
81293 }
@@ -81232,11 +81426,11 @@
81426 SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe *p){
81427 sqlite3VdbeAddOp2(p, OP_Expire, 1, 1);
81428 }
81429
81430 /*
81431 ** Mark the VDBE as one that can be run multiple times.
81432 */
81433 SQLITE_PRIVATE void sqlite3VdbeReusable(Vdbe *p){
81434 int i;
81435 for(i=1; ALWAYS(i<p->nOp); i++){
81436 if( ALWAYS(p->aOp[i].opcode==OP_Expire) ){
@@ -81356,10 +81550,11 @@
81550 int opcode = pOp->opcode;
81551 if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename
81552 || opcode==OP_VDestroy
81553 || opcode==OP_VCreate
81554 || opcode==OP_ParseSchema
81555 || opcode==OP_Function || opcode==OP_PureFunc
81556 || ((opcode==OP_Halt || opcode==OP_HaltIfNull)
81557 && ((pOp->p1)!=SQLITE_OK && pOp->p2==OE_Abort))
81558 ){
81559 hasAbort = 1;
81560 break;
@@ -81446,12 +81641,12 @@
81641 Parse *pParse = p->pParse;
81642 int *aLabel = pParse->aLabel;
81643 p->readOnly = 1;
81644 p->bIsReader = 0;
81645 pOp = &p->aOp[p->nOp-1];
81646 assert( p->aOp[0].opcode==OP_Init );
81647 while( 1 /* Loop termates when it reaches the OP_Init opcode */ ){
81648 /* Only JUMP opcodes and the short list of special opcodes in the switch
81649 ** below need to be considered. The mkopcodeh.tcl generator script groups
81650 ** all these opcodes together near the front of the opcode list. Skip
81651 ** any opcode that does not need processing by virtual of the fact that
81652 ** it is larger than SQLITE_MX_JUMP_OPCODE, as a performance optimization.
@@ -81476,10 +81671,14 @@
81671 case OP_JournalMode: {
81672 p->readOnly = 0;
81673 p->bIsReader = 1;
81674 break;
81675 }
81676 case OP_Init: {
81677 assert( pOp->p2>=0 );
81678 goto resolve_p2_values_loop_exit;
81679 }
81680 #ifndef SQLITE_OMIT_VIRTUALTABLE
81681 case OP_VUpdate: {
81682 if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2;
81683 break;
81684 }
@@ -81508,15 +81707,16 @@
81707 /* The mkopcodeh.tcl script has so arranged things that the only
81708 ** non-jump opcodes less than SQLITE_MX_JUMP_CODE are guaranteed to
81709 ** have non-negative values for P2. */
81710 assert( (sqlite3OpcodeProperty[pOp->opcode]&OPFLG_JUMP)==0 || pOp->p2>=0);
81711 }
81712 assert( pOp>p->aOp );
81713 pOp--;
81714 }
81715 resolve_p2_values_loop_exit:
81716 if( aLabel ){
81717 sqlite3DbNNFreeNN(p->db, pParse->aLabel);
81718 pParse->aLabel = 0;
81719 }
81720 pParse->nLabel = 0;
81721 *pMaxFuncArgs = nMaxArgs;
81722 assert( p->bIsReader!=0 || DbMaskAllZero(p->btreeMask) );
@@ -81761,19 +81961,23 @@
81961 /*
81962 ** Change the value of the opcode, or P1, P2, P3, or P5 operands
81963 ** for a specific instruction.
81964 */
81965 SQLITE_PRIVATE void sqlite3VdbeChangeOpcode(Vdbe *p, int addr, u8 iNewOpcode){
81966 assert( addr>=0 );
81967 sqlite3VdbeGetOp(p,addr)->opcode = iNewOpcode;
81968 }
81969 SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, int addr, int val){
81970 assert( addr>=0 );
81971 sqlite3VdbeGetOp(p,addr)->p1 = val;
81972 }
81973 SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, int addr, int val){
81974 assert( addr>=0 || p->db->mallocFailed );
81975 sqlite3VdbeGetOp(p,addr)->p2 = val;
81976 }
81977 SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, int addr, int val){
81978 assert( addr>=0 );
81979 sqlite3VdbeGetOp(p,addr)->p3 = val;
81980 }
81981 SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u16 p5){
81982 assert( p->nOp>0 || p->db->mallocFailed );
81983 if( p->nOp>0 ) p->aOp[p->nOp-1].p5 = p5;
@@ -81805,11 +82009,11 @@
82009 assert( p->aOp[addr].opcode==OP_Once
82010 || p->aOp[addr].opcode==OP_If
82011 || p->aOp[addr].opcode==OP_FkIfZero );
82012 assert( p->aOp[addr].p4type==0 );
82013 #ifdef SQLITE_VDBE_COVERAGE
82014 sqlite3VdbeGetLastOp(p)->iSrcLine = 0; /* Erase VdbeCoverage() macros */
82015 #endif
82016 p->nOp--;
82017 }else{
82018 sqlite3VdbeChangeP2(p, addr, p->nOp);
82019 }
@@ -81819,25 +82023,27 @@
82023 /*
82024 ** If the input FuncDef structure is ephemeral, then free it. If
82025 ** the FuncDef is not ephermal, then do nothing.
82026 */
82027 static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){
82028 assert( db!=0 );
82029 if( (pDef->funcFlags & SQLITE_FUNC_EPHEM)!=0 ){
82030 sqlite3DbNNFreeNN(db, pDef);
82031 }
82032 }
82033
82034 /*
82035 ** Delete a P4 value if necessary.
82036 */
82037 static SQLITE_NOINLINE void freeP4Mem(sqlite3 *db, Mem *p){
82038 if( p->szMalloc ) sqlite3DbFree(db, p->zMalloc);
82039 sqlite3DbNNFreeNN(db, p);
82040 }
82041 static SQLITE_NOINLINE void freeP4FuncCtx(sqlite3 *db, sqlite3_context *p){
82042 assert( db!=0 );
82043 freeEphemeralFunction(db, p->pFunc);
82044 sqlite3DbNNFreeNN(db, p);
82045 }
82046 static void freeP4(sqlite3 *db, int p4type, void *p4){
82047 assert( db );
82048 switch( p4type ){
82049 case P4_FUNCCTX: {
@@ -81846,11 +82052,11 @@
82052 }
82053 case P4_REAL:
82054 case P4_INT64:
82055 case P4_DYNAMIC:
82056 case P4_INTARRAY: {
82057 if( p4 ) sqlite3DbNNFreeNN(db, p4);
82058 break;
82059 }
82060 case P4_KEYINFO: {
82061 if( db->pnBytesFreed==0 ) sqlite3KeyInfoUnref((KeyInfo*)p4);
82062 break;
@@ -81885,10 +82091,11 @@
82091 ** opcodes contained within. If aOp is not NULL it is assumed to contain
82092 ** nOp entries.
82093 */
82094 static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){
82095 assert( nOp>=0 );
82096 assert( db!=0 );
82097 if( aOp ){
82098 Op *pOp = &aOp[nOp-1];
82099 while(1){ /* Exit via break */
82100 if( pOp->p4type <= P4_FREE_IF_LE ) freeP4(db, pOp->p4type, pOp->p4.p);
82101 #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
@@ -81895,11 +82102,11 @@
82102 sqlite3DbFree(db, pOp->zComment);
82103 #endif
82104 if( pOp==aOp ) break;
82105 pOp--;
82106 }
82107 sqlite3DbNNFreeNN(db, aOp);
82108 }
82109 }
82110
82111 /*
82112 ** Link the SubProgram object passed as the second argument into the linked
@@ -82126,17 +82333,17 @@
82333 #ifdef SQLITE_VDBE_COVERAGE
82334 /*
82335 ** Set the value if the iSrcLine field for the previously coded instruction.
82336 */
82337 SQLITE_PRIVATE void sqlite3VdbeSetLineNumber(Vdbe *v, int iLine){
82338 sqlite3VdbeGetLastOp(v)->iSrcLine = iLine;
82339 }
82340 #endif /* SQLITE_VDBE_COVERAGE */
82341
82342 /*
82343 ** Return the opcode for a given address. The address must be non-negative.
82344 ** See sqlite3VdbeGetLastOp() to get the most recently added opcode.
82345 **
82346 ** If a memory allocation error has occurred prior to the calling of this
82347 ** routine, then a pointer to a dummy VdbeOp will be returned. That opcode
82348 ** is readable but not writable, though it is cast to a writable value.
82349 ** The return of a dummy opcode allows the call to continue functioning
@@ -82148,20 +82355,23 @@
82355 SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){
82356 /* C89 specifies that the constant "dummy" will be initialized to all
82357 ** zeros, which is correct. MSVC generates a warning, nevertheless. */
82358 static VdbeOp dummy; /* Ignore the MSVC warning about no initializer */
82359 assert( p->eVdbeState==VDBE_INIT_STATE );
 
 
 
82360 assert( (addr>=0 && addr<p->nOp) || p->db->mallocFailed );
82361 if( p->db->mallocFailed ){
82362 return (VdbeOp*)&dummy;
82363 }else{
82364 return &p->aOp[addr];
82365 }
82366 }
82367
82368 /* Return the most recently added opcode
82369 */
82370 VdbeOp * sqlite3VdbeGetLastOp(Vdbe *p){
82371 return sqlite3VdbeGetOp(p, p->nOp - 1);
82372 }
82373
82374 #if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS)
82375 /*
82376 ** Return an integer value for one of the parameters to the opcode pOp
82377 ** determined by character c.
@@ -82646,11 +82856,11 @@
82856 if( p->flags&(MEM_Agg|MEM_Dyn) ){
82857 testcase( (p->flags & MEM_Dyn)!=0 && p->xDel==sqlite3VdbeFrameMemDel );
82858 sqlite3VdbeMemRelease(p);
82859 p->flags = MEM_Undefined;
82860 }else if( p->szMalloc ){
82861 sqlite3DbNNFreeNN(db, p->zMalloc);
82862 p->szMalloc = 0;
82863 p->flags = MEM_Undefined;
82864 }
82865 #ifdef SQLITE_DEBUG
82866 else{
@@ -83638,11 +83848,11 @@
83848 if( sqlite3_stmt_busy((sqlite3_stmt*)p) ){
83849 cnt++;
83850 if( p->readOnly==0 ) nWrite++;
83851 if( p->bIsReader ) nRead++;
83852 }
83853 p = p->pVNext;
83854 }
83855 assert( cnt==db->nVdbeActive );
83856 assert( nWrite==db->nVdbeWrite );
83857 assert( nRead==db->nVdbeRead );
83858 }
@@ -84167,27 +84377,28 @@
84377 ** VdbeDelete() also unlinks the Vdbe from the list of VMs associated with
84378 ** the database connection and frees the object itself.
84379 */
84380 static void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){
84381 SubProgram *pSub, *pNext;
84382 assert( db!=0 );
84383 assert( p->db==0 || p->db==db );
84384 if( p->aColName ){
84385 releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
84386 sqlite3DbNNFreeNN(db, p->aColName);
84387 }
84388 for(pSub=p->pProgram; pSub; pSub=pNext){
84389 pNext = pSub->pNext;
84390 vdbeFreeOpArray(db, pSub->aOp, pSub->nOp);
84391 sqlite3DbFree(db, pSub);
84392 }
84393 if( p->eVdbeState!=VDBE_INIT_STATE ){
84394 releaseMemArray(p->aVar, p->nVar);
84395 if( p->pVList ) sqlite3DbNNFreeNN(db, p->pVList);
84396 if( p->pFree ) sqlite3DbNNFreeNN(db, p->pFree);
84397 }
84398 vdbeFreeOpArray(db, p->aOp, p->nOp);
84399 if( p->zSql ) sqlite3DbNNFreeNN(db, p->zSql);
84400 #ifdef SQLITE_ENABLE_NORMALIZE
84401 sqlite3DbFree(db, p->zNormSql);
84402 {
84403 DblquoteStr *pThis, *pNext;
84404 for(pThis=p->pDblStr; pThis; pThis=pNext){
@@ -84213,24 +84424,21 @@
84424 SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){
84425 sqlite3 *db;
84426
84427 assert( p!=0 );
84428 db = p->db;
84429 assert( db!=0 );
84430 assert( sqlite3_mutex_held(db->mutex) );
84431 sqlite3VdbeClearObject(db, p);
84432 if( db->pnBytesFreed==0 ){
84433 assert( p->ppVPrev!=0 );
84434 *p->ppVPrev = p->pVNext;
84435 if( p->pVNext ){
84436 p->pVNext->ppVPrev = p->ppVPrev;
 
 
 
 
84437 }
84438 }
84439 sqlite3DbNNFreeNN(db, p);
84440 }
84441
84442 /*
84443 ** The cursor "p" has a pending seek operation that has not yet been
84444 ** carried out. Seek the cursor now. If an error occurs, return
@@ -85721,11 +85929,11 @@
85929 ** prepared statements. The flag is set to 1 for an immediate expiration
85930 ** and set to 2 for an advisory expiration.
85931 */
85932 SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db, int iCode){
85933 Vdbe *p;
85934 for(p = db->pVdbe; p; p=p->pVNext){
85935 p->expired = iCode+1;
85936 }
85937 }
85938
85939 /*
@@ -85842,17 +86050,18 @@
86050 **
86051 ** This function is used to free UnpackedRecord structures allocated by
86052 ** the vdbeUnpackRecord() function found in vdbeapi.c.
86053 */
86054 static void vdbeFreeUnpacked(sqlite3 *db, int nField, UnpackedRecord *p){
86055 assert( db!=0 );
86056 if( p ){
86057 int i;
86058 for(i=0; i<nField; i++){
86059 Mem *pMem = &p->aMem[i];
86060 if( pMem->zMalloc ) sqlite3VdbeMemReleaseMalloc(pMem);
86061 }
86062 sqlite3DbNNFreeNN(db, p);
86063 }
86064 }
86065 #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
86066
86067 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
@@ -85919,11 +86128,11 @@
86128 if( preupdate.aNew ){
86129 int i;
86130 for(i=0; i<pCsr->nField; i++){
86131 sqlite3VdbeMemRelease(&preupdate.aNew[i]);
86132 }
86133 sqlite3DbNNFreeNN(db, preupdate.aNew);
86134 }
86135 }
86136 #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
86137
86138 /************** End of vdbeaux.c *********************************************/
@@ -86036,11 +86245,13 @@
86245 Vdbe *v = (Vdbe*)pStmt;
86246 sqlite3 *db = v->db;
86247 if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT;
86248 sqlite3_mutex_enter(db->mutex);
86249 checkProfileCallback(db, v);
86250 assert( v->eVdbeState>=VDBE_READY_STATE );
86251 rc = sqlite3VdbeReset(v);
86252 sqlite3VdbeDelete(v);
86253 rc = sqlite3ApiExit(db, rc);
86254 sqlite3LeaveMutexAndCloseZombie(db);
86255 }
86256 return rc;
86257 }
@@ -86746,13 +86957,13 @@
86957 break;
86958 }
86959 sqlite3_reset(pStmt);
86960 if( savedPc>=0 ){
86961 /* Setting minWriteFileFormat to 254 is a signal to the OP_Init and
86962 ** OP_Trace opcodes to *not* perform SQLITE_TRACE_STMT because it has
86963 ** already been done once on a prior invocation that failed due to
86964 ** SQLITE_SCHEMA. tag-20220401a */
86965 v->minWriteFileFormat = 254;
86966 }
86967 assert( v->expired==0 );
86968 }
86969 sqlite3_mutex_leave(db->mutex);
@@ -87358,11 +87569,11 @@
87569 ** the mutex is released if any kind of error occurs.
87570 **
87571 ** The error code stored in database p->db is overwritten with the return
87572 ** value in any case.
87573 */
87574 static int vdbeUnbind(Vdbe *p, unsigned int i){
87575 Mem *pVar;
87576 if( vdbeSafetyNotNull(p) ){
87577 return SQLITE_MISUSE_BKPT;
87578 }
87579 sqlite3_mutex_enter(p->db->mutex);
@@ -87371,16 +87582,15 @@
87582 sqlite3_mutex_leave(p->db->mutex);
87583 sqlite3_log(SQLITE_MISUSE,
87584 "bind on a busy prepared statement: [%s]", p->zSql);
87585 return SQLITE_MISUSE_BKPT;
87586 }
87587 if( i>=(unsigned int)p->nVar ){
87588 sqlite3Error(p->db, SQLITE_RANGE);
87589 sqlite3_mutex_leave(p->db->mutex);
87590 return SQLITE_RANGE;
87591 }
 
87592 pVar = &p->aVar[i];
87593 sqlite3VdbeMemRelease(pVar);
87594 pVar->flags = MEM_Null;
87595 p->db->errCode = SQLITE_OK;
87596
@@ -87413,11 +87623,11 @@
87623 ){
87624 Vdbe *p = (Vdbe *)pStmt;
87625 Mem *pVar;
87626 int rc;
87627
87628 rc = vdbeUnbind(p, (u32)(i-1));
87629 if( rc==SQLITE_OK ){
87630 if( zData!=0 ){
87631 pVar = &p->aVar[i-1];
87632 rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
87633 if( rc==SQLITE_OK && encoding!=0 ){
@@ -87462,11 +87672,11 @@
87672 return bindText(pStmt, i, zData, nData, xDel, 0);
87673 }
87674 SQLITE_API int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
87675 int rc;
87676 Vdbe *p = (Vdbe *)pStmt;
87677 rc = vdbeUnbind(p, (u32)(i-1));
87678 if( rc==SQLITE_OK ){
87679 sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
87680 sqlite3_mutex_leave(p->db->mutex);
87681 }
87682 return rc;
@@ -87475,21 +87685,21 @@
87685 return sqlite3_bind_int64(p, i, (i64)iValue);
87686 }
87687 SQLITE_API int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
87688 int rc;
87689 Vdbe *p = (Vdbe *)pStmt;
87690 rc = vdbeUnbind(p, (u32)(i-1));
87691 if( rc==SQLITE_OK ){
87692 sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
87693 sqlite3_mutex_leave(p->db->mutex);
87694 }
87695 return rc;
87696 }
87697 SQLITE_API int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
87698 int rc;
87699 Vdbe *p = (Vdbe*)pStmt;
87700 rc = vdbeUnbind(p, (u32)(i-1));
87701 if( rc==SQLITE_OK ){
87702 sqlite3_mutex_leave(p->db->mutex);
87703 }
87704 return rc;
87705 }
@@ -87500,11 +87710,11 @@
87710 const char *zPTtype,
87711 void (*xDestructor)(void*)
87712 ){
87713 int rc;
87714 Vdbe *p = (Vdbe*)pStmt;
87715 rc = vdbeUnbind(p, (u32)(i-1));
87716 if( rc==SQLITE_OK ){
87717 sqlite3VdbeMemSetPointer(&p->aVar[i-1], pPtr, zPTtype, xDestructor);
87718 sqlite3_mutex_leave(p->db->mutex);
87719 }else if( xDestructor ){
87720 xDestructor(pPtr);
@@ -87578,11 +87788,11 @@
87788 return rc;
87789 }
87790 SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
87791 int rc;
87792 Vdbe *p = (Vdbe *)pStmt;
87793 rc = vdbeUnbind(p, (u32)(i-1));
87794 if( rc==SQLITE_OK ){
87795 #ifndef SQLITE_OMIT_INCRBLOB
87796 sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
87797 #else
87798 rc = sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
@@ -87738,11 +87948,11 @@
87948 #endif
87949 sqlite3_mutex_enter(pDb->mutex);
87950 if( pStmt==0 ){
87951 pNext = (sqlite3_stmt*)pDb->pVdbe;
87952 }else{
87953 pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pVNext;
87954 }
87955 sqlite3_mutex_leave(pDb->mutex);
87956 return pNext;
87957 }
87958
@@ -87763,12 +87973,15 @@
87973 if( op==SQLITE_STMTSTATUS_MEMUSED ){
87974 sqlite3 *db = pVdbe->db;
87975 sqlite3_mutex_enter(db->mutex);
87976 v = 0;
87977 db->pnBytesFreed = (int*)&v;
87978 assert( db->lookaside.pEnd==db->lookaside.pTrueEnd );
87979 db->lookaside.pEnd = db->lookaside.pStart;
87980 sqlite3VdbeDelete(pVdbe);
87981 db->pnBytesFreed = 0;
87982 db->lookaside.pEnd = db->lookaside.pTrueEnd;
87983 sqlite3_mutex_leave(db->mutex);
87984 }else{
87985 v = pVdbe->aCounter[op];
87986 if( resetFlag ) pVdbe->aCounter[op] = 0;
87987 }
@@ -88604,11 +88817,12 @@
88817 ** floating point value of rValue. Return true and set *piValue to the
88818 ** integer value if the string is in range to be an integer. Otherwise,
88819 ** return false.
88820 */
88821 static int alsoAnInt(Mem *pRec, double rValue, i64 *piValue){
88822 i64 iValue;
88823 iValue = sqlite3RealToI64(rValue);
88824 if( sqlite3RealSameAsInt(rValue,iValue) ){
88825 *piValue = iValue;
88826 return 1;
88827 }
88828 return 0==sqlite3Atoi64(pRec->z, piValue, pRec->n, pRec->enc);
@@ -88766,21 +88980,22 @@
88980 **
88981 ** Unlike applyNumericAffinity(), this routine does not modify pMem->flags.
88982 ** But it does set pMem->u.r and pMem->u.i appropriately.
88983 */
88984 static u16 numericType(Mem *pMem){
88985 assert( (pMem->flags & MEM_Null)==0
88986 || pMem->db==0 || pMem->db->mallocFailed );
88987 if( pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null) ){
88988 testcase( pMem->flags & MEM_Int );
88989 testcase( pMem->flags & MEM_Real );
88990 testcase( pMem->flags & MEM_IntReal );
88991 return pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null);
88992 }
88993 assert( pMem->flags & (MEM_Str|MEM_Blob) );
88994 testcase( pMem->flags & MEM_Str );
88995 testcase( pMem->flags & MEM_Blob );
88996 return computeNumericType(pMem);
 
88997 return 0;
88998 }
88999
89000 #ifdef SQLITE_DEBUG
89001 /*
@@ -89294,11 +89509,11 @@
89509 **
89510 ** P2 is not used by the byte-code engine. However, if P2 is positive
89511 ** and also less than the current address, then the "EXPLAIN" output
89512 ** formatter in the CLI will indent all opcodes from the P2 opcode up
89513 ** to be not including the current Return. P2 should be the first opcode
89514 ** in the subroutine from which this opcode is returning. Thus the P2
89515 ** value is a byte-code indentation hint. See tag-20220407a in
89516 ** wherecode.c and shell.c.
89517 */
89518 case OP_Return: { /* in1 */
89519 pIn1 = &aMem[pOp->p1];
@@ -89956,11 +90171,11 @@
90171 }
90172 nByte = pIn1->n + pIn2->n;
90173 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
90174 goto too_big;
90175 }
90176 if( sqlite3VdbeMemGrow(pOut, (int)nByte+2, pOut==pIn2) ){
90177 goto no_mem;
90178 }
90179 MemSetTypeFlag(pOut, MEM_Str);
90180 if( pOut!=pIn2 ){
90181 memcpy(pOut->z, pIn2->z, pIn2->n);
@@ -89968,13 +90183,13 @@
90183 pIn2->flags = flags2;
90184 }
90185 memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n);
90186 assert( (pIn1->flags & MEM_Dyn) == (flags1 & MEM_Dyn) );
90187 pIn1->flags = flags1;
90188 if( encoding>SQLITE_UTF8 ) nByte &= ~1;
90189 pOut->z[nByte]=0;
90190 pOut->z[nByte+1] = 0;
 
90191 pOut->flags |= MEM_Term;
90192 pOut->n = (int)nByte;
90193 pOut->enc = encoding;
90194 UPDATE_MAX_BLOBSIZE(pOut);
90195 break;
@@ -90021,25 +90236,24 @@
90236 case OP_Add: /* same as TK_PLUS, in1, in2, out3 */
90237 case OP_Subtract: /* same as TK_MINUS, in1, in2, out3 */
90238 case OP_Multiply: /* same as TK_STAR, in1, in2, out3 */
90239 case OP_Divide: /* same as TK_SLASH, in1, in2, out3 */
90240 case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */
 
90241 u16 type1; /* Numeric type of left operand */
90242 u16 type2; /* Numeric type of right operand */
90243 i64 iA; /* Integer value of left operand */
90244 i64 iB; /* Integer value of right operand */
90245 double rA; /* Real value of left operand */
90246 double rB; /* Real value of right operand */
90247
90248 pIn1 = &aMem[pOp->p1];
90249 type1 = pIn1->flags;
90250 pIn2 = &aMem[pOp->p2];
90251 type2 = pIn2->flags;
90252 pOut = &aMem[pOp->p3];
 
90253 if( (type1 & type2 & MEM_Int)!=0 ){
90254 int_math:
90255 iA = pIn1->u.i;
90256 iB = pIn2->u.i;
90257 switch( pOp->opcode ){
90258 case OP_Add: if( sqlite3AddInt64(&iB,iA) ) goto fp_math; break;
90259 case OP_Subtract: if( sqlite3SubInt64(&iB,iA) ) goto fp_math; break;
@@ -90057,13 +90271,16 @@
90271 break;
90272 }
90273 }
90274 pOut->u.i = iB;
90275 MemSetTypeFlag(pOut, MEM_Int);
90276 }else if( ((type1 | type2) & MEM_Null)!=0 ){
90277 goto arithmetic_result_is_null;
90278 }else{
90279 type1 = numericType(pIn1);
90280 type2 = numericType(pIn2);
90281 if( (type1 & type2 & MEM_Int)!=0 ) goto int_math;
90282 fp_math:
90283 rA = sqlite3VdbeRealValue(pIn1);
90284 rB = sqlite3VdbeRealValue(pIn2);
90285 switch( pOp->opcode ){
90286 case OP_Add: rB += rA; break;
@@ -90929,15 +91146,18 @@
91146 **
91147 ** Check the cursor P1 to see if it is currently pointing at a NULL row.
91148 ** If it is, then set register P3 to NULL and jump immediately to P2.
91149 ** If P1 is not on a NULL row, then fall through without making any
91150 ** changes.
91151 **
91152 ** If P1 is not an open cursor, then this opcode is a no-op.
91153 */
91154 case OP_IfNullRow: { /* jump */
91155 VdbeCursor *pC;
91156 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
91157 pC = p->apCsr[pOp->p1];
91158 if( ALWAYS(pC) && pC->nullRow ){
91159 sqlite3VdbeMemSetNull(aMem + pOp->p3);
91160 goto jump_to_p2;
91161 }
91162 break;
91163 }
@@ -92249,11 +92469,11 @@
92469 assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
92470 /* See note about index shifting on OP_ReadCookie */
92471 rc = sqlite3BtreeUpdateMeta(pDb->pBt, pOp->p2, pOp->p3);
92472 if( pOp->p2==BTREE_SCHEMA_VERSION ){
92473 /* When the schema cookie changes, record the new cookie internally */
92474 *(u32*)&pDb->pSchema->schema_cookie = *(u32*)&pOp->p3 - pOp->p5;
92475 db->mDbFlags |= DBFLAG_SchemaChange;
92476 sqlite3FkClearTriggerCache(db, pOp->p1);
92477 }else if( pOp->p2==BTREE_FILE_FORMAT ){
92478 /* Record changes in the file format */
92479 pDb->pSchema->file_format = pOp->p3;
@@ -93040,11 +93260,11 @@
93260 **
93261 ** <li> If the cursor is successfully moved to the target row by 0 or more
93262 ** sqlite3BtreeNext() calls, then jump to This.P2, which will land just
93263 ** past the OP_IdxGT or OP_IdxGE opcode that follows the OP_SeekGE.
93264 **
93265 ** <li> If the cursor ends up past the target row (indicating that the target
93266 ** row does not exist in the btree) then jump to SeekOP.P2.
93267 ** </ol>
93268 */
93269 case OP_SeekScan: {
93270 VdbeCursor *pC;
@@ -94376,11 +94596,13 @@
94596 rc = sqlite3VdbeSorterNext(db, pC);
94597 goto next_tail;
94598
94599 case OP_Prev: /* jump */
94600 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
94601 assert( pOp->p5==0
94602 || pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP
94603 || pOp->p5==SQLITE_STMTSTATUS_AUTOINDEX);
94604 pC = p->apCsr[pOp->p1];
94605 assert( pC!=0 );
94606 assert( pC->deferredMoveto==0 );
94607 assert( pC->eCurType==CURTYPE_BTREE );
94608 assert( pC->seekOp==OP_SeekLT || pC->seekOp==OP_SeekLE
@@ -94389,11 +94611,13 @@
94611 rc = sqlite3BtreePrevious(pC->uc.pCursor, pOp->p3);
94612 goto next_tail;
94613
94614 case OP_Next: /* jump */
94615 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
94616 assert( pOp->p5==0
94617 || pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP
94618 || pOp->p5==SQLITE_STMTSTATUS_AUTOINDEX);
94619 pC = p->apCsr[pOp->p1];
94620 assert( pC!=0 );
94621 assert( pC->deferredMoveto==0 );
94622 assert( pC->eCurType==CURTYPE_BTREE );
94623 assert( pC->seekOp==OP_SeekGT || pC->seekOp==OP_SeekGE
@@ -94596,14 +94820,14 @@
94820
94821 /* The IdxRowid and Seek opcodes are combined because of the commonality
94822 ** of sqlite3VdbeCursorRestore() and sqlite3VdbeIdxRowid(). */
94823 rc = sqlite3VdbeCursorRestore(pC);
94824
94825 /* sqlite3VdbeCursorRestore() may fail if the cursor has been disturbed
94826 ** since it was last positioned and an error (e.g. OOM or an IO error)
94827 ** occurs while trying to reposition it. */
94828 if( rc!=SQLITE_OK ) goto abort_due_to_error;
94829
94830 if( !pC->nullRow ){
94831 rowid = 0; /* Not needed. Only used to silence a warning. */
94832 rc = sqlite3VdbeIdxRowid(db, pC->uc.pCursor, &rowid);
94833 if( rc!=SQLITE_OK ){
@@ -95501,11 +95725,11 @@
95725
95726 /* Opcode: OffsetLimit P1 P2 P3 * *
95727 ** Synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)
95728 **
95729 ** This opcode performs a commonly used computation associated with
95730 ** LIMIT and OFFSET processing. r[P1] holds the limit counter. r[P3]
95731 ** holds the offset counter. The opcode computes the combined value
95732 ** of the LIMIT and OFFSET and stores that value in r[P2]. The r[P2]
95733 ** value computed is the total number of rows that will need to be
95734 ** visited in order to complete the query.
95735 **
@@ -101098,10 +101322,12 @@
101322 sqlite3_file *pJfd, /* Preallocated, blank file handle */
101323 int flags, /* Opening flags */
101324 int nSpill /* Bytes buffered before opening the file */
101325 ){
101326 MemJournal *p = (MemJournal*)pJfd;
101327
101328 assert( zName || nSpill<0 || (flags & SQLITE_OPEN_EXCLUSIVE) );
101329
101330 /* Zero the file-handle object. If nSpill was passed zero, initialize
101331 ** it using the sqlite3OsOpen() function of the underlying VFS. In this
101332 ** case none of the code in this module is executed as a result of calls
101333 ** made on the journal file-handle. */
@@ -101526,37 +101752,25 @@
101752 pDup = sqlite3ExprDup(db, pOrig, 0);
101753 if( db->mallocFailed ){
101754 sqlite3ExprDelete(db, pDup);
101755 pDup = 0;
101756 }else{
101757 Expr temp;
101758 incrAggFunctionDepth(pDup, nSubquery);
101759 if( pExpr->op==TK_COLLATE ){
101760 assert( !ExprHasProperty(pExpr, EP_IntValue) );
101761 pDup = sqlite3ExprAddCollateString(pParse, pDup, pExpr->u.zToken);
101762 }
101763 memcpy(&temp, pDup, sizeof(Expr));
101764 memcpy(pDup, pExpr, sizeof(Expr));
101765 memcpy(pExpr, &temp, sizeof(Expr));
 
 
 
 
 
 
 
 
 
 
 
 
 
101766 if( ExprHasProperty(pExpr, EP_WinFunc) ){
101767 if( ALWAYS(pExpr->y.pWin!=0) ){
101768 pExpr->y.pWin->pOwner = pExpr;
101769 }
101770 }
101771 sqlite3ExprDeferredDelete(pParse, pDup);
101772 }
101773 }
101774
101775 /*
101776 ** Subqueries stores the original database, table and column names for their
@@ -101755,11 +101969,11 @@
101969 for(i=0, pItem=pSrcList->a; i<pSrcList->nSrc; i++, pItem++){
101970 u8 hCol;
101971 pTab = pItem->pTab;
101972 assert( pTab!=0 && pTab->zName!=0 );
101973 assert( pTab->nCol>0 || pParse->nErr );
101974 assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
101975 if( pItem->fg.isNestedFrom ){
101976 /* In this case, pItem is a subquery that has been formed from a
101977 ** parenthesized subset of the FROM clause terms. Example:
101978 ** .... FROM t1 LEFT JOIN (t2 RIGHT JOIN t3 USING(x)) USING(y) ...
101979 ** \_________________________/
@@ -103265,12 +103479,12 @@
103479 */
103480 assert( (sNC.ncFlags & (NC_UAggInfo|NC_UUpsert|NC_UBaseReg))==0 );
103481 sNC.uNC.pEList = p->pEList;
103482 sNC.ncFlags |= NC_UEList;
103483 if( p->pHaving ){
103484 if( (p->selFlags & SF_Aggregate)==0 ){
103485 sqlite3ErrorMsg(pParse, "HAVING clause on a non-aggregate query");
103486 return WRC_Abort;
103487 }
103488 if( sqlite3ResolveExprNames(&sNC, p->pHaving) ) return WRC_Abort;
103489 }
103490 if( sqlite3ResolveExprNames(&sNC, p->pWhere) ) return WRC_Abort;
@@ -104361,11 +104575,13 @@
104575 ** Also propagate EP_Propagate flags up from Expr.x.pList to Expr.flags,
104576 ** if appropriate.
104577 */
104578 static void exprSetHeight(Expr *p){
104579 int nHeight = p->pLeft ? p->pLeft->nHeight : 0;
104580 if( NEVER(p->pRight) && p->pRight->nHeight>nHeight ){
104581 nHeight = p->pRight->nHeight;
104582 }
104583 if( ExprUseXSelect(p) ){
104584 heightOfSelect(p->x.pSelect, &nHeight);
104585 }else if( p->x.pList ){
104586 heightOfExprList(p->x.pList, &nHeight);
104587 p->flags |= EP_Propagate & sqlite3ExprListFlags(p->x.pList);
@@ -104504,19 +104720,30 @@
104720 if( pRoot==0 ){
104721 assert( db->mallocFailed );
104722 sqlite3ExprDelete(db, pLeft);
104723 sqlite3ExprDelete(db, pRight);
104724 }else{
104725 assert( ExprUseXList(pRoot) );
104726 assert( pRoot->x.pSelect==0 );
104727 if( pRight ){
104728 pRoot->pRight = pRight;
104729 pRoot->flags |= EP_Propagate & pRight->flags;
104730 #if SQLITE_MAX_EXPR_DEPTH>0
104731 pRoot->nHeight = pRight->nHeight+1;
104732 }else{
104733 pRoot->nHeight = 1;
104734 #endif
104735 }
104736 if( pLeft ){
104737 pRoot->pLeft = pLeft;
104738 pRoot->flags |= EP_Propagate & pLeft->flags;
104739 #if SQLITE_MAX_EXPR_DEPTH>0
104740 if( pLeft->nHeight>=pRoot->nHeight ){
104741 pRoot->nHeight = pLeft->nHeight+1;
104742 }
104743 #endif
104744 }
 
104745 }
104746 }
104747
104748 /*
104749 ** Allocate an Expr node which joins as many as two subtrees.
@@ -104798,10 +105025,11 @@
105025 /*
105026 ** Recursively delete an expression tree.
105027 */
105028 static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){
105029 assert( p!=0 );
105030 assert( db!=0 );
105031 assert( !ExprUseUValue(p) || p->u.iValue>=0 );
105032 assert( !ExprUseYWin(p) || !ExprUseYSub(p) );
105033 assert( !ExprUseYWin(p) || p->y.pWin!=0 || db->mallocFailed );
105034 assert( p->op!=TK_FUNCTION || !ExprUseYSub(p) );
105035 #ifdef SQLITE_DEBUG
@@ -104829,16 +105057,12 @@
105057 sqlite3WindowDelete(db, p->y.pWin);
105058 }
105059 #endif
105060 }
105061 }
 
 
 
 
105062 if( !ExprHasProperty(p, EP_Static) ){
105063 sqlite3DbNNFreeNN(db, p);
105064 }
105065 }
105066 SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){
105067 if( p ) sqlite3ExprDeleteNN(db, p);
105068 }
@@ -104865,12 +105089,13 @@
105089 **
105090 ** The deferred delete is (currently) implemented by adding the
105091 ** pExpr to the pParse->pConstExpr list with a register number of 0.
105092 */
105093 SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){
105094 sqlite3ParserAddCleanup(pParse,
105095 (void(*)(sqlite3*,void*))sqlite3ExprDelete,
105096 pExpr);
105097 }
105098
105099 /* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the
105100 ** expression.
105101 */
@@ -104940,11 +105165,10 @@
105165 ){
105166 nSize = EXPR_FULLSIZE;
105167 }else{
105168 assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) );
105169 assert( !ExprHasProperty(p, EP_OuterON) );
 
105170 assert( !ExprHasVVAProperty(p, EP_NoReduce) );
105171 if( p->pLeft || p->x.pList ){
105172 nSize = EXPR_REDUCEDSIZE | EP_Reduced;
105173 }else{
105174 assert( p->pRight==0 );
@@ -105044,11 +105268,11 @@
105268 memset(&zAlloc[nSize], 0, EXPR_FULLSIZE-nSize);
105269 }
105270 }
105271
105272 /* Set the EP_Reduced, EP_TokenOnly, and EP_Static flags appropriately. */
105273 pNew->flags &= ~(EP_Reduced|EP_TokenOnly|EP_Static);
105274 pNew->flags |= nStructSize & (EP_Reduced|EP_TokenOnly);
105275 pNew->flags |= staticFlag;
105276 ExprClearVVAProperties(pNew);
105277 if( dupFlags ){
105278 ExprSetVVAProperty(pNew, EP_Immutable);
@@ -105620,16 +105844,17 @@
105844 */
105845 static SQLITE_NOINLINE void exprListDeleteNN(sqlite3 *db, ExprList *pList){
105846 int i = pList->nExpr;
105847 struct ExprList_item *pItem = pList->a;
105848 assert( pList->nExpr>0 );
105849 assert( db!=0 );
105850 do{
105851 sqlite3ExprDelete(db, pItem->pExpr);
105852 if( pItem->zEName ) sqlite3DbNNFreeNN(db, pItem->zEName);
105853 pItem++;
105854 }while( --i>0 );
105855 sqlite3DbNNFreeNN(db, pList);
105856 }
105857 SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){
105858 if( pList ) exprListDeleteNN(db, pList);
105859 }
105860
@@ -106916,11 +107141,11 @@
107141 if( pLimit ){
107142 pLimit->affExpr = SQLITE_AFF_NUMERIC;
107143 pLimit = sqlite3PExpr(pParse, TK_NE,
107144 sqlite3ExprDup(db, pSel->pLimit->pLeft, 0), pLimit);
107145 }
107146 sqlite3ExprDeferredDelete(pParse, pSel->pLimit->pLeft);
107147 pSel->pLimit->pLeft = pLimit;
107148 }else{
107149 /* If there is no pre-existing limit add a limit of 1 */
107150 pLimit = sqlite3Expr(pParse->db, TK_INTEGER, "1");
107151 pSel->pLimit = sqlite3PExpr(pParse, TK_LIMIT, pLimit, 0);
@@ -107430,11 +107655,11 @@
107655 u8 p5 /* P5 value for OP_Column + FLAGS */
107656 ){
107657 assert( pParse->pVdbe!=0 );
107658 sqlite3ExprCodeGetColumnOfTable(pParse->pVdbe, pTab, iTable, iColumn, iReg);
107659 if( p5 ){
107660 VdbeOp *pOp = sqlite3VdbeGetLastOp(pParse->pVdbe);
107661 if( pOp->opcode==OP_Column ) pOp->p5 = p5;
107662 }
107663 return iReg;
107664 }
107665
@@ -107499,11 +107724,11 @@
107724 /*
107725 ** If the last opcode is a OP_Copy, then set the do-not-merge flag (p5)
107726 ** so that a subsequent copy will not be merged into this one.
107727 */
107728 static void setDoNotMergeFlagOnCopy(Vdbe *v){
107729 if( sqlite3VdbeGetLastOp(v)->opcode==OP_Copy ){
107730 sqlite3VdbeChangeP5(v, 1); /* Tag trailing OP_Copy as not mergable */
107731 }
107732 }
107733
107734 /*
@@ -107670,11 +107895,11 @@
107895 Table *pTab = pCol->pTab;
107896 sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab,
107897 pCol->iSorterColumn, target);
107898 if( pCol->iColumn<0 ){
107899 VdbeComment((v,"%s.rowid",pTab->zName));
107900 }else if( ALWAYS(pTab!=0) ){
107901 VdbeComment((v,"%s.%s",
107902 pTab->zName, pTab->aCol[pCol->iColumn].zCnName));
107903 if( pTab->aCol[pCol->iColumn].affinity==SQLITE_AFF_REAL ){
107904 sqlite3VdbeAddOp1(v, OP_RealAffinity, target);
107905 }
@@ -108265,10 +108490,25 @@
108490 ** on a LEFT JOIN NULL row.
108491 */
108492 case TK_IF_NULL_ROW: {
108493 int addrINR;
108494 u8 okConstFactor = pParse->okConstFactor;
108495 AggInfo *pAggInfo = pExpr->pAggInfo;
108496 if( pAggInfo ){
108497 assert( pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn );
108498 if( !pAggInfo->directMode ){
108499 inReg = pAggInfo->aCol[pExpr->iAgg].iMem;
108500 break;
108501 }
108502 if( pExpr->pAggInfo->useSortingIdx ){
108503 sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab,
108504 pAggInfo->aCol[pExpr->iAgg].iSorterColumn,
108505 target);
108506 inReg = target;
108507 break;
108508 }
108509 }
108510 addrINR = sqlite3VdbeAddOp1(v, OP_IfNullRow, pExpr->iTable);
108511 /* Temporarily disable factoring of constant expressions, since
108512 ** even though expressions may appear to be constant, they are not
108513 ** really constant because they originate from the right-hand side
108514 ** of a LEFT JOIN. */
@@ -108606,11 +108846,11 @@
108846 }else{
108847 int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i);
108848 if( inReg!=target+i ){
108849 VdbeOp *pOp;
108850 if( copyOp==OP_Copy
108851 && (pOp=sqlite3VdbeGetLastOp(v))->opcode==OP_Copy
108852 && pOp->p1+pOp->p3+1==inReg
108853 && pOp->p2+pOp->p3+1==target+i
108854 && pOp->p5==0 /* The do-not-merge flag must be clear */
108855 ){
108856 pOp->p3++;
@@ -109642,10 +109882,11 @@
109882 ** fact is exploited for efficiency.
109883 */
109884 SQLITE_PRIVATE int sqlite3ReferencesSrcList(Parse *pParse, Expr *pExpr, SrcList *pSrcList){
109885 Walker w;
109886 struct RefSrcList x;
109887 assert( pParse->db!=0 );
109888 memset(&w, 0, sizeof(w));
109889 memset(&x, 0, sizeof(x));
109890 w.xExprCallback = exprRefToSrcList;
109891 w.xSelectCallback = selectRefEnter;
109892 w.xSelectCallback2 = selectRefLeave;
@@ -109658,11 +109899,11 @@
109899 #ifndef SQLITE_OMIT_WINDOWFUNC
109900 if( ExprHasProperty(pExpr, EP_WinFunc) ){
109901 sqlite3WalkExpr(&w, pExpr->y.pWin->pFilter);
109902 }
109903 #endif
109904 if( x.aiExclude ) sqlite3DbNNFreeNN(pParse->db, x.aiExclude);
109905 if( w.eCode & 0x01 ){
109906 return 1;
109907 }else if( w.eCode ){
109908 return 0;
109909 }else{
@@ -109689,21 +109930,22 @@
109930 ){
109931 AggInfo *pAggInfo = pExpr->pAggInfo;
109932 int iAgg = pExpr->iAgg;
109933 Parse *pParse = pWalker->pParse;
109934 sqlite3 *db = pParse->db;
109935 if( pExpr->op!=TK_AGG_FUNCTION ){
109936 assert( pExpr->op==TK_AGG_COLUMN || pExpr->op==TK_IF_NULL_ROW );
109937 assert( iAgg>=0 && iAgg<pAggInfo->nColumn );
109938 if( pAggInfo->aCol[iAgg].pCExpr==pExpr ){
109939 pExpr = sqlite3ExprDup(db, pExpr, 0);
109940 if( pExpr ){
109941 pAggInfo->aCol[iAgg].pCExpr = pExpr;
109942 sqlite3ExprDeferredDelete(pParse, pExpr);
109943 }
109944 }
109945 }else{
109946 assert( pExpr->op==TK_AGG_FUNCTION );
109947 assert( iAgg>=0 && iAgg<pAggInfo->nFunc );
109948 if( pAggInfo->aFunc[iAgg].pFExpr==pExpr ){
109949 pExpr = sqlite3ExprDup(db, pExpr, 0);
109950 if( pExpr ){
109951 pAggInfo->aFunc[iAgg].pFExpr = pExpr;
@@ -109770,14 +110012,16 @@
110012 SrcList *pSrcList = pNC->pSrcList;
110013 AggInfo *pAggInfo = pNC->uNC.pAggInfo;
110014
110015 assert( pNC->ncFlags & NC_UAggInfo );
110016 switch( pExpr->op ){
110017 case TK_IF_NULL_ROW:
110018 case TK_AGG_COLUMN:
110019 case TK_COLUMN: {
110020 testcase( pExpr->op==TK_AGG_COLUMN );
110021 testcase( pExpr->op==TK_COLUMN );
110022 testcase( pExpr->op==TK_IF_NULL_ROW );
110023 /* Check to see if the column is in one of the tables in the FROM
110024 ** clause of the aggregate query */
110025 if( ALWAYS(pSrcList!=0) ){
110026 SrcItem *pItem = pSrcList->a;
110027 for(i=0; i<pSrcList->nSrc; i++, pItem++){
@@ -109791,12 +110035,14 @@
110035 ** is not an entry there already.
110036 */
110037 int k;
110038 pCol = pAggInfo->aCol;
110039 for(k=0; k<pAggInfo->nColumn; k++, pCol++){
110040 if( pCol->iTable==pExpr->iTable
110041 && pCol->iColumn==pExpr->iColumn
110042 && pExpr->op!=TK_IF_NULL_ROW
110043 ){
110044 break;
110045 }
110046 }
110047 if( (k>=pAggInfo->nColumn)
110048 && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0
@@ -109807,19 +110053,21 @@
110053 pCol->iTable = pExpr->iTable;
110054 pCol->iColumn = pExpr->iColumn;
110055 pCol->iMem = ++pParse->nMem;
110056 pCol->iSorterColumn = -1;
110057 pCol->pCExpr = pExpr;
110058 if( pAggInfo->pGroupBy && pExpr->op!=TK_IF_NULL_ROW ){
110059 int j, n;
110060 ExprList *pGB = pAggInfo->pGroupBy;
110061 struct ExprList_item *pTerm = pGB->a;
110062 n = pGB->nExpr;
110063 for(j=0; j<n; j++, pTerm++){
110064 Expr *pE = pTerm->pExpr;
110065 if( pE->op==TK_COLUMN
110066 && pE->iTable==pExpr->iTable
110067 && pE->iColumn==pExpr->iColumn
110068 ){
110069 pCol->iSorterColumn = j;
110070 break;
110071 }
110072 }
110073 }
@@ -109832,11 +110080,13 @@
110080 ** Convert the pExpr to be a TK_AGG_COLUMN referring to that
110081 ** pAggInfo->aCol[] entry.
110082 */
110083 ExprSetVVAProperty(pExpr, EP_NoReduce);
110084 pExpr->pAggInfo = pAggInfo;
110085 if( pExpr->op==TK_COLUMN ){
110086 pExpr->op = TK_AGG_COLUMN;
110087 }
110088 pExpr->iAgg = (i16)k;
110089 break;
110090 } /* endif pExpr->iTable==pItem->iCursor */
110091 } /* end loop over pSrcList */
110092 }
@@ -115254,10 +115504,11 @@
115504 ** no VDBE code was generated.
115505 */
115506 SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){
115507 sqlite3 *db;
115508 Vdbe *v;
115509 int iDb, i;
115510
115511 assert( pParse->pToplevel==0 );
115512 db = pParse->db;
115513 assert( db->pParse==pParse );
115514 if( pParse->nested ) return;
@@ -115283,11 +115534,10 @@
115534 || sqlite3VdbeAssertMayAbort(v, pParse->mayAbort));
115535 if( v ){
115536 if( pParse->bReturning ){
115537 Returning *pReturning = pParse->u1.pReturning;
115538 int addrRewind;
 
115539 int reg;
115540
115541 if( pReturning->nRetCol ){
115542 sqlite3VdbeAddOp0(v, OP_FkCheck);
115543 addrRewind =
@@ -115320,80 +115570,73 @@
115570 ** (Bit 0 is for main, bit 1 is for temp, and so forth.) Bits are
115571 ** set for each database that is used. Generate code to start a
115572 ** transaction on each used database and to verify the schema cookie
115573 ** on each used database.
115574 */
115575 assert( pParse->nErr>0 || sqlite3VdbeGetOp(v, 0)->opcode==OP_Init );
115576 sqlite3VdbeJumpHere(v, 0);
115577 assert( db->nDb>0 );
115578 iDb = 0;
115579 do{
115580 Schema *pSchema;
115581 if( DbMaskTest(pParse->cookieMask, iDb)==0 ) continue;
115582 sqlite3VdbeUsesBtree(v, iDb);
115583 pSchema = db->aDb[iDb].pSchema;
115584 sqlite3VdbeAddOp4Int(v,
115585 OP_Transaction, /* Opcode */
115586 iDb, /* P1 */
115587 DbMaskTest(pParse->writeMask,iDb), /* P2 */
115588 pSchema->schema_cookie, /* P3 */
115589 pSchema->iGeneration /* P4 */
115590 );
115591 if( db->init.busy==0 ) sqlite3VdbeChangeP5(v, 1);
115592 VdbeComment((v,
115593 "usesStmtJournal=%d", pParse->mayAbort && pParse->isMultiWrite));
115594 }while( ++iDb<db->nDb );
 
 
 
 
115595 #ifndef SQLITE_OMIT_VIRTUALTABLE
115596 for(i=0; i<pParse->nVtabLock; i++){
115597 char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]);
115598 sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB);
115599 }
115600 pParse->nVtabLock = 0;
115601 #endif
115602
115603 /* Once all the cookies have been verified and transactions opened,
115604 ** obtain the required table-locks. This is a no-op unless the
115605 ** shared-cache feature is enabled.
115606 */
115607 codeTableLocks(pParse);
115608
115609 /* Initialize any AUTOINCREMENT data structures required.
115610 */
115611 sqlite3AutoincrementBegin(pParse);
115612
115613 /* Code constant expressions that where factored out of inner loops.
115614 **
115615 ** The pConstExpr list might also contain expressions that we simply
115616 ** want to keep around until the Parse object is deleted. Such
115617 ** expressions have iConstExprReg==0. Do not generate code for
115618 ** those expressions, of course.
115619 */
115620 if( pParse->pConstExpr ){
115621 ExprList *pEL = pParse->pConstExpr;
115622 pParse->okConstFactor = 0;
115623 for(i=0; i<pEL->nExpr; i++){
115624 int iReg = pEL->a[i].u.iConstExprReg;
115625 sqlite3ExprCode(pParse, pEL->a[i].pExpr, iReg);
115626 }
115627 }
115628
115629 if( pParse->bReturning ){
115630 Returning *pRet = pParse->u1.pReturning;
115631 if( pRet->nRetCol ){
115632 sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pRet->iRetCur, pRet->nRetCol);
115633 }
115634 }
115635
115636 /* Finally, jump back to the beginning of the executable code. */
115637 sqlite3VdbeGoto(v, 1);
 
 
 
115638 }
115639
115640 /* Get the VDBE program ready for execution
115641 */
115642 assert( v!=0 || pParse->nErr );
@@ -115445,12 +115688,10 @@
115688 pParse->nested++;
115689 memcpy(saveBuf, PARSE_TAIL(pParse), PARSE_TAIL_SZ);
115690 memset(PARSE_TAIL(pParse), 0, PARSE_TAIL_SZ);
115691 db->mDbFlags |= DBFLAG_PreferBuiltin;
115692 sqlite3RunParser(pParse, zSql);
 
 
115693 db->mDbFlags = savedDbFlags;
115694 sqlite3DbFree(db, zSql);
115695 memcpy(PARSE_TAIL(pParse), saveBuf, PARSE_TAIL_SZ);
115696 pParse->nested--;
115697 }
@@ -115898,20 +116139,21 @@
116139 */
116140 SQLITE_PRIVATE void sqlite3DeleteColumnNames(sqlite3 *db, Table *pTable){
116141 int i;
116142 Column *pCol;
116143 assert( pTable!=0 );
116144 assert( db!=0 );
116145 if( (pCol = pTable->aCol)!=0 ){
116146 for(i=0; i<pTable->nCol; i++, pCol++){
116147 assert( pCol->zCnName==0 || pCol->hName==sqlite3StrIHash(pCol->zCnName) );
116148 sqlite3DbFree(db, pCol->zCnName);
116149 }
116150 sqlite3DbNNFreeNN(db, pTable->aCol);
116151 if( IsOrdinaryTable(pTable) ){
116152 sqlite3ExprListDelete(db, pTable->u.tab.pDfltList);
116153 }
116154 if( db->pnBytesFreed==0 ){
116155 pTable->aCol = 0;
116156 pTable->nCol = 0;
116157 if( IsOrdinaryTable(pTable) ){
116158 pTable->u.tab.pDfltList = 0;
116159 }
@@ -115944,21 +116186,22 @@
116186 **
116187 ** If malloc has already failed, it may be that it failed while allocating
116188 ** a Table object that was going to be marked ephemeral. So do not check
116189 ** that no lookaside memory is used in this case either. */
116190 int nLookaside = 0;
116191 assert( db!=0 );
116192 if( !db->mallocFailed && (pTable->tabFlags & TF_Ephemeral)==0 ){
116193 nLookaside = sqlite3LookasideUsed(db, 0);
116194 }
116195 #endif
116196
116197 /* Delete all indices associated with this table. */
116198 for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){
116199 pNext = pIndex->pNext;
116200 assert( pIndex->pSchema==pTable->pSchema
116201 || (IsVirtual(pTable) && pIndex->idxType!=SQLITE_IDXTYPE_APPDEF) );
116202 if( db->pnBytesFreed==0 && !IsVirtual(pTable) ){
116203 char *zName = pIndex->zName;
116204 TESTONLY ( Index *pOld = ) sqlite3HashInsert(
116205 &pIndex->pSchema->idxHash, zName, 0
116206 );
116207 assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
@@ -115991,12 +116234,13 @@
116234 /* Verify that no lookaside memory was used by schema tables */
116235 assert( nLookaside==0 || nLookaside==sqlite3LookasideUsed(db,0) );
116236 }
116237 SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){
116238 /* Do not delete the table until the reference count reaches zero. */
116239 assert( db!=0 );
116240 if( !pTable ) return;
116241 if( db->pnBytesFreed==0 && (--pTable->nTabRef)>0 ) return;
116242 deleteTable(db, pTable);
116243 }
116244
116245
116246 /*
@@ -118165,11 +118409,11 @@
118409 /*
118410 ** The Table structure pTable is really a VIEW. Fill in the names of
118411 ** the columns of the view in the pTable structure. Return the number
118412 ** of errors. If an error is seen leave an error message in pParse->zErrMsg.
118413 */
118414 static SQLITE_NOINLINE int viewGetColumnNames(Parse *pParse, Table *pTable){
118415 Table *pSelTab; /* A fake table from which we get the result set */
118416 Select *pSel; /* Copy of the SELECT that implements the view */
118417 int nErr = 0; /* Number of errors encountered */
118418 sqlite3 *db = pParse->db; /* Database connection for malloc errors */
118419 #ifndef SQLITE_OMIT_VIRTUALTABLE
@@ -118190,13 +118434,14 @@
118434 }
118435 #endif
118436
118437 #ifndef SQLITE_OMIT_VIEW
118438 /* A positive nCol means the columns names for this view are
118439 ** already known. This routine is not called unless either the
118440 ** table is virtual or nCol is zero.
118441 */
118442 assert( pTable->nCol<=0 );
118443
118444 /* A negative nCol is a special marker meaning that we are currently
118445 ** trying to compute the column names. If we enter this routine with
118446 ** a negative nCol, it means two or more views form a loop, like this:
118447 **
@@ -118287,10 +118532,15 @@
118532 if( db->mallocFailed ){
118533 sqlite3DeleteColumnNames(db, pTable);
118534 }
118535 #endif /* SQLITE_OMIT_VIEW */
118536 return nErr;
118537 }
118538 SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
118539 assert( pTable!=0 );
118540 if( !IsVirtual(pTable) && pTable->nCol>0 ) return 0;
118541 return viewGetColumnNames(pParse, pTable);
118542 }
118543 #endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */
118544
118545 #ifndef SQLITE_OMIT_VIEW
118546 /*
@@ -119153,11 +119403,11 @@
119403 if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName,"index",pTab->zName) ){
119404 goto exit_create_index;
119405 }
119406 if( !IN_RENAME_OBJECT ){
119407 if( !db->init.busy ){
119408 if( sqlite3FindTable(db, zName, pDb->zDbSName)!=0 ){
119409 sqlite3ErrorMsg(pParse, "there is already a table named %s", zName);
119410 goto exit_create_index;
119411 }
119412 }
119413 if( sqlite3FindIndex(db, zName, pDb->zDbSName)!=0 ){
@@ -119806,16 +120056,17 @@
120056 /*
120057 ** Delete an IdList.
120058 */
120059 SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){
120060 int i;
120061 assert( db!=0 );
120062 if( pList==0 ) return;
120063 assert( pList->eU4!=EU4_EXPR ); /* EU4_EXPR mode is not currently used */
120064 for(i=0; i<pList->nId; i++){
120065 sqlite3DbFree(db, pList->a[i].zName);
120066 }
120067 sqlite3DbNNFreeNN(db, pList);
120068 }
120069
120070 /*
120071 ** Return the index in pList of the identifier named zId. Return -1
120072 ** if not found.
@@ -120014,15 +120265,16 @@
120265 ** Delete an entire SrcList including all its substructure.
120266 */
120267 SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){
120268 int i;
120269 SrcItem *pItem;
120270 assert( db!=0 );
120271 if( pList==0 ) return;
120272 for(pItem=pList->a, i=0; i<pList->nSrc; i++, pItem++){
120273 if( pItem->zDatabase ) sqlite3DbNNFreeNN(db, pItem->zDatabase);
120274 if( pItem->zName ) sqlite3DbNNFreeNN(db, pItem->zName);
120275 if( pItem->zAlias ) sqlite3DbNNFreeNN(db, pItem->zAlias);
120276 if( pItem->fg.isIndexedBy ) sqlite3DbFree(db, pItem->u1.zIndexedBy);
120277 if( pItem->fg.isTabFunc ) sqlite3ExprListDelete(db, pItem->u1.pFuncArg);
120278 sqlite3DeleteTable(db, pItem->pTab);
120279 if( pItem->pSelect ) sqlite3SelectDelete(db, pItem->pSelect);
120280 if( pItem->fg.isUsing ){
@@ -120029,11 +120281,11 @@
120281 sqlite3IdListDelete(db, pItem->u3.pUsing);
120282 }else if( pItem->u3.pOn ){
120283 sqlite3ExprDelete(db, pItem->u3.pOn);
120284 }
120285 }
120286 sqlite3DbNNFreeNN(db, pList);
120287 }
120288
120289 /*
120290 ** This routine is called by the parser to add a new term to the
120291 ** end of a growing FROM clause. The "p" parameter is the part of
@@ -121281,23 +121533,25 @@
121533 SQLITE_PRIVATE void sqlite3SchemaClear(void *p){
121534 Hash temp1;
121535 Hash temp2;
121536 HashElem *pElem;
121537 Schema *pSchema = (Schema *)p;
121538 sqlite3 xdb;
121539
121540 memset(&xdb, 0, sizeof(xdb));
121541 temp1 = pSchema->tblHash;
121542 temp2 = pSchema->trigHash;
121543 sqlite3HashInit(&pSchema->trigHash);
121544 sqlite3HashClear(&pSchema->idxHash);
121545 for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){
121546 sqlite3DeleteTrigger(&xdb, (Trigger*)sqliteHashData(pElem));
121547 }
121548 sqlite3HashClear(&temp2);
121549 sqlite3HashInit(&pSchema->tblHash);
121550 for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){
121551 Table *pTab = sqliteHashData(pElem);
121552 sqlite3DeleteTable(&xdb, pTab);
121553 }
121554 sqlite3HashClear(&temp1);
121555 sqlite3HashClear(&pSchema->fkeyHash);
121556 pSchema->pSeqTab = 0;
121557 if( pSchema->schemaFlags & DB_SchemaLoaded ){
@@ -121392,22 +121646,46 @@
121646 ** A table is read-only if any of the following are true:
121647 **
121648 ** 1) It is a virtual table and no implementation of the xUpdate method
121649 ** has been provided
121650 **
121651 ** 2) A trigger is currently being coded and the table is a virtual table
121652 ** that is SQLITE_VTAB_DIRECTONLY or if PRAGMA trusted_schema=OFF and
121653 ** the table is not SQLITE_VTAB_INNOCUOUS.
121654 **
121655 ** 3) It is a system table (i.e. sqlite_schema), this call is not
121656 ** part of a nested parse and writable_schema pragma has not
121657 ** been specified
121658 **
121659 ** 4) The table is a shadow table, the database connection is in
121660 ** defensive mode, and the current sqlite3_prepare()
121661 ** is for a top-level SQL statement.
121662 */
121663 static int vtabIsReadOnly(Parse *pParse, Table *pTab){
121664 if( sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0 ){
121665 return 1;
121666 }
121667
121668 /* Within triggers:
121669 ** * Do not allow DELETE, INSERT, or UPDATE of SQLITE_VTAB_DIRECTONLY
121670 ** virtual tables
121671 ** * Only allow DELETE, INSERT, or UPDATE of non-SQLITE_VTAB_INNOCUOUS
121672 ** virtual tables if PRAGMA trusted_schema=ON.
121673 */
121674 if( pParse->pToplevel!=0
121675 && pTab->u.vtab.p->eVtabRisk >
121676 ((pParse->db->flags & SQLITE_TrustedSchema)!=0)
121677 ){
121678 sqlite3ErrorMsg(pParse, "unsafe use of virtual table \"%s\"",
121679 pTab->zName);
121680 }
121681 return 0;
121682 }
121683 static int tabIsReadOnly(Parse *pParse, Table *pTab){
121684 sqlite3 *db;
121685 if( IsVirtual(pTab) ){
121686 return vtabIsReadOnly(pParse, pTab);
121687 }
121688 if( (pTab->tabFlags & (TF_Readonly|TF_Shadow))==0 ) return 0;
121689 db = pParse->db;
121690 if( (pTab->tabFlags & TF_Readonly)!=0 ){
121691 return sqlite3WritableSchema(db)==0 && pParse->nested==0;
@@ -121415,13 +121693,15 @@
121693 assert( pTab->tabFlags & TF_Shadow );
121694 return sqlite3ReadOnlyShadowTables(db);
121695 }
121696
121697 /*
121698 ** Check to make sure the given table is writable.
121699 **
121700 ** If pTab is not writable -> generate an error message and return 1.
121701 ** If pTab is writable but other errors have occurred -> return 1.
121702 ** If pTab is writable and no prior errors -> return 0;
121703 */
121704 SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){
121705 if( tabIsReadOnly(pParse, pTab) ){
121706 sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName);
121707 return 1;
@@ -121778,13 +122058,14 @@
122058 sqlite3VdbeAddOp4(v, OP_Clear, pTab->tnum, iDb, memCnt ? memCnt : -1,
122059 pTab->zName, P4_STATIC);
122060 }
122061 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
122062 assert( pIdx->pSchema==pTab->pSchema );
 
122063 if( IsPrimaryKeyIndex(pIdx) && !HasRowid(pTab) ){
122064 sqlite3VdbeAddOp3(v, OP_Clear, pIdx->tnum, iDb, memCnt ? memCnt : -1);
122065 }else{
122066 sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb);
122067 }
122068 }
122069 }else
122070 #endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */
122071 {
@@ -121980,11 +122261,11 @@
122261 sqlite3ExprDelete(db, pWhere);
122262 #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
122263 sqlite3ExprListDelete(db, pOrderBy);
122264 sqlite3ExprDelete(db, pLimit);
122265 #endif
122266 if( aToOpen ) sqlite3DbNNFreeNN(db, aToOpen);
122267 return;
122268 }
122269 /* Make sure "isView" and other macros defined above are undefined. Otherwise
122270 ** they may interfere with compilation of other functions in this file
122271 ** (or in another file, if this file becomes part of the amalgamation). */
@@ -126148,15 +126429,16 @@
126429 SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){
126430 FKey *pFKey; /* Iterator variable */
126431 FKey *pNext; /* Copy of pFKey->pNextFrom */
126432
126433 assert( IsOrdinaryTable(pTab) );
126434 assert( db!=0 );
126435 for(pFKey=pTab->u.tab.pFKey; pFKey; pFKey=pNext){
126436 assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pTab->pSchema) );
126437
126438 /* Remove the FK from the fkeyHash hash table. */
126439 if( db->pnBytesFreed==0 ){
126440 if( pFKey->pPrevTo ){
126441 pFKey->pPrevTo->pNextTo = pFKey->pNextTo;
126442 }else{
126443 void *p = (void *)pFKey->pNextTo;
126444 const char *z = (p ? pFKey->pNextTo->zTo : pFKey->zTo);
@@ -126345,11 +126627,11 @@
126627 /* Move the previous opcode (which should be OP_MakeRecord) forward
126628 ** by one slot and insert a new OP_TypeCheck where the current
126629 ** OP_MakeRecord is found */
126630 VdbeOp *pPrev;
126631 sqlite3VdbeAppendP4(v, pTab, P4_TABLE);
126632 pPrev = sqlite3VdbeGetLastOp(v);
126633 assert( pPrev!=0 );
126634 assert( pPrev->opcode==OP_MakeRecord || sqlite3VdbeDb(v)->mallocFailed );
126635 pPrev->opcode = OP_TypeCheck;
126636 sqlite3VdbeAddOp3(v, OP_MakeRecord, pPrev->p1, pPrev->p2, pPrev->p3);
126637 }else{
@@ -126383,11 +126665,11 @@
126665 i = sqlite3Strlen30NN(zColAff);
126666 if( i ){
126667 if( iReg ){
126668 sqlite3VdbeAddOp4(v, OP_Affinity, iReg, i, 0, zColAff, i);
126669 }else{
126670 assert( sqlite3VdbeGetLastOp(v)->opcode==OP_MakeRecord
126671 || sqlite3VdbeDb(v)->mallocFailed );
126672 sqlite3VdbeChangeP4(v, -1, zColAff, i);
126673 }
126674 }
126675 }
@@ -126469,11 +126751,11 @@
126751 /* Before computing generated columns, first go through and make sure
126752 ** that appropriate affinity has been applied to the regular columns
126753 */
126754 sqlite3TableAffinity(pParse->pVdbe, pTab, iRegStore);
126755 if( (pTab->tabFlags & TF_HasStored)!=0 ){
126756 pOp = sqlite3VdbeGetLastOp(pParse->pVdbe);
126757 if( pOp->opcode==OP_Affinity ){
126758 /* Change the OP_Affinity argument to '@' (NONE) for all stored
126759 ** columns. '@' is the no-op affinity and those columns have not
126760 ** yet been computed. */
126761 int ii, jj;
@@ -127375,11 +127657,16 @@
127657 }else if( pSelect ){
127658 if( regFromSelect!=regData ){
127659 sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+k, iRegStore);
127660 }
127661 }else{
127662 Expr *pX = pList->a[k].pExpr;
127663 int y = sqlite3ExprCodeTarget(pParse, pX, iRegStore);
127664 if( y!=iRegStore ){
127665 sqlite3VdbeAddOp2(v,
127666 ExprHasProperty(pX, EP_Subquery) ? OP_Copy : OP_SCopy, y, iRegStore);
127667 }
127668 }
127669 }
127670
127671
127672 /* Run the BEFORE and INSTEAD OF triggers, if there are any
@@ -127512,11 +127799,13 @@
127799 int isReplace = 0;/* Set to true if constraints may cause a replace */
127800 int bUseSeek; /* True to use OPFLAG_SEEKRESULT */
127801 sqlite3GenerateConstraintChecks(pParse, pTab, aRegIdx, iDataCur, iIdxCur,
127802 regIns, 0, ipkColumn>=0, onError, endOfLoop, &isReplace, 0, pUpsert
127803 );
127804 if( db->flags & SQLITE_ForeignKeys ){
127805 sqlite3FkCheck(pParse, pTab, 0, regIns, 0, 0);
127806 }
127807
127808 /* Set the OPFLAG_USESEEKRESULT flag if either (a) there are no REPLACE
127809 ** constraints or (b) there are no triggers and this table is not a
127810 ** parent table in a foreign key constraint. It is safe to set the
127811 ** flag in the second case as if any REPLACE constraint is hit, an
@@ -127596,11 +127885,11 @@
127885 sqlite3SrcListDelete(db, pTabList);
127886 sqlite3ExprListDelete(db, pList);
127887 sqlite3UpsertDelete(db, pUpsert);
127888 sqlite3SelectDelete(db, pSelect);
127889 sqlite3IdListDelete(db, pColumn);
127890 if( aRegIdx ) sqlite3DbNNFreeNN(db, aRegIdx);
127891 }
127892
127893 /* Make sure "isView" and other macros defined above are undefined. Otherwise
127894 ** they may interfere with compilation of other functions in this file
127895 ** (or in another file, if this file becomes part of the amalgamation). */
@@ -132702,19 +132991,21 @@
132991 ** Setting to a null string reverts to the default temporary directory search.
132992 ** If temporary directory is changed, then invalidateTempStorage.
132993 **
132994 */
132995 case PragTyp_TEMP_STORE_DIRECTORY: {
132996 sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
132997 if( !zRight ){
132998 returnSingleText(v, sqlite3_temp_directory);
132999 }else{
133000 #ifndef SQLITE_OMIT_WSD
133001 if( zRight[0] ){
133002 int res;
133003 rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res);
133004 if( rc!=SQLITE_OK || res==0 ){
133005 sqlite3ErrorMsg(pParse, "not a writable directory");
133006 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
133007 goto pragma_out;
133008 }
133009 }
133010 if( SQLITE_TEMP_STORE==0
133011 || (SQLITE_TEMP_STORE==1 && db->temp_store<=1)
@@ -132728,10 +133019,11 @@
133019 }else{
133020 sqlite3_temp_directory = 0;
133021 }
133022 #endif /* SQLITE_OMIT_WSD */
133023 }
133024 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
133025 break;
133026 }
133027
133028 #if SQLITE_OS_WIN
133029 /*
@@ -132746,19 +133038,21 @@
133038 ** process. Database file specified with an absolute path are not impacted
133039 ** by this setting, regardless of its value.
133040 **
133041 */
133042 case PragTyp_DATA_STORE_DIRECTORY: {
133043 sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
133044 if( !zRight ){
133045 returnSingleText(v, sqlite3_data_directory);
133046 }else{
133047 #ifndef SQLITE_OMIT_WSD
133048 if( zRight[0] ){
133049 int res;
133050 rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res);
133051 if( rc!=SQLITE_OK || res==0 ){
133052 sqlite3ErrorMsg(pParse, "not a writable directory");
133053 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
133054 goto pragma_out;
133055 }
133056 }
133057 sqlite3_free(sqlite3_data_directory);
133058 if( zRight[0] ){
@@ -132766,10 +133060,11 @@
133060 }else{
133061 sqlite3_data_directory = 0;
133062 }
133063 #endif /* SQLITE_OMIT_WSD */
133064 }
133065 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
133066 break;
133067 }
133068 #endif
133069
133070 #if SQLITE_ENABLE_LOCKING_STYLE
@@ -133479,19 +133774,27 @@
133774 /* Make sure all the indices are constructed correctly.
133775 */
133776 for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
133777 Table *pTab = sqliteHashData(x);
133778 Index *pIdx, *pPk;
133779 Index *pPrior = 0; /* Previous index */
133780 int loopTop;
133781 int iDataCur, iIdxCur;
133782 int r1 = -1;
133783 int bStrict;
133784 int r2; /* Previous key for WITHOUT ROWID tables */
133785
133786 if( !IsOrdinaryTable(pTab) ) continue;
133787 if( pObjTab && pObjTab!=pTab ) continue;
133788 if( isQuick || HasRowid(pTab) ){
133789 pPk = 0;
133790 r2 = 0;
133791 }else{
133792 pPk = sqlite3PrimaryKeyIndex(pTab);
133793 r2 = sqlite3GetTempRange(pParse, pPk->nKeyCol);
133794 sqlite3VdbeAddOp3(v, OP_Null, 1, r2, r2+pPk->nKeyCol-1);
133795 }
133796 sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenRead, 0,
133797 1, 0, &iDataCur, &iIdxCur);
133798 /* reg[7] counts the number of entries in the table.
133799 ** reg[8+i] counts the number of entries in the i-th index
133800 */
@@ -133506,10 +133809,28 @@
133809 if( !isQuick ){
133810 /* Sanity check on record header decoding */
133811 sqlite3VdbeAddOp3(v, OP_Column, iDataCur, pTab->nNVCol-1,3);
133812 sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG);
133813 VdbeComment((v, "(right-most column)"));
133814 if( pPk ){
133815 /* Verify WITHOUT ROWID keys are in ascending order */
133816 int a1;
133817 char *zErr;
133818 a1 = sqlite3VdbeAddOp4Int(v, OP_IdxGT, iDataCur, 0,r2,pPk->nKeyCol);
133819 VdbeCoverage(v);
133820 sqlite3VdbeAddOp1(v, OP_IsNull, r2); VdbeCoverage(v);
133821 zErr = sqlite3MPrintf(db,
133822 "row not in PRIMARY KEY order for %s",
133823 pTab->zName);
133824 sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC);
133825 integrityCheckResultRow(v);
133826 sqlite3VdbeJumpHere(v, a1);
133827 sqlite3VdbeJumpHere(v, a1+1);
133828 for(j=0; j<pPk->nKeyCol; j++){
133829 sqlite3ExprCodeLoadIndexColumn(pParse, pPk, iDataCur, j, r2+j);
133830 }
133831 }
133832 }
133833 /* Verify that all NOT NULL columns really are NOT NULL. At the
133834 ** same time verify the type of the content of STRICT tables */
133835 bStrict = (pTab->tabFlags & TF_Strict)!=0;
133836 for(j=0; j<pTab->nCol; j++){
@@ -133518,11 +133839,11 @@
133839 int doError, jmp2;
133840 if( j==pTab->iPKey ) continue;
133841 if( pCol->notNull==0 && !bStrict ) continue;
133842 doError = bStrict ? sqlite3VdbeMakeLabel(pParse) : 0;
133843 sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, j, 3);
133844 if( sqlite3VdbeGetLastOp(v)->opcode==OP_Column ){
133845 sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG);
133846 }
133847 if( pCol->notNull ){
133848 jmp2 = sqlite3VdbeAddOp1(v, OP_NotNull, 3); VdbeCoverage(v);
133849 zErr = sqlite3MPrintf(db, "NULL value in %s.%s", pTab->zName,
@@ -133533,13 +133854,11 @@
133854 }else{
133855 integrityCheckResultRow(v);
133856 }
133857 sqlite3VdbeJumpHere(v, jmp2);
133858 }
133859 if( bStrict && pCol->eCType!=COLTYPE_ANY ){
 
 
133860 jmp2 = sqlite3VdbeAddOp3(v, OP_IsNullOrType, 3, 0,
133861 sqlite3StdTypeMap[pCol->eCType-1]);
133862 VdbeCoverage(v);
133863 zErr = sqlite3MPrintf(db, "non-%s value in %s.%s",
133864 sqlite3StdType[pCol->eCType-1],
@@ -133634,10 +133953,13 @@
133953 sqlite3VdbeLoadString(v, 4, pIdx->zName);
133954 sqlite3VdbeAddOp3(v, OP_Concat, 4, 2, 3);
133955 integrityCheckResultRow(v);
133956 sqlite3VdbeJumpHere(v, addr);
133957 }
133958 if( pPk ){
133959 sqlite3ReleaseTempRange(pParse, r2, pPk->nKeyCol);
133960 }
133961 }
133962 }
133963 }
133964 {
133965 static const int iLn = VDBE_OFFSET_LINENO(2);
@@ -135032,19 +135354,19 @@
135354 sqlite3 *db = pParse->db;
135355 assert( db!=0 );
135356 assert( db->pParse==pParse );
135357 assert( pParse->nested==0 );
135358 #ifndef SQLITE_OMIT_SHARED_CACHE
135359 if( pParse->aTableLock ) sqlite3DbNNFreeNN(db, pParse->aTableLock);
135360 #endif
135361 while( pParse->pCleanup ){
135362 ParseCleanup *pCleanup = pParse->pCleanup;
135363 pParse->pCleanup = pCleanup->pNext;
135364 pCleanup->xCleanup(db, pCleanup->pPtr);
135365 sqlite3DbNNFreeNN(db, pCleanup);
135366 }
135367 if( pParse->aLabel ) sqlite3DbNNFreeNN(db, pParse->aLabel);
135368 if( pParse->pConstExpr ){
135369 sqlite3ExprListDelete(db, pParse->pConstExpr);
135370 }
135371 assert( db->lookaside.bDisable >= pParse->disableLookaside );
135372 db->lookaside.bDisable -= pParse->disableLookaside;
@@ -135599,10 +135921,11 @@
135921 **
135922 ** If bFree==1, call sqlite3DbFree() on the p object.
135923 ** If bFree==0, Leave the first Select object unfreed
135924 */
135925 static void clearSelect(sqlite3 *db, Select *p, int bFree){
135926 assert( db!=0 );
135927 while( p ){
135928 Select *pPrior = p->pPrior;
135929 sqlite3ExprListDelete(db, p->pEList);
135930 sqlite3SrcListDelete(db, p->pSrc);
135931 sqlite3ExprDelete(db, p->pWhere);
@@ -135618,11 +135941,11 @@
135941 while( p->pWin ){
135942 assert( p->pWin->ppThis==&p->pWin );
135943 sqlite3WindowUnlinkFromSelect(p->pWin);
135944 }
135945 #endif
135946 if( bFree ) sqlite3DbNNFreeNN(db, p);
135947 p = pPrior;
135948 bFree = 1;
135949 }
135950 }
135951
@@ -135847,11 +136170,11 @@
136170 /*
136171 ** Mark a subquery result column as having been used.
136172 */
136173 SQLITE_PRIVATE void sqlite3SrcItemColumnUsed(SrcItem *pItem, int iCol){
136174 assert( pItem!=0 );
136175 assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
136176 if( pItem->fg.isNestedFrom ){
136177 ExprList *pResults;
136178 assert( pItem->pSelect!=0 );
136179 pResults = pItem->pSelect->pEList;
136180 assert( pResults!=0 );
@@ -135947,28 +136270,29 @@
136270 sqlite3SetJoinExpr(p->pLeft, iTable, joinFlag);
136271 p = p->pRight;
136272 }
136273 }
136274
136275 /* Undo the work of sqlite3SetJoinExpr(). This is used when a LEFT JOIN
136276 ** is simplified into an ordinary JOIN, and when an ON expression is
136277 ** "pushed down" into the WHERE clause of a subquery.
136278 **
136279 ** Convert every term that is marked with EP_OuterON and w.iJoin==iTable into
136280 ** an ordinary term that omits the EP_OuterON mark. Or if iTable<0, then
136281 ** just clear every EP_OuterON and EP_InnerON mark from the expression tree.
136282 **
136283 ** If nullable is true, that means that Expr p might evaluate to NULL even
136284 ** if it is a reference to a NOT NULL column. This can happen, for example,
136285 ** if the table that p references is on the left side of a RIGHT JOIN.
136286 ** If nullable is true, then take care to not remove the EP_CanBeNull bit.
136287 ** See forum thread https://sqlite.org/forum/forumpost/b40696f50145d21c
136288 */
136289 static void unsetJoinExpr(Expr *p, int iTable, int nullable){
136290 while( p ){
136291 if( iTable<0 || (ExprHasProperty(p, EP_OuterON) && p->w.iJoin==iTable) ){
136292 ExprClearProperty(p, EP_OuterON|EP_InnerON);
136293 if( iTable>=0 ) ExprSetProperty(p, EP_InnerON);
 
136294 }
136295 if( p->op==TK_COLUMN && p->iTable==iTable && !nullable ){
136296 ExprClearProperty(p, EP_CanBeNull);
136297 }
136298 if( p->op==TK_FUNCTION ){
@@ -137023,13 +137347,14 @@
137347 /*
137348 ** Deallocate a KeyInfo object
137349 */
137350 SQLITE_PRIVATE void sqlite3KeyInfoUnref(KeyInfo *p){
137351 if( p ){
137352 assert( p->db!=0 );
137353 assert( p->nRef>0 );
137354 p->nRef--;
137355 if( p->nRef==0 ) sqlite3DbNNFreeNN(p->db, p);
137356 }
137357 }
137358
137359 /*
137360 ** Make a new pointer to a KeyInfo object
@@ -137210,18 +137535,21 @@
137535 sqlite3VdbeAddOp3(v, OP_OpenPseudo, iSortTab, regSortOut,
137536 nKey+1+nColumn+nRefKey);
137537 if( addrOnce ) sqlite3VdbeJumpHere(v, addrOnce);
137538 addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak);
137539 VdbeCoverage(v);
137540 assert( p->iLimit==0 && p->iOffset==0 );
137541 sqlite3VdbeAddOp3(v, OP_SorterData, iTab, regSortOut, iSortTab);
137542 bSeq = 0;
137543 }else{
137544 addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak); VdbeCoverage(v);
137545 codeOffset(v, p->iOffset, addrContinue);
137546 iSortTab = iTab;
137547 bSeq = 1;
137548 if( p->iOffset>0 ){
137549 sqlite3VdbeAddOp2(v, OP_AddImm, p->iLimit, -1);
137550 }
137551 }
137552 for(i=0, iCol=nKey+bSeq-1; i<nColumn; i++){
137553 #ifdef SQLITE_ENABLE_SORTER_REFERENCES
137554 if( aOutEx[i].fg.bSorterRef ) continue;
137555 #endif
@@ -137342,13 +137670,10 @@
137670
137671 /*
137672 ** Return a pointer to a string containing the 'declaration type' of the
137673 ** expression pExpr. The string may be treated as static by the caller.
137674 **
 
 
 
137675 ** The declaration type is the exact datatype definition extracted from the
137676 ** original CREATE TABLE statement if the expression is a column. The
137677 ** declaration type for a ROWID field is INTEGER. Exactly when an expression
137678 ** is considered a column can be complex in the presence of subqueries. The
137679 ** result-set expression in all of the following SELECT statements is
@@ -139210,14 +139535,15 @@
139535
139536 /* Jump to the this point in order to terminate the query.
139537 */
139538 sqlite3VdbeResolveLabel(v, labelEnd);
139539
139540 /* Reassemble the compound query so that it will be freed correctly
139541 ** by the calling function */
139542 if( pSplit->pPrior ){
139543 sqlite3ParserAddCleanup(pParse,
139544 (void(*)(sqlite3*,void*))sqlite3SelectDelete, pSplit->pPrior);
139545 }
139546 pSplit->pPrior = pPrior;
139547 pPrior->pNext = pSplit;
139548 sqlite3ExprListDelete(db, pPrior->pOrderBy);
139549 pPrior->pOrderBy = 0;
@@ -139323,10 +139649,11 @@
139649 if( pSubst->isOuterJoin && pCopy->op!=TK_COLUMN ){
139650 memset(&ifNullRow, 0, sizeof(ifNullRow));
139651 ifNullRow.op = TK_IF_NULL_ROW;
139652 ifNullRow.pLeft = pCopy;
139653 ifNullRow.iTable = pSubst->iNewTable;
139654 ifNullRow.iColumn = -99;
139655 ifNullRow.flags = EP_IfNullRow;
139656 pCopy = &ifNullRow;
139657 }
139658 testcase( ExprHasProperty(pCopy, EP_Subquery) );
139659 pNew = sqlite3ExprDup(db, pCopy, 0);
@@ -139590,11 +139917,12 @@
139917 **
139918 ** (3) If the subquery is the right operand of a LEFT JOIN then
139919 ** (3a) the subquery may not be a join and
139920 ** (3b) the FROM clause of the subquery may not contain a virtual
139921 ** table and
139922 ** (**) Was: "The outer query may not have a GROUP BY." This case
139923 ** is now managed correctly
139924 ** (3d) the outer query may not be DISTINCT.
139925 ** See also (26) for restrictions on RIGHT JOIN.
139926 **
139927 ** (4) The subquery can not be DISTINCT.
139928 **
@@ -139644,10 +139972,13 @@
139972 ** (17d) the outer query may not be
139973 ** (17d1) aggregate, or
139974 ** (17d2) DISTINCT
139975 ** (17e) the subquery may not contain window functions, and
139976 ** (17f) the subquery must not be the RHS of a LEFT JOIN.
139977 ** (17g) either the subquery is the first element of the outer
139978 ** query or there are no RIGHT or FULL JOINs in any arm
139979 ** of the subquery. (This is a duplicate of condition (27b).)
139980 **
139981 ** The parent and sub-query may contain WHERE clauses. Subject to
139982 ** rules (11), (13) and (14), they may also contain ORDER BY,
139983 ** LIMIT and OFFSET clauses. The subquery cannot use any compound
139984 ** operator other than UNION ALL because all the other compound
@@ -139695,11 +140026,15 @@
140026 **
140027 ** (26) The subquery may not be the right operand of a RIGHT JOIN.
140028 ** See also (3) for restrictions on LEFT JOIN.
140029 **
140030 ** (27) The subquery may not contain a FULL or RIGHT JOIN unless it
140031 ** is the first element of the parent query. This must be the
140032 ** the case if:
140033 ** (27a) the subquery is not compound query, and
140034 ** (27b) the subquery is a compound query and the RIGHT JOIN occurs
140035 ** in any arm of the compound query. (See also (17g).)
140036 **
140037 ** (28) The subquery is not a MATERIALIZED CTE.
140038 **
140039 ** (29) Either the subquery is not the right-hand operand of a join with an
140040 ** ON or USING clause nor the right-hand operand of a NATURAL JOIN, or
@@ -139795,21 +140130,15 @@
140130 **
140131 ** (t1 LEFT OUTER JOIN t2) JOIN t3
140132 **
140133 ** which is not at all the same thing.
140134 **
 
 
 
 
 
140135 ** See also tickets #306, #350, and #3300.
140136 */
140137 if( (pSubitem->fg.jointype & (JT_OUTER|JT_LTORJ))!=0 ){
140138 if( pSubSrc->nSrc>1 /* (3a) */
140139 || IsVirtual(pSubSrc->a[0].pTab) /* (3b) */
 
140140 || (p->selFlags & SF_Distinct)!=0 /* (3d) */
140141 || (pSubitem->fg.jointype & JT_RIGHT)!=0 /* (26) */
140142 ){
140143 return 0;
140144 }
@@ -139825,11 +140154,11 @@
140154 }
140155 #endif
140156
140157 assert( pSubSrc->nSrc>0 ); /* True by restriction (7) */
140158 if( iFrom>0 && (pSubSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){
140159 return 0; /* Restriction (27a) */
140160 }
140161 if( pSubitem->fg.isCte && pSubitem->u2.pCteUse->eM10d==M10d_Yes ){
140162 return 0; /* (28) */
140163 }
140164
@@ -139845,11 +140174,11 @@
140174 **
140175 ** (29b) The subquery itself must not be the right operand of a
140176 ** NATURAL join or a join that as an ON or USING clause.
140177 **
140178 ** These conditions are sufficient to keep an EP_OuterON from being
140179 ** flattened into an EP_InnerON. Restrictions (3a) and (27a) prevent
140180 ** an EP_InnerON from being flattened into an EP_OuterON.
140181 */
140182 if( pSubSrc->nSrc>=2
140183 && (pSubSrc->a[pSubSrc->nSrc-1].fg.jointype & JT_OUTER)!=0
140184 ){
@@ -139886,10 +140215,16 @@
140215 #ifndef SQLITE_OMIT_WINDOWFUNC
140216 || pSub1->pWin /* (17e) */
140217 #endif
140218 ){
140219 return 0;
140220 }
140221 if( iFrom>0 && (pSub1->pSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){
140222 /* Without this restriction, the JT_LTORJ flag would end up being
140223 ** omitted on left-hand tables of the right join that is being
140224 ** flattened. */
140225 return 0; /* Restrictions (17g), (27b) */
140226 }
140227 testcase( pSub1->pSrc->nSrc>1 );
140228 }
140229
140230 /* Restriction (18). */
@@ -140189,10 +140524,12 @@
140524 Parse *pParse; /* Parsing context */
140525 u8 *pOomFault; /* Pointer to pParse->db->mallocFailed */
140526 int nConst; /* Number for COLUMN=CONSTANT terms */
140527 int nChng; /* Number of times a constant is propagated */
140528 int bHasAffBlob; /* At least one column in apExpr[] as affinity BLOB */
140529 u32 mExcludeOn; /* Which ON expressions to exclude from considertion.
140530 ** Either EP_OuterON or EP_InnerON|EP_OuterON */
140531 Expr **apExpr; /* [i*2] is COLUMN and [i*2+1] is VALUE */
140532 };
140533
140534 /*
140535 ** Add a new entry to the pConst object. Except, do not add duplicate
@@ -140251,11 +140588,11 @@
140588 ** found, add it to the pConst structure.
140589 */
140590 static void findConstInWhere(WhereConst *pConst, Expr *pExpr){
140591 Expr *pRight, *pLeft;
140592 if( NEVER(pExpr==0) ) return;
140593 if( ExprHasProperty(pExpr, pConst->mExcludeOn) ){
140594 testcase( ExprHasProperty(pExpr, EP_OuterON) );
140595 testcase( ExprHasProperty(pExpr, EP_InnerON) );
140596 return;
140597 }
140598 if( pExpr->op==TK_AND ){
@@ -140291,13 +140628,14 @@
140628 int bIgnoreAffBlob
140629 ){
140630 int i;
140631 if( pConst->pOomFault[0] ) return WRC_Prune;
140632 if( pExpr->op!=TK_COLUMN ) return WRC_Continue;
140633 if( ExprHasProperty(pExpr, EP_FixedCol|pConst->mExcludeOn) ){
140634 testcase( ExprHasProperty(pExpr, EP_FixedCol) );
140635 testcase( ExprHasProperty(pExpr, EP_OuterON) );
140636 testcase( ExprHasProperty(pExpr, EP_InnerON) );
140637 return WRC_Continue;
140638 }
140639 for(i=0; i<pConst->nConst; i++){
140640 Expr *pColumn = pConst->apExpr[i*2];
140641 if( pColumn==pExpr ) continue;
@@ -140417,10 +140755,21 @@
140755 do{
140756 x.nConst = 0;
140757 x.nChng = 0;
140758 x.apExpr = 0;
140759 x.bHasAffBlob = 0;
140760 if( ALWAYS(p->pSrc!=0)
140761 && p->pSrc->nSrc>0
140762 && (p->pSrc->a[0].fg.jointype & JT_LTORJ)!=0
140763 ){
140764 /* Do not propagate constants on any ON clause if there is a
140765 ** RIGHT JOIN anywhere in the query */
140766 x.mExcludeOn = EP_InnerON | EP_OuterON;
140767 }else{
140768 /* Do not propagate constants through the ON clause of a LEFT JOIN */
140769 x.mExcludeOn = EP_OuterON;
140770 }
140771 findConstInWhere(&x, p->pWhere);
140772 if( x.nConst ){
140773 memset(&w, 0, sizeof(w));
140774 w.pParse = pParse;
140775 w.xExprCallback = propagateConstantExprRewrite;
@@ -140705,10 +141054,11 @@
141054 if( p->pWhere
141055 || p->pEList->nExpr!=1
141056 || p->pSrc->nSrc!=1
141057 || p->pSrc->a[0].pSelect
141058 || pAggInfo->nFunc!=1
141059 || p->pHaving
141060 ){
141061 return 0;
141062 }
141063 pTab = p->pSrc->a[0].pTab;
141064 assert( pTab!=0 );
@@ -141406,11 +141756,11 @@
141756
141757 if( (zTabName = pFrom->zAlias)==0 ){
141758 zTabName = pTab->zName;
141759 }
141760 if( db->mallocFailed ) break;
141761 assert( (int)pFrom->fg.isNestedFrom == IsNestedFrom(pFrom->pSelect) );
141762 if( pFrom->fg.isNestedFrom ){
141763 assert( pFrom->pSelect!=0 );
141764 pNestedFrom = pFrom->pSelect->pEList;
141765 assert( pNestedFrom!=0 );
141766 assert( pNestedFrom->nExpr==pTab->nCol );
@@ -142280,10 +142630,11 @@
142630 && OptimizationEnabled(db, SQLITE_SimplifyJoin)
142631 ){
142632 SELECTTRACE(0x100,pParse,p,
142633 ("LEFT-JOIN simplifies to JOIN on term %d\n",i));
142634 pItem->fg.jointype &= ~(JT_LEFT|JT_OUTER);
142635 assert( pItem->iCursor>=0 );
142636 unsetJoinExpr(p->pWhere, pItem->iCursor,
142637 pTabList->a[0].fg.jointype & JT_LTORJ);
142638 }
142639
142640 /* No futher action if this term of the FROM clause is no a subquery */
@@ -142334,11 +142685,13 @@
142685 && (p->selFlags & SF_OrderByReqd)==0 /* Condition (3) and (4) */
142686 && OptimizationEnabled(db, SQLITE_OmitOrderBy)
142687 ){
142688 SELECTTRACE(0x100,pParse,p,
142689 ("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1));
142690 sqlite3ParserAddCleanup(pParse,
142691 (void(*)(sqlite3*,void*))sqlite3ExprListDelete,
142692 pSub->pOrderBy);
142693 pSub->pOrderBy = 0;
142694 }
142695
142696 /* If the outer query contains a "complex" result set (that is,
142697 ** if the result set of the outer query uses functions or subqueries)
@@ -142501,11 +142854,11 @@
142854 zSavedAuthContext = pParse->zAuthContext;
142855 pParse->zAuthContext = pItem->zName;
142856
142857 /* Generate code to implement the subquery
142858 **
142859 ** The subquery is implemented as a co-routine if all of the following are
142860 ** true:
142861 **
142862 ** (1) the subquery is guaranteed to be the outer loop (so that
142863 ** it does not need to be computed more than once), and
142864 ** (2) the subquery is not a CTE that should be materialized
@@ -142695,11 +143048,11 @@
143048 */
143049 iEnd = sqlite3VdbeMakeLabel(pParse);
143050 if( (p->selFlags & SF_FixedLimit)==0 ){
143051 p->nSelectRow = 320; /* 4 billion rows */
143052 }
143053 if( p->pLimit ) computeLimitRegisters(pParse, p, iEnd);
143054 if( p->iLimit==0 && sSort.addrSortIndex>=0 ){
143055 sqlite3VdbeChangeOpcode(v, sSort.addrSortIndex, OP_SorterOpen);
143056 sSort.sortFlags |= SORTFLAG_UseSorter;
143057 }
143058
@@ -142917,12 +143270,17 @@
143270 if( minMaxFlag ){
143271 sqlite3DebugPrintf("MIN/MAX Optimization (0x%02x) adds:\n", minMaxFlag);
143272 sqlite3TreeViewExprList(0, pMinMaxOrderBy, 0, "ORDERBY");
143273 }
143274 for(ii=0; ii<pAggInfo->nColumn; ii++){
143275 struct AggInfo_col *pCol = &pAggInfo->aCol[ii];
143276 sqlite3DebugPrintf(
143277 "agg-column[%d] pTab=%s iTable=%d iColumn=%d iMem=%d"
143278 " iSorterColumn=%d\n",
143279 ii, pCol->pTab ? pCol->pTab->zName : "NULL",
143280 pCol->iTable, pCol->iColumn, pCol->iMem,
143281 pCol->iSorterColumn);
143282 sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0);
143283 }
143284 for(ii=0; ii<pAggInfo->nFunc; ii++){
143285 sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n",
143286 ii, pAggInfo->aFunc[ii].iMem);
@@ -143039,19 +143397,19 @@
143397 }
143398 }
143399 regBase = sqlite3GetTempRange(pParse, nCol);
143400 sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0, 0);
143401 j = nGroupBy;
143402 pAggInfo->directMode = 1;
143403 for(i=0; i<pAggInfo->nColumn; i++){
143404 struct AggInfo_col *pCol = &pAggInfo->aCol[i];
143405 if( pCol->iSorterColumn>=j ){
143406 sqlite3ExprCode(pParse, pCol->pCExpr, j + regBase);
 
 
143407 j++;
143408 }
143409 }
143410 pAggInfo->directMode = 0;
143411 regRecord = sqlite3GetTempReg(pParse);
143412 sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord);
143413 sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord);
143414 sqlite3ReleaseTempReg(pParse, regRecord);
143415 sqlite3ReleaseTempRange(pParse, regBase, nCol);
@@ -147465,11 +147823,12 @@
147823 ** in the list are moved to the sqlite3.pDisconnect list of the associated
147824 ** database connection.
147825 */
147826 SQLITE_PRIVATE void sqlite3VtabClear(sqlite3 *db, Table *p){
147827 assert( IsVirtual(p) );
147828 assert( db!=0 );
147829 if( db->pnBytesFreed==0 ) vtabDisconnectAll(0, p);
147830 if( p->u.vtab.azArg ){
147831 int i;
147832 for(i=0; i<p->u.vtab.nArg; i++){
147833 if( i!=1 ) sqlite3DbFree(db, p->u.vtab.azArg[i]);
147834 }
@@ -149142,10 +149501,11 @@
149501 #define WHERE_IN_SEEKSCAN 0x00100000 /* Seek-scan optimization for IN */
149502 #define WHERE_TRANSCONS 0x00200000 /* Uses a transitive constraint */
149503 #define WHERE_BLOOMFILTER 0x00400000 /* Consider using a Bloom-filter */
149504 #define WHERE_SELFCULL 0x00800000 /* nOut reduced by extra WHERE terms */
149505 #define WHERE_OMIT_OFFSET 0x01000000 /* Set offset counter to zero */
149506 #define WHERE_VIEWSCAN 0x02000000 /* A full-scan of a VIEW or subquery */
149507
149508 #endif /* !defined(SQLITE_WHEREINT_H) */
149509
149510 /************** End of whereInt.h ********************************************/
149511 /************** Continuing where we left off in wherecode.c ******************/
@@ -149750,11 +150110,12 @@
150110 eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap,&iTab);
150111 pExpr->iTable = iTab;
150112 }
150113 sqlite3ExprDelete(db, pX);
150114 }else{
150115 int n = sqlite3ExprVectorSize(pX->pLeft);
150116 aiMap = (int*)sqlite3DbMallocZero(pParse->db, sizeof(int)*MAX(nEq,n));
150117 eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap, &iTab);
150118 }
150119 pX = pExpr;
150120 }
150121
@@ -150020,11 +150381,11 @@
150381 WhereTerm *pTerm /* The upper or lower bound just coded */
150382 ){
150383 if( pTerm->wtFlags & TERM_LIKEOPT ){
150384 VdbeOp *pOp;
150385 assert( pLevel->iLikeRepCntr>0 );
150386 pOp = sqlite3VdbeGetLastOp(v);
150387 assert( pOp!=0 );
150388 assert( pOp->opcode==OP_String8
150389 || pTerm->pWC->pWInfo->pParse->db->mallocFailed );
150390 pOp->p3 = (int)(pLevel->iLikeRepCntr>>1); /* Register holding counter */
150391 pOp->p5 = (u8)(pLevel->iLikeRepCntr&1); /* ASC or DESC */
@@ -151236,12 +151597,12 @@
151597 sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq);
151598 endEq = 0;
151599 }
151600 nConstraint++;
151601 }
151602 if( zStartAff ) sqlite3DbNNFreeNN(db, zStartAff);
151603 if( zEndAff ) sqlite3DbNNFreeNN(db, zEndAff);
151604
151605 /* Top of the loop body */
151606 if( pLevel->p2==0 ) pLevel->p2 = sqlite3VdbeCurrentAddr(v);
151607
151608 /* Check if the index cursor is past the end of the range. */
@@ -153168,13 +153529,19 @@
153529 sqlite3ErrorMsg(pParse, "ON clause references tables to its right");
153530 return;
153531 }
153532 }else if( (prereqAll>>1)>=x ){
153533 /* The ON clause of an INNER JOIN references a table to its right.
153534 ** Most other SQL database engines raise an error. But SQLite versions
153535 ** 3.0 through 3.38 just put the ON clause constraint into the WHERE
153536 ** clause and carried on. Beginning with 3.39, raise an error only
153537 ** if there is a RIGHT or FULL JOIN in the query. This makes SQLite
153538 ** more like other systems, and also preserves legacy. */
153539 if( ALWAYS(pSrc->nSrc>0) && (pSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){
153540 sqlite3ErrorMsg(pParse, "ON clause references tables to its right");
153541 return;
153542 }
153543 ExprClearProperty(pExpr, EP_InnerON);
153544 }
153545 }
153546 pTerm->prereqAll = prereqAll;
153547 pTerm->leftCursor = -1;
@@ -155328,11 +155695,11 @@
155695 #ifndef SQLITE_DEBUG
155696 UNUSED_PARAMETER( pParse );
155697 #endif
155698 assert( pRec!=0 );
155699 assert( pIdx->nSample>0 );
155700 assert( pRec->nField>0 );
155701
155702 /* Do a binary search to find the first sample greater than or equal
155703 ** to pRec. If pRec contains a single field, the set of samples to search
155704 ** is simply the aSample[] array. If the samples in aSample[] contain more
155705 ** than one fields, all fields following the first are ignored.
@@ -155374,11 +155741,11 @@
155741 ** appears that it should be 1 field in size. However, that would make it
155742 ** smaller than sample 1, so the binary search would not work. As a result,
155743 ** it is extended to two fields. The duplicates that this creates do not
155744 ** cause any problems.
155745 */
155746 nField = MIN(pRec->nField, pIdx->nSample);
155747 iCol = 0;
155748 iSample = pIdx->nSample * nField;
155749 do{
155750 int iSamp; /* Index in aSample[] of test sample */
155751 int n; /* Number of fields in test sample */
@@ -155462,11 +155829,11 @@
155829 /* At this point, the (iCol+1) field prefix of aSample[i] is the first
155830 ** sample that is greater than pRec. Or, if i==pIdx->nSample then pRec
155831 ** is larger than all samples in the array. */
155832 tRowcnt iUpper, iGap;
155833 if( i>=pIdx->nSample ){
155834 iUpper = pIdx->nRowEst0;
155835 }else{
155836 iUpper = aSample[i].anLt[iCol];
155837 }
155838
155839 if( iLower>=iUpper ){
@@ -156091,16 +156458,22 @@
156458 }
156459 }
156460 }
156461
156462 /*
156463 ** Deallocate internal memory used by a WhereLoop object. Leave the
156464 ** object in an initialized state, as if it had been newly allocated.
156465 */
156466 static void whereLoopClear(sqlite3 *db, WhereLoop *p){
156467 if( p->aLTerm!=p->aLTermSpace ){
156468 sqlite3DbFreeNN(db, p->aLTerm);
156469 p->aLTerm = p->aLTermSpace;
156470 p->nLSlot = ArraySize(p->aLTermSpace);
156471 }
156472 whereLoopClearUnion(db, p);
156473 p->nLTerm = 0;
156474 p->wsFlags = 0;
156475 }
156476
156477 /*
156478 ** Increase the memory allocation for pLoop->aLTerm[] to be at least n.
156479 */
@@ -156120,11 +156493,13 @@
156493 /*
156494 ** Transfer content from the second pLoop into the first.
156495 */
156496 static int whereLoopXfer(sqlite3 *db, WhereLoop *pTo, WhereLoop *pFrom){
156497 whereLoopClearUnion(db, pTo);
156498 if( pFrom->nLTerm > pTo->nLSlot
156499 && whereLoopResize(db, pTo, pFrom->nLTerm)
156500 ){
156501 memset(pTo, 0, WHERE_LOOP_XFER_SZ);
156502 return SQLITE_NOMEM_BKPT;
156503 }
156504 memcpy(pTo, pFrom, WHERE_LOOP_XFER_SZ);
156505 memcpy(pTo->aLTerm, pFrom->aLTerm, pTo->nLTerm*sizeof(pTo->aLTerm[0]));
@@ -156138,32 +156513,34 @@
156513
156514 /*
156515 ** Delete a WhereLoop object
156516 */
156517 static void whereLoopDelete(sqlite3 *db, WhereLoop *p){
156518 assert( db!=0 );
156519 whereLoopClear(db, p);
156520 sqlite3DbNNFreeNN(db, p);
156521 }
156522
156523 /*
156524 ** Free a WhereInfo structure
156525 */
156526 static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){
156527 assert( pWInfo!=0 );
156528 assert( db!=0 );
156529 sqlite3WhereClauseClear(&pWInfo->sWC);
156530 while( pWInfo->pLoops ){
156531 WhereLoop *p = pWInfo->pLoops;
156532 pWInfo->pLoops = p->pNextLoop;
156533 whereLoopDelete(db, p);
156534 }
156535 assert( pWInfo->pExprMods==0 );
156536 while( pWInfo->pMemToFree ){
156537 WhereMemBlock *pNext = pWInfo->pMemToFree->pNext;
156538 sqlite3DbNNFreeNN(db, pWInfo->pMemToFree);
156539 pWInfo->pMemToFree = pNext;
156540 }
156541 sqlite3DbNNFreeNN(db, pWInfo);
156542 }
156543
156544 /* Undo all Expr node modifications
156545 */
156546 static void whereUndoExprMods(WhereInfo *pWInfo){
@@ -156773,11 +157150,15 @@
157150 pNew->wsFlags = saved_wsFlags;
157151 pNew->u.btree.nEq = saved_nEq;
157152 pNew->u.btree.nBtm = saved_nBtm;
157153 pNew->u.btree.nTop = saved_nTop;
157154 pNew->nLTerm = saved_nLTerm;
157155 if( pNew->nLTerm>=pNew->nLSlot
157156 && whereLoopResize(db, pNew, pNew->nLTerm+1)
157157 ){
157158 break; /* OOM while trying to enlarge the pNew->aLTerm array */
157159 }
157160 pNew->aLTerm[pNew->nLTerm++] = pTerm;
157161 pNew->prereq = (saved_prereq | pTerm->prereqRight) & ~pNew->maskSelf;
157162
157163 assert( nInMul==0
157164 || (pNew->wsFlags & WHERE_COLUMN_NULL)!=0
@@ -156866,42 +157247,43 @@
157247 }
157248 }
157249 if( scan.iEquiv>1 ) pNew->wsFlags |= WHERE_TRANSCONS;
157250 }else if( eOp & WO_ISNULL ){
157251 pNew->wsFlags |= WHERE_COLUMN_NULL;
157252 }else{
157253 int nVecLen = whereRangeVectorLen(
157254 pParse, pSrc->iCursor, pProbe, saved_nEq, pTerm
157255 );
157256 if( eOp & (WO_GT|WO_GE) ){
157257 testcase( eOp & WO_GT );
157258 testcase( eOp & WO_GE );
157259 pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_BTM_LIMIT;
157260 pNew->u.btree.nBtm = nVecLen;
157261 pBtm = pTerm;
157262 pTop = 0;
157263 if( pTerm->wtFlags & TERM_LIKEOPT ){
157264 /* Range constraints that come from the LIKE optimization are
157265 ** always used in pairs. */
157266 pTop = &pTerm[1];
157267 assert( (pTop-(pTerm->pWC->a))<pTerm->pWC->nTerm );
157268 assert( pTop->wtFlags & TERM_LIKEOPT );
157269 assert( pTop->eOperator==WO_LT );
157270 if( whereLoopResize(db, pNew, pNew->nLTerm+1) ) break; /* OOM */
157271 pNew->aLTerm[pNew->nLTerm++] = pTop;
157272 pNew->wsFlags |= WHERE_TOP_LIMIT;
157273 pNew->u.btree.nTop = 1;
157274 }
157275 }else{
157276 assert( eOp & (WO_LT|WO_LE) );
157277 testcase( eOp & WO_LT );
157278 testcase( eOp & WO_LE );
157279 pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_TOP_LIMIT;
157280 pNew->u.btree.nTop = nVecLen;
157281 pTop = pTerm;
157282 pBtm = (pNew->wsFlags & WHERE_BTM_LIMIT)!=0 ?
157283 pNew->aLTerm[pNew->nLTerm-2] : 0;
157284 }
157285 }
157286
157287 /* At this point pNew->nOut is set to the number of rows expected to
157288 ** be visited by the index scan before considering term pTerm, or the
157289 ** values of nIn and nInMul. In other words, assuming that all
@@ -157343,10 +157725,13 @@
157725 #ifdef SQLITE_ENABLE_STAT4
157726 pNew->rRun = rSize + 16 - 2*((pTab->tabFlags & TF_HasStat4)!=0);
157727 #else
157728 pNew->rRun = rSize + 16;
157729 #endif
157730 if( IsView(pTab) || (pTab->tabFlags & TF_Ephemeral)!=0 ){
157731 pNew->wsFlags |= WHERE_VIEWSCAN;
157732 }
157733 ApplyCostMultiplier(pNew->rRun, pTab->costMult);
157734 whereLoopOutputAdjust(pWC, pNew, rSize);
157735 rc = whereLoopInsert(pBuilder, pNew);
157736 pNew->nOut = rSize;
157737 if( rc ) break;
@@ -158063,29 +158448,47 @@
158448 SrcItem *pItem;
158449 SrcItem *pEnd = &pTabList->a[pWInfo->nLevel];
158450 sqlite3 *db = pWInfo->pParse->db;
158451 int rc = SQLITE_OK;
158452 int bFirstPastRJ = 0;
158453 int hasRightJoin = 0;
158454 WhereLoop *pNew;
158455
158456
158457 /* Loop over the tables in the join, from left to right */
158458 pNew = pBuilder->pNew;
158459
158460 /* Verify that pNew has already been initialized */
158461 assert( pNew->nLTerm==0 );
158462 assert( pNew->wsFlags==0 );
158463 assert( pNew->nLSlot>=ArraySize(pNew->aLTermSpace) );
158464 assert( pNew->aLTerm!=0 );
158465
158466 pBuilder->iPlanLimit = SQLITE_QUERY_PLANNER_LIMIT;
158467 for(iTab=0, pItem=pTabList->a; pItem<pEnd; iTab++, pItem++){
158468 Bitmask mUnusable = 0;
158469 pNew->iTab = iTab;
158470 pBuilder->iPlanLimit += SQLITE_QUERY_PLANNER_LIMIT_INCR;
158471 pNew->maskSelf = sqlite3WhereGetMask(&pWInfo->sMaskSet, pItem->iCursor);
158472 if( bFirstPastRJ
158473 || (pItem->fg.jointype & (JT_OUTER|JT_CROSS|JT_LTORJ))!=0
158474 ){
158475 /* Add prerequisites to prevent reordering of FROM clause terms
158476 ** across CROSS joins and outer joins. The bFirstPastRJ boolean
158477 ** prevents the right operand of a RIGHT JOIN from being swapped with
158478 ** other elements even further to the right.
158479 **
158480 ** The JT_LTORJ case and the hasRightJoin flag work together to
158481 ** prevent FROM-clause terms from moving from the right side of
158482 ** a LEFT JOIN over to the left side of that join if the LEFT JOIN
158483 ** is itself on the left side of a RIGHT JOIN.
158484 */
158485 if( pItem->fg.jointype & JT_LTORJ ) hasRightJoin = 1;
158486 mPrereq |= mPrior;
158487 bFirstPastRJ = (pItem->fg.jointype & JT_RIGHT)!=0;
158488 }else if( !hasRightJoin ){
158489 mPrereq = 0;
158490 }
158491 #ifndef SQLITE_OMIT_VIRTUALTABLE
158492 if( IsVirtual(pItem->pTab) ){
158493 SrcItem *p;
158494 for(p=&pItem[1]; p<pEnd; p++){
@@ -158654,13 +159057,13 @@
159057 for(ii=0, pFrom=aFrom; ii<nFrom; ii++, pFrom++){
159058 for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){
159059 LogEst nOut; /* Rows visited by (pFrom+pWLoop) */
159060 LogEst rCost; /* Cost of path (pFrom+pWLoop) */
159061 LogEst rUnsorted; /* Unsorted cost of (pFrom+pWLoop) */
159062 i8 isOrdered; /* isOrdered for (pFrom+pWLoop) */
159063 Bitmask maskNew; /* Mask of src visited by (..) */
159064 Bitmask revMask; /* Mask of rev-order loops for (..) */
159065
159066 if( (pWLoop->prereq & ~pFrom->maskLoop)!=0 ) continue;
159067 if( (pWLoop->maskSelf & pFrom->maskLoop)!=0 ) continue;
159068 if( (pWLoop->wsFlags & WHERE_AUTO_INDEX)!=0 && pFrom->nRow<3 ){
159069 /* Do not use an automatic index if the this loop is expected
@@ -158675,11 +159078,13 @@
159078 ** Compute its cost */
159079 rUnsorted = sqlite3LogEstAdd(pWLoop->rSetup,pWLoop->rRun + pFrom->nRow);
159080 rUnsorted = sqlite3LogEstAdd(rUnsorted, pFrom->rUnsorted);
159081 nOut = pFrom->nRow + pWLoop->nOut;
159082 maskNew = pFrom->maskLoop | pWLoop->maskSelf;
159083 isOrdered = pFrom->isOrdered;
159084 if( isOrdered<0 ){
159085 revMask = 0;
159086 isOrdered = wherePathSatisfiesOrderBy(pWInfo,
159087 pWInfo->pOrderBy, pFrom, pWInfo->wctrlFlags,
159088 iLoop, pWLoop, &revMask);
159089 }else{
159090 revMask = pFrom->revLoop;
@@ -158702,10 +159107,17 @@
159107 rUnsorted, rCost));
159108 }else{
159109 rCost = rUnsorted;
159110 rUnsorted -= 2; /* TUNING: Slight bias in favor of no-sort plans */
159111 }
159112
159113 /* TUNING: A full-scan of a VIEW or subquery in the outer loop
159114 ** is not so bad. */
159115 if( iLoop==0 && (pWLoop->wsFlags & WHERE_VIEWSCAN)!=0 ){
159116 rCost += -10;
159117 nOut += -30;
159118 }
159119
159120 /* Check to see if pWLoop should be added to the set of
159121 ** mxChoice best-so-far paths.
159122 **
159123 ** First look for an existing path among best-so-far paths
@@ -158935,11 +159347,12 @@
159347
159348
159349 pWInfo->nRowOut = pFrom->nRow;
159350
159351 /* Free temporary memory and return success */
159352 assert( db!=0 );
159353 sqlite3DbNNFreeNN(db, pSpace);
159354 return SQLITE_OK;
159355 }
159356
159357 /*
159358 ** Most queries use only a single table (they are not joins) and have
@@ -158968,11 +159381,15 @@
159381 if( pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE ) return 0;
159382 assert( pWInfo->pTabList->nSrc>=1 );
159383 pItem = pWInfo->pTabList->a;
159384 pTab = pItem->pTab;
159385 if( IsVirtual(pTab) ) return 0;
159386 if( pItem->fg.isIndexedBy || pItem->fg.notIndexed ){
159387 testcase( pItem->fg.isIndexedBy );
159388 testcase( pItem->fg.notIndexed );
159389 return 0;
159390 }
159391 iCur = pItem->iCursor;
159392 pWC = &pWInfo->sWC;
159393 pLoop = pBuilder->pNew;
159394 pLoop->wsFlags = 0;
159395 pLoop->nSkip = 0;
@@ -159141,11 +159558,11 @@
159558 WhereTerm *pTerm, *pEnd;
159559 SrcItem *pItem;
159560 WhereLoop *pLoop;
159561 pLoop = pWInfo->a[i].pWLoop;
159562 pItem = &pWInfo->pTabList->a[pLoop->iTab];
159563 if( (pItem->fg.jointype & (JT_LEFT|JT_RIGHT))!=JT_LEFT ) continue;
159564 if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT)==0
159565 && (pLoop->wsFlags & WHERE_ONEROW)==0
159566 ){
159567 continue;
159568 }
@@ -159473,11 +159890,11 @@
159890 }
159891
159892 /* Analyze all of the subexpressions. */
159893 sqlite3WhereExprAnalyze(pTabList, &pWInfo->sWC);
159894 sqlite3WhereAddLimit(&pWInfo->sWC, pLimit);
159895 if( pParse->nErr ) goto whereBeginError;
159896
159897 /* Special case: WHERE terms that do not refer to any tables in the join
159898 ** (constant expressions). Evaluate each such term, and jump over all the
159899 ** generated code if the result is not true.
159900 **
@@ -161164,11 +161581,10 @@
161581 int i;
161582 int nInit = pList ? pList->nExpr : 0;
161583 for(i=0; i<pAppend->nExpr; i++){
161584 sqlite3 *db = pParse->db;
161585 Expr *pDup = sqlite3ExprDup(db, pAppend->a[i].pExpr, 0);
 
161586 if( db->mallocFailed ){
161587 sqlite3ExprDelete(db, pDup);
161588 break;
161589 }
161590 if( bIntToNull ){
@@ -162435,14 +162851,13 @@
162851 }
162852 sqlite3VdbeAddOp2(v, OP_Goto, 0, addrDone);
162853
162854 /* This block runs if reg1 is not NULL, but reg2 is. */
162855 sqlite3VdbeJumpHere(v, addr);
162856 sqlite3VdbeAddOp2(v, OP_IsNull, reg2,
162857 (op==OP_Gt || op==OP_Ge) ? addrDone : lbl);
162858 VdbeCoverage(v);
 
162859 }
162860
162861 /* Register reg1 currently contains csr1.peerVal (the peer-value from csr1).
162862 ** This block adds (or subtracts for DESC) the numeric value in regVal
162863 ** from it. Or, if reg1 is not numeric (it is a NULL, a text value or a blob),
@@ -169918,10 +170333,11 @@
170333 while( 1 ){
170334 n = sqlite3GetToken((u8*)zSql, &tokenType);
170335 mxSqlLen -= n;
170336 if( mxSqlLen<0 ){
170337 pParse->rc = SQLITE_TOOBIG;
170338 pParse->nErr++;
170339 break;
170340 }
170341 #ifndef SQLITE_OMIT_WINDOWFUNC
170342 if( tokenType>=TK_WINDOW ){
170343 assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER
@@ -170014,11 +170430,11 @@
170430 sqlite3DeleteTable(db, pParse->pNewTable);
170431 }
170432 if( pParse->pNewTrigger && !IN_RENAME_OBJECT ){
170433 sqlite3DeleteTrigger(db, pParse->pNewTrigger);
170434 }
170435 if( pParse->pVList ) sqlite3DbNNFreeNN(db, pParse->pVList);
170436 db->pParse = pParentParse;
170437 assert( nErr==0 || pParse->rc!=SQLITE_OK );
170438 return nErr;
170439 }
170440
@@ -171370,22 +171786,23 @@
171786 db->lookaside.pEnd = p;
171787 db->lookaside.bDisable = 0;
171788 db->lookaside.bMalloced = pBuf==0 ?1:0;
171789 db->lookaside.nSlot = nBig+nSm;
171790 }else{
171791 db->lookaside.pStart = 0;
171792 #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE
171793 db->lookaside.pSmallInit = 0;
171794 db->lookaside.pSmallFree = 0;
171795 db->lookaside.pMiddle = 0;
171796 #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */
171797 db->lookaside.pEnd = 0;
171798 db->lookaside.bDisable = 1;
171799 db->lookaside.sz = 0;
171800 db->lookaside.bMalloced = 0;
171801 db->lookaside.nSlot = 0;
171802 }
171803 db->lookaside.pTrueEnd = db->lookaside.pEnd;
171804 assert( sqlite3LookasideUsed(db,0)==0 );
171805 #endif /* SQLITE_OMIT_LOOKASIDE */
171806 return SQLITE_OK;
171807 }
171808
@@ -171460,10 +171877,11 @@
171877 ** Configuration settings for an individual database connection
171878 */
171879 SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){
171880 va_list ap;
171881 int rc;
171882 sqlite3_mutex_enter(db->mutex);
171883 va_start(ap, op);
171884 switch( op ){
171885 case SQLITE_DBCONFIG_MAINDBNAME: {
171886 /* IMP: R-06824-28531 */
171887 /* IMP: R-36257-52125 */
@@ -171525,10 +171943,11 @@
171943 }
171944 break;
171945 }
171946 }
171947 va_end(ap);
171948 sqlite3_mutex_leave(db->mutex);
171949 return rc;
171950 }
171951
171952 /*
171953 ** This is the default collating function named "BINARY" which is always
@@ -174658,12 +175077,15 @@
175077 sqlite3ShowUpsert(0);
175078 sqlite3ShowTriggerStep(0);
175079 sqlite3ShowTriggerStepList(0);
175080 sqlite3ShowTrigger(0);
175081 sqlite3ShowTriggerList(0);
175082 #ifndef SQLITE_OMIT_WINDOWFUNC
175083 sqlite3ShowWindow(0);
175084 sqlite3ShowWinFunc(0);
175085 #endif
175086 sqlite3ShowSelect(0);
175087 }
175088 #endif
175089 break;
175090 }
175091
@@ -180993,12 +181415,11 @@
181415 static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){
181416 int iToken; /* Used to iterate through phrase tokens */
181417 char *aPoslist = 0; /* Position list for deferred tokens */
181418 int nPoslist = 0; /* Number of bytes in aPoslist */
181419 int iPrev = -1; /* Token number of previous deferred token */
181420 char *aFree = (pPhrase->doclist.bFreeList ? pPhrase->doclist.pList : 0);
 
181421
181422 for(iToken=0; iToken<pPhrase->nToken; iToken++){
181423 Fts3PhraseToken *pToken = &pPhrase->aToken[iToken];
181424 Fts3DeferredToken *pDeferred = pToken->pDeferred;
181425
@@ -181008,10 +181429,11 @@
181429 int rc = sqlite3Fts3DeferredTokenList(pDeferred, &pList, &nList);
181430 if( rc!=SQLITE_OK ) return rc;
181431
181432 if( pList==0 ){
181433 sqlite3_free(aPoslist);
181434 sqlite3_free(aFree);
181435 pPhrase->doclist.pList = 0;
181436 pPhrase->doclist.nList = 0;
181437 return SQLITE_OK;
181438
181439 }else if( aPoslist==0 ){
@@ -181028,10 +181450,11 @@
181450 sqlite3_free(aPoslist);
181451 aPoslist = pList;
181452 nPoslist = (int)(aOut - aPoslist);
181453 if( nPoslist==0 ){
181454 sqlite3_free(aPoslist);
181455 sqlite3_free(aFree);
181456 pPhrase->doclist.pList = 0;
181457 pPhrase->doclist.nList = 0;
181458 return SQLITE_OK;
181459 }
181460 }
@@ -181060,17 +181483,18 @@
181483 p1 = pPhrase->doclist.pList;
181484 p2 = aPoslist;
181485 nDistance = iPrev - nMaxUndeferred;
181486 }
181487
181488 aOut = (char *)sqlite3Fts3MallocZero(nPoslist+FTS3_BUFFER_PADDING);
181489 if( !aOut ){
181490 sqlite3_free(aPoslist);
181491 return SQLITE_NOMEM;
181492 }
181493
181494 pPhrase->doclist.pList = aOut;
181495 assert( p1 && p2 );
181496 if( fts3PoslistPhraseMerge(&aOut, nDistance, 0, 1, &p1, &p2) ){
181497 pPhrase->doclist.bFreeList = 1;
181498 pPhrase->doclist.nList = (int)(aOut - pPhrase->doclist.pList);
181499 }else{
181500 sqlite3_free(aOut);
@@ -181079,10 +181503,11 @@
181503 }
181504 sqlite3_free(aPoslist);
181505 }
181506 }
181507
181508 if( pPhrase->doclist.pList!=aFree ) sqlite3_free(aFree);
181509 return SQLITE_OK;
181510 }
181511 #endif /* SQLITE_DISABLE_FTS4_DEFERRED */
181512
181513 /*
@@ -182253,15 +182678,14 @@
182678 );
182679 break;
182680
182681 default: {
182682 #ifndef SQLITE_DISABLE_FTS4_DEFERRED
182683 if( pCsr->pDeferred && (pExpr->bDeferred || (
182684 pExpr->iDocid==pCsr->iPrevId && pExpr->pPhrase->doclist.pList
182685 ))){
182686 Fts3Phrase *pPhrase = pExpr->pPhrase;
 
182687 if( pExpr->bDeferred ){
182688 fts3EvalInvalidatePoslist(pPhrase);
182689 }
182690 *pRc = fts3EvalDeferredPhrase(pCsr, pPhrase);
182691 bHit = (pPhrase->doclist.pList!=0);
@@ -204085,11 +204509,11 @@
204509 sqlite3_bind_value(pUp, 2, aData[2]);
204510 }
204511 sqlite3_free(p);
204512 nChange = 1;
204513 }
204514 for(jj=1; jj<nData-2; jj++){
204515 nChange++;
204516 sqlite3_bind_value(pUp, jj+2, aData[jj+2]);
204517 }
204518 if( nChange ){
204519 sqlite3_step(pUp);
@@ -212444,15 +212868,16 @@
212868 */
212869 static int dbpageBegin(sqlite3_vtab *pVtab){
212870 DbpageTable *pTab = (DbpageTable *)pVtab;
212871 sqlite3 *db = pTab->db;
212872 int i;
212873 int rc = SQLITE_OK;
212874 for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
212875 Btree *pBt = db->aDb[i].pBt;
212876 if( pBt ) rc = sqlite3BtreeBeginTrans(pBt, 1, 0);
212877 }
212878 return rc;
212879 }
212880
212881
212882 /*
212883 ** Invoke this routine to register the "dbpage" virtual table module
@@ -219172,11 +219597,11 @@
219597 static void sqlite3Fts5BufferAppendPrintf(int *, Fts5Buffer*, char *zFmt, ...);
219598
219599 static char *sqlite3Fts5Mprintf(int *pRc, const char *zFmt, ...);
219600
219601 #define fts5BufferZero(x) sqlite3Fts5BufferZero(x)
219602 #define fts5BufferAppendVarint(a,b,c) sqlite3Fts5BufferAppendVarint(a,b,(i64)c)
219603 #define fts5BufferFree(a) sqlite3Fts5BufferFree(a)
219604 #define fts5BufferAppendBlob(a,b,c,d) sqlite3Fts5BufferAppendBlob(a,b,c,d)
219605 #define fts5BufferSet(a,b,c,d) sqlite3Fts5BufferSet(a,b,c,d)
219606
219607 #define fts5BufferGrow(pRc,pBuf,nn) ( \
@@ -231049,11 +231474,13 @@
231474 /* Write the rowid. */
231475 if( pWriter->bFirstRowidInDoclist || pWriter->bFirstRowidInPage ){
231476 fts5BufferAppendVarint(&p->rc, &pPage->buf, iRowid);
231477 }else{
231478 assert_nc( p->rc || iRowid>pWriter->iPrevRowid );
231479 fts5BufferAppendVarint(&p->rc, &pPage->buf,
231480 (u64)iRowid - (u64)pWriter->iPrevRowid
231481 );
231482 }
231483 pWriter->iPrevRowid = iRowid;
231484 pWriter->bFirstRowidInDoclist = 0;
231485 pWriter->bFirstRowidInPage = 0;
231486 }
@@ -231813,21 +232240,21 @@
232240 return fts5IndexReturn(p);
232241 }
232242
232243 static void fts5AppendRowid(
232244 Fts5Index *p,
232245 u64 iDelta,
232246 Fts5Iter *pUnused,
232247 Fts5Buffer *pBuf
232248 ){
232249 UNUSED_PARAM(pUnused);
232250 fts5BufferAppendVarint(&p->rc, pBuf, iDelta);
232251 }
232252
232253 static void fts5AppendPoslist(
232254 Fts5Index *p,
232255 u64 iDelta,
232256 Fts5Iter *pMulti,
232257 Fts5Buffer *pBuf
232258 ){
232259 int nData = pMulti->base.nData;
232260 int nByte = nData + 9 + 9 + FTS5_DATA_ZERO_PADDING;
@@ -231898,14 +232325,14 @@
232325 fts5BufferSafeAppendVarint(pBuf, iRowid - *piLastRowid);
232326 *piLastRowid = iRowid;
232327 }
232328 #endif
232329
232330 #define fts5MergeAppendDocid(pBuf, iLastRowid, iRowid) { \
232331 assert( (pBuf)->n!=0 || (iLastRowid)==0 ); \
232332 fts5BufferSafeAppendVarint((pBuf), (u64)(iRowid) - (u64)(iLastRowid)); \
232333 (iLastRowid) = (iRowid); \
232334 }
232335
232336 /*
232337 ** Swap the contents of buffer *p1 with that of *p2.
232338 */
@@ -232172,11 +232599,11 @@
232599 Fts5Buffer *aBuf;
232600 int nBuf = 32;
232601 int nMerge = 1;
232602
232603 void (*xMerge)(Fts5Index*, Fts5Buffer*, int, Fts5Buffer*);
232604 void (*xAppend)(Fts5Index*, u64, Fts5Iter*, Fts5Buffer*);
232605 if( p->pConfig->eDetail==FTS5_DETAIL_NONE ){
232606 xMerge = fts5MergeRowidLists;
232607 xAppend = fts5AppendRowid;
232608 }else{
232609 nMerge = FTS5_MERGE_NLIST-1;
@@ -232211,11 +232638,11 @@
232638 fts5MultiIterNext2(p, p1, &dummy)
232639 ){
232640 Fts5SegIter *pSeg = &p1->aSeg[ p1->aFirst[1].iFirst ];
232641 p1->xSetOutputs(p1, pSeg);
232642 if( p1->base.nData ){
232643 xAppend(p, (u64)p1->base.iRowid-(u64)iLastRowid, p1, &doclist);
232644 iLastRowid = p1->base.iRowid;
232645 }
232646 }
232647 fts5MultiIterFree(p1);
232648 }
@@ -232259,11 +232686,11 @@
232686 }
232687 }
232688 iLastRowid = 0;
232689 }
232690
232691 xAppend(p, (u64)p1->base.iRowid-(u64)iLastRowid, p1, &doclist);
232692 iLastRowid = p1->base.iRowid;
232693 }
232694
232695 assert( (nBuf%nMerge)==0 );
232696 for(i=0; i<nBuf; i+=nMerge){
@@ -236575,11 +237002,11 @@
237002 int nArg, /* Number of args */
237003 sqlite3_value **apUnused /* Function arguments */
237004 ){
237005 assert( nArg==0 );
237006 UNUSED_PARAM2(nArg, apUnused);
237007 sqlite3_result_text(pCtx, "fts5: 2022-09-02 21:19:24 da7af290960ab8a04a1f55cdc5eeac36b47fa194edf67f0a05daa4b7f2a4071c", -1, SQLITE_TRANSIENT);
237008 }
237009
237010 /*
237011 ** Return true if zName is the extension on one of the shadow tables used
237012 ** by this module.
@@ -241246,10 +241673,20 @@
241673 /* #include <assert.h> */
241674 /* #include <string.h> */
241675
241676 #ifndef SQLITE_OMIT_VIRTUALTABLE
241677
241678
241679 #define STMT_NUM_INTEGER_COLUMN 10
241680 typedef struct StmtRow StmtRow;
241681 struct StmtRow {
241682 sqlite3_int64 iRowid; /* Rowid value */
241683 char *zSql; /* column "sql" */
241684 int aCol[STMT_NUM_INTEGER_COLUMN+1]; /* all other column values */
241685 StmtRow *pNext; /* Next row to return */
241686 };
241687
241688 /* stmt_vtab is a subclass of sqlite3_vtab which will
241689 ** serve as the underlying representation of a stmt virtual table
241690 */
241691 typedef struct stmt_vtab stmt_vtab;
241692 struct stmt_vtab {
@@ -241263,12 +241700,11 @@
241700 */
241701 typedef struct stmt_cursor stmt_cursor;
241702 struct stmt_cursor {
241703 sqlite3_vtab_cursor base; /* Base class - must be first */
241704 sqlite3 *db; /* Database connection for this cursor */
241705 StmtRow *pRow; /* Current row */
 
241706 };
241707
241708 /*
241709 ** The stmtConnect() method is invoked to create a new
241710 ** stmt_vtab that describes the stmt virtual table.
@@ -241308,11 +241744,11 @@
241744
241745 rc = sqlite3_declare_vtab(db,
241746 "CREATE TABLE x(sql,ncol,ro,busy,nscan,nsort,naidx,nstep,"
241747 "reprep,run,mem)");
241748 if( rc==SQLITE_OK ){
241749 pNew = sqlite3_malloc64( sizeof(*pNew) );
241750 *ppVtab = (sqlite3_vtab*)pNew;
241751 if( pNew==0 ) return SQLITE_NOMEM;
241752 memset(pNew, 0, sizeof(*pNew));
241753 pNew->db = db;
241754 }
@@ -241330,22 +241766,33 @@
241766 /*
241767 ** Constructor for a new stmt_cursor object.
241768 */
241769 static int stmtOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){
241770 stmt_cursor *pCur;
241771 pCur = sqlite3_malloc64( sizeof(*pCur) );
241772 if( pCur==0 ) return SQLITE_NOMEM;
241773 memset(pCur, 0, sizeof(*pCur));
241774 pCur->db = ((stmt_vtab*)p)->db;
241775 *ppCursor = &pCur->base;
241776 return SQLITE_OK;
241777 }
241778
241779 static void stmtCsrReset(stmt_cursor *pCur){
241780 StmtRow *pRow = 0;
241781 StmtRow *pNext = 0;
241782 for(pRow=pCur->pRow; pRow; pRow=pNext){
241783 pNext = pRow->pNext;
241784 sqlite3_free(pRow);
241785 }
241786 pCur->pRow = 0;
241787 }
241788
241789 /*
241790 ** Destructor for a stmt_cursor.
241791 */
241792 static int stmtClose(sqlite3_vtab_cursor *cur){
241793 stmtCsrReset((stmt_cursor*)cur);
241794 sqlite3_free(cur);
241795 return SQLITE_OK;
241796 }
241797
241798
@@ -241352,12 +241799,13 @@
241799 /*
241800 ** Advance a stmt_cursor to its next row of output.
241801 */
241802 static int stmtNext(sqlite3_vtab_cursor *cur){
241803 stmt_cursor *pCur = (stmt_cursor*)cur;
241804 StmtRow *pNext = pCur->pRow->pNext;
241805 sqlite3_free(pCur->pRow);
241806 pCur->pRow = pNext;
241807 return SQLITE_OK;
241808 }
241809
241810 /*
241811 ** Return values of columns for the row at which the stmt_cursor
@@ -241367,43 +241815,15 @@
241815 sqlite3_vtab_cursor *cur, /* The cursor */
241816 sqlite3_context *ctx, /* First argument to sqlite3_result_...() */
241817 int i /* Which column to return */
241818 ){
241819 stmt_cursor *pCur = (stmt_cursor*)cur;
241820 StmtRow *pRow = pCur->pRow;
241821 if( i==STMT_COLUMN_SQL ){
241822 sqlite3_result_text(ctx, pRow->zSql, -1, SQLITE_TRANSIENT);
241823 }else{
241824 sqlite3_result_int(ctx, pRow->aCol[i]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
241825 }
241826 return SQLITE_OK;
241827 }
241828
241829 /*
@@ -241410,21 +241830,21 @@
241830 ** Return the rowid for the current row. In this implementation, the
241831 ** rowid is the same as the output value.
241832 */
241833 static int stmtRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){
241834 stmt_cursor *pCur = (stmt_cursor*)cur;
241835 *pRowid = pCur->pRow->iRowid;
241836 return SQLITE_OK;
241837 }
241838
241839 /*
241840 ** Return TRUE if the cursor has been moved off of the last
241841 ** row of output.
241842 */
241843 static int stmtEof(sqlite3_vtab_cursor *cur){
241844 stmt_cursor *pCur = (stmt_cursor*)cur;
241845 return pCur->pRow==0;
241846 }
241847
241848 /*
241849 ** This method is called to "rewind" the stmt_cursor object back
241850 ** to the first row of output. This method is always called at least
@@ -241435,13 +241855,57 @@
241855 sqlite3_vtab_cursor *pVtabCursor,
241856 int idxNum, const char *idxStr,
241857 int argc, sqlite3_value **argv
241858 ){
241859 stmt_cursor *pCur = (stmt_cursor *)pVtabCursor;
241860 sqlite3_stmt *p = 0;
241861 sqlite3_int64 iRowid = 1;
241862 StmtRow **ppRow = 0;
241863
241864 stmtCsrReset(pCur);
241865 ppRow = &pCur->pRow;
241866 for(p=sqlite3_next_stmt(pCur->db, 0); p; p=sqlite3_next_stmt(pCur->db, p)){
241867 const char *zSql = sqlite3_sql(p);
241868 sqlite3_int64 nSql = zSql ? strlen(zSql)+1 : 0;
241869 StmtRow *pNew = (StmtRow*)sqlite3_malloc64(sizeof(StmtRow) + nSql);
241870
241871 if( pNew==0 ) return SQLITE_NOMEM;
241872 memset(pNew, 0, sizeof(StmtRow));
241873 if( zSql ){
241874 pNew->zSql = (char*)&pNew[1];
241875 memcpy(pNew->zSql, zSql, nSql);
241876 }
241877 pNew->aCol[STMT_COLUMN_NCOL] = sqlite3_column_count(p);
241878 pNew->aCol[STMT_COLUMN_RO] = sqlite3_stmt_readonly(p);
241879 pNew->aCol[STMT_COLUMN_BUSY] = sqlite3_stmt_busy(p);
241880 pNew->aCol[STMT_COLUMN_NSCAN] = sqlite3_stmt_status(
241881 p, SQLITE_STMTSTATUS_FULLSCAN_STEP, 0
241882 );
241883 pNew->aCol[STMT_COLUMN_NSORT] = sqlite3_stmt_status(
241884 p, SQLITE_STMTSTATUS_SORT, 0
241885 );
241886 pNew->aCol[STMT_COLUMN_NAIDX] = sqlite3_stmt_status(
241887 p, SQLITE_STMTSTATUS_AUTOINDEX, 0
241888 );
241889 pNew->aCol[STMT_COLUMN_NSTEP] = sqlite3_stmt_status(
241890 p, SQLITE_STMTSTATUS_VM_STEP, 0
241891 );
241892 pNew->aCol[STMT_COLUMN_REPREP] = sqlite3_stmt_status(
241893 p, SQLITE_STMTSTATUS_REPREPARE, 0
241894 );
241895 pNew->aCol[STMT_COLUMN_RUN] = sqlite3_stmt_status(
241896 p, SQLITE_STMTSTATUS_RUN, 0
241897 );
241898 pNew->aCol[STMT_COLUMN_MEM] = sqlite3_stmt_status(
241899 p, SQLITE_STMTSTATUS_MEMUSED, 0
241900 );
241901 pNew->iRowid = iRowid++;
241902 *ppRow = pNew;
241903 ppRow = &pNew->pNext;
241904 }
241905
241906 return SQLITE_OK;
241907 }
241908
241909 /*
241910 ** SQLite will invoke this method one or more times while planning a query
241911 ** that uses the stmt virtual table. This routine needs to create
241912
+17 -9
--- extsrc/sqlite3.h
+++ extsrc/sqlite3.h
@@ -144,13 +144,13 @@
144144
**
145145
** See also: [sqlite3_libversion()],
146146
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
147147
** [sqlite_version()] and [sqlite_source_id()].
148148
*/
149
-#define SQLITE_VERSION "3.39.0"
150
-#define SQLITE_VERSION_NUMBER 3039000
151
-#define SQLITE_SOURCE_ID "2022-06-15 16:26:37 56c60a35ea457f06db58ec3f694a1ae16fd03e6625da1d7879d63d72bbcb1c62"
149
+#define SQLITE_VERSION "3.40.0"
150
+#define SQLITE_VERSION_NUMBER 3040000
151
+#define SQLITE_SOURCE_ID "2022-09-02 21:19:24 da7af290960ab8a04a1f55cdc5eeac36b47fa194edf67f0a05daa4b7f2a4071c"
152152
153153
/*
154154
** CAPI3REF: Run-Time Library Version Numbers
155155
** KEYWORDS: sqlite3_version sqlite3_sourceid
156156
**
@@ -3422,10 +3422,13 @@
34223422
**
34233423
** ^(<dt>[SQLITE_OPEN_SHAREDCACHE]</dt>
34243424
** <dd>The database is opened [shared cache] enabled, overriding
34253425
** the default shared cache setting provided by
34263426
** [sqlite3_enable_shared_cache()].)^
3427
+** The [use of shared cache mode is discouraged] and hence shared cache
3428
+** capabilities may be omitted from many builds of SQLite. In such cases,
3429
+** this option is a no-op.
34273430
**
34283431
** ^(<dt>[SQLITE_OPEN_PRIVATECACHE]</dt>
34293432
** <dd>The database is opened [shared cache] disabled, overriding
34303433
** the default shared cache setting provided by
34313434
** [sqlite3_enable_shared_cache()].)^
@@ -3437,11 +3440,11 @@
34373440
** connection as soon as the connection is created. In addition to setting
34383441
** the extended result code mode, this flag also causes [sqlite3_open_v2()]
34393442
** to return an extended result code.</dd>
34403443
**
34413444
** [[OPEN_NOFOLLOW]] ^(<dt>[SQLITE_OPEN_NOFOLLOW]</dt>
3442
-** <dd>The database filename is not allowed to be a symbolic link</dd>
3445
+** <dd>The database filename is not allowed to contain a symbolic link</dd>
34433446
** </dl>)^
34443447
**
34453448
** If the 3rd parameter to sqlite3_open_v2() is not one of the
34463449
** required combinations shown above optionally combined with other
34473450
** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits]
@@ -6280,11 +6283,11 @@
62806283
** CAPI3REF: Return The Schema Name For A Database Connection
62816284
** METHOD: sqlite3
62826285
**
62836286
** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name
62846287
** for the N-th database on database connection D, or a NULL pointer of N is
6285
-** out of range. An N alue of 0 means the main database file. An N of 1 is
6288
+** out of range. An N value of 0 means the main database file. An N of 1 is
62866289
** the "temp" schema. Larger values of N correspond to various ATTACH-ed
62876290
** databases.
62886291
**
62896292
** Space to hold the string that is returned by sqlite3_db_name() is managed
62906293
** by SQLite itself. The string might be deallocated by any operation that
@@ -6463,11 +6466,11 @@
64636466
**
64646467
** ^The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback
64656468
** function C that is invoked prior to each autovacuum of the database
64666469
** file. ^The callback is passed a copy of the generic data pointer (P),
64676470
** the schema-name of the attached database that is being autovacuumed,
6468
-** the the size of the database file in pages, the number of free pages,
6471
+** the size of the database file in pages, the number of free pages,
64696472
** and the number of bytes per page, respectively. The callback should
64706473
** return the number of free pages that should be removed by the
64716474
** autovacuum. ^If the callback returns zero, then no autovacuum happens.
64726475
** ^If the value returned is greater than or equal to the number of
64736476
** free pages, then a complete autovacuum happens.
@@ -6583,10 +6586,15 @@
65836586
**
65846587
** ^(This routine enables or disables the sharing of the database cache
65856588
** and schema data structures between [database connection | connections]
65866589
** to the same database. Sharing is enabled if the argument is true
65876590
** and disabled if the argument is false.)^
6591
+**
6592
+** This interface is omitted if SQLite is compiled with
6593
+** [-DSQLITE_OMIT_SHARED_CACHE]. The [-DSQLITE_OMIT_SHARED_CACHE]
6594
+** compile-time option is recommended because the
6595
+** [use of shared cache mode is discouraged].
65886596
**
65896597
** ^Cache sharing is enabled and disabled for an entire process.
65906598
** This is a change as of SQLite [version 3.5.0] ([dateof:3.5.0]).
65916599
** In prior versions of SQLite,
65926600
** sharing was enabled or disabled for each thread separately.
@@ -6682,11 +6690,11 @@
66826690
** ^Setting the heap limits to zero disables the heap limiter mechanism.
66836691
**
66846692
** ^The soft heap limit may not be greater than the hard heap limit.
66856693
** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N)
66866694
** is invoked with a value of N that is greater than the hard heap limit,
6687
-** the the soft heap limit is set to the value of the hard heap limit.
6695
+** the soft heap limit is set to the value of the hard heap limit.
66886696
** ^The soft heap limit is automatically enabled whenever the hard heap
66896697
** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and
66906698
** the soft heap limit is outside the range of 1..N, then the soft heap
66916699
** limit is set to N. ^Invoking sqlite3_soft_heap_limit64(0) when the
66926700
** hard heap limit is enabled makes the soft heap limit equal to the
@@ -8977,11 +8985,11 @@
89778985
** sqlite3_backup_init() is called and before the corresponding call to
89788986
** sqlite3_backup_finish(). SQLite does not currently check to see
89798987
** if the application incorrectly accesses the destination [database connection]
89808988
** and so no error code is reported, but the operations may malfunction
89818989
** nevertheless. Use of the destination database connection while a
8982
-** backup is in progress might also also cause a mutex deadlock.
8990
+** backup is in progress might also cause a mutex deadlock.
89838991
**
89848992
** If running in [shared cache mode], the application must
89858993
** guarantee that the shared cache used by the destination database
89868994
** is not accessed while the backup is running. In practice this means
89878995
** that the application must guarantee that the disk file being
@@ -9405,11 +9413,11 @@
94059413
** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the
94069414
** meaning of each of these checkpoint modes.
94079415
*/
94089416
#define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */
94099417
#define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */
9410
-#define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for for readers */
9418
+#define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for readers */
94119419
#define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */
94129420
94139421
/*
94149422
** CAPI3REF: Virtual Table Interface Configuration
94159423
**
94169424
--- extsrc/sqlite3.h
+++ extsrc/sqlite3.h
@@ -144,13 +144,13 @@
144 **
145 ** See also: [sqlite3_libversion()],
146 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
147 ** [sqlite_version()] and [sqlite_source_id()].
148 */
149 #define SQLITE_VERSION "3.39.0"
150 #define SQLITE_VERSION_NUMBER 3039000
151 #define SQLITE_SOURCE_ID "2022-06-15 16:26:37 56c60a35ea457f06db58ec3f694a1ae16fd03e6625da1d7879d63d72bbcb1c62"
152
153 /*
154 ** CAPI3REF: Run-Time Library Version Numbers
155 ** KEYWORDS: sqlite3_version sqlite3_sourceid
156 **
@@ -3422,10 +3422,13 @@
3422 **
3423 ** ^(<dt>[SQLITE_OPEN_SHAREDCACHE]</dt>
3424 ** <dd>The database is opened [shared cache] enabled, overriding
3425 ** the default shared cache setting provided by
3426 ** [sqlite3_enable_shared_cache()].)^
 
 
 
3427 **
3428 ** ^(<dt>[SQLITE_OPEN_PRIVATECACHE]</dt>
3429 ** <dd>The database is opened [shared cache] disabled, overriding
3430 ** the default shared cache setting provided by
3431 ** [sqlite3_enable_shared_cache()].)^
@@ -3437,11 +3440,11 @@
3437 ** connection as soon as the connection is created. In addition to setting
3438 ** the extended result code mode, this flag also causes [sqlite3_open_v2()]
3439 ** to return an extended result code.</dd>
3440 **
3441 ** [[OPEN_NOFOLLOW]] ^(<dt>[SQLITE_OPEN_NOFOLLOW]</dt>
3442 ** <dd>The database filename is not allowed to be a symbolic link</dd>
3443 ** </dl>)^
3444 **
3445 ** If the 3rd parameter to sqlite3_open_v2() is not one of the
3446 ** required combinations shown above optionally combined with other
3447 ** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits]
@@ -6280,11 +6283,11 @@
6280 ** CAPI3REF: Return The Schema Name For A Database Connection
6281 ** METHOD: sqlite3
6282 **
6283 ** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name
6284 ** for the N-th database on database connection D, or a NULL pointer of N is
6285 ** out of range. An N alue of 0 means the main database file. An N of 1 is
6286 ** the "temp" schema. Larger values of N correspond to various ATTACH-ed
6287 ** databases.
6288 **
6289 ** Space to hold the string that is returned by sqlite3_db_name() is managed
6290 ** by SQLite itself. The string might be deallocated by any operation that
@@ -6463,11 +6466,11 @@
6463 **
6464 ** ^The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback
6465 ** function C that is invoked prior to each autovacuum of the database
6466 ** file. ^The callback is passed a copy of the generic data pointer (P),
6467 ** the schema-name of the attached database that is being autovacuumed,
6468 ** the the size of the database file in pages, the number of free pages,
6469 ** and the number of bytes per page, respectively. The callback should
6470 ** return the number of free pages that should be removed by the
6471 ** autovacuum. ^If the callback returns zero, then no autovacuum happens.
6472 ** ^If the value returned is greater than or equal to the number of
6473 ** free pages, then a complete autovacuum happens.
@@ -6583,10 +6586,15 @@
6583 **
6584 ** ^(This routine enables or disables the sharing of the database cache
6585 ** and schema data structures between [database connection | connections]
6586 ** to the same database. Sharing is enabled if the argument is true
6587 ** and disabled if the argument is false.)^
 
 
 
 
 
6588 **
6589 ** ^Cache sharing is enabled and disabled for an entire process.
6590 ** This is a change as of SQLite [version 3.5.0] ([dateof:3.5.0]).
6591 ** In prior versions of SQLite,
6592 ** sharing was enabled or disabled for each thread separately.
@@ -6682,11 +6690,11 @@
6682 ** ^Setting the heap limits to zero disables the heap limiter mechanism.
6683 **
6684 ** ^The soft heap limit may not be greater than the hard heap limit.
6685 ** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N)
6686 ** is invoked with a value of N that is greater than the hard heap limit,
6687 ** the the soft heap limit is set to the value of the hard heap limit.
6688 ** ^The soft heap limit is automatically enabled whenever the hard heap
6689 ** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and
6690 ** the soft heap limit is outside the range of 1..N, then the soft heap
6691 ** limit is set to N. ^Invoking sqlite3_soft_heap_limit64(0) when the
6692 ** hard heap limit is enabled makes the soft heap limit equal to the
@@ -8977,11 +8985,11 @@
8977 ** sqlite3_backup_init() is called and before the corresponding call to
8978 ** sqlite3_backup_finish(). SQLite does not currently check to see
8979 ** if the application incorrectly accesses the destination [database connection]
8980 ** and so no error code is reported, but the operations may malfunction
8981 ** nevertheless. Use of the destination database connection while a
8982 ** backup is in progress might also also cause a mutex deadlock.
8983 **
8984 ** If running in [shared cache mode], the application must
8985 ** guarantee that the shared cache used by the destination database
8986 ** is not accessed while the backup is running. In practice this means
8987 ** that the application must guarantee that the disk file being
@@ -9405,11 +9413,11 @@
9405 ** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the
9406 ** meaning of each of these checkpoint modes.
9407 */
9408 #define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */
9409 #define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */
9410 #define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for for readers */
9411 #define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */
9412
9413 /*
9414 ** CAPI3REF: Virtual Table Interface Configuration
9415 **
9416
--- extsrc/sqlite3.h
+++ extsrc/sqlite3.h
@@ -144,13 +144,13 @@
144 **
145 ** See also: [sqlite3_libversion()],
146 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
147 ** [sqlite_version()] and [sqlite_source_id()].
148 */
149 #define SQLITE_VERSION "3.40.0"
150 #define SQLITE_VERSION_NUMBER 3040000
151 #define SQLITE_SOURCE_ID "2022-09-02 21:19:24 da7af290960ab8a04a1f55cdc5eeac36b47fa194edf67f0a05daa4b7f2a4071c"
152
153 /*
154 ** CAPI3REF: Run-Time Library Version Numbers
155 ** KEYWORDS: sqlite3_version sqlite3_sourceid
156 **
@@ -3422,10 +3422,13 @@
3422 **
3423 ** ^(<dt>[SQLITE_OPEN_SHAREDCACHE]</dt>
3424 ** <dd>The database is opened [shared cache] enabled, overriding
3425 ** the default shared cache setting provided by
3426 ** [sqlite3_enable_shared_cache()].)^
3427 ** The [use of shared cache mode is discouraged] and hence shared cache
3428 ** capabilities may be omitted from many builds of SQLite. In such cases,
3429 ** this option is a no-op.
3430 **
3431 ** ^(<dt>[SQLITE_OPEN_PRIVATECACHE]</dt>
3432 ** <dd>The database is opened [shared cache] disabled, overriding
3433 ** the default shared cache setting provided by
3434 ** [sqlite3_enable_shared_cache()].)^
@@ -3437,11 +3440,11 @@
3440 ** connection as soon as the connection is created. In addition to setting
3441 ** the extended result code mode, this flag also causes [sqlite3_open_v2()]
3442 ** to return an extended result code.</dd>
3443 **
3444 ** [[OPEN_NOFOLLOW]] ^(<dt>[SQLITE_OPEN_NOFOLLOW]</dt>
3445 ** <dd>The database filename is not allowed to contain a symbolic link</dd>
3446 ** </dl>)^
3447 **
3448 ** If the 3rd parameter to sqlite3_open_v2() is not one of the
3449 ** required combinations shown above optionally combined with other
3450 ** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits]
@@ -6280,11 +6283,11 @@
6283 ** CAPI3REF: Return The Schema Name For A Database Connection
6284 ** METHOD: sqlite3
6285 **
6286 ** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name
6287 ** for the N-th database on database connection D, or a NULL pointer of N is
6288 ** out of range. An N value of 0 means the main database file. An N of 1 is
6289 ** the "temp" schema. Larger values of N correspond to various ATTACH-ed
6290 ** databases.
6291 **
6292 ** Space to hold the string that is returned by sqlite3_db_name() is managed
6293 ** by SQLite itself. The string might be deallocated by any operation that
@@ -6463,11 +6466,11 @@
6466 **
6467 ** ^The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback
6468 ** function C that is invoked prior to each autovacuum of the database
6469 ** file. ^The callback is passed a copy of the generic data pointer (P),
6470 ** the schema-name of the attached database that is being autovacuumed,
6471 ** the size of the database file in pages, the number of free pages,
6472 ** and the number of bytes per page, respectively. The callback should
6473 ** return the number of free pages that should be removed by the
6474 ** autovacuum. ^If the callback returns zero, then no autovacuum happens.
6475 ** ^If the value returned is greater than or equal to the number of
6476 ** free pages, then a complete autovacuum happens.
@@ -6583,10 +6586,15 @@
6586 **
6587 ** ^(This routine enables or disables the sharing of the database cache
6588 ** and schema data structures between [database connection | connections]
6589 ** to the same database. Sharing is enabled if the argument is true
6590 ** and disabled if the argument is false.)^
6591 **
6592 ** This interface is omitted if SQLite is compiled with
6593 ** [-DSQLITE_OMIT_SHARED_CACHE]. The [-DSQLITE_OMIT_SHARED_CACHE]
6594 ** compile-time option is recommended because the
6595 ** [use of shared cache mode is discouraged].
6596 **
6597 ** ^Cache sharing is enabled and disabled for an entire process.
6598 ** This is a change as of SQLite [version 3.5.0] ([dateof:3.5.0]).
6599 ** In prior versions of SQLite,
6600 ** sharing was enabled or disabled for each thread separately.
@@ -6682,11 +6690,11 @@
6690 ** ^Setting the heap limits to zero disables the heap limiter mechanism.
6691 **
6692 ** ^The soft heap limit may not be greater than the hard heap limit.
6693 ** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N)
6694 ** is invoked with a value of N that is greater than the hard heap limit,
6695 ** the soft heap limit is set to the value of the hard heap limit.
6696 ** ^The soft heap limit is automatically enabled whenever the hard heap
6697 ** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and
6698 ** the soft heap limit is outside the range of 1..N, then the soft heap
6699 ** limit is set to N. ^Invoking sqlite3_soft_heap_limit64(0) when the
6700 ** hard heap limit is enabled makes the soft heap limit equal to the
@@ -8977,11 +8985,11 @@
8985 ** sqlite3_backup_init() is called and before the corresponding call to
8986 ** sqlite3_backup_finish(). SQLite does not currently check to see
8987 ** if the application incorrectly accesses the destination [database connection]
8988 ** and so no error code is reported, but the operations may malfunction
8989 ** nevertheless. Use of the destination database connection while a
8990 ** backup is in progress might also cause a mutex deadlock.
8991 **
8992 ** If running in [shared cache mode], the application must
8993 ** guarantee that the shared cache used by the destination database
8994 ** is not accessed while the backup is running. In practice this means
8995 ** that the application must guarantee that the disk file being
@@ -9405,11 +9413,11 @@
9413 ** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the
9414 ** meaning of each of these checkpoint modes.
9415 */
9416 #define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */
9417 #define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */
9418 #define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for readers */
9419 #define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */
9420
9421 /*
9422 ** CAPI3REF: Virtual Table Interface Configuration
9423 **
9424
+34 -8
--- src/accordion.js
+++ src/accordion.js
@@ -1,12 +1,34 @@
1
-/* Attach appropriate javascript to each ".accordion" button so that
2
-** it expands and contracts when clicked.
3
-** The uncompressed source code for the SVG icons can be found on the
4
-** wiki page "branch/accordion-experiments" in the Fossil repository.
1
+/*
2
+** Attach appropriate javascript to each ".accordion" button so that it expands
3
+** and contracts when clicked.
4
+**
5
+** The uncompressed source code for the SVG icons can be found on the wiki page
6
+** "branch/accordion-experiments" in the Fossil repository.
7
+**
8
+** Implementation notes:
9
+**
10
+** The `maxHeight' CSS property is quite restrictive for vertical resizing of
11
+** elements, especially for dynamic-content areas like the diff panels. That's
12
+** why `maxHeight' is set only during animation, to prevent truncated elements.
13
+** (The diff panels may get truncated right after page loading, and other
14
+** elements may get truncated when resizing the browser window to a smaller
15
+** width, causing vertical growth.)
16
+**
17
+** Another problem is that `scrollHeight' used to calculate the expanded height
18
+** while still in the contracted state may return values with small errors on
19
+** some browsers, especially for large elements, presumably due to omitting the
20
+** space required by the vertical scrollbar that may become necessary, causing
21
+** additional horizontal shrinking and consequently more vertical growth than
22
+** calculated. That's why setting `maxHeight' to `scrollHeight' is considered
23
+** "good enough" only during animation, but cleared afterwards.
24
+**
25
+** https://fossil-scm.org/forum/forumpost/66d7075f40
26
+** https://fossil-scm.org/home/timeline?r=accordion-fix
527
*/
628
var acc_svgdata = ["data:image/svg+xml,"+
7
- "%3Csvg xmlns='http:"+"/"+"/www.w3.org/2000/svg' viewBox='0 0 16 16'%3E"+
29
+ "%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E"+
830
"%3Cpath style='fill:black;opacity:0' d='M16,16H0V0h16v16z'/%3E"+
931
"%3Cpath style='fill:rgb(240,240,240)' d='M14,14H2V2h12v12z'/%3E"+
1032
"%3Cpath style='fill:rgb(64,64,64)' d='M13,13H3V3h10v10z'/%3E"+
1133
"%3Cpath style='fill:rgb(248,248,248)' d='M12,12H4V4h8v8z'/%3E"+
1234
"%3Cpath style='fill:rgb(80,128,208)' d='", "'/%3E%3C/svg%3E",
@@ -19,17 +41,21 @@
1941
a[i].insertBefore(img,a[i].firstChild);
2042
img = document.createElement("img");
2143
img.src = acc_svgdata[0]+acc_svgdata[3]+acc_svgdata[1];
2244
img.className = "accordion_btn accordion_btn_minus";
2345
a[i].insertBefore(img,a[i].firstChild);
24
- var p = a[i].nextElementSibling;
25
- p.style.maxHeight = p.scrollHeight + "px";
2646
a[i].addEventListener("click",function(){
2747
var x = this.nextElementSibling;
2848
if( this.classList.contains("accordion_closed") ){
2949
x.style.maxHeight = x.scrollHeight + "px";
50
+ setTimeout(function(){
51
+ x.style.maxHeight = "";
52
+ },250); // default.css: .accordion_panel { transition-duration }
3053
}else{
31
- x.style.maxHeight = "0";
54
+ x.style.maxHeight = x.scrollHeight + "px";
55
+ setTimeout(function(){
56
+ x.style.maxHeight = "0";
57
+ },1);
3258
}
3359
this.classList.toggle("accordion_closed");
3460
});
3561
}
3662
--- src/accordion.js
+++ src/accordion.js
@@ -1,12 +1,34 @@
1 /* Attach appropriate javascript to each ".accordion" button so that
2 ** it expands and contracts when clicked.
3 ** The uncompressed source code for the SVG icons can be found on the
4 ** wiki page "branch/accordion-experiments" in the Fossil repository.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5 */
6 var acc_svgdata = ["data:image/svg+xml,"+
7 "%3Csvg xmlns='http:"+"/"+"/www.w3.org/2000/svg' viewBox='0 0 16 16'%3E"+
8 "%3Cpath style='fill:black;opacity:0' d='M16,16H0V0h16v16z'/%3E"+
9 "%3Cpath style='fill:rgb(240,240,240)' d='M14,14H2V2h12v12z'/%3E"+
10 "%3Cpath style='fill:rgb(64,64,64)' d='M13,13H3V3h10v10z'/%3E"+
11 "%3Cpath style='fill:rgb(248,248,248)' d='M12,12H4V4h8v8z'/%3E"+
12 "%3Cpath style='fill:rgb(80,128,208)' d='", "'/%3E%3C/svg%3E",
@@ -19,17 +41,21 @@
19 a[i].insertBefore(img,a[i].firstChild);
20 img = document.createElement("img");
21 img.src = acc_svgdata[0]+acc_svgdata[3]+acc_svgdata[1];
22 img.className = "accordion_btn accordion_btn_minus";
23 a[i].insertBefore(img,a[i].firstChild);
24 var p = a[i].nextElementSibling;
25 p.style.maxHeight = p.scrollHeight + "px";
26 a[i].addEventListener("click",function(){
27 var x = this.nextElementSibling;
28 if( this.classList.contains("accordion_closed") ){
29 x.style.maxHeight = x.scrollHeight + "px";
 
 
 
30 }else{
31 x.style.maxHeight = "0";
 
 
 
32 }
33 this.classList.toggle("accordion_closed");
34 });
35 }
36
--- src/accordion.js
+++ src/accordion.js
@@ -1,12 +1,34 @@
1 /*
2 ** Attach appropriate javascript to each ".accordion" button so that it expands
3 ** and contracts when clicked.
4 **
5 ** The uncompressed source code for the SVG icons can be found on the wiki page
6 ** "branch/accordion-experiments" in the Fossil repository.
7 **
8 ** Implementation notes:
9 **
10 ** The `maxHeight' CSS property is quite restrictive for vertical resizing of
11 ** elements, especially for dynamic-content areas like the diff panels. That's
12 ** why `maxHeight' is set only during animation, to prevent truncated elements.
13 ** (The diff panels may get truncated right after page loading, and other
14 ** elements may get truncated when resizing the browser window to a smaller
15 ** width, causing vertical growth.)
16 **
17 ** Another problem is that `scrollHeight' used to calculate the expanded height
18 ** while still in the contracted state may return values with small errors on
19 ** some browsers, especially for large elements, presumably due to omitting the
20 ** space required by the vertical scrollbar that may become necessary, causing
21 ** additional horizontal shrinking and consequently more vertical growth than
22 ** calculated. That's why setting `maxHeight' to `scrollHeight' is considered
23 ** "good enough" only during animation, but cleared afterwards.
24 **
25 ** https://fossil-scm.org/forum/forumpost/66d7075f40
26 ** https://fossil-scm.org/home/timeline?r=accordion-fix
27 */
28 var acc_svgdata = ["data:image/svg+xml,"+
29 "%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E"+
30 "%3Cpath style='fill:black;opacity:0' d='M16,16H0V0h16v16z'/%3E"+
31 "%3Cpath style='fill:rgb(240,240,240)' d='M14,14H2V2h12v12z'/%3E"+
32 "%3Cpath style='fill:rgb(64,64,64)' d='M13,13H3V3h10v10z'/%3E"+
33 "%3Cpath style='fill:rgb(248,248,248)' d='M12,12H4V4h8v8z'/%3E"+
34 "%3Cpath style='fill:rgb(80,128,208)' d='", "'/%3E%3C/svg%3E",
@@ -19,17 +41,21 @@
41 a[i].insertBefore(img,a[i].firstChild);
42 img = document.createElement("img");
43 img.src = acc_svgdata[0]+acc_svgdata[3]+acc_svgdata[1];
44 img.className = "accordion_btn accordion_btn_minus";
45 a[i].insertBefore(img,a[i].firstChild);
 
 
46 a[i].addEventListener("click",function(){
47 var x = this.nextElementSibling;
48 if( this.classList.contains("accordion_closed") ){
49 x.style.maxHeight = x.scrollHeight + "px";
50 setTimeout(function(){
51 x.style.maxHeight = "";
52 },250); // default.css: .accordion_panel { transition-duration }
53 }else{
54 x.style.maxHeight = x.scrollHeight + "px";
55 setTimeout(function(){
56 x.style.maxHeight = "0";
57 },1);
58 }
59 this.classList.toggle("accordion_closed");
60 });
61 }
62
+96 -23
--- src/alerts.c
+++ src/alerts.c
@@ -140,39 +140,88 @@
140140
db_multi_exec(
141141
"ALTER TABLE repository.pending_alert"
142142
" ADD COLUMN sentMod BOOLEAN DEFAULT false;"
143143
);
144144
}
145
+
146
+/*
147
+** Process deferred alert events. Return the number of errors.
148
+*/
149
+static int alert_process_deferred_triggers(void){
150
+ if( db_table_exists("temp","deferred_chat_events")
151
+ && db_table_exists("repository","chat")
152
+ ){
153
+ const char *zChatUser = db_get("chat-timeline-user", 0);
154
+ if( zChatUser && zChatUser[0] ){
155
+ db_multi_exec(
156
+ "INSERT INTO chat(mtime,lmtime,xfrom,xmsg)"
157
+ " SELECT julianday(), "
158
+ " strftime('%%Y-%%m-%%dT%%H:%%M:%%S','now','localtime'),"
159
+ " %Q,"
160
+ " chat_msg_from_event(type, objid, user, comment)\n"
161
+ " FROM deferred_chat_events;\n",
162
+ zChatUser
163
+ );
164
+ }
165
+ }
166
+ return 0;
167
+}
145168
146169
/*
147170
** Enable triggers that automatically populate the pending_alert
148
-** table.
171
+** table. (Later:) Also add triggers that automatically relay timeline
172
+** events to chat, if chat is configured for that.
149173
*/
150174
void alert_create_trigger(void){
151
- if( !db_table_exists("repository","pending_alert") ) return;
152
- db_multi_exec(
153
- "DROP TRIGGER IF EXISTS repository.alert_trigger1;\n" /* Purge legacy */
154
- /* "DROP TRIGGER IF EXISTS repository.email_trigger1;\n" Very old legacy */
155
- "CREATE TRIGGER temp.alert_trigger1\n"
156
- "AFTER INSERT ON repository.event BEGIN\n"
157
- " INSERT INTO pending_alert(eventid)\n"
158
- " SELECT printf('%%.1c%%d',new.type,new.objid) WHERE true\n"
159
- " ON CONFLICT(eventId) DO NOTHING;\n"
160
- "END;"
161
- );
175
+ if( db_table_exists("repository","pending_alert") ){
176
+ db_multi_exec(
177
+ "DROP TRIGGER IF EXISTS repository.alert_trigger1;\n" /* Purge legacy */
178
+ "CREATE TRIGGER temp.alert_trigger1\n"
179
+ "AFTER INSERT ON repository.event BEGIN\n"
180
+ " INSERT INTO pending_alert(eventid)\n"
181
+ " SELECT printf('%%.1c%%d',new.type,new.objid) WHERE true\n"
182
+ " ON CONFLICT(eventId) DO NOTHING;\n"
183
+ "END;"
184
+ );
185
+ }
186
+ if( db_table_exists("repository","chat")
187
+ && db_get("chat-timeline-user", "")[0]!=0
188
+ ){
189
+ /* Record events that will be relayed to chat, but do not relay
190
+ ** them immediately, as the chat_msg_from_event() function requires
191
+ ** that TAGXREF be up-to-date, and that has not happened yet when
192
+ ** the insert into the EVENT table occurs. Make arrangements to
193
+ ** invoke alert_process_deferred_triggers() when the transaction
194
+ ** commits. The TAGXREF table will be ready by then. */
195
+ db_multi_exec(
196
+ "CREATE TABLE temp.deferred_chat_events(\n"
197
+ " type TEXT,\n"
198
+ " objid INT,\n"
199
+ " user TEXT,\n"
200
+ " comment TEXT\n"
201
+ ");\n"
202
+ "CREATE TRIGGER temp.chat_trigger1\n"
203
+ "AFTER INSERT ON repository.event BEGIN\n"
204
+ " INSERT INTO deferred_chat_events"
205
+ " VALUES(new.type,new.objid,new.user,new.comment);\n"
206
+ "END;\n"
207
+ );
208
+ db_commit_hook(alert_process_deferred_triggers, 1);
209
+ }
162210
}
163211
164212
/*
165
-** Disable triggers the event_pending triggers.
213
+** Disable triggers the event_pending and chat triggers.
166214
**
167215
** This must be called before rebuilding the EVENT table, for example
168216
** via the "fossil rebuild" command.
169217
*/
170218
void alert_drop_trigger(void){
171219
db_multi_exec(
172220
"DROP TRIGGER IF EXISTS temp.alert_trigger1;\n"
173221
"DROP TRIGGER IF EXISTS repository.alert_trigger1;\n" /* Purge legacy */
222
+ "DROP TRIGGER IF EXISTS temp.chat_trigger1;\n"
174223
);
175224
}
176225
177226
/*
178227
** Return true if email alerts are active.
@@ -299,11 +348,11 @@
299348
@ <hr>
300349
301350
entry_attribute("Subscription Renewal Interval In Days", 8,
302351
"email-renew-interval", "eri", "", 0);
303352
@ <p>
304
- @ If this value is a integer N greater than or equal to 14, then email
353
+ @ If this value is an integer N greater than or equal to 14, then email
305354
@ notification subscriptions will be suspended N days after the last known
306355
@ interaction with the user. This prevents sending notifications
307356
@ to abandoned accounts. If a subscription comes within 7 days of expiring,
308357
@ a separate email goes out with the daily digest that prompts the
309358
@ subscriber to click on a link to the "/renew" webpage in order to
@@ -1748,15 +1797,10 @@
17481797
if( alert_webpages_disabled() ){
17491798
db_commit_transaction();
17501799
return;
17511800
}
17521801
login_check_credentials();
1753
- if( !g.perm.EmailAlert ){
1754
- db_commit_transaction();
1755
- login_needed(g.anon.EmailAlert);
1756
- /*NOTREACHED*/
1757
- }
17581802
isLogin = login_is_individual();
17591803
zName = P("name");
17601804
nName = zName ? (int)strlen(zName) : 0;
17611805
if( g.perm.Admin && P("sid")!=0 ){
17621806
sid = atoi(P("sid"));
@@ -1767,11 +1811,11 @@
17671811
" THEN subscriberId ELSE 0 END"
17681812
" FROM subscriber WHERE subscriberCode>=hextoblob(%Q)"
17691813
" LIMIT 1", zName, zName);
17701814
if( sid ) keepAlive = 1;
17711815
}
1772
- if( sid==0 && isLogin ){
1816
+ if( sid==0 && isLogin && g.perm.EmailAlert ){
17731817
sid = db_int(0, "SELECT subscriberId FROM subscriber"
17741818
" WHERE suname=%Q", g.zLogin);
17751819
}
17761820
if( sid==0 ){
17771821
db_commit_transaction();
@@ -2128,17 +2172,44 @@
21282172
int bSubmit;
21292173
const char *zEAddr;
21302174
char *zCode = 0;
21312175
int sid = 0;
21322176
2133
- /* If a valid subscriber code is supplied, then unsubscribe immediately.
2177
+ if( zName==0 ) zName = P("scode");
2178
+
2179
+ /* If a valid subscriber code is supplied, then either present the user
2180
+ ** with a comformation, or if already confirmed, unsubscribe immediately.
21342181
*/
21352182
if( zName
21362183
&& (sid = db_int(0, "SELECT subscriberId FROM subscriber"
21372184
" WHERE subscriberCode=hextoblob(%Q)", zName))!=0
21382185
){
2139
- alert_unsubscribe(sid);
2186
+ char *zUnsubName = mprintf("confirm%04x", sid);
2187
+ if( P(zUnsubName)!=0 ){
2188
+ alert_unsubscribe(sid);
2189
+ }else if( P("manage")!=0 ){
2190
+ cgi_redirectf("%R/alerts/%s", zName);
2191
+ }else{
2192
+ style_header("Unsubscribed");
2193
+ form_begin(0, "%R/unsubscribe");
2194
+ @ <input type="hidden" name="scode" value="%h(zName)">
2195
+ @ <table border="0" cellpadding="10" width="100%%">
2196
+ @ <tr><td align="right">
2197
+ @ <input type="submit" name="%h(zUnsubName)" value="Unsubscribe">
2198
+ @ </td><td><big><b>&larr;</b></big></td>
2199
+ @ <td>Cancel your subscription to %h(g.zBaseURL) notifications
2200
+ @ </td><tr>
2201
+ @ <tr><td align="right">
2202
+ @ <input type="submit" name="manage" \
2203
+ @ value="Manage Subscription Settings">
2204
+ @ </td><td><big><b>&larr;</b></big></td>
2205
+ @ <td>Make changes to your subscription preferences
2206
+ @ </td><tr>
2207
+ @ </table>
2208
+ @ </form>
2209
+ style_finish_page();
2210
+ }
21402211
return;
21412212
}
21422213
21432214
/* Logged in users are redirected to the /alerts page */
21442215
login_check_credentials();
@@ -2963,12 +3034,14 @@
29633034
Blob fhdr, fbody;
29643035
blob_init(&fhdr, 0, 0);
29653036
blob_appendf(&fhdr, "To: <%s>\r\n", zEmail);
29663037
blob_append(&fhdr, blob_buffer(&p->hdr), blob_size(&p->hdr));
29673038
blob_init(&fbody, blob_buffer(&p->txt), blob_size(&p->txt));
2968
- blob_appendf(&fbody, "\n-- \nSubscription info: %s/alerts/%s\n",
3039
+ blob_appendf(&fbody, "\n-- \nUnsubscribe: %s/unsubscribe/%s\n",
29693040
zUrl, zCode);
3041
+ /* blob_appendf(&fbody, "Subscription settings: %s/alerts/%s\n",
3042
+ ** zUrl, zCode); */
29703043
alert_send(pSender,&fhdr,&fbody,p->zFromName);
29713044
nSent++;
29723045
blob_reset(&fhdr);
29733046
blob_reset(&fbody);
29743047
}else{
29753048
--- src/alerts.c
+++ src/alerts.c
@@ -140,39 +140,88 @@
140 db_multi_exec(
141 "ALTER TABLE repository.pending_alert"
142 " ADD COLUMN sentMod BOOLEAN DEFAULT false;"
143 );
144 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
146 /*
147 ** Enable triggers that automatically populate the pending_alert
148 ** table.
 
149 */
150 void alert_create_trigger(void){
151 if( !db_table_exists("repository","pending_alert") ) return;
152 db_multi_exec(
153 "DROP TRIGGER IF EXISTS repository.alert_trigger1;\n" /* Purge legacy */
154 /* "DROP TRIGGER IF EXISTS repository.email_trigger1;\n" Very old legacy */
155 "CREATE TRIGGER temp.alert_trigger1\n"
156 "AFTER INSERT ON repository.event BEGIN\n"
157 " INSERT INTO pending_alert(eventid)\n"
158 " SELECT printf('%%.1c%%d',new.type,new.objid) WHERE true\n"
159 " ON CONFLICT(eventId) DO NOTHING;\n"
160 "END;"
161 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162 }
163
164 /*
165 ** Disable triggers the event_pending triggers.
166 **
167 ** This must be called before rebuilding the EVENT table, for example
168 ** via the "fossil rebuild" command.
169 */
170 void alert_drop_trigger(void){
171 db_multi_exec(
172 "DROP TRIGGER IF EXISTS temp.alert_trigger1;\n"
173 "DROP TRIGGER IF EXISTS repository.alert_trigger1;\n" /* Purge legacy */
 
174 );
175 }
176
177 /*
178 ** Return true if email alerts are active.
@@ -299,11 +348,11 @@
299 @ <hr>
300
301 entry_attribute("Subscription Renewal Interval In Days", 8,
302 "email-renew-interval", "eri", "", 0);
303 @ <p>
304 @ If this value is a integer N greater than or equal to 14, then email
305 @ notification subscriptions will be suspended N days after the last known
306 @ interaction with the user. This prevents sending notifications
307 @ to abandoned accounts. If a subscription comes within 7 days of expiring,
308 @ a separate email goes out with the daily digest that prompts the
309 @ subscriber to click on a link to the "/renew" webpage in order to
@@ -1748,15 +1797,10 @@
1748 if( alert_webpages_disabled() ){
1749 db_commit_transaction();
1750 return;
1751 }
1752 login_check_credentials();
1753 if( !g.perm.EmailAlert ){
1754 db_commit_transaction();
1755 login_needed(g.anon.EmailAlert);
1756 /*NOTREACHED*/
1757 }
1758 isLogin = login_is_individual();
1759 zName = P("name");
1760 nName = zName ? (int)strlen(zName) : 0;
1761 if( g.perm.Admin && P("sid")!=0 ){
1762 sid = atoi(P("sid"));
@@ -1767,11 +1811,11 @@
1767 " THEN subscriberId ELSE 0 END"
1768 " FROM subscriber WHERE subscriberCode>=hextoblob(%Q)"
1769 " LIMIT 1", zName, zName);
1770 if( sid ) keepAlive = 1;
1771 }
1772 if( sid==0 && isLogin ){
1773 sid = db_int(0, "SELECT subscriberId FROM subscriber"
1774 " WHERE suname=%Q", g.zLogin);
1775 }
1776 if( sid==0 ){
1777 db_commit_transaction();
@@ -2128,17 +2172,44 @@
2128 int bSubmit;
2129 const char *zEAddr;
2130 char *zCode = 0;
2131 int sid = 0;
2132
2133 /* If a valid subscriber code is supplied, then unsubscribe immediately.
 
 
 
2134 */
2135 if( zName
2136 && (sid = db_int(0, "SELECT subscriberId FROM subscriber"
2137 " WHERE subscriberCode=hextoblob(%Q)", zName))!=0
2138 ){
2139 alert_unsubscribe(sid);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2140 return;
2141 }
2142
2143 /* Logged in users are redirected to the /alerts page */
2144 login_check_credentials();
@@ -2963,12 +3034,14 @@
2963 Blob fhdr, fbody;
2964 blob_init(&fhdr, 0, 0);
2965 blob_appendf(&fhdr, "To: <%s>\r\n", zEmail);
2966 blob_append(&fhdr, blob_buffer(&p->hdr), blob_size(&p->hdr));
2967 blob_init(&fbody, blob_buffer(&p->txt), blob_size(&p->txt));
2968 blob_appendf(&fbody, "\n-- \nSubscription info: %s/alerts/%s\n",
2969 zUrl, zCode);
 
 
2970 alert_send(pSender,&fhdr,&fbody,p->zFromName);
2971 nSent++;
2972 blob_reset(&fhdr);
2973 blob_reset(&fbody);
2974 }else{
2975
--- src/alerts.c
+++ src/alerts.c
@@ -140,39 +140,88 @@
140 db_multi_exec(
141 "ALTER TABLE repository.pending_alert"
142 " ADD COLUMN sentMod BOOLEAN DEFAULT false;"
143 );
144 }
145
146 /*
147 ** Process deferred alert events. Return the number of errors.
148 */
149 static int alert_process_deferred_triggers(void){
150 if( db_table_exists("temp","deferred_chat_events")
151 && db_table_exists("repository","chat")
152 ){
153 const char *zChatUser = db_get("chat-timeline-user", 0);
154 if( zChatUser && zChatUser[0] ){
155 db_multi_exec(
156 "INSERT INTO chat(mtime,lmtime,xfrom,xmsg)"
157 " SELECT julianday(), "
158 " strftime('%%Y-%%m-%%dT%%H:%%M:%%S','now','localtime'),"
159 " %Q,"
160 " chat_msg_from_event(type, objid, user, comment)\n"
161 " FROM deferred_chat_events;\n",
162 zChatUser
163 );
164 }
165 }
166 return 0;
167 }
168
169 /*
170 ** Enable triggers that automatically populate the pending_alert
171 ** table. (Later:) Also add triggers that automatically relay timeline
172 ** events to chat, if chat is configured for that.
173 */
174 void alert_create_trigger(void){
175 if( db_table_exists("repository","pending_alert") ){
176 db_multi_exec(
177 "DROP TRIGGER IF EXISTS repository.alert_trigger1;\n" /* Purge legacy */
178 "CREATE TRIGGER temp.alert_trigger1\n"
179 "AFTER INSERT ON repository.event BEGIN\n"
180 " INSERT INTO pending_alert(eventid)\n"
181 " SELECT printf('%%.1c%%d',new.type,new.objid) WHERE true\n"
182 " ON CONFLICT(eventId) DO NOTHING;\n"
183 "END;"
184 );
185 }
186 if( db_table_exists("repository","chat")
187 && db_get("chat-timeline-user", "")[0]!=0
188 ){
189 /* Record events that will be relayed to chat, but do not relay
190 ** them immediately, as the chat_msg_from_event() function requires
191 ** that TAGXREF be up-to-date, and that has not happened yet when
192 ** the insert into the EVENT table occurs. Make arrangements to
193 ** invoke alert_process_deferred_triggers() when the transaction
194 ** commits. The TAGXREF table will be ready by then. */
195 db_multi_exec(
196 "CREATE TABLE temp.deferred_chat_events(\n"
197 " type TEXT,\n"
198 " objid INT,\n"
199 " user TEXT,\n"
200 " comment TEXT\n"
201 ");\n"
202 "CREATE TRIGGER temp.chat_trigger1\n"
203 "AFTER INSERT ON repository.event BEGIN\n"
204 " INSERT INTO deferred_chat_events"
205 " VALUES(new.type,new.objid,new.user,new.comment);\n"
206 "END;\n"
207 );
208 db_commit_hook(alert_process_deferred_triggers, 1);
209 }
210 }
211
212 /*
213 ** Disable triggers the event_pending and chat triggers.
214 **
215 ** This must be called before rebuilding the EVENT table, for example
216 ** via the "fossil rebuild" command.
217 */
218 void alert_drop_trigger(void){
219 db_multi_exec(
220 "DROP TRIGGER IF EXISTS temp.alert_trigger1;\n"
221 "DROP TRIGGER IF EXISTS repository.alert_trigger1;\n" /* Purge legacy */
222 "DROP TRIGGER IF EXISTS temp.chat_trigger1;\n"
223 );
224 }
225
226 /*
227 ** Return true if email alerts are active.
@@ -299,11 +348,11 @@
348 @ <hr>
349
350 entry_attribute("Subscription Renewal Interval In Days", 8,
351 "email-renew-interval", "eri", "", 0);
352 @ <p>
353 @ If this value is an integer N greater than or equal to 14, then email
354 @ notification subscriptions will be suspended N days after the last known
355 @ interaction with the user. This prevents sending notifications
356 @ to abandoned accounts. If a subscription comes within 7 days of expiring,
357 @ a separate email goes out with the daily digest that prompts the
358 @ subscriber to click on a link to the "/renew" webpage in order to
@@ -1748,15 +1797,10 @@
1797 if( alert_webpages_disabled() ){
1798 db_commit_transaction();
1799 return;
1800 }
1801 login_check_credentials();
 
 
 
 
 
1802 isLogin = login_is_individual();
1803 zName = P("name");
1804 nName = zName ? (int)strlen(zName) : 0;
1805 if( g.perm.Admin && P("sid")!=0 ){
1806 sid = atoi(P("sid"));
@@ -1767,11 +1811,11 @@
1811 " THEN subscriberId ELSE 0 END"
1812 " FROM subscriber WHERE subscriberCode>=hextoblob(%Q)"
1813 " LIMIT 1", zName, zName);
1814 if( sid ) keepAlive = 1;
1815 }
1816 if( sid==0 && isLogin && g.perm.EmailAlert ){
1817 sid = db_int(0, "SELECT subscriberId FROM subscriber"
1818 " WHERE suname=%Q", g.zLogin);
1819 }
1820 if( sid==0 ){
1821 db_commit_transaction();
@@ -2128,17 +2172,44 @@
2172 int bSubmit;
2173 const char *zEAddr;
2174 char *zCode = 0;
2175 int sid = 0;
2176
2177 if( zName==0 ) zName = P("scode");
2178
2179 /* If a valid subscriber code is supplied, then either present the user
2180 ** with a comformation, or if already confirmed, unsubscribe immediately.
2181 */
2182 if( zName
2183 && (sid = db_int(0, "SELECT subscriberId FROM subscriber"
2184 " WHERE subscriberCode=hextoblob(%Q)", zName))!=0
2185 ){
2186 char *zUnsubName = mprintf("confirm%04x", sid);
2187 if( P(zUnsubName)!=0 ){
2188 alert_unsubscribe(sid);
2189 }else if( P("manage")!=0 ){
2190 cgi_redirectf("%R/alerts/%s", zName);
2191 }else{
2192 style_header("Unsubscribed");
2193 form_begin(0, "%R/unsubscribe");
2194 @ <input type="hidden" name="scode" value="%h(zName)">
2195 @ <table border="0" cellpadding="10" width="100%%">
2196 @ <tr><td align="right">
2197 @ <input type="submit" name="%h(zUnsubName)" value="Unsubscribe">
2198 @ </td><td><big><b>&larr;</b></big></td>
2199 @ <td>Cancel your subscription to %h(g.zBaseURL) notifications
2200 @ </td><tr>
2201 @ <tr><td align="right">
2202 @ <input type="submit" name="manage" \
2203 @ value="Manage Subscription Settings">
2204 @ </td><td><big><b>&larr;</b></big></td>
2205 @ <td>Make changes to your subscription preferences
2206 @ </td><tr>
2207 @ </table>
2208 @ </form>
2209 style_finish_page();
2210 }
2211 return;
2212 }
2213
2214 /* Logged in users are redirected to the /alerts page */
2215 login_check_credentials();
@@ -2963,12 +3034,14 @@
3034 Blob fhdr, fbody;
3035 blob_init(&fhdr, 0, 0);
3036 blob_appendf(&fhdr, "To: <%s>\r\n", zEmail);
3037 blob_append(&fhdr, blob_buffer(&p->hdr), blob_size(&p->hdr));
3038 blob_init(&fbody, blob_buffer(&p->txt), blob_size(&p->txt));
3039 blob_appendf(&fbody, "\n-- \nUnsubscribe: %s/unsubscribe/%s\n",
3040 zUrl, zCode);
3041 /* blob_appendf(&fbody, "Subscription settings: %s/alerts/%s\n",
3042 ** zUrl, zCode); */
3043 alert_send(pSender,&fhdr,&fbody,p->zFromName);
3044 nSent++;
3045 blob_reset(&fhdr);
3046 blob_reset(&fbody);
3047 }else{
3048
+27 -29
--- src/allrepo.c
+++ src/allrepo.c
@@ -91,11 +91,11 @@
9191
** line options supported by the extra command itself, if any
9292
** are present, are passed along verbatim.
9393
**
9494
** fts-config Run the "fts-config" command on all repositories.
9595
**
96
-** git CMD Do the "git export" or "git status" command (which every
96
+** git CMD Do the "git export" or "git status" command (whichever
9797
** is specified by CMD) on all repositories for which
9898
** a Git mirror has been previously established.
9999
**
100100
** info Run the "info" command on all repositories.
101101
**
@@ -153,11 +153,10 @@
153153
** --dry-run If given, display instead of run actions.
154154
** --showfile Show the repository or checkout being operated upon.
155155
** --stop-on-error Halt immediately if any subprocess fails.
156156
*/
157157
void all_cmd(void){
158
- int n;
159158
Stmt q;
160159
const char *zCmd;
161160
char *zSyscmd;
162161
Blob extra;
163162
int useCheckouts = 0;
@@ -176,35 +175,35 @@
176175
}
177176
178177
if( g.argc<3 ){
179178
usage("SUBCOMMAND ...");
180179
}
181
- n = strlen(g.argv[2]);
182180
db_open_config(1, 0);
183181
blob_zero(&extra);
184182
zCmd = g.argv[2];
185183
if( !login_is_nobody() ) blob_appendf(&extra, " -U %s", g.zLogin);
186
- if( strncmp(zCmd, "ui", n)==0 || strncmp(zCmd, "server", n)==0 ){
184
+ if( fossil_strcmp(zCmd, "ui")==0
185
+ || fossil_strcmp(zCmd, "server")==0 ){
187186
g.argv[1] = g.argv[2];
188187
g.argv[2] = "/";
189188
cmd_webserver();
190189
return;
191190
}
192
- if( strncmp(zCmd, "list", n)==0 || strncmp(zCmd,"ls",n)==0 ){
191
+ if( fossil_strcmp(zCmd, "list")==0 || fossil_strcmp(zCmd,"ls")==0 ){
193192
zCmd = "list";
194193
useCheckouts = find_option("ckout","c",0)!=0;
195
- }else if( strncmp(zCmd, "backup", n)==0 ){
194
+ }else if( fossil_strcmp(zCmd, "backup")==0 ){
196195
char *zDest;
197196
zCmd = "backup -R";
198197
collect_argument(&extra, "overwrite",0);
199198
if( g.argc!=4 ) usage("backup DIRECTORY");
200199
zDest = g.argv[3];
201200
if( file_isdir(zDest, ExtFILE)!=1 ){
202201
fossil_fatal("argument to \"fossil all backup\" must be a directory");
203202
}
204203
blob_appendf(&extra, " %$", zDest);
205
- }else if( strncmp(zCmd, "clean", n)==0 ){
204
+ }else if( fossil_strcmp(zCmd, "clean")==0 ){
206205
zCmd = "clean --chdir";
207206
collect_argument(&extra, "allckouts",0);
208207
collect_argument_value(&extra, "case-sensitive");
209208
collect_argument_value(&extra, "clean");
210209
collect_argument(&extra, "dirsonly",0);
@@ -217,27 +216,27 @@
217216
collect_argument(&extra, "no-prompt",0);
218217
collect_argument(&extra, "temp",0);
219218
collect_argument(&extra, "verbose","v");
220219
collect_argument(&extra, "whatif",0);
221220
useCheckouts = 1;
222
- }else if( strncmp(zCmd, "config", n)==0 ){
221
+ }else if( fossil_strcmp(zCmd, "config")==0 ){
223222
zCmd = "config -R";
224223
collect_argv(&extra, 3);
225224
(void)find_option("legacy",0,0);
226225
(void)find_option("overwrite",0,0);
227226
verify_all_options();
228227
if( g.argc!=5 || fossil_strcmp(g.argv[3],"pull")!=0 ){
229228
usage("configure pull AREA ?OPTIONS?");
230229
}
231
- }else if( strncmp(zCmd, "dbstat", n)==0 ){
230
+ }else if( fossil_strcmp(zCmd, "dbstat")==0 ){
232231
zCmd = "dbstat --omit-version-info -R";
233232
showLabel = 1;
234233
quiet = 1;
235234
collect_argument(&extra, "brief", "b");
236235
collect_argument(&extra, "db-check", 0);
237236
collect_argument(&extra, "db-verify", 0);
238
- }else if( strncmp(zCmd, "extras", n)==0 ){
237
+ }else if( fossil_strcmp(zCmd, "extras")==0 ){
239238
if( showFile ){
240239
zCmd = "extras --chdir";
241240
}else{
242241
zCmd = "extras --header --chdir";
243242
}
@@ -247,32 +246,31 @@
247246
collect_argument_value(&extra, "ignore");
248247
collect_argument(&extra, "rel-paths",0);
249248
useCheckouts = 1;
250249
stopOnError = 0;
251250
quiet = 1;
252
- }else if( strncmp(zCmd, "git", n)==0 ){
251
+ }else if( fossil_strcmp(zCmd, "git")==0 ){
253252
if( g.argc<4 ){
254253
usage("git (export|status)");
255254
}else{
256
- int n3 = (int)strlen(g.argv[3]);
257
- if( strncmp(g.argv[3], "export", n3)==0 ){
255
+ if( fossil_strcmp(g.argv[3], "export")==0 ){
258256
zCmd = "git export --if-mirrored -R";
259
- }else if( strncmp(g.argv[3], "status", n3)==0 ){
257
+ }else if( fossil_strcmp(g.argv[3], "status")==0 ){
260258
zCmd = "git status --by-all -q -R";
261259
quiet = 1;
262260
}else{
263261
usage("git (export|status)");
264262
}
265263
}
266
- }else if( strncmp(zCmd, "push", n)==0 ){
264
+ }else if( fossil_strcmp(zCmd, "push")==0 ){
267265
zCmd = "push -autourl -R";
268266
collect_argument(&extra, "verbose","v");
269
- }else if( strncmp(zCmd, "pull", n)==0 ){
267
+ }else if( fossil_strcmp(zCmd, "pull")==0 ){
270268
zCmd = "pull -autourl -R";
271269
collect_argument(&extra, "verbose","v");
272270
collect_argument(&extra, "share-links",0);
273
- }else if( strncmp(zCmd, "rebuild", n)==0 ){
271
+ }else if( fossil_strcmp(zCmd, "rebuild")==0 ){
274272
zCmd = "rebuild";
275273
collect_argument(&extra, "cluster",0);
276274
collect_argument(&extra, "compress",0);
277275
collect_argument(&extra, "compress-only",0);
278276
collect_argument(&extra, "noverify",0);
@@ -283,40 +281,40 @@
283281
collect_argument(&extra, "wal",0);
284282
collect_argument(&extra, "stats",0);
285283
collect_argument(&extra, "index",0);
286284
collect_argument(&extra, "noindex",0);
287285
collect_argument(&extra, "ifneeded", 0);
288
- }else if( strncmp(zCmd, "setting", n)==0 ){
286
+ }else if( fossil_strcmp(zCmd, "setting")==0 ){
289287
zCmd = "setting -R";
290288
collect_argv(&extra, 3);
291
- }else if( strncmp(zCmd, "unset", n)==0 ){
289
+ }else if( fossil_strcmp(zCmd, "unset")==0 ){
292290
zCmd = "unset -R";
293291
collect_argv(&extra, 3);
294
- }else if( strncmp(zCmd, "fts-config", n)==0 ){
292
+ }else if( fossil_strcmp(zCmd, "fts-config")==0 ){
295293
zCmd = "fts-config -R";
296294
collect_argv(&extra, 3);
297
- }else if( strncmp(zCmd, "sync", n)==0 ){
295
+ }else if( fossil_strcmp(zCmd, "sync")==0 ){
298296
zCmd = "sync -autourl -R";
299297
collect_argument(&extra, "share-links",0);
300298
collect_argument(&extra, "verbose","v");
301299
collect_argument(&extra, "unversioned","u");
302
- }else if( strncmp(zCmd, "test-integrity", n)==0 ){
300
+ }else if( fossil_strcmp(zCmd, "test-integrity")==0 ){
303301
collect_argument(&extra, "db-only", "d");
304302
collect_argument(&extra, "parse", 0);
305303
collect_argument(&extra, "quick", "q");
306304
zCmd = "test-integrity";
307
- }else if( strncmp(zCmd, "test-orphans", n)==0 ){
305
+ }else if( fossil_strcmp(zCmd, "test-orphans")==0 ){
308306
zCmd = "test-orphans -R";
309
- }else if( strncmp(zCmd, "test-missing", n)==0 ){
307
+ }else if( fossil_strcmp(zCmd, "test-missing")==0 ){
310308
zCmd = "test-missing -q -R";
311309
collect_argument(&extra, "notshunned",0);
312
- }else if( strncmp(zCmd, "changes", n)==0 ){
310
+ }else if( fossil_strcmp(zCmd, "changes")==0 ){
313311
zCmd = "changes --quiet --header --chdir";
314312
useCheckouts = 1;
315313
stopOnError = 0;
316314
quiet = 1;
317
- }else if( strncmp(zCmd, "ignore", n)==0 ){
315
+ }else if( fossil_strcmp(zCmd, "ignore")==0 ){
318316
int j;
319317
Blob fn = BLOB_INITIALIZER;
320318
Blob sql = BLOB_INITIALIZER;
321319
useCheckouts = find_option("ckout","c",0)!=0;
322320
verify_all_options();
@@ -338,11 +336,11 @@
338336
db_end_transaction(0);
339337
blob_reset(&sql);
340338
blob_reset(&fn);
341339
blob_reset(&extra);
342340
return;
343
- }else if( strncmp(zCmd, "add", n)==0 ){
341
+ }else if( fossil_strcmp(zCmd, "add")==0 ){
344342
int j;
345343
Blob fn = BLOB_INITIALIZER;
346344
Blob sql = BLOB_INITIALIZER;
347345
verify_all_options();
348346
db_begin_transaction();
@@ -375,15 +373,15 @@
375373
db_end_transaction(0);
376374
blob_reset(&sql);
377375
blob_reset(&fn);
378376
blob_reset(&extra);
379377
return;
380
- }else if( strncmp(zCmd, "info", n)==0 ){
378
+ }else if( fossil_strcmp(zCmd, "info")==0 ){
381379
zCmd = "info";
382380
showLabel = 1;
383381
quiet = 1;
384
- }else if( strncmp(zCmd, "cache", n)==0 ){
382
+ }else if( fossil_strcmp(zCmd, "cache")==0 ){
385383
zCmd = "cache -R";
386384
showLabel = 1;
387385
collect_argv(&extra, 3);
388386
}else{
389387
fossil_fatal("\"all\" subcommand should be one of: "
390388
--- src/allrepo.c
+++ src/allrepo.c
@@ -91,11 +91,11 @@
91 ** line options supported by the extra command itself, if any
92 ** are present, are passed along verbatim.
93 **
94 ** fts-config Run the "fts-config" command on all repositories.
95 **
96 ** git CMD Do the "git export" or "git status" command (which every
97 ** is specified by CMD) on all repositories for which
98 ** a Git mirror has been previously established.
99 **
100 ** info Run the "info" command on all repositories.
101 **
@@ -153,11 +153,10 @@
153 ** --dry-run If given, display instead of run actions.
154 ** --showfile Show the repository or checkout being operated upon.
155 ** --stop-on-error Halt immediately if any subprocess fails.
156 */
157 void all_cmd(void){
158 int n;
159 Stmt q;
160 const char *zCmd;
161 char *zSyscmd;
162 Blob extra;
163 int useCheckouts = 0;
@@ -176,35 +175,35 @@
176 }
177
178 if( g.argc<3 ){
179 usage("SUBCOMMAND ...");
180 }
181 n = strlen(g.argv[2]);
182 db_open_config(1, 0);
183 blob_zero(&extra);
184 zCmd = g.argv[2];
185 if( !login_is_nobody() ) blob_appendf(&extra, " -U %s", g.zLogin);
186 if( strncmp(zCmd, "ui", n)==0 || strncmp(zCmd, "server", n)==0 ){
 
187 g.argv[1] = g.argv[2];
188 g.argv[2] = "/";
189 cmd_webserver();
190 return;
191 }
192 if( strncmp(zCmd, "list", n)==0 || strncmp(zCmd,"ls",n)==0 ){
193 zCmd = "list";
194 useCheckouts = find_option("ckout","c",0)!=0;
195 }else if( strncmp(zCmd, "backup", n)==0 ){
196 char *zDest;
197 zCmd = "backup -R";
198 collect_argument(&extra, "overwrite",0);
199 if( g.argc!=4 ) usage("backup DIRECTORY");
200 zDest = g.argv[3];
201 if( file_isdir(zDest, ExtFILE)!=1 ){
202 fossil_fatal("argument to \"fossil all backup\" must be a directory");
203 }
204 blob_appendf(&extra, " %$", zDest);
205 }else if( strncmp(zCmd, "clean", n)==0 ){
206 zCmd = "clean --chdir";
207 collect_argument(&extra, "allckouts",0);
208 collect_argument_value(&extra, "case-sensitive");
209 collect_argument_value(&extra, "clean");
210 collect_argument(&extra, "dirsonly",0);
@@ -217,27 +216,27 @@
217 collect_argument(&extra, "no-prompt",0);
218 collect_argument(&extra, "temp",0);
219 collect_argument(&extra, "verbose","v");
220 collect_argument(&extra, "whatif",0);
221 useCheckouts = 1;
222 }else if( strncmp(zCmd, "config", n)==0 ){
223 zCmd = "config -R";
224 collect_argv(&extra, 3);
225 (void)find_option("legacy",0,0);
226 (void)find_option("overwrite",0,0);
227 verify_all_options();
228 if( g.argc!=5 || fossil_strcmp(g.argv[3],"pull")!=0 ){
229 usage("configure pull AREA ?OPTIONS?");
230 }
231 }else if( strncmp(zCmd, "dbstat", n)==0 ){
232 zCmd = "dbstat --omit-version-info -R";
233 showLabel = 1;
234 quiet = 1;
235 collect_argument(&extra, "brief", "b");
236 collect_argument(&extra, "db-check", 0);
237 collect_argument(&extra, "db-verify", 0);
238 }else if( strncmp(zCmd, "extras", n)==0 ){
239 if( showFile ){
240 zCmd = "extras --chdir";
241 }else{
242 zCmd = "extras --header --chdir";
243 }
@@ -247,32 +246,31 @@
247 collect_argument_value(&extra, "ignore");
248 collect_argument(&extra, "rel-paths",0);
249 useCheckouts = 1;
250 stopOnError = 0;
251 quiet = 1;
252 }else if( strncmp(zCmd, "git", n)==0 ){
253 if( g.argc<4 ){
254 usage("git (export|status)");
255 }else{
256 int n3 = (int)strlen(g.argv[3]);
257 if( strncmp(g.argv[3], "export", n3)==0 ){
258 zCmd = "git export --if-mirrored -R";
259 }else if( strncmp(g.argv[3], "status", n3)==0 ){
260 zCmd = "git status --by-all -q -R";
261 quiet = 1;
262 }else{
263 usage("git (export|status)");
264 }
265 }
266 }else if( strncmp(zCmd, "push", n)==0 ){
267 zCmd = "push -autourl -R";
268 collect_argument(&extra, "verbose","v");
269 }else if( strncmp(zCmd, "pull", n)==0 ){
270 zCmd = "pull -autourl -R";
271 collect_argument(&extra, "verbose","v");
272 collect_argument(&extra, "share-links",0);
273 }else if( strncmp(zCmd, "rebuild", n)==0 ){
274 zCmd = "rebuild";
275 collect_argument(&extra, "cluster",0);
276 collect_argument(&extra, "compress",0);
277 collect_argument(&extra, "compress-only",0);
278 collect_argument(&extra, "noverify",0);
@@ -283,40 +281,40 @@
283 collect_argument(&extra, "wal",0);
284 collect_argument(&extra, "stats",0);
285 collect_argument(&extra, "index",0);
286 collect_argument(&extra, "noindex",0);
287 collect_argument(&extra, "ifneeded", 0);
288 }else if( strncmp(zCmd, "setting", n)==0 ){
289 zCmd = "setting -R";
290 collect_argv(&extra, 3);
291 }else if( strncmp(zCmd, "unset", n)==0 ){
292 zCmd = "unset -R";
293 collect_argv(&extra, 3);
294 }else if( strncmp(zCmd, "fts-config", n)==0 ){
295 zCmd = "fts-config -R";
296 collect_argv(&extra, 3);
297 }else if( strncmp(zCmd, "sync", n)==0 ){
298 zCmd = "sync -autourl -R";
299 collect_argument(&extra, "share-links",0);
300 collect_argument(&extra, "verbose","v");
301 collect_argument(&extra, "unversioned","u");
302 }else if( strncmp(zCmd, "test-integrity", n)==0 ){
303 collect_argument(&extra, "db-only", "d");
304 collect_argument(&extra, "parse", 0);
305 collect_argument(&extra, "quick", "q");
306 zCmd = "test-integrity";
307 }else if( strncmp(zCmd, "test-orphans", n)==0 ){
308 zCmd = "test-orphans -R";
309 }else if( strncmp(zCmd, "test-missing", n)==0 ){
310 zCmd = "test-missing -q -R";
311 collect_argument(&extra, "notshunned",0);
312 }else if( strncmp(zCmd, "changes", n)==0 ){
313 zCmd = "changes --quiet --header --chdir";
314 useCheckouts = 1;
315 stopOnError = 0;
316 quiet = 1;
317 }else if( strncmp(zCmd, "ignore", n)==0 ){
318 int j;
319 Blob fn = BLOB_INITIALIZER;
320 Blob sql = BLOB_INITIALIZER;
321 useCheckouts = find_option("ckout","c",0)!=0;
322 verify_all_options();
@@ -338,11 +336,11 @@
338 db_end_transaction(0);
339 blob_reset(&sql);
340 blob_reset(&fn);
341 blob_reset(&extra);
342 return;
343 }else if( strncmp(zCmd, "add", n)==0 ){
344 int j;
345 Blob fn = BLOB_INITIALIZER;
346 Blob sql = BLOB_INITIALIZER;
347 verify_all_options();
348 db_begin_transaction();
@@ -375,15 +373,15 @@
375 db_end_transaction(0);
376 blob_reset(&sql);
377 blob_reset(&fn);
378 blob_reset(&extra);
379 return;
380 }else if( strncmp(zCmd, "info", n)==0 ){
381 zCmd = "info";
382 showLabel = 1;
383 quiet = 1;
384 }else if( strncmp(zCmd, "cache", n)==0 ){
385 zCmd = "cache -R";
386 showLabel = 1;
387 collect_argv(&extra, 3);
388 }else{
389 fossil_fatal("\"all\" subcommand should be one of: "
390
--- src/allrepo.c
+++ src/allrepo.c
@@ -91,11 +91,11 @@
91 ** line options supported by the extra command itself, if any
92 ** are present, are passed along verbatim.
93 **
94 ** fts-config Run the "fts-config" command on all repositories.
95 **
96 ** git CMD Do the "git export" or "git status" command (whichever
97 ** is specified by CMD) on all repositories for which
98 ** a Git mirror has been previously established.
99 **
100 ** info Run the "info" command on all repositories.
101 **
@@ -153,11 +153,10 @@
153 ** --dry-run If given, display instead of run actions.
154 ** --showfile Show the repository or checkout being operated upon.
155 ** --stop-on-error Halt immediately if any subprocess fails.
156 */
157 void all_cmd(void){
 
158 Stmt q;
159 const char *zCmd;
160 char *zSyscmd;
161 Blob extra;
162 int useCheckouts = 0;
@@ -176,35 +175,35 @@
175 }
176
177 if( g.argc<3 ){
178 usage("SUBCOMMAND ...");
179 }
 
180 db_open_config(1, 0);
181 blob_zero(&extra);
182 zCmd = g.argv[2];
183 if( !login_is_nobody() ) blob_appendf(&extra, " -U %s", g.zLogin);
184 if( fossil_strcmp(zCmd, "ui")==0
185 || fossil_strcmp(zCmd, "server")==0 ){
186 g.argv[1] = g.argv[2];
187 g.argv[2] = "/";
188 cmd_webserver();
189 return;
190 }
191 if( fossil_strcmp(zCmd, "list")==0 || fossil_strcmp(zCmd,"ls")==0 ){
192 zCmd = "list";
193 useCheckouts = find_option("ckout","c",0)!=0;
194 }else if( fossil_strcmp(zCmd, "backup")==0 ){
195 char *zDest;
196 zCmd = "backup -R";
197 collect_argument(&extra, "overwrite",0);
198 if( g.argc!=4 ) usage("backup DIRECTORY");
199 zDest = g.argv[3];
200 if( file_isdir(zDest, ExtFILE)!=1 ){
201 fossil_fatal("argument to \"fossil all backup\" must be a directory");
202 }
203 blob_appendf(&extra, " %$", zDest);
204 }else if( fossil_strcmp(zCmd, "clean")==0 ){
205 zCmd = "clean --chdir";
206 collect_argument(&extra, "allckouts",0);
207 collect_argument_value(&extra, "case-sensitive");
208 collect_argument_value(&extra, "clean");
209 collect_argument(&extra, "dirsonly",0);
@@ -217,27 +216,27 @@
216 collect_argument(&extra, "no-prompt",0);
217 collect_argument(&extra, "temp",0);
218 collect_argument(&extra, "verbose","v");
219 collect_argument(&extra, "whatif",0);
220 useCheckouts = 1;
221 }else if( fossil_strcmp(zCmd, "config")==0 ){
222 zCmd = "config -R";
223 collect_argv(&extra, 3);
224 (void)find_option("legacy",0,0);
225 (void)find_option("overwrite",0,0);
226 verify_all_options();
227 if( g.argc!=5 || fossil_strcmp(g.argv[3],"pull")!=0 ){
228 usage("configure pull AREA ?OPTIONS?");
229 }
230 }else if( fossil_strcmp(zCmd, "dbstat")==0 ){
231 zCmd = "dbstat --omit-version-info -R";
232 showLabel = 1;
233 quiet = 1;
234 collect_argument(&extra, "brief", "b");
235 collect_argument(&extra, "db-check", 0);
236 collect_argument(&extra, "db-verify", 0);
237 }else if( fossil_strcmp(zCmd, "extras")==0 ){
238 if( showFile ){
239 zCmd = "extras --chdir";
240 }else{
241 zCmd = "extras --header --chdir";
242 }
@@ -247,32 +246,31 @@
246 collect_argument_value(&extra, "ignore");
247 collect_argument(&extra, "rel-paths",0);
248 useCheckouts = 1;
249 stopOnError = 0;
250 quiet = 1;
251 }else if( fossil_strcmp(zCmd, "git")==0 ){
252 if( g.argc<4 ){
253 usage("git (export|status)");
254 }else{
255 if( fossil_strcmp(g.argv[3], "export")==0 ){
 
256 zCmd = "git export --if-mirrored -R";
257 }else if( fossil_strcmp(g.argv[3], "status")==0 ){
258 zCmd = "git status --by-all -q -R";
259 quiet = 1;
260 }else{
261 usage("git (export|status)");
262 }
263 }
264 }else if( fossil_strcmp(zCmd, "push")==0 ){
265 zCmd = "push -autourl -R";
266 collect_argument(&extra, "verbose","v");
267 }else if( fossil_strcmp(zCmd, "pull")==0 ){
268 zCmd = "pull -autourl -R";
269 collect_argument(&extra, "verbose","v");
270 collect_argument(&extra, "share-links",0);
271 }else if( fossil_strcmp(zCmd, "rebuild")==0 ){
272 zCmd = "rebuild";
273 collect_argument(&extra, "cluster",0);
274 collect_argument(&extra, "compress",0);
275 collect_argument(&extra, "compress-only",0);
276 collect_argument(&extra, "noverify",0);
@@ -283,40 +281,40 @@
281 collect_argument(&extra, "wal",0);
282 collect_argument(&extra, "stats",0);
283 collect_argument(&extra, "index",0);
284 collect_argument(&extra, "noindex",0);
285 collect_argument(&extra, "ifneeded", 0);
286 }else if( fossil_strcmp(zCmd, "setting")==0 ){
287 zCmd = "setting -R";
288 collect_argv(&extra, 3);
289 }else if( fossil_strcmp(zCmd, "unset")==0 ){
290 zCmd = "unset -R";
291 collect_argv(&extra, 3);
292 }else if( fossil_strcmp(zCmd, "fts-config")==0 ){
293 zCmd = "fts-config -R";
294 collect_argv(&extra, 3);
295 }else if( fossil_strcmp(zCmd, "sync")==0 ){
296 zCmd = "sync -autourl -R";
297 collect_argument(&extra, "share-links",0);
298 collect_argument(&extra, "verbose","v");
299 collect_argument(&extra, "unversioned","u");
300 }else if( fossil_strcmp(zCmd, "test-integrity")==0 ){
301 collect_argument(&extra, "db-only", "d");
302 collect_argument(&extra, "parse", 0);
303 collect_argument(&extra, "quick", "q");
304 zCmd = "test-integrity";
305 }else if( fossil_strcmp(zCmd, "test-orphans")==0 ){
306 zCmd = "test-orphans -R";
307 }else if( fossil_strcmp(zCmd, "test-missing")==0 ){
308 zCmd = "test-missing -q -R";
309 collect_argument(&extra, "notshunned",0);
310 }else if( fossil_strcmp(zCmd, "changes")==0 ){
311 zCmd = "changes --quiet --header --chdir";
312 useCheckouts = 1;
313 stopOnError = 0;
314 quiet = 1;
315 }else if( fossil_strcmp(zCmd, "ignore")==0 ){
316 int j;
317 Blob fn = BLOB_INITIALIZER;
318 Blob sql = BLOB_INITIALIZER;
319 useCheckouts = find_option("ckout","c",0)!=0;
320 verify_all_options();
@@ -338,11 +336,11 @@
336 db_end_transaction(0);
337 blob_reset(&sql);
338 blob_reset(&fn);
339 blob_reset(&extra);
340 return;
341 }else if( fossil_strcmp(zCmd, "add")==0 ){
342 int j;
343 Blob fn = BLOB_INITIALIZER;
344 Blob sql = BLOB_INITIALIZER;
345 verify_all_options();
346 db_begin_transaction();
@@ -375,15 +373,15 @@
373 db_end_transaction(0);
374 blob_reset(&sql);
375 blob_reset(&fn);
376 blob_reset(&extra);
377 return;
378 }else if( fossil_strcmp(zCmd, "info")==0 ){
379 zCmd = "info";
380 showLabel = 1;
381 quiet = 1;
382 }else if( fossil_strcmp(zCmd, "cache")==0 ){
383 zCmd = "cache -R";
384 showLabel = 1;
385 collect_argv(&extra, 3);
386 }else{
387 fossil_fatal("\"all\" subcommand should be one of: "
388
+12 -2
--- src/backlink.c
+++ src/backlink.c
@@ -34,10 +34,11 @@
3434
*/
3535
void render_backlink_graph(const char *zUuid, const char *zLabel){
3636
Blob sql;
3737
Stmt q;
3838
char *zGlob;
39
+ int needEndPanel = 0;
3940
zGlob = mprintf("%.5s*", zUuid);
4041
db_multi_exec(
4142
"CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n"
4243
"DELETE FROM ok;\n"
4344
"INSERT OR IGNORE INTO ok(rid)\n"
@@ -49,19 +50,28 @@
4950
" WHERE target GLOB %Q"
5051
" AND %Q GLOB (target || '*');",
5152
zGlob, zUuid
5253
);
5354
if( !db_exists("SELECT 1 FROM ok") ) return;
54
- if( zLabel ) cgi_printf("%s", zLabel);
55
+ if( zLabel ){
56
+ cgi_printf("%s", zLabel);
57
+ if( strstr(zLabel, "accordion")!=0 ){
58
+ cgi_printf("<div class=\"accordion_panel\">\n");
59
+ needEndPanel = 1;
60
+ }
61
+ }
5562
blob_zero(&sql);
5663
blob_append(&sql, timeline_query_for_www(), -1);
5764
blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC");
5865
db_prepare(&q, "%s", blob_sql_text(&sql));
5966
www_print_timeline(&q,
6067
TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS,
6168
0, 0, 0, 0, 0, 0);
6269
db_finalize(&q);
70
+ if( needEndPanel ){
71
+ cgi_printf("</div>\n");
72
+ }
6373
}
6474
6575
/*
6676
** WEBPAGE: test-backlink-timeline
6777
**
@@ -366,11 +376,11 @@
366376
if( g.argc!=5 ){
367377
usage("SRCTYPE SRCID INPUTFILE");
368378
}
369379
srctype = atoi(g.argv[2]);
370380
if( srctype<0 || srctype>2 ){
371
- fossil_fatal("SRCTYPE should be a integer 0, 1, or 2");
381
+ fossil_fatal("SRCTYPE should be an integer 0, 1, or 2");
372382
}
373383
srcid = atoi(g.argv[3]);
374384
blob_read_from_file(&in, g.argv[4], ExtFILE);
375385
sqlite3_open(":memory:",&g.db);
376386
if( zMTime==0 ) zMTime = "now";
377387
--- src/backlink.c
+++ src/backlink.c
@@ -34,10 +34,11 @@
34 */
35 void render_backlink_graph(const char *zUuid, const char *zLabel){
36 Blob sql;
37 Stmt q;
38 char *zGlob;
 
39 zGlob = mprintf("%.5s*", zUuid);
40 db_multi_exec(
41 "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n"
42 "DELETE FROM ok;\n"
43 "INSERT OR IGNORE INTO ok(rid)\n"
@@ -49,19 +50,28 @@
49 " WHERE target GLOB %Q"
50 " AND %Q GLOB (target || '*');",
51 zGlob, zUuid
52 );
53 if( !db_exists("SELECT 1 FROM ok") ) return;
54 if( zLabel ) cgi_printf("%s", zLabel);
 
 
 
 
 
 
55 blob_zero(&sql);
56 blob_append(&sql, timeline_query_for_www(), -1);
57 blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC");
58 db_prepare(&q, "%s", blob_sql_text(&sql));
59 www_print_timeline(&q,
60 TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS,
61 0, 0, 0, 0, 0, 0);
62 db_finalize(&q);
 
 
 
63 }
64
65 /*
66 ** WEBPAGE: test-backlink-timeline
67 **
@@ -366,11 +376,11 @@
366 if( g.argc!=5 ){
367 usage("SRCTYPE SRCID INPUTFILE");
368 }
369 srctype = atoi(g.argv[2]);
370 if( srctype<0 || srctype>2 ){
371 fossil_fatal("SRCTYPE should be a integer 0, 1, or 2");
372 }
373 srcid = atoi(g.argv[3]);
374 blob_read_from_file(&in, g.argv[4], ExtFILE);
375 sqlite3_open(":memory:",&g.db);
376 if( zMTime==0 ) zMTime = "now";
377
--- src/backlink.c
+++ src/backlink.c
@@ -34,10 +34,11 @@
34 */
35 void render_backlink_graph(const char *zUuid, const char *zLabel){
36 Blob sql;
37 Stmt q;
38 char *zGlob;
39 int needEndPanel = 0;
40 zGlob = mprintf("%.5s*", zUuid);
41 db_multi_exec(
42 "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n"
43 "DELETE FROM ok;\n"
44 "INSERT OR IGNORE INTO ok(rid)\n"
@@ -49,19 +50,28 @@
50 " WHERE target GLOB %Q"
51 " AND %Q GLOB (target || '*');",
52 zGlob, zUuid
53 );
54 if( !db_exists("SELECT 1 FROM ok") ) return;
55 if( zLabel ){
56 cgi_printf("%s", zLabel);
57 if( strstr(zLabel, "accordion")!=0 ){
58 cgi_printf("<div class=\"accordion_panel\">\n");
59 needEndPanel = 1;
60 }
61 }
62 blob_zero(&sql);
63 blob_append(&sql, timeline_query_for_www(), -1);
64 blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC");
65 db_prepare(&q, "%s", blob_sql_text(&sql));
66 www_print_timeline(&q,
67 TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS,
68 0, 0, 0, 0, 0, 0);
69 db_finalize(&q);
70 if( needEndPanel ){
71 cgi_printf("</div>\n");
72 }
73 }
74
75 /*
76 ** WEBPAGE: test-backlink-timeline
77 **
@@ -366,11 +376,11 @@
376 if( g.argc!=5 ){
377 usage("SRCTYPE SRCID INPUTFILE");
378 }
379 srctype = atoi(g.argv[2]);
380 if( srctype<0 || srctype>2 ){
381 fossil_fatal("SRCTYPE should be an integer 0, 1, or 2");
382 }
383 srcid = atoi(g.argv[3]);
384 blob_read_from_file(&in, g.argv[4], ExtFILE);
385 sqlite3_open(":memory:",&g.db);
386 if( zMTime==0 ) zMTime = "now";
387
+12 -2
--- src/backlink.c
+++ src/backlink.c
@@ -34,10 +34,11 @@
3434
*/
3535
void render_backlink_graph(const char *zUuid, const char *zLabel){
3636
Blob sql;
3737
Stmt q;
3838
char *zGlob;
39
+ int needEndPanel = 0;
3940
zGlob = mprintf("%.5s*", zUuid);
4041
db_multi_exec(
4142
"CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n"
4243
"DELETE FROM ok;\n"
4344
"INSERT OR IGNORE INTO ok(rid)\n"
@@ -49,19 +50,28 @@
4950
" WHERE target GLOB %Q"
5051
" AND %Q GLOB (target || '*');",
5152
zGlob, zUuid
5253
);
5354
if( !db_exists("SELECT 1 FROM ok") ) return;
54
- if( zLabel ) cgi_printf("%s", zLabel);
55
+ if( zLabel ){
56
+ cgi_printf("%s", zLabel);
57
+ if( strstr(zLabel, "accordion")!=0 ){
58
+ cgi_printf("<div class=\"accordion_panel\">\n");
59
+ needEndPanel = 1;
60
+ }
61
+ }
5562
blob_zero(&sql);
5663
blob_append(&sql, timeline_query_for_www(), -1);
5764
blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC");
5865
db_prepare(&q, "%s", blob_sql_text(&sql));
5966
www_print_timeline(&q,
6067
TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS,
6168
0, 0, 0, 0, 0, 0);
6269
db_finalize(&q);
70
+ if( needEndPanel ){
71
+ cgi_printf("</div>\n");
72
+ }
6373
}
6474
6575
/*
6676
** WEBPAGE: test-backlink-timeline
6777
**
@@ -366,11 +376,11 @@
366376
if( g.argc!=5 ){
367377
usage("SRCTYPE SRCID INPUTFILE");
368378
}
369379
srctype = atoi(g.argv[2]);
370380
if( srctype<0 || srctype>2 ){
371
- fossil_fatal("SRCTYPE should be a integer 0, 1, or 2");
381
+ fossil_fatal("SRCTYPE should be an integer 0, 1, or 2");
372382
}
373383
srcid = atoi(g.argv[3]);
374384
blob_read_from_file(&in, g.argv[4], ExtFILE);
375385
sqlite3_open(":memory:",&g.db);
376386
if( zMTime==0 ) zMTime = "now";
377387
--- src/backlink.c
+++ src/backlink.c
@@ -34,10 +34,11 @@
34 */
35 void render_backlink_graph(const char *zUuid, const char *zLabel){
36 Blob sql;
37 Stmt q;
38 char *zGlob;
 
39 zGlob = mprintf("%.5s*", zUuid);
40 db_multi_exec(
41 "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n"
42 "DELETE FROM ok;\n"
43 "INSERT OR IGNORE INTO ok(rid)\n"
@@ -49,19 +50,28 @@
49 " WHERE target GLOB %Q"
50 " AND %Q GLOB (target || '*');",
51 zGlob, zUuid
52 );
53 if( !db_exists("SELECT 1 FROM ok") ) return;
54 if( zLabel ) cgi_printf("%s", zLabel);
 
 
 
 
 
 
55 blob_zero(&sql);
56 blob_append(&sql, timeline_query_for_www(), -1);
57 blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC");
58 db_prepare(&q, "%s", blob_sql_text(&sql));
59 www_print_timeline(&q,
60 TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS,
61 0, 0, 0, 0, 0, 0);
62 db_finalize(&q);
 
 
 
63 }
64
65 /*
66 ** WEBPAGE: test-backlink-timeline
67 **
@@ -366,11 +376,11 @@
366 if( g.argc!=5 ){
367 usage("SRCTYPE SRCID INPUTFILE");
368 }
369 srctype = atoi(g.argv[2]);
370 if( srctype<0 || srctype>2 ){
371 fossil_fatal("SRCTYPE should be a integer 0, 1, or 2");
372 }
373 srcid = atoi(g.argv[3]);
374 blob_read_from_file(&in, g.argv[4], ExtFILE);
375 sqlite3_open(":memory:",&g.db);
376 if( zMTime==0 ) zMTime = "now";
377
--- src/backlink.c
+++ src/backlink.c
@@ -34,10 +34,11 @@
34 */
35 void render_backlink_graph(const char *zUuid, const char *zLabel){
36 Blob sql;
37 Stmt q;
38 char *zGlob;
39 int needEndPanel = 0;
40 zGlob = mprintf("%.5s*", zUuid);
41 db_multi_exec(
42 "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n"
43 "DELETE FROM ok;\n"
44 "INSERT OR IGNORE INTO ok(rid)\n"
@@ -49,19 +50,28 @@
50 " WHERE target GLOB %Q"
51 " AND %Q GLOB (target || '*');",
52 zGlob, zUuid
53 );
54 if( !db_exists("SELECT 1 FROM ok") ) return;
55 if( zLabel ){
56 cgi_printf("%s", zLabel);
57 if( strstr(zLabel, "accordion")!=0 ){
58 cgi_printf("<div class=\"accordion_panel\">\n");
59 needEndPanel = 1;
60 }
61 }
62 blob_zero(&sql);
63 blob_append(&sql, timeline_query_for_www(), -1);
64 blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC");
65 db_prepare(&q, "%s", blob_sql_text(&sql));
66 www_print_timeline(&q,
67 TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS,
68 0, 0, 0, 0, 0, 0);
69 db_finalize(&q);
70 if( needEndPanel ){
71 cgi_printf("</div>\n");
72 }
73 }
74
75 /*
76 ** WEBPAGE: test-backlink-timeline
77 **
@@ -366,11 +376,11 @@
376 if( g.argc!=5 ){
377 usage("SRCTYPE SRCID INPUTFILE");
378 }
379 srctype = atoi(g.argv[2]);
380 if( srctype<0 || srctype>2 ){
381 fossil_fatal("SRCTYPE should be an integer 0, 1, or 2");
382 }
383 srcid = atoi(g.argv[3]);
384 blob_read_from_file(&in, g.argv[4], ExtFILE);
385 sqlite3_open(":memory:",&g.db);
386 if( zMTime==0 ) zMTime = "now";
387
--- src/backoffice.c
+++ src/backoffice.c
@@ -472,11 +472,11 @@
472472
** without doing any work.
473473
**
474474
** If no backoffice processes are running at all, this routine becomes
475475
** the main backoffice.
476476
**
477
-** If a primary backoffice is running, but a on-deck backoffice is
477
+** If a primary backoffice is running, but an on-deck backoffice is
478478
** needed, this routine becomes that on-deck backoffice.
479479
*/
480480
static void backoffice_thread(void){
481481
Lease x;
482482
sqlite3_uint64 tmNow;
483483
--- src/backoffice.c
+++ src/backoffice.c
@@ -472,11 +472,11 @@
472 ** without doing any work.
473 **
474 ** If no backoffice processes are running at all, this routine becomes
475 ** the main backoffice.
476 **
477 ** If a primary backoffice is running, but a on-deck backoffice is
478 ** needed, this routine becomes that on-deck backoffice.
479 */
480 static void backoffice_thread(void){
481 Lease x;
482 sqlite3_uint64 tmNow;
483
--- src/backoffice.c
+++ src/backoffice.c
@@ -472,11 +472,11 @@
472 ** without doing any work.
473 **
474 ** If no backoffice processes are running at all, this routine becomes
475 ** the main backoffice.
476 **
477 ** If a primary backoffice is running, but an on-deck backoffice is
478 ** needed, this routine becomes that on-deck backoffice.
479 */
480 static void backoffice_thread(void){
481 Lease x;
482 sqlite3_uint64 tmNow;
483
+2 -1
--- src/bisect.c
+++ src/bisect.c
@@ -81,11 +81,12 @@
8181
"skip\"" },
8282
{ "direct-only", "on", "Follow only primary parent-child links, not "
8383
"merges\n" },
8484
{ "display", "chart", "Command to run after \"next\". \"chart\", "
8585
"\"log\", \"status\", or \"none\"" },
86
- { "linear", "off", "Do a linear scan rather than a true bisect" },
86
+ { "linear", "off", "Do a linear scan rather than a true bisect, "
87
+ "stopping at the first \"bad\" result"},
8788
};
8889
8990
/*
9091
** Return the value of a boolean bisect option.
9192
*/
9293
--- src/bisect.c
+++ src/bisect.c
@@ -81,11 +81,12 @@
81 "skip\"" },
82 { "direct-only", "on", "Follow only primary parent-child links, not "
83 "merges\n" },
84 { "display", "chart", "Command to run after \"next\". \"chart\", "
85 "\"log\", \"status\", or \"none\"" },
86 { "linear", "off", "Do a linear scan rather than a true bisect" },
 
87 };
88
89 /*
90 ** Return the value of a boolean bisect option.
91 */
92
--- src/bisect.c
+++ src/bisect.c
@@ -81,11 +81,12 @@
81 "skip\"" },
82 { "direct-only", "on", "Follow only primary parent-child links, not "
83 "merges\n" },
84 { "display", "chart", "Command to run after \"next\". \"chart\", "
85 "\"log\", \"status\", or \"none\"" },
86 { "linear", "off", "Do a linear scan rather than a true bisect, "
87 "stopping at the first \"bad\" result"},
88 };
89
90 /*
91 ** Return the value of a boolean bisect option.
92 */
93
+55 -10
--- src/branch.c
+++ src/branch.c
@@ -289,31 +289,51 @@
289289
** Prepare a query that will list branches.
290290
**
291291
** If (which<0) then the query pulls only closed branches. If
292292
** (which>0) then the query pulls all (closed and opened)
293293
** branches. Else the query pulls currently-opened branches.
294
+**
295
+** If the BRL_ORDERBY_MTIME flag is set and nLimitMRU ("Limit Most Recently Used
296
+** style") is a non-zero number, the result is limited to nLimitMRU entries, and
297
+** the BRL_REVERSE flag is applied in an outer query after processing the limit,
298
+** so that it's possible to generate short lists with the most recently modified
299
+** branches sorted chronologically in either direction, as does the "branch lsh"
300
+** command.
301
+** For other cases, the outer query is also generated, but works as a no-op. The
302
+** code to build the outer query is marked with *//* OUTER QUERY *//* comments.
294303
*/
295
-void branch_prepare_list_query(Stmt *pQuery, int brFlags, const char *zBrNameGlob){
304
+void branch_prepare_list_query(
305
+ Stmt *pQuery,
306
+ int brFlags,
307
+ const char *zBrNameGlob,
308
+ int nLimitMRU
309
+){
296310
Blob sql;
297311
blob_init(&sql, 0, 0);
298312
brlist_create_temp_table();
313
+ /* Ignore nLimitMRU if no chronological sort requested. */
314
+ if( (brFlags & BRL_ORDERBY_MTIME)==0 ) nLimitMRU = 0;
315
+ /* Undocumented: invert negative values for nLimitMRU, so that command-line
316
+ ** arguments similar to `head -5' with "option numbers" are possible. */
317
+ if( nLimitMRU<0 ) nLimitMRU = -nLimitMRU;
318
+ blob_append_sql(&sql,"SELECT name, isprivate FROM ("); /* OUTER QUERY */
299319
switch( brFlags & BRL_OPEN_CLOSED_MASK ){
300320
case BRL_CLOSED_ONLY: {
301321
blob_append_sql(&sql,
302
- "SELECT name, isprivate FROM tmp_brlist WHERE isclosed"
322
+ "SELECT name, isprivate, mtime FROM tmp_brlist WHERE isclosed"
303323
);
304324
break;
305325
}
306326
case BRL_BOTH: {
307327
blob_append_sql(&sql,
308
- "SELECT name, isprivate FROM tmp_brlist WHERE 1"
328
+ "SELECT name, isprivate, mtime FROM tmp_brlist WHERE 1"
309329
);
310330
break;
311331
}
312332
case BRL_OPEN_ONLY: {
313333
blob_append_sql(&sql,
314
- "SELECT name, isprivate FROM tmp_brlist WHERE NOT isclosed"
334
+ "SELECT name, isprivate, mtime FROM tmp_brlist WHERE NOT isclosed"
315335
);
316336
break;
317337
}
318338
}
319339
if( brFlags & BRL_PRIVATE ) blob_append_sql(&sql, " AND isprivate");
@@ -321,13 +341,20 @@
321341
if( brFlags & BRL_ORDERBY_MTIME ){
322342
blob_append_sql(&sql, " ORDER BY -mtime");
323343
}else{
324344
blob_append_sql(&sql, " ORDER BY name COLLATE nocase");
325345
}
326
- if( brFlags & BRL_REVERSE ){
346
+ if( brFlags & BRL_REVERSE && !nLimitMRU ){
327347
blob_append_sql(&sql," DESC");
328348
}
349
+ if( nLimitMRU ){
350
+ blob_append_sql(&sql," LIMIT %d",nLimitMRU);
351
+ }
352
+ blob_append_sql(&sql,")"); /* OUTER QUERY */
353
+ if( brFlags & BRL_REVERSE && nLimitMRU ){
354
+ blob_append_sql(&sql," ORDER BY mtime"); /* OUTER QUERY */
355
+ }
329356
db_prepare_blob(pQuery, &sql);
330357
blob_reset(&sql);
331358
}
332359
333360
/*
@@ -585,10 +612,11 @@
585612
** > fossil branch info BRANCH-NAME
586613
**
587614
** Print information about a branch
588615
**
589616
** > fossil branch list|ls ?OPTIONS? ?GLOB?
617
+** > fossil branch lsh ?OPTIONS? ?LIMIT?
590618
**
591619
** List all branches. Options:
592620
** -a|--all List all branches. Default show only open branches
593621
** -c|--closed List closed branches.
594622
** -p List only private branches.
@@ -597,10 +625,15 @@
597625
**
598626
** The current branch is marked with an asterisk. Private branches are
599627
** marked with a hash sign.
600628
**
601629
** If GLOB is given, show only branches matching the pattern.
630
+**
631
+** The "lsh" variant of this subcommand shows recently changed branches,
632
+** and accepts an optional LIMIT argument (defaults to 5) to cap output,
633
+** but no GLOB argument. All other options are supported, with -t being
634
+** an implied no-op.
602635
**
603636
** > fossil branch new BRANCH-NAME BASIS ?OPTIONS?
604637
**
605638
** Create a new branch BRANCH-NAME off of check-in BASIS.
606639
** Supported options for this subcommand include:
@@ -651,29 +684,41 @@
651684
"SELECT datetime(mtime,toLocal()) FROM event"
652685
" WHERE objid=%d", rid);
653686
fossil_print("%s: open as of %s on %.16s\n", zBrName, zDate, zUuid);
654687
}
655688
}
656
- }else if( (strncmp(zCmd,"list",n)==0)||(strncmp(zCmd, "ls", n)==0) ){
689
+ }else if( strncmp(zCmd,"list",n)==0 ||
690
+ strncmp(zCmd, "ls", n)==0 ||
691
+ strcmp(zCmd, "lsh")==0 ){
657692
Stmt q;
658693
int vid;
659694
char *zCurrent = 0;
660695
const char *zBrNameGlob = 0;
696
+ int nLimit = 0;
661697
int brFlags = BRL_OPEN_ONLY;
662698
if( find_option("all","a",0)!=0 ) brFlags = BRL_BOTH;
663699
if( find_option("closed","c",0)!=0 ) brFlags = BRL_CLOSED_ONLY;
664700
if( find_option("t",0,0)!=0 ) brFlags |= BRL_ORDERBY_MTIME;
665701
if( find_option("r",0,0)!=0 ) brFlags |= BRL_REVERSE;
666702
if( find_option("p",0,0)!=0 ) brFlags |= BRL_PRIVATE;
667
- if( g.argc >= 4 ) zBrNameGlob = g.argv[3];
703
+
704
+ if( strcmp(zCmd, "lsh")==0 ){
705
+ nLimit = 5;
706
+ if( g.argc>4 || (g.argc==4 && (nLimit = atoi(g.argv[3]))==0) ){
707
+ fossil_fatal("the lsh subcommand allows one optional numeric argument");
708
+ }
709
+ brFlags |= BRL_ORDERBY_MTIME;
710
+ }else{
711
+ if( g.argc >= 4 ) zBrNameGlob = g.argv[3];
712
+ }
668713
669714
if( g.localOpen ){
670715
vid = db_lget_int("checkout", 0);
671716
zCurrent = db_text(0, "SELECT value FROM tagxref"
672717
" WHERE rid=%d AND tagid=%d", vid, TAG_BRANCH);
673718
}
674
- branch_prepare_list_query(&q, brFlags, zBrNameGlob);
719
+ branch_prepare_list_query(&q, brFlags, zBrNameGlob, nLimit);
675720
while( db_step(&q)==SQLITE_ROW ){
676721
const char *zBr = db_column_text(&q, 0);
677722
int isPriv = zCurrent!=0 && db_column_int(&q, 1)==1;
678723
int isCur = zCurrent!=0 && fossil_strcmp(zCurrent,zBr)==0;
679724
fossil_print("%s%s%s\n",
@@ -703,11 +748,11 @@
703748
usage("branch unhide branch-name(s)...");
704749
}
705750
branch_cmd_hide(3,0);
706751
}else{
707752
fossil_fatal("branch subcommand should be one of: "
708
- "close current hide info list ls new reopen unhide");
753
+ "close current hide info list ls lsh new reopen unhide");
709754
}
710755
}
711756
712757
/*
713758
** This is the new-style branch-list page that shows the branch names
@@ -862,11 +907,11 @@
862907
@ reopened).</li>
863908
@ </ol>
864909
style_sidebox_end();
865910
#endif
866911
867
- branch_prepare_list_query(&q, brFlags, 0);
912
+ branch_prepare_list_query(&q, brFlags, 0, 0);
868913
cnt = 0;
869914
while( db_step(&q)==SQLITE_ROW ){
870915
const char *zBr = db_column_text(&q, 0);
871916
if( cnt==0 ){
872917
if( colorTest ){
873918
--- src/branch.c
+++ src/branch.c
@@ -289,31 +289,51 @@
289 ** Prepare a query that will list branches.
290 **
291 ** If (which<0) then the query pulls only closed branches. If
292 ** (which>0) then the query pulls all (closed and opened)
293 ** branches. Else the query pulls currently-opened branches.
 
 
 
 
 
 
 
 
 
294 */
295 void branch_prepare_list_query(Stmt *pQuery, int brFlags, const char *zBrNameGlob){
 
 
 
 
 
296 Blob sql;
297 blob_init(&sql, 0, 0);
298 brlist_create_temp_table();
 
 
 
 
 
 
299 switch( brFlags & BRL_OPEN_CLOSED_MASK ){
300 case BRL_CLOSED_ONLY: {
301 blob_append_sql(&sql,
302 "SELECT name, isprivate FROM tmp_brlist WHERE isclosed"
303 );
304 break;
305 }
306 case BRL_BOTH: {
307 blob_append_sql(&sql,
308 "SELECT name, isprivate FROM tmp_brlist WHERE 1"
309 );
310 break;
311 }
312 case BRL_OPEN_ONLY: {
313 blob_append_sql(&sql,
314 "SELECT name, isprivate FROM tmp_brlist WHERE NOT isclosed"
315 );
316 break;
317 }
318 }
319 if( brFlags & BRL_PRIVATE ) blob_append_sql(&sql, " AND isprivate");
@@ -321,13 +341,20 @@
321 if( brFlags & BRL_ORDERBY_MTIME ){
322 blob_append_sql(&sql, " ORDER BY -mtime");
323 }else{
324 blob_append_sql(&sql, " ORDER BY name COLLATE nocase");
325 }
326 if( brFlags & BRL_REVERSE ){
327 blob_append_sql(&sql," DESC");
328 }
 
 
 
 
 
 
 
329 db_prepare_blob(pQuery, &sql);
330 blob_reset(&sql);
331 }
332
333 /*
@@ -585,10 +612,11 @@
585 ** > fossil branch info BRANCH-NAME
586 **
587 ** Print information about a branch
588 **
589 ** > fossil branch list|ls ?OPTIONS? ?GLOB?
 
590 **
591 ** List all branches. Options:
592 ** -a|--all List all branches. Default show only open branches
593 ** -c|--closed List closed branches.
594 ** -p List only private branches.
@@ -597,10 +625,15 @@
597 **
598 ** The current branch is marked with an asterisk. Private branches are
599 ** marked with a hash sign.
600 **
601 ** If GLOB is given, show only branches matching the pattern.
 
 
 
 
 
602 **
603 ** > fossil branch new BRANCH-NAME BASIS ?OPTIONS?
604 **
605 ** Create a new branch BRANCH-NAME off of check-in BASIS.
606 ** Supported options for this subcommand include:
@@ -651,29 +684,41 @@
651 "SELECT datetime(mtime,toLocal()) FROM event"
652 " WHERE objid=%d", rid);
653 fossil_print("%s: open as of %s on %.16s\n", zBrName, zDate, zUuid);
654 }
655 }
656 }else if( (strncmp(zCmd,"list",n)==0)||(strncmp(zCmd, "ls", n)==0) ){
 
 
657 Stmt q;
658 int vid;
659 char *zCurrent = 0;
660 const char *zBrNameGlob = 0;
 
661 int brFlags = BRL_OPEN_ONLY;
662 if( find_option("all","a",0)!=0 ) brFlags = BRL_BOTH;
663 if( find_option("closed","c",0)!=0 ) brFlags = BRL_CLOSED_ONLY;
664 if( find_option("t",0,0)!=0 ) brFlags |= BRL_ORDERBY_MTIME;
665 if( find_option("r",0,0)!=0 ) brFlags |= BRL_REVERSE;
666 if( find_option("p",0,0)!=0 ) brFlags |= BRL_PRIVATE;
667 if( g.argc >= 4 ) zBrNameGlob = g.argv[3];
 
 
 
 
 
 
 
 
 
668
669 if( g.localOpen ){
670 vid = db_lget_int("checkout", 0);
671 zCurrent = db_text(0, "SELECT value FROM tagxref"
672 " WHERE rid=%d AND tagid=%d", vid, TAG_BRANCH);
673 }
674 branch_prepare_list_query(&q, brFlags, zBrNameGlob);
675 while( db_step(&q)==SQLITE_ROW ){
676 const char *zBr = db_column_text(&q, 0);
677 int isPriv = zCurrent!=0 && db_column_int(&q, 1)==1;
678 int isCur = zCurrent!=0 && fossil_strcmp(zCurrent,zBr)==0;
679 fossil_print("%s%s%s\n",
@@ -703,11 +748,11 @@
703 usage("branch unhide branch-name(s)...");
704 }
705 branch_cmd_hide(3,0);
706 }else{
707 fossil_fatal("branch subcommand should be one of: "
708 "close current hide info list ls new reopen unhide");
709 }
710 }
711
712 /*
713 ** This is the new-style branch-list page that shows the branch names
@@ -862,11 +907,11 @@
862 @ reopened).</li>
863 @ </ol>
864 style_sidebox_end();
865 #endif
866
867 branch_prepare_list_query(&q, brFlags, 0);
868 cnt = 0;
869 while( db_step(&q)==SQLITE_ROW ){
870 const char *zBr = db_column_text(&q, 0);
871 if( cnt==0 ){
872 if( colorTest ){
873
--- src/branch.c
+++ src/branch.c
@@ -289,31 +289,51 @@
289 ** Prepare a query that will list branches.
290 **
291 ** If (which<0) then the query pulls only closed branches. If
292 ** (which>0) then the query pulls all (closed and opened)
293 ** branches. Else the query pulls currently-opened branches.
294 **
295 ** If the BRL_ORDERBY_MTIME flag is set and nLimitMRU ("Limit Most Recently Used
296 ** style") is a non-zero number, the result is limited to nLimitMRU entries, and
297 ** the BRL_REVERSE flag is applied in an outer query after processing the limit,
298 ** so that it's possible to generate short lists with the most recently modified
299 ** branches sorted chronologically in either direction, as does the "branch lsh"
300 ** command.
301 ** For other cases, the outer query is also generated, but works as a no-op. The
302 ** code to build the outer query is marked with *//* OUTER QUERY *//* comments.
303 */
304 void branch_prepare_list_query(
305 Stmt *pQuery,
306 int brFlags,
307 const char *zBrNameGlob,
308 int nLimitMRU
309 ){
310 Blob sql;
311 blob_init(&sql, 0, 0);
312 brlist_create_temp_table();
313 /* Ignore nLimitMRU if no chronological sort requested. */
314 if( (brFlags & BRL_ORDERBY_MTIME)==0 ) nLimitMRU = 0;
315 /* Undocumented: invert negative values for nLimitMRU, so that command-line
316 ** arguments similar to `head -5' with "option numbers" are possible. */
317 if( nLimitMRU<0 ) nLimitMRU = -nLimitMRU;
318 blob_append_sql(&sql,"SELECT name, isprivate FROM ("); /* OUTER QUERY */
319 switch( brFlags & BRL_OPEN_CLOSED_MASK ){
320 case BRL_CLOSED_ONLY: {
321 blob_append_sql(&sql,
322 "SELECT name, isprivate, mtime FROM tmp_brlist WHERE isclosed"
323 );
324 break;
325 }
326 case BRL_BOTH: {
327 blob_append_sql(&sql,
328 "SELECT name, isprivate, mtime FROM tmp_brlist WHERE 1"
329 );
330 break;
331 }
332 case BRL_OPEN_ONLY: {
333 blob_append_sql(&sql,
334 "SELECT name, isprivate, mtime FROM tmp_brlist WHERE NOT isclosed"
335 );
336 break;
337 }
338 }
339 if( brFlags & BRL_PRIVATE ) blob_append_sql(&sql, " AND isprivate");
@@ -321,13 +341,20 @@
341 if( brFlags & BRL_ORDERBY_MTIME ){
342 blob_append_sql(&sql, " ORDER BY -mtime");
343 }else{
344 blob_append_sql(&sql, " ORDER BY name COLLATE nocase");
345 }
346 if( brFlags & BRL_REVERSE && !nLimitMRU ){
347 blob_append_sql(&sql," DESC");
348 }
349 if( nLimitMRU ){
350 blob_append_sql(&sql," LIMIT %d",nLimitMRU);
351 }
352 blob_append_sql(&sql,")"); /* OUTER QUERY */
353 if( brFlags & BRL_REVERSE && nLimitMRU ){
354 blob_append_sql(&sql," ORDER BY mtime"); /* OUTER QUERY */
355 }
356 db_prepare_blob(pQuery, &sql);
357 blob_reset(&sql);
358 }
359
360 /*
@@ -585,10 +612,11 @@
612 ** > fossil branch info BRANCH-NAME
613 **
614 ** Print information about a branch
615 **
616 ** > fossil branch list|ls ?OPTIONS? ?GLOB?
617 ** > fossil branch lsh ?OPTIONS? ?LIMIT?
618 **
619 ** List all branches. Options:
620 ** -a|--all List all branches. Default show only open branches
621 ** -c|--closed List closed branches.
622 ** -p List only private branches.
@@ -597,10 +625,15 @@
625 **
626 ** The current branch is marked with an asterisk. Private branches are
627 ** marked with a hash sign.
628 **
629 ** If GLOB is given, show only branches matching the pattern.
630 **
631 ** The "lsh" variant of this subcommand shows recently changed branches,
632 ** and accepts an optional LIMIT argument (defaults to 5) to cap output,
633 ** but no GLOB argument. All other options are supported, with -t being
634 ** an implied no-op.
635 **
636 ** > fossil branch new BRANCH-NAME BASIS ?OPTIONS?
637 **
638 ** Create a new branch BRANCH-NAME off of check-in BASIS.
639 ** Supported options for this subcommand include:
@@ -651,29 +684,41 @@
684 "SELECT datetime(mtime,toLocal()) FROM event"
685 " WHERE objid=%d", rid);
686 fossil_print("%s: open as of %s on %.16s\n", zBrName, zDate, zUuid);
687 }
688 }
689 }else if( strncmp(zCmd,"list",n)==0 ||
690 strncmp(zCmd, "ls", n)==0 ||
691 strcmp(zCmd, "lsh")==0 ){
692 Stmt q;
693 int vid;
694 char *zCurrent = 0;
695 const char *zBrNameGlob = 0;
696 int nLimit = 0;
697 int brFlags = BRL_OPEN_ONLY;
698 if( find_option("all","a",0)!=0 ) brFlags = BRL_BOTH;
699 if( find_option("closed","c",0)!=0 ) brFlags = BRL_CLOSED_ONLY;
700 if( find_option("t",0,0)!=0 ) brFlags |= BRL_ORDERBY_MTIME;
701 if( find_option("r",0,0)!=0 ) brFlags |= BRL_REVERSE;
702 if( find_option("p",0,0)!=0 ) brFlags |= BRL_PRIVATE;
703
704 if( strcmp(zCmd, "lsh")==0 ){
705 nLimit = 5;
706 if( g.argc>4 || (g.argc==4 && (nLimit = atoi(g.argv[3]))==0) ){
707 fossil_fatal("the lsh subcommand allows one optional numeric argument");
708 }
709 brFlags |= BRL_ORDERBY_MTIME;
710 }else{
711 if( g.argc >= 4 ) zBrNameGlob = g.argv[3];
712 }
713
714 if( g.localOpen ){
715 vid = db_lget_int("checkout", 0);
716 zCurrent = db_text(0, "SELECT value FROM tagxref"
717 " WHERE rid=%d AND tagid=%d", vid, TAG_BRANCH);
718 }
719 branch_prepare_list_query(&q, brFlags, zBrNameGlob, nLimit);
720 while( db_step(&q)==SQLITE_ROW ){
721 const char *zBr = db_column_text(&q, 0);
722 int isPriv = zCurrent!=0 && db_column_int(&q, 1)==1;
723 int isCur = zCurrent!=0 && fossil_strcmp(zCurrent,zBr)==0;
724 fossil_print("%s%s%s\n",
@@ -703,11 +748,11 @@
748 usage("branch unhide branch-name(s)...");
749 }
750 branch_cmd_hide(3,0);
751 }else{
752 fossil_fatal("branch subcommand should be one of: "
753 "close current hide info list ls lsh new reopen unhide");
754 }
755 }
756
757 /*
758 ** This is the new-style branch-list page that shows the branch names
@@ -862,11 +907,11 @@
907 @ reopened).</li>
908 @ </ol>
909 style_sidebox_end();
910 #endif
911
912 branch_prepare_list_query(&q, brFlags, 0, 0);
913 cnt = 0;
914 while( db_step(&q)==SQLITE_ROW ){
915 const char *zBr = db_column_text(&q, 0);
916 if( cnt==0 ){
917 if( colorTest ){
918
+2 -2
--- src/builtin.c
+++ src/builtin.c
@@ -148,12 +148,12 @@
148148
if( i>0 && i<=count(aBuiltinFiles) ){
149149
blob_appendf(pOut, "/* %s */\n", aBuiltinFiles[i-1].zName);
150150
blob_append(pOut, (const char*)aBuiltinFiles[i-1].pData,
151151
aBuiltinFiles[i-1].nByte);
152152
}
153
- while( fossil_isdigit(zList[0]) ) zList++;
154
- if( zList[0]==',' ) zList++;
153
+ while( zList[0] && fossil_isdigit(zList[0]) ) zList++;
154
+ while( zList[0] && !fossil_isdigit(zList[0]) ) zList++;
155155
}
156156
return;
157157
}
158158
159159
/*
160160
--- src/builtin.c
+++ src/builtin.c
@@ -148,12 +148,12 @@
148 if( i>0 && i<=count(aBuiltinFiles) ){
149 blob_appendf(pOut, "/* %s */\n", aBuiltinFiles[i-1].zName);
150 blob_append(pOut, (const char*)aBuiltinFiles[i-1].pData,
151 aBuiltinFiles[i-1].nByte);
152 }
153 while( fossil_isdigit(zList[0]) ) zList++;
154 if( zList[0]==',' ) zList++;
155 }
156 return;
157 }
158
159 /*
160
--- src/builtin.c
+++ src/builtin.c
@@ -148,12 +148,12 @@
148 if( i>0 && i<=count(aBuiltinFiles) ){
149 blob_appendf(pOut, "/* %s */\n", aBuiltinFiles[i-1].zName);
150 blob_append(pOut, (const char*)aBuiltinFiles[i-1].pData,
151 aBuiltinFiles[i-1].nByte);
152 }
153 while( zList[0] && fossil_isdigit(zList[0]) ) zList++;
154 while( zList[0] && !fossil_isdigit(zList[0]) ) zList++;
155 }
156 return;
157 }
158
159 /*
160
+116 -6
--- src/chat.c
+++ src/chat.c
@@ -127,10 +127,22 @@
127127
** SETTING: chat-alert-sound width=10
128128
**
129129
** This is the name of the builtin sound file to use for the alert tone.
130130
** The value must be the name of a builtin WAV file.
131131
*/
132
+/*
133
+** SETTING: chat-timeline-user width=10
134
+**
135
+** If this setting is defined and is not an empty string, then
136
+** timeline events are posted to the chat as they arrive. The synthesized
137
+** chat messages appear to come from the user identified by this setting,
138
+** not the user on the timeline event.
139
+**
140
+** All chat messages that come from the chat-timeline-user are interpreted
141
+** as text/x-fossil-wiki instead of as text/markdown. For this reason,
142
+** the chat-timeline-user name should probably not be a real user.
143
+*/
132144
/*
133145
** WEBPAGE: chat loadavg-exempt
134146
**
135147
** Start up a browser-based chat session.
136148
**
@@ -236,11 +248,12 @@
236248
@ <span id='message-inject-point'></span>
237249
@ </div>
238250
fossil_free(zProjectName);
239251
fossil_free(zInputPlaceholder0);
240252
builtin_fossil_js_bundle_or("popupwidget", "storage", "fetch",
241
- "pikchr", "confirmer", NULL);
253
+ "pikchr", "confirmer", "copybutton",
254
+ NULL);
242255
/* Always in-line the javascript for the chat page */
243256
@ <script nonce="%h(style_nonce())">/* chat.c:%d(__LINE__) */
244257
/* We need an onload handler to ensure that window.fossil is
245258
initialized before the chat init code runs. */
246259
@ window.addEventListener('load', function(){
@@ -415,14 +428,22 @@
415428
** zMsg to HTML.
416429
**
417430
** Space to hold the returned string is obtained from fossil_malloc()
418431
** and must be freed by the caller.
419432
*/
420
-static char *chat_format_to_html(const char *zMsg){
433
+static char *chat_format_to_html(const char *zMsg, int isWiki){
421434
Blob out;
422435
blob_init(&out, "", 0);
423
- if(*zMsg){
436
+ if( zMsg==0 || zMsg[0]==0 ){
437
+ /* No-op */
438
+ }else if( isWiki ){
439
+ /* Used for chat-timeline-user. The zMsg is text/x-fossil-wiki. */
440
+ Blob bIn;
441
+ blob_init(&bIn, zMsg, (int)strlen(zMsg));
442
+ wiki_convert(&bIn, &out, WIKI_INLINE);
443
+ }else{
444
+ /* The common case: zMsg is text/markdown */
424445
Blob bIn;
425446
blob_init(&bIn, zMsg, (int)strlen(zMsg));
426447
markdown_to_html(&bIn, NULL, &out);
427448
}
428449
return blob_str(&out);
@@ -442,11 +463,11 @@
442463
int i;
443464
char *zOut;
444465
db_find_and_open_repository(0,0);
445466
g.perm.Hyperlink = 1;
446467
for(i=0; i<g.argc; i++){
447
- zOut = chat_format_to_html(g.argv[i]);
468
+ zOut = chat_format_to_html(g.argv[i], 0);
448469
fossil_print("[%d]: %s\n", i, zOut);
449470
fossil_free(zOut);
450471
}
451472
}
452473
@@ -545,22 +566,26 @@
545566
void chat_poll_webpage(void){
546567
Blob json; /* The json to be constructed and returned */
547568
sqlite3_int64 dataVersion; /* Data version. Used for polling. */
548569
const int iDelay = 1000; /* Delay until next poll (milliseconds) */
549570
int nDelay; /* Maximum delay.*/
571
+ const char *zChatUser; /* chat-timeline-user */
572
+ int isWiki = 0; /* True if chat message is x-fossil-wiki */
550573
int msgid = atoi(PD("name","0"));
551574
const int msgBefore = atoi(PD("before","0"));
552575
int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0;
553576
const int bRaw = P("raw")!=0;
577
+
554578
Blob sql = empty_blob;
555579
Stmt q1;
556580
nDelay = db_get_int("chat-poll-timeout",420); /* Default about 7 minutes */
557581
login_check_credentials();
558582
if( !g.perm.Chat ) {
559583
chat_emit_permissions_error(1);
560584
return;
561585
}
586
+ zChatUser = db_get("chat-timeline-user",0);
562587
chat_create_tables();
563588
cgi_set_content_type("application/json");
564589
dataVersion = db_int64(0, "PRAGMA data_version");
565590
blob_append_sql(&sql,
566591
"SELECT msgid, datetime(mtime), xfrom, xmsg, length(file),"
@@ -619,21 +644,23 @@
619644
blob_appendf(&json, "\"lmtime\":%!j,", zLMtime);
620645
}
621646
blob_append(&json, "\"xfrom\":", -1);
622647
if(zFrom){
623648
blob_appendf(&json, "%!j,", zFrom);
649
+ isWiki = fossil_strcmp(zFrom,zChatUser)==0;
624650
}else{
625651
/* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */
626652
blob_appendf(&json, "null,");
653
+ isWiki = 0;
627654
}
628655
blob_appendf(&json, "\"uclr\":%!j,",
629656
user_color(zFrom ? zFrom : "nobody"));
630657
631658
if(bRaw){
632659
blob_appendf(&json, "\"xmsg\":%!j,", zRawMsg);
633660
}else{
634
- zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "");
661
+ zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki);
635662
blob_appendf(&json, "\"xmsg\":%!j,", zMsg);
636663
fossil_free(zMsg);
637664
}
638665
639666
if( nByte==0 ){
@@ -686,16 +713,19 @@
686713
*/
687714
void chat_fetch_one(void){
688715
Blob json = empty_blob; /* The json to be constructed and returned */
689716
const int fRaw = PD("raw",0)!=0;
690717
const int msgid = atoi(PD("name","0"));
718
+ const char *zChatUser;
719
+ int isWiki;
691720
Stmt q;
692721
login_check_credentials();
693722
if( !g.perm.Chat ) {
694723
chat_emit_permissions_error(0);
695724
return;
696725
}
726
+ zChatUser = db_get("chat-timeline-user",0);
697727
chat_create_tables();
698728
cgi_set_content_type("application/json");
699729
db_prepare(&q,
700730
"SELECT datetime(mtime), xfrom, xmsg, length(file),"
701731
" fname, fmime, lmtime"
@@ -716,21 +746,23 @@
716746
blob_appendf(&json, "\"lmtime\":%!j,", zLMtime);
717747
}
718748
blob_append(&json, "\"xfrom\":", -1);
719749
if(zFrom){
720750
blob_appendf(&json, "%!j,", zFrom);
751
+ isWiki = fossil_strcmp(zFrom, zChatUser);
721752
}else{
722753
/* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */
723754
blob_appendf(&json, "null,");
755
+ isWiki = 0;
724756
}
725757
blob_appendf(&json, "\"uclr\":%!j,",
726758
user_color(zFrom ? zFrom : "nobody"));
727759
blob_append(&json,"\"xmsg\":", 7);
728760
if(fRaw){
729761
blob_appendf(&json, "%!j,", zRawMsg);
730762
}else{
731
- char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "");
763
+ char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki);
732764
blob_appendf(&json, "%!j,", zMsg);
733765
fossil_free(zMsg);
734766
}
735767
if( nByte==0 ){
736768
blob_appendf(&json, "\"fsize\":0");
@@ -848,10 +880,88 @@
848880
}
849881
blob_init(&chatDb, (const char*)pDb, (int)szDb);
850882
cgi_set_content_type("application/x-sqlite3");
851883
cgi_set_content(&chatDb);
852884
}
885
+
886
+/*
887
+** SQL Function: chat_msg_from_event(TYPE,OBJID,USER,MSG)
888
+**
889
+** This function returns HTML text that describes an entry from the EVENT
890
+** table (that is, a timeline event) for display in chat. Parameters:
891
+**
892
+** TYPE The event type. 'ci', 'w', 't', 'g', and so forth
893
+** OBJID EVENT.OBJID
894
+** USER coalesce(EVENT.EUSER,EVENT.USER)
895
+** MSG coalesce(EVENT.ECOMMENT, EVENT.COMMENT)
896
+**
897
+** This function is intended to be called by the temp.chat_trigger1 trigger
898
+** which is created by alert_create_trigger() routine.
899
+*/
900
+void chat_msg_from_event(
901
+ sqlite3_context *context,
902
+ int argc,
903
+ sqlite3_value **argv
904
+){
905
+ const char *zType = (const char*)sqlite3_value_text(argv[0]);
906
+ int rid = sqlite3_value_int(argv[1]);
907
+ const char *zUser = (const char*)sqlite3_value_text(argv[2]);
908
+ const char *zMsg = (const char*)sqlite3_value_text(argv[3]);
909
+ char *zRes = 0;
910
+
911
+ if( zType==0 || zUser==0 || zMsg==0 ) return;
912
+ if( zType[0]=='c' ){
913
+ /* Check-ins */
914
+ char *zBranch;
915
+ char *zUuid;
916
+
917
+ zBranch = db_text(0,
918
+ "SELECT value FROM tagxref"
919
+ " WHERE tagxref.rid=%d"
920
+ " AND tagxref.tagid=%d"
921
+ " AND tagxref.tagtype>0",
922
+ rid, TAG_BRANCH);
923
+ zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
924
+ zRes = mprintf("%W (check-in: <a href='%R/info/%S'>%S</a>, "
925
+ "user: <a href='%R/timeline?u=%t&c=%S'>%h</a>, "
926
+ "branch: <a href='%R/timeline?r=%t&c=%S'>%h</a>)",
927
+ zMsg,
928
+ zUuid, zUuid,
929
+ zUser, zUuid, zUser,
930
+ zBranch, zUuid, zBranch
931
+ );
932
+ fossil_free(zBranch);
933
+ fossil_free(zUuid);
934
+ }else if( zType[0]=='w' ){
935
+ /* Wiki page changes */
936
+ char *zUuid;
937
+ zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
938
+ wiki_hyperlink_override(zUuid);
939
+ if( zMsg[0]=='-' ){
940
+ zRes = mprintf("Delete wiki page <a href='%R/whistory?name=%t'>%h</a>",
941
+ zMsg+1, zMsg+1);
942
+ }else if( zMsg[0]=='+' ){
943
+ zRes = mprintf("Added wiki page <a href='%R/whistory?name=%t'>%h</a>",
944
+ zMsg+1, zMsg+1);
945
+ }else if( zMsg[0]==':' ){
946
+ zRes = mprintf("<a href='%R/wdiff?id=%!S'>Changes</a> to wiki page "
947
+ "<a href='%R/whistory?name=%t'>%h</a>",
948
+ zUuid, zMsg+1, zMsg+1);
949
+ }else{
950
+ zRes = mprintf("%W", zMsg);
951
+ }
952
+ wiki_hyperlink_override(0);
953
+ fossil_free(zUuid);
954
+ }else{
955
+ /* Anything else */
956
+ zRes = mprintf("%W", zMsg);
957
+ }
958
+ if( zRes ){
959
+ sqlite3_result_text(context, zRes, -1, fossil_free);
960
+ }
961
+}
962
+
853963
854964
/*
855965
** COMMAND: chat
856966
**
857967
** Usage: %fossil chat [SUBCOMMAND] [--remote URL] [ARGS...]
858968
--- src/chat.c
+++ src/chat.c
@@ -127,10 +127,22 @@
127 ** SETTING: chat-alert-sound width=10
128 **
129 ** This is the name of the builtin sound file to use for the alert tone.
130 ** The value must be the name of a builtin WAV file.
131 */
 
 
 
 
 
 
 
 
 
 
 
 
132 /*
133 ** WEBPAGE: chat loadavg-exempt
134 **
135 ** Start up a browser-based chat session.
136 **
@@ -236,11 +248,12 @@
236 @ <span id='message-inject-point'></span>
237 @ </div>
238 fossil_free(zProjectName);
239 fossil_free(zInputPlaceholder0);
240 builtin_fossil_js_bundle_or("popupwidget", "storage", "fetch",
241 "pikchr", "confirmer", NULL);
 
242 /* Always in-line the javascript for the chat page */
243 @ <script nonce="%h(style_nonce())">/* chat.c:%d(__LINE__) */
244 /* We need an onload handler to ensure that window.fossil is
245 initialized before the chat init code runs. */
246 @ window.addEventListener('load', function(){
@@ -415,14 +428,22 @@
415 ** zMsg to HTML.
416 **
417 ** Space to hold the returned string is obtained from fossil_malloc()
418 ** and must be freed by the caller.
419 */
420 static char *chat_format_to_html(const char *zMsg){
421 Blob out;
422 blob_init(&out, "", 0);
423 if(*zMsg){
 
 
 
 
 
 
 
 
424 Blob bIn;
425 blob_init(&bIn, zMsg, (int)strlen(zMsg));
426 markdown_to_html(&bIn, NULL, &out);
427 }
428 return blob_str(&out);
@@ -442,11 +463,11 @@
442 int i;
443 char *zOut;
444 db_find_and_open_repository(0,0);
445 g.perm.Hyperlink = 1;
446 for(i=0; i<g.argc; i++){
447 zOut = chat_format_to_html(g.argv[i]);
448 fossil_print("[%d]: %s\n", i, zOut);
449 fossil_free(zOut);
450 }
451 }
452
@@ -545,22 +566,26 @@
545 void chat_poll_webpage(void){
546 Blob json; /* The json to be constructed and returned */
547 sqlite3_int64 dataVersion; /* Data version. Used for polling. */
548 const int iDelay = 1000; /* Delay until next poll (milliseconds) */
549 int nDelay; /* Maximum delay.*/
 
 
550 int msgid = atoi(PD("name","0"));
551 const int msgBefore = atoi(PD("before","0"));
552 int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0;
553 const int bRaw = P("raw")!=0;
 
554 Blob sql = empty_blob;
555 Stmt q1;
556 nDelay = db_get_int("chat-poll-timeout",420); /* Default about 7 minutes */
557 login_check_credentials();
558 if( !g.perm.Chat ) {
559 chat_emit_permissions_error(1);
560 return;
561 }
 
562 chat_create_tables();
563 cgi_set_content_type("application/json");
564 dataVersion = db_int64(0, "PRAGMA data_version");
565 blob_append_sql(&sql,
566 "SELECT msgid, datetime(mtime), xfrom, xmsg, length(file),"
@@ -619,21 +644,23 @@
619 blob_appendf(&json, "\"lmtime\":%!j,", zLMtime);
620 }
621 blob_append(&json, "\"xfrom\":", -1);
622 if(zFrom){
623 blob_appendf(&json, "%!j,", zFrom);
 
624 }else{
625 /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */
626 blob_appendf(&json, "null,");
 
627 }
628 blob_appendf(&json, "\"uclr\":%!j,",
629 user_color(zFrom ? zFrom : "nobody"));
630
631 if(bRaw){
632 blob_appendf(&json, "\"xmsg\":%!j,", zRawMsg);
633 }else{
634 zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "");
635 blob_appendf(&json, "\"xmsg\":%!j,", zMsg);
636 fossil_free(zMsg);
637 }
638
639 if( nByte==0 ){
@@ -686,16 +713,19 @@
686 */
687 void chat_fetch_one(void){
688 Blob json = empty_blob; /* The json to be constructed and returned */
689 const int fRaw = PD("raw",0)!=0;
690 const int msgid = atoi(PD("name","0"));
 
 
691 Stmt q;
692 login_check_credentials();
693 if( !g.perm.Chat ) {
694 chat_emit_permissions_error(0);
695 return;
696 }
 
697 chat_create_tables();
698 cgi_set_content_type("application/json");
699 db_prepare(&q,
700 "SELECT datetime(mtime), xfrom, xmsg, length(file),"
701 " fname, fmime, lmtime"
@@ -716,21 +746,23 @@
716 blob_appendf(&json, "\"lmtime\":%!j,", zLMtime);
717 }
718 blob_append(&json, "\"xfrom\":", -1);
719 if(zFrom){
720 blob_appendf(&json, "%!j,", zFrom);
 
721 }else{
722 /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */
723 blob_appendf(&json, "null,");
 
724 }
725 blob_appendf(&json, "\"uclr\":%!j,",
726 user_color(zFrom ? zFrom : "nobody"));
727 blob_append(&json,"\"xmsg\":", 7);
728 if(fRaw){
729 blob_appendf(&json, "%!j,", zRawMsg);
730 }else{
731 char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "");
732 blob_appendf(&json, "%!j,", zMsg);
733 fossil_free(zMsg);
734 }
735 if( nByte==0 ){
736 blob_appendf(&json, "\"fsize\":0");
@@ -848,10 +880,88 @@
848 }
849 blob_init(&chatDb, (const char*)pDb, (int)szDb);
850 cgi_set_content_type("application/x-sqlite3");
851 cgi_set_content(&chatDb);
852 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
853
854 /*
855 ** COMMAND: chat
856 **
857 ** Usage: %fossil chat [SUBCOMMAND] [--remote URL] [ARGS...]
858
--- src/chat.c
+++ src/chat.c
@@ -127,10 +127,22 @@
127 ** SETTING: chat-alert-sound width=10
128 **
129 ** This is the name of the builtin sound file to use for the alert tone.
130 ** The value must be the name of a builtin WAV file.
131 */
132 /*
133 ** SETTING: chat-timeline-user width=10
134 **
135 ** If this setting is defined and is not an empty string, then
136 ** timeline events are posted to the chat as they arrive. The synthesized
137 ** chat messages appear to come from the user identified by this setting,
138 ** not the user on the timeline event.
139 **
140 ** All chat messages that come from the chat-timeline-user are interpreted
141 ** as text/x-fossil-wiki instead of as text/markdown. For this reason,
142 ** the chat-timeline-user name should probably not be a real user.
143 */
144 /*
145 ** WEBPAGE: chat loadavg-exempt
146 **
147 ** Start up a browser-based chat session.
148 **
@@ -236,11 +248,12 @@
248 @ <span id='message-inject-point'></span>
249 @ </div>
250 fossil_free(zProjectName);
251 fossil_free(zInputPlaceholder0);
252 builtin_fossil_js_bundle_or("popupwidget", "storage", "fetch",
253 "pikchr", "confirmer", "copybutton",
254 NULL);
255 /* Always in-line the javascript for the chat page */
256 @ <script nonce="%h(style_nonce())">/* chat.c:%d(__LINE__) */
257 /* We need an onload handler to ensure that window.fossil is
258 initialized before the chat init code runs. */
259 @ window.addEventListener('load', function(){
@@ -415,14 +428,22 @@
428 ** zMsg to HTML.
429 **
430 ** Space to hold the returned string is obtained from fossil_malloc()
431 ** and must be freed by the caller.
432 */
433 static char *chat_format_to_html(const char *zMsg, int isWiki){
434 Blob out;
435 blob_init(&out, "", 0);
436 if( zMsg==0 || zMsg[0]==0 ){
437 /* No-op */
438 }else if( isWiki ){
439 /* Used for chat-timeline-user. The zMsg is text/x-fossil-wiki. */
440 Blob bIn;
441 blob_init(&bIn, zMsg, (int)strlen(zMsg));
442 wiki_convert(&bIn, &out, WIKI_INLINE);
443 }else{
444 /* The common case: zMsg is text/markdown */
445 Blob bIn;
446 blob_init(&bIn, zMsg, (int)strlen(zMsg));
447 markdown_to_html(&bIn, NULL, &out);
448 }
449 return blob_str(&out);
@@ -442,11 +463,11 @@
463 int i;
464 char *zOut;
465 db_find_and_open_repository(0,0);
466 g.perm.Hyperlink = 1;
467 for(i=0; i<g.argc; i++){
468 zOut = chat_format_to_html(g.argv[i], 0);
469 fossil_print("[%d]: %s\n", i, zOut);
470 fossil_free(zOut);
471 }
472 }
473
@@ -545,22 +566,26 @@
566 void chat_poll_webpage(void){
567 Blob json; /* The json to be constructed and returned */
568 sqlite3_int64 dataVersion; /* Data version. Used for polling. */
569 const int iDelay = 1000; /* Delay until next poll (milliseconds) */
570 int nDelay; /* Maximum delay.*/
571 const char *zChatUser; /* chat-timeline-user */
572 int isWiki = 0; /* True if chat message is x-fossil-wiki */
573 int msgid = atoi(PD("name","0"));
574 const int msgBefore = atoi(PD("before","0"));
575 int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0;
576 const int bRaw = P("raw")!=0;
577
578 Blob sql = empty_blob;
579 Stmt q1;
580 nDelay = db_get_int("chat-poll-timeout",420); /* Default about 7 minutes */
581 login_check_credentials();
582 if( !g.perm.Chat ) {
583 chat_emit_permissions_error(1);
584 return;
585 }
586 zChatUser = db_get("chat-timeline-user",0);
587 chat_create_tables();
588 cgi_set_content_type("application/json");
589 dataVersion = db_int64(0, "PRAGMA data_version");
590 blob_append_sql(&sql,
591 "SELECT msgid, datetime(mtime), xfrom, xmsg, length(file),"
@@ -619,21 +644,23 @@
644 blob_appendf(&json, "\"lmtime\":%!j,", zLMtime);
645 }
646 blob_append(&json, "\"xfrom\":", -1);
647 if(zFrom){
648 blob_appendf(&json, "%!j,", zFrom);
649 isWiki = fossil_strcmp(zFrom,zChatUser)==0;
650 }else{
651 /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */
652 blob_appendf(&json, "null,");
653 isWiki = 0;
654 }
655 blob_appendf(&json, "\"uclr\":%!j,",
656 user_color(zFrom ? zFrom : "nobody"));
657
658 if(bRaw){
659 blob_appendf(&json, "\"xmsg\":%!j,", zRawMsg);
660 }else{
661 zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki);
662 blob_appendf(&json, "\"xmsg\":%!j,", zMsg);
663 fossil_free(zMsg);
664 }
665
666 if( nByte==0 ){
@@ -686,16 +713,19 @@
713 */
714 void chat_fetch_one(void){
715 Blob json = empty_blob; /* The json to be constructed and returned */
716 const int fRaw = PD("raw",0)!=0;
717 const int msgid = atoi(PD("name","0"));
718 const char *zChatUser;
719 int isWiki;
720 Stmt q;
721 login_check_credentials();
722 if( !g.perm.Chat ) {
723 chat_emit_permissions_error(0);
724 return;
725 }
726 zChatUser = db_get("chat-timeline-user",0);
727 chat_create_tables();
728 cgi_set_content_type("application/json");
729 db_prepare(&q,
730 "SELECT datetime(mtime), xfrom, xmsg, length(file),"
731 " fname, fmime, lmtime"
@@ -716,21 +746,23 @@
746 blob_appendf(&json, "\"lmtime\":%!j,", zLMtime);
747 }
748 blob_append(&json, "\"xfrom\":", -1);
749 if(zFrom){
750 blob_appendf(&json, "%!j,", zFrom);
751 isWiki = fossil_strcmp(zFrom, zChatUser);
752 }else{
753 /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */
754 blob_appendf(&json, "null,");
755 isWiki = 0;
756 }
757 blob_appendf(&json, "\"uclr\":%!j,",
758 user_color(zFrom ? zFrom : "nobody"));
759 blob_append(&json,"\"xmsg\":", 7);
760 if(fRaw){
761 blob_appendf(&json, "%!j,", zRawMsg);
762 }else{
763 char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki);
764 blob_appendf(&json, "%!j,", zMsg);
765 fossil_free(zMsg);
766 }
767 if( nByte==0 ){
768 blob_appendf(&json, "\"fsize\":0");
@@ -848,10 +880,88 @@
880 }
881 blob_init(&chatDb, (const char*)pDb, (int)szDb);
882 cgi_set_content_type("application/x-sqlite3");
883 cgi_set_content(&chatDb);
884 }
885
886 /*
887 ** SQL Function: chat_msg_from_event(TYPE,OBJID,USER,MSG)
888 **
889 ** This function returns HTML text that describes an entry from the EVENT
890 ** table (that is, a timeline event) for display in chat. Parameters:
891 **
892 ** TYPE The event type. 'ci', 'w', 't', 'g', and so forth
893 ** OBJID EVENT.OBJID
894 ** USER coalesce(EVENT.EUSER,EVENT.USER)
895 ** MSG coalesce(EVENT.ECOMMENT, EVENT.COMMENT)
896 **
897 ** This function is intended to be called by the temp.chat_trigger1 trigger
898 ** which is created by alert_create_trigger() routine.
899 */
900 void chat_msg_from_event(
901 sqlite3_context *context,
902 int argc,
903 sqlite3_value **argv
904 ){
905 const char *zType = (const char*)sqlite3_value_text(argv[0]);
906 int rid = sqlite3_value_int(argv[1]);
907 const char *zUser = (const char*)sqlite3_value_text(argv[2]);
908 const char *zMsg = (const char*)sqlite3_value_text(argv[3]);
909 char *zRes = 0;
910
911 if( zType==0 || zUser==0 || zMsg==0 ) return;
912 if( zType[0]=='c' ){
913 /* Check-ins */
914 char *zBranch;
915 char *zUuid;
916
917 zBranch = db_text(0,
918 "SELECT value FROM tagxref"
919 " WHERE tagxref.rid=%d"
920 " AND tagxref.tagid=%d"
921 " AND tagxref.tagtype>0",
922 rid, TAG_BRANCH);
923 zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
924 zRes = mprintf("%W (check-in: <a href='%R/info/%S'>%S</a>, "
925 "user: <a href='%R/timeline?u=%t&c=%S'>%h</a>, "
926 "branch: <a href='%R/timeline?r=%t&c=%S'>%h</a>)",
927 zMsg,
928 zUuid, zUuid,
929 zUser, zUuid, zUser,
930 zBranch, zUuid, zBranch
931 );
932 fossil_free(zBranch);
933 fossil_free(zUuid);
934 }else if( zType[0]=='w' ){
935 /* Wiki page changes */
936 char *zUuid;
937 zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
938 wiki_hyperlink_override(zUuid);
939 if( zMsg[0]=='-' ){
940 zRes = mprintf("Delete wiki page <a href='%R/whistory?name=%t'>%h</a>",
941 zMsg+1, zMsg+1);
942 }else if( zMsg[0]=='+' ){
943 zRes = mprintf("Added wiki page <a href='%R/whistory?name=%t'>%h</a>",
944 zMsg+1, zMsg+1);
945 }else if( zMsg[0]==':' ){
946 zRes = mprintf("<a href='%R/wdiff?id=%!S'>Changes</a> to wiki page "
947 "<a href='%R/whistory?name=%t'>%h</a>",
948 zUuid, zMsg+1, zMsg+1);
949 }else{
950 zRes = mprintf("%W", zMsg);
951 }
952 wiki_hyperlink_override(0);
953 fossil_free(zUuid);
954 }else{
955 /* Anything else */
956 zRes = mprintf("%W", zMsg);
957 }
958 if( zRes ){
959 sqlite3_result_text(context, zRes, -1, fossil_free);
960 }
961 }
962
963
964 /*
965 ** COMMAND: chat
966 **
967 ** Usage: %fossil chat [SUBCOMMAND] [--remote URL] [ARGS...]
968
+116 -6
--- src/chat.c
+++ src/chat.c
@@ -127,10 +127,22 @@
127127
** SETTING: chat-alert-sound width=10
128128
**
129129
** This is the name of the builtin sound file to use for the alert tone.
130130
** The value must be the name of a builtin WAV file.
131131
*/
132
+/*
133
+** SETTING: chat-timeline-user width=10
134
+**
135
+** If this setting is defined and is not an empty string, then
136
+** timeline events are posted to the chat as they arrive. The synthesized
137
+** chat messages appear to come from the user identified by this setting,
138
+** not the user on the timeline event.
139
+**
140
+** All chat messages that come from the chat-timeline-user are interpreted
141
+** as text/x-fossil-wiki instead of as text/markdown. For this reason,
142
+** the chat-timeline-user name should probably not be a real user.
143
+*/
132144
/*
133145
** WEBPAGE: chat loadavg-exempt
134146
**
135147
** Start up a browser-based chat session.
136148
**
@@ -236,11 +248,12 @@
236248
@ <span id='message-inject-point'></span>
237249
@ </div>
238250
fossil_free(zProjectName);
239251
fossil_free(zInputPlaceholder0);
240252
builtin_fossil_js_bundle_or("popupwidget", "storage", "fetch",
241
- "pikchr", "confirmer", NULL);
253
+ "pikchr", "confirmer", "copybutton",
254
+ NULL);
242255
/* Always in-line the javascript for the chat page */
243256
@ <script nonce="%h(style_nonce())">/* chat.c:%d(__LINE__) */
244257
/* We need an onload handler to ensure that window.fossil is
245258
initialized before the chat init code runs. */
246259
@ window.addEventListener('load', function(){
@@ -415,14 +428,22 @@
415428
** zMsg to HTML.
416429
**
417430
** Space to hold the returned string is obtained from fossil_malloc()
418431
** and must be freed by the caller.
419432
*/
420
-static char *chat_format_to_html(const char *zMsg){
433
+static char *chat_format_to_html(const char *zMsg, int isWiki){
421434
Blob out;
422435
blob_init(&out, "", 0);
423
- if(*zMsg){
436
+ if( zMsg==0 || zMsg[0]==0 ){
437
+ /* No-op */
438
+ }else if( isWiki ){
439
+ /* Used for chat-timeline-user. The zMsg is text/x-fossil-wiki. */
440
+ Blob bIn;
441
+ blob_init(&bIn, zMsg, (int)strlen(zMsg));
442
+ wiki_convert(&bIn, &out, WIKI_INLINE);
443
+ }else{
444
+ /* The common case: zMsg is text/markdown */
424445
Blob bIn;
425446
blob_init(&bIn, zMsg, (int)strlen(zMsg));
426447
markdown_to_html(&bIn, NULL, &out);
427448
}
428449
return blob_str(&out);
@@ -442,11 +463,11 @@
442463
int i;
443464
char *zOut;
444465
db_find_and_open_repository(0,0);
445466
g.perm.Hyperlink = 1;
446467
for(i=0; i<g.argc; i++){
447
- zOut = chat_format_to_html(g.argv[i]);
468
+ zOut = chat_format_to_html(g.argv[i], 0);
448469
fossil_print("[%d]: %s\n", i, zOut);
449470
fossil_free(zOut);
450471
}
451472
}
452473
@@ -545,22 +566,26 @@
545566
void chat_poll_webpage(void){
546567
Blob json; /* The json to be constructed and returned */
547568
sqlite3_int64 dataVersion; /* Data version. Used for polling. */
548569
const int iDelay = 1000; /* Delay until next poll (milliseconds) */
549570
int nDelay; /* Maximum delay.*/
571
+ const char *zChatUser; /* chat-timeline-user */
572
+ int isWiki = 0; /* True if chat message is x-fossil-wiki */
550573
int msgid = atoi(PD("name","0"));
551574
const int msgBefore = atoi(PD("before","0"));
552575
int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0;
553576
const int bRaw = P("raw")!=0;
577
+
554578
Blob sql = empty_blob;
555579
Stmt q1;
556580
nDelay = db_get_int("chat-poll-timeout",420); /* Default about 7 minutes */
557581
login_check_credentials();
558582
if( !g.perm.Chat ) {
559583
chat_emit_permissions_error(1);
560584
return;
561585
}
586
+ zChatUser = db_get("chat-timeline-user",0);
562587
chat_create_tables();
563588
cgi_set_content_type("application/json");
564589
dataVersion = db_int64(0, "PRAGMA data_version");
565590
blob_append_sql(&sql,
566591
"SELECT msgid, datetime(mtime), xfrom, xmsg, length(file),"
@@ -619,21 +644,23 @@
619644
blob_appendf(&json, "\"lmtime\":%!j,", zLMtime);
620645
}
621646
blob_append(&json, "\"xfrom\":", -1);
622647
if(zFrom){
623648
blob_appendf(&json, "%!j,", zFrom);
649
+ isWiki = fossil_strcmp(zFrom,zChatUser)==0;
624650
}else{
625651
/* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */
626652
blob_appendf(&json, "null,");
653
+ isWiki = 0;
627654
}
628655
blob_appendf(&json, "\"uclr\":%!j,",
629656
user_color(zFrom ? zFrom : "nobody"));
630657
631658
if(bRaw){
632659
blob_appendf(&json, "\"xmsg\":%!j,", zRawMsg);
633660
}else{
634
- zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "");
661
+ zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki);
635662
blob_appendf(&json, "\"xmsg\":%!j,", zMsg);
636663
fossil_free(zMsg);
637664
}
638665
639666
if( nByte==0 ){
@@ -686,16 +713,19 @@
686713
*/
687714
void chat_fetch_one(void){
688715
Blob json = empty_blob; /* The json to be constructed and returned */
689716
const int fRaw = PD("raw",0)!=0;
690717
const int msgid = atoi(PD("name","0"));
718
+ const char *zChatUser;
719
+ int isWiki;
691720
Stmt q;
692721
login_check_credentials();
693722
if( !g.perm.Chat ) {
694723
chat_emit_permissions_error(0);
695724
return;
696725
}
726
+ zChatUser = db_get("chat-timeline-user",0);
697727
chat_create_tables();
698728
cgi_set_content_type("application/json");
699729
db_prepare(&q,
700730
"SELECT datetime(mtime), xfrom, xmsg, length(file),"
701731
" fname, fmime, lmtime"
@@ -716,21 +746,23 @@
716746
blob_appendf(&json, "\"lmtime\":%!j,", zLMtime);
717747
}
718748
blob_append(&json, "\"xfrom\":", -1);
719749
if(zFrom){
720750
blob_appendf(&json, "%!j,", zFrom);
751
+ isWiki = fossil_strcmp(zFrom, zChatUser);
721752
}else{
722753
/* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */
723754
blob_appendf(&json, "null,");
755
+ isWiki = 0;
724756
}
725757
blob_appendf(&json, "\"uclr\":%!j,",
726758
user_color(zFrom ? zFrom : "nobody"));
727759
blob_append(&json,"\"xmsg\":", 7);
728760
if(fRaw){
729761
blob_appendf(&json, "%!j,", zRawMsg);
730762
}else{
731
- char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "");
763
+ char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki);
732764
blob_appendf(&json, "%!j,", zMsg);
733765
fossil_free(zMsg);
734766
}
735767
if( nByte==0 ){
736768
blob_appendf(&json, "\"fsize\":0");
@@ -848,10 +880,88 @@
848880
}
849881
blob_init(&chatDb, (const char*)pDb, (int)szDb);
850882
cgi_set_content_type("application/x-sqlite3");
851883
cgi_set_content(&chatDb);
852884
}
885
+
886
+/*
887
+** SQL Function: chat_msg_from_event(TYPE,OBJID,USER,MSG)
888
+**
889
+** This function returns HTML text that describes an entry from the EVENT
890
+** table (that is, a timeline event) for display in chat. Parameters:
891
+**
892
+** TYPE The event type. 'ci', 'w', 't', 'g', and so forth
893
+** OBJID EVENT.OBJID
894
+** USER coalesce(EVENT.EUSER,EVENT.USER)
895
+** MSG coalesce(EVENT.ECOMMENT, EVENT.COMMENT)
896
+**
897
+** This function is intended to be called by the temp.chat_trigger1 trigger
898
+** which is created by alert_create_trigger() routine.
899
+*/
900
+void chat_msg_from_event(
901
+ sqlite3_context *context,
902
+ int argc,
903
+ sqlite3_value **argv
904
+){
905
+ const char *zType = (const char*)sqlite3_value_text(argv[0]);
906
+ int rid = sqlite3_value_int(argv[1]);
907
+ const char *zUser = (const char*)sqlite3_value_text(argv[2]);
908
+ const char *zMsg = (const char*)sqlite3_value_text(argv[3]);
909
+ char *zRes = 0;
910
+
911
+ if( zType==0 || zUser==0 || zMsg==0 ) return;
912
+ if( zType[0]=='c' ){
913
+ /* Check-ins */
914
+ char *zBranch;
915
+ char *zUuid;
916
+
917
+ zBranch = db_text(0,
918
+ "SELECT value FROM tagxref"
919
+ " WHERE tagxref.rid=%d"
920
+ " AND tagxref.tagid=%d"
921
+ " AND tagxref.tagtype>0",
922
+ rid, TAG_BRANCH);
923
+ zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
924
+ zRes = mprintf("%W (check-in: <a href='%R/info/%S'>%S</a>, "
925
+ "user: <a href='%R/timeline?u=%t&c=%S'>%h</a>, "
926
+ "branch: <a href='%R/timeline?r=%t&c=%S'>%h</a>)",
927
+ zMsg,
928
+ zUuid, zUuid,
929
+ zUser, zUuid, zUser,
930
+ zBranch, zUuid, zBranch
931
+ );
932
+ fossil_free(zBranch);
933
+ fossil_free(zUuid);
934
+ }else if( zType[0]=='w' ){
935
+ /* Wiki page changes */
936
+ char *zUuid;
937
+ zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
938
+ wiki_hyperlink_override(zUuid);
939
+ if( zMsg[0]=='-' ){
940
+ zRes = mprintf("Delete wiki page <a href='%R/whistory?name=%t'>%h</a>",
941
+ zMsg+1, zMsg+1);
942
+ }else if( zMsg[0]=='+' ){
943
+ zRes = mprintf("Added wiki page <a href='%R/whistory?name=%t'>%h</a>",
944
+ zMsg+1, zMsg+1);
945
+ }else if( zMsg[0]==':' ){
946
+ zRes = mprintf("<a href='%R/wdiff?id=%!S'>Changes</a> to wiki page "
947
+ "<a href='%R/whistory?name=%t'>%h</a>",
948
+ zUuid, zMsg+1, zMsg+1);
949
+ }else{
950
+ zRes = mprintf("%W", zMsg);
951
+ }
952
+ wiki_hyperlink_override(0);
953
+ fossil_free(zUuid);
954
+ }else{
955
+ /* Anything else */
956
+ zRes = mprintf("%W", zMsg);
957
+ }
958
+ if( zRes ){
959
+ sqlite3_result_text(context, zRes, -1, fossil_free);
960
+ }
961
+}
962
+
853963
854964
/*
855965
** COMMAND: chat
856966
**
857967
** Usage: %fossil chat [SUBCOMMAND] [--remote URL] [ARGS...]
858968
--- src/chat.c
+++ src/chat.c
@@ -127,10 +127,22 @@
127 ** SETTING: chat-alert-sound width=10
128 **
129 ** This is the name of the builtin sound file to use for the alert tone.
130 ** The value must be the name of a builtin WAV file.
131 */
 
 
 
 
 
 
 
 
 
 
 
 
132 /*
133 ** WEBPAGE: chat loadavg-exempt
134 **
135 ** Start up a browser-based chat session.
136 **
@@ -236,11 +248,12 @@
236 @ <span id='message-inject-point'></span>
237 @ </div>
238 fossil_free(zProjectName);
239 fossil_free(zInputPlaceholder0);
240 builtin_fossil_js_bundle_or("popupwidget", "storage", "fetch",
241 "pikchr", "confirmer", NULL);
 
242 /* Always in-line the javascript for the chat page */
243 @ <script nonce="%h(style_nonce())">/* chat.c:%d(__LINE__) */
244 /* We need an onload handler to ensure that window.fossil is
245 initialized before the chat init code runs. */
246 @ window.addEventListener('load', function(){
@@ -415,14 +428,22 @@
415 ** zMsg to HTML.
416 **
417 ** Space to hold the returned string is obtained from fossil_malloc()
418 ** and must be freed by the caller.
419 */
420 static char *chat_format_to_html(const char *zMsg){
421 Blob out;
422 blob_init(&out, "", 0);
423 if(*zMsg){
 
 
 
 
 
 
 
 
424 Blob bIn;
425 blob_init(&bIn, zMsg, (int)strlen(zMsg));
426 markdown_to_html(&bIn, NULL, &out);
427 }
428 return blob_str(&out);
@@ -442,11 +463,11 @@
442 int i;
443 char *zOut;
444 db_find_and_open_repository(0,0);
445 g.perm.Hyperlink = 1;
446 for(i=0; i<g.argc; i++){
447 zOut = chat_format_to_html(g.argv[i]);
448 fossil_print("[%d]: %s\n", i, zOut);
449 fossil_free(zOut);
450 }
451 }
452
@@ -545,22 +566,26 @@
545 void chat_poll_webpage(void){
546 Blob json; /* The json to be constructed and returned */
547 sqlite3_int64 dataVersion; /* Data version. Used for polling. */
548 const int iDelay = 1000; /* Delay until next poll (milliseconds) */
549 int nDelay; /* Maximum delay.*/
 
 
550 int msgid = atoi(PD("name","0"));
551 const int msgBefore = atoi(PD("before","0"));
552 int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0;
553 const int bRaw = P("raw")!=0;
 
554 Blob sql = empty_blob;
555 Stmt q1;
556 nDelay = db_get_int("chat-poll-timeout",420); /* Default about 7 minutes */
557 login_check_credentials();
558 if( !g.perm.Chat ) {
559 chat_emit_permissions_error(1);
560 return;
561 }
 
562 chat_create_tables();
563 cgi_set_content_type("application/json");
564 dataVersion = db_int64(0, "PRAGMA data_version");
565 blob_append_sql(&sql,
566 "SELECT msgid, datetime(mtime), xfrom, xmsg, length(file),"
@@ -619,21 +644,23 @@
619 blob_appendf(&json, "\"lmtime\":%!j,", zLMtime);
620 }
621 blob_append(&json, "\"xfrom\":", -1);
622 if(zFrom){
623 blob_appendf(&json, "%!j,", zFrom);
 
624 }else{
625 /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */
626 blob_appendf(&json, "null,");
 
627 }
628 blob_appendf(&json, "\"uclr\":%!j,",
629 user_color(zFrom ? zFrom : "nobody"));
630
631 if(bRaw){
632 blob_appendf(&json, "\"xmsg\":%!j,", zRawMsg);
633 }else{
634 zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "");
635 blob_appendf(&json, "\"xmsg\":%!j,", zMsg);
636 fossil_free(zMsg);
637 }
638
639 if( nByte==0 ){
@@ -686,16 +713,19 @@
686 */
687 void chat_fetch_one(void){
688 Blob json = empty_blob; /* The json to be constructed and returned */
689 const int fRaw = PD("raw",0)!=0;
690 const int msgid = atoi(PD("name","0"));
 
 
691 Stmt q;
692 login_check_credentials();
693 if( !g.perm.Chat ) {
694 chat_emit_permissions_error(0);
695 return;
696 }
 
697 chat_create_tables();
698 cgi_set_content_type("application/json");
699 db_prepare(&q,
700 "SELECT datetime(mtime), xfrom, xmsg, length(file),"
701 " fname, fmime, lmtime"
@@ -716,21 +746,23 @@
716 blob_appendf(&json, "\"lmtime\":%!j,", zLMtime);
717 }
718 blob_append(&json, "\"xfrom\":", -1);
719 if(zFrom){
720 blob_appendf(&json, "%!j,", zFrom);
 
721 }else{
722 /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */
723 blob_appendf(&json, "null,");
 
724 }
725 blob_appendf(&json, "\"uclr\":%!j,",
726 user_color(zFrom ? zFrom : "nobody"));
727 blob_append(&json,"\"xmsg\":", 7);
728 if(fRaw){
729 blob_appendf(&json, "%!j,", zRawMsg);
730 }else{
731 char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "");
732 blob_appendf(&json, "%!j,", zMsg);
733 fossil_free(zMsg);
734 }
735 if( nByte==0 ){
736 blob_appendf(&json, "\"fsize\":0");
@@ -848,10 +880,88 @@
848 }
849 blob_init(&chatDb, (const char*)pDb, (int)szDb);
850 cgi_set_content_type("application/x-sqlite3");
851 cgi_set_content(&chatDb);
852 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
853
854 /*
855 ** COMMAND: chat
856 **
857 ** Usage: %fossil chat [SUBCOMMAND] [--remote URL] [ARGS...]
858
--- src/chat.c
+++ src/chat.c
@@ -127,10 +127,22 @@
127 ** SETTING: chat-alert-sound width=10
128 **
129 ** This is the name of the builtin sound file to use for the alert tone.
130 ** The value must be the name of a builtin WAV file.
131 */
132 /*
133 ** SETTING: chat-timeline-user width=10
134 **
135 ** If this setting is defined and is not an empty string, then
136 ** timeline events are posted to the chat as they arrive. The synthesized
137 ** chat messages appear to come from the user identified by this setting,
138 ** not the user on the timeline event.
139 **
140 ** All chat messages that come from the chat-timeline-user are interpreted
141 ** as text/x-fossil-wiki instead of as text/markdown. For this reason,
142 ** the chat-timeline-user name should probably not be a real user.
143 */
144 /*
145 ** WEBPAGE: chat loadavg-exempt
146 **
147 ** Start up a browser-based chat session.
148 **
@@ -236,11 +248,12 @@
248 @ <span id='message-inject-point'></span>
249 @ </div>
250 fossil_free(zProjectName);
251 fossil_free(zInputPlaceholder0);
252 builtin_fossil_js_bundle_or("popupwidget", "storage", "fetch",
253 "pikchr", "confirmer", "copybutton",
254 NULL);
255 /* Always in-line the javascript for the chat page */
256 @ <script nonce="%h(style_nonce())">/* chat.c:%d(__LINE__) */
257 /* We need an onload handler to ensure that window.fossil is
258 initialized before the chat init code runs. */
259 @ window.addEventListener('load', function(){
@@ -415,14 +428,22 @@
428 ** zMsg to HTML.
429 **
430 ** Space to hold the returned string is obtained from fossil_malloc()
431 ** and must be freed by the caller.
432 */
433 static char *chat_format_to_html(const char *zMsg, int isWiki){
434 Blob out;
435 blob_init(&out, "", 0);
436 if( zMsg==0 || zMsg[0]==0 ){
437 /* No-op */
438 }else if( isWiki ){
439 /* Used for chat-timeline-user. The zMsg is text/x-fossil-wiki. */
440 Blob bIn;
441 blob_init(&bIn, zMsg, (int)strlen(zMsg));
442 wiki_convert(&bIn, &out, WIKI_INLINE);
443 }else{
444 /* The common case: zMsg is text/markdown */
445 Blob bIn;
446 blob_init(&bIn, zMsg, (int)strlen(zMsg));
447 markdown_to_html(&bIn, NULL, &out);
448 }
449 return blob_str(&out);
@@ -442,11 +463,11 @@
463 int i;
464 char *zOut;
465 db_find_and_open_repository(0,0);
466 g.perm.Hyperlink = 1;
467 for(i=0; i<g.argc; i++){
468 zOut = chat_format_to_html(g.argv[i], 0);
469 fossil_print("[%d]: %s\n", i, zOut);
470 fossil_free(zOut);
471 }
472 }
473
@@ -545,22 +566,26 @@
566 void chat_poll_webpage(void){
567 Blob json; /* The json to be constructed and returned */
568 sqlite3_int64 dataVersion; /* Data version. Used for polling. */
569 const int iDelay = 1000; /* Delay until next poll (milliseconds) */
570 int nDelay; /* Maximum delay.*/
571 const char *zChatUser; /* chat-timeline-user */
572 int isWiki = 0; /* True if chat message is x-fossil-wiki */
573 int msgid = atoi(PD("name","0"));
574 const int msgBefore = atoi(PD("before","0"));
575 int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0;
576 const int bRaw = P("raw")!=0;
577
578 Blob sql = empty_blob;
579 Stmt q1;
580 nDelay = db_get_int("chat-poll-timeout",420); /* Default about 7 minutes */
581 login_check_credentials();
582 if( !g.perm.Chat ) {
583 chat_emit_permissions_error(1);
584 return;
585 }
586 zChatUser = db_get("chat-timeline-user",0);
587 chat_create_tables();
588 cgi_set_content_type("application/json");
589 dataVersion = db_int64(0, "PRAGMA data_version");
590 blob_append_sql(&sql,
591 "SELECT msgid, datetime(mtime), xfrom, xmsg, length(file),"
@@ -619,21 +644,23 @@
644 blob_appendf(&json, "\"lmtime\":%!j,", zLMtime);
645 }
646 blob_append(&json, "\"xfrom\":", -1);
647 if(zFrom){
648 blob_appendf(&json, "%!j,", zFrom);
649 isWiki = fossil_strcmp(zFrom,zChatUser)==0;
650 }else{
651 /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */
652 blob_appendf(&json, "null,");
653 isWiki = 0;
654 }
655 blob_appendf(&json, "\"uclr\":%!j,",
656 user_color(zFrom ? zFrom : "nobody"));
657
658 if(bRaw){
659 blob_appendf(&json, "\"xmsg\":%!j,", zRawMsg);
660 }else{
661 zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki);
662 blob_appendf(&json, "\"xmsg\":%!j,", zMsg);
663 fossil_free(zMsg);
664 }
665
666 if( nByte==0 ){
@@ -686,16 +713,19 @@
713 */
714 void chat_fetch_one(void){
715 Blob json = empty_blob; /* The json to be constructed and returned */
716 const int fRaw = PD("raw",0)!=0;
717 const int msgid = atoi(PD("name","0"));
718 const char *zChatUser;
719 int isWiki;
720 Stmt q;
721 login_check_credentials();
722 if( !g.perm.Chat ) {
723 chat_emit_permissions_error(0);
724 return;
725 }
726 zChatUser = db_get("chat-timeline-user",0);
727 chat_create_tables();
728 cgi_set_content_type("application/json");
729 db_prepare(&q,
730 "SELECT datetime(mtime), xfrom, xmsg, length(file),"
731 " fname, fmime, lmtime"
@@ -716,21 +746,23 @@
746 blob_appendf(&json, "\"lmtime\":%!j,", zLMtime);
747 }
748 blob_append(&json, "\"xfrom\":", -1);
749 if(zFrom){
750 blob_appendf(&json, "%!j,", zFrom);
751 isWiki = fossil_strcmp(zFrom, zChatUser);
752 }else{
753 /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */
754 blob_appendf(&json, "null,");
755 isWiki = 0;
756 }
757 blob_appendf(&json, "\"uclr\":%!j,",
758 user_color(zFrom ? zFrom : "nobody"));
759 blob_append(&json,"\"xmsg\":", 7);
760 if(fRaw){
761 blob_appendf(&json, "%!j,", zRawMsg);
762 }else{
763 char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki);
764 blob_appendf(&json, "%!j,", zMsg);
765 fossil_free(zMsg);
766 }
767 if( nByte==0 ){
768 blob_appendf(&json, "\"fsize\":0");
@@ -848,10 +880,88 @@
880 }
881 blob_init(&chatDb, (const char*)pDb, (int)szDb);
882 cgi_set_content_type("application/x-sqlite3");
883 cgi_set_content(&chatDb);
884 }
885
886 /*
887 ** SQL Function: chat_msg_from_event(TYPE,OBJID,USER,MSG)
888 **
889 ** This function returns HTML text that describes an entry from the EVENT
890 ** table (that is, a timeline event) for display in chat. Parameters:
891 **
892 ** TYPE The event type. 'ci', 'w', 't', 'g', and so forth
893 ** OBJID EVENT.OBJID
894 ** USER coalesce(EVENT.EUSER,EVENT.USER)
895 ** MSG coalesce(EVENT.ECOMMENT, EVENT.COMMENT)
896 **
897 ** This function is intended to be called by the temp.chat_trigger1 trigger
898 ** which is created by alert_create_trigger() routine.
899 */
900 void chat_msg_from_event(
901 sqlite3_context *context,
902 int argc,
903 sqlite3_value **argv
904 ){
905 const char *zType = (const char*)sqlite3_value_text(argv[0]);
906 int rid = sqlite3_value_int(argv[1]);
907 const char *zUser = (const char*)sqlite3_value_text(argv[2]);
908 const char *zMsg = (const char*)sqlite3_value_text(argv[3]);
909 char *zRes = 0;
910
911 if( zType==0 || zUser==0 || zMsg==0 ) return;
912 if( zType[0]=='c' ){
913 /* Check-ins */
914 char *zBranch;
915 char *zUuid;
916
917 zBranch = db_text(0,
918 "SELECT value FROM tagxref"
919 " WHERE tagxref.rid=%d"
920 " AND tagxref.tagid=%d"
921 " AND tagxref.tagtype>0",
922 rid, TAG_BRANCH);
923 zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
924 zRes = mprintf("%W (check-in: <a href='%R/info/%S'>%S</a>, "
925 "user: <a href='%R/timeline?u=%t&c=%S'>%h</a>, "
926 "branch: <a href='%R/timeline?r=%t&c=%S'>%h</a>)",
927 zMsg,
928 zUuid, zUuid,
929 zUser, zUuid, zUser,
930 zBranch, zUuid, zBranch
931 );
932 fossil_free(zBranch);
933 fossil_free(zUuid);
934 }else if( zType[0]=='w' ){
935 /* Wiki page changes */
936 char *zUuid;
937 zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
938 wiki_hyperlink_override(zUuid);
939 if( zMsg[0]=='-' ){
940 zRes = mprintf("Delete wiki page <a href='%R/whistory?name=%t'>%h</a>",
941 zMsg+1, zMsg+1);
942 }else if( zMsg[0]=='+' ){
943 zRes = mprintf("Added wiki page <a href='%R/whistory?name=%t'>%h</a>",
944 zMsg+1, zMsg+1);
945 }else if( zMsg[0]==':' ){
946 zRes = mprintf("<a href='%R/wdiff?id=%!S'>Changes</a> to wiki page "
947 "<a href='%R/whistory?name=%t'>%h</a>",
948 zUuid, zMsg+1, zMsg+1);
949 }else{
950 zRes = mprintf("%W", zMsg);
951 }
952 wiki_hyperlink_override(0);
953 fossil_free(zUuid);
954 }else{
955 /* Anything else */
956 zRes = mprintf("%W", zMsg);
957 }
958 if( zRes ){
959 sqlite3_result_text(context, zRes, -1, fossil_free);
960 }
961 }
962
963
964 /*
965 ** COMMAND: chat
966 **
967 ** Usage: %fossil chat [SUBCOMMAND] [--remote URL] [ARGS...]
968
+11 -4
--- src/checkin.c
+++ src/checkin.c
@@ -153,11 +153,12 @@
153153
blob_zero(&sql);
154154
if( flags & C_ALL ){
155155
/* Start with a list of all managed files. */
156156
blob_append_sql(&sql,
157157
"SELECT pathname, %s as mtime, %s as size, deleted, chnged, rid,"
158
- " coalesce(origname!=pathname,0) AS renamed, 1 AS managed"
158
+ " coalesce(origname!=pathname,0) AS renamed, 1 AS managed,"
159
+ " origname"
159160
" FROM vfile LEFT JOIN blob USING (rid)"
160161
" WHERE is_selected(id)%s",
161162
flags & C_MTIME ? "datetime(checkin_mtime(:vid, rid), "
162163
"'unixepoch', toLocal())" : "''" /*safe-for-%s*/,
163164
flags & C_SIZE ? "coalesce(blob.size, 0)" : "0" /*safe-for-%s*/,
@@ -174,11 +175,11 @@
174175
if( flags & C_EXTRA ){
175176
if( blob_size(&sql) ){
176177
blob_append_sql(&sql, " UNION ALL");
177178
}
178179
blob_append_sql(&sql,
179
- " SELECT pathname, %s, %s, 0, 0, 0, 0, 0"
180
+ " SELECT pathname, %s, %s, 0, 0, 0, 0, 0, NULL"
180181
" FROM sfile WHERE pathname NOT IN (%s)%s",
181182
flags & C_MTIME ? "datetime(mtime, 'unixepoch', toLocal())" : "''",
182183
flags & C_SIZE ? "size" : "0",
183184
fossil_all_reserved_names(0), blob_sql_text(&where));
184185
}
@@ -211,10 +212,11 @@
211212
int size = db_column_int(&q, 2);
212213
int isDeleted = db_column_int(&q, 3);
213214
int isChnged = db_column_int(&q, 4);
214215
int isNew = isManaged && !db_column_int(&q, 5);
215216
int isRenamed = db_column_int(&q, 6);
217
+ const char *zOrigName = 0;
216218
char *zFullName = mprintf("%s%s", g.zLocalRoot, zPathname);
217219
int isMissing = !file_isfile_or_link(zFullName);
218220
219221
/* Determine the file change classification, if any. */
220222
if( isDeleted ){
@@ -265,10 +267,11 @@
265267
}else if( (flags & (C_EDITED | C_CHANGED)) && isChnged
266268
&& (isChnged<2 || isChnged>9) ){
267269
zClass = "EDITED";
268270
}else if( (flags & C_RENAMED) && isRenamed ){
269271
zClass = "RENAMED";
272
+ zOrigName = db_column_text(&q,8);
270273
}else if( (flags & C_UNCHANGED) && isManaged && !isNew
271274
&& !isChnged && !isRenamed ){
272275
zClass = "UNCHANGED";
273276
}else if( (flags & C_EXTRA) && !isManaged ){
274277
zClass = "EXTRA";
@@ -295,11 +298,15 @@
295298
file_relative_name(zFullName, &rewrittenPathname, 0);
296299
zDisplayName = blob_str(&rewrittenPathname);
297300
if( zDisplayName[0]=='.' && zDisplayName[1]=='/' ){
298301
zDisplayName += 2; /* no unnecessary ./ prefix */
299302
}
300
- blob_append(report, zDisplayName, -1);
303
+ if( (flags & (C_FILTER ^ C_RENAMED)) && zOrigName ){
304
+ blob_appendf(report, "%s -> %s", zOrigName, zDisplayName);
305
+ }else{
306
+ blob_append(report, zDisplayName, -1);
307
+ }
301308
}else{
302309
/* If not C_RELPATH, display paths relative to project root. */
303310
blob_append(report, zPathname, -1);
304311
}
305312
blob_append(report, "\n", 1);
@@ -2081,11 +2088,11 @@
20812088
char **pB = (char**)b;
20822089
return fossil_strcmp(pA[0], pB[0]);
20832090
}
20842091
20852092
/*
2086
-** COMMAND: ci*
2093
+** COMMAND: ci#
20872094
** COMMAND: commit
20882095
**
20892096
** Usage: %fossil commit ?OPTIONS? ?FILE...?
20902097
** or: %fossil ci ?OPTIONS? ?FILE...?
20912098
**
20922099
--- src/checkin.c
+++ src/checkin.c
@@ -153,11 +153,12 @@
153 blob_zero(&sql);
154 if( flags & C_ALL ){
155 /* Start with a list of all managed files. */
156 blob_append_sql(&sql,
157 "SELECT pathname, %s as mtime, %s as size, deleted, chnged, rid,"
158 " coalesce(origname!=pathname,0) AS renamed, 1 AS managed"
 
159 " FROM vfile LEFT JOIN blob USING (rid)"
160 " WHERE is_selected(id)%s",
161 flags & C_MTIME ? "datetime(checkin_mtime(:vid, rid), "
162 "'unixepoch', toLocal())" : "''" /*safe-for-%s*/,
163 flags & C_SIZE ? "coalesce(blob.size, 0)" : "0" /*safe-for-%s*/,
@@ -174,11 +175,11 @@
174 if( flags & C_EXTRA ){
175 if( blob_size(&sql) ){
176 blob_append_sql(&sql, " UNION ALL");
177 }
178 blob_append_sql(&sql,
179 " SELECT pathname, %s, %s, 0, 0, 0, 0, 0"
180 " FROM sfile WHERE pathname NOT IN (%s)%s",
181 flags & C_MTIME ? "datetime(mtime, 'unixepoch', toLocal())" : "''",
182 flags & C_SIZE ? "size" : "0",
183 fossil_all_reserved_names(0), blob_sql_text(&where));
184 }
@@ -211,10 +212,11 @@
211 int size = db_column_int(&q, 2);
212 int isDeleted = db_column_int(&q, 3);
213 int isChnged = db_column_int(&q, 4);
214 int isNew = isManaged && !db_column_int(&q, 5);
215 int isRenamed = db_column_int(&q, 6);
 
216 char *zFullName = mprintf("%s%s", g.zLocalRoot, zPathname);
217 int isMissing = !file_isfile_or_link(zFullName);
218
219 /* Determine the file change classification, if any. */
220 if( isDeleted ){
@@ -265,10 +267,11 @@
265 }else if( (flags & (C_EDITED | C_CHANGED)) && isChnged
266 && (isChnged<2 || isChnged>9) ){
267 zClass = "EDITED";
268 }else if( (flags & C_RENAMED) && isRenamed ){
269 zClass = "RENAMED";
 
270 }else if( (flags & C_UNCHANGED) && isManaged && !isNew
271 && !isChnged && !isRenamed ){
272 zClass = "UNCHANGED";
273 }else if( (flags & C_EXTRA) && !isManaged ){
274 zClass = "EXTRA";
@@ -295,11 +298,15 @@
295 file_relative_name(zFullName, &rewrittenPathname, 0);
296 zDisplayName = blob_str(&rewrittenPathname);
297 if( zDisplayName[0]=='.' && zDisplayName[1]=='/' ){
298 zDisplayName += 2; /* no unnecessary ./ prefix */
299 }
300 blob_append(report, zDisplayName, -1);
 
 
 
 
301 }else{
302 /* If not C_RELPATH, display paths relative to project root. */
303 blob_append(report, zPathname, -1);
304 }
305 blob_append(report, "\n", 1);
@@ -2081,11 +2088,11 @@
2081 char **pB = (char**)b;
2082 return fossil_strcmp(pA[0], pB[0]);
2083 }
2084
2085 /*
2086 ** COMMAND: ci*
2087 ** COMMAND: commit
2088 **
2089 ** Usage: %fossil commit ?OPTIONS? ?FILE...?
2090 ** or: %fossil ci ?OPTIONS? ?FILE...?
2091 **
2092
--- src/checkin.c
+++ src/checkin.c
@@ -153,11 +153,12 @@
153 blob_zero(&sql);
154 if( flags & C_ALL ){
155 /* Start with a list of all managed files. */
156 blob_append_sql(&sql,
157 "SELECT pathname, %s as mtime, %s as size, deleted, chnged, rid,"
158 " coalesce(origname!=pathname,0) AS renamed, 1 AS managed,"
159 " origname"
160 " FROM vfile LEFT JOIN blob USING (rid)"
161 " WHERE is_selected(id)%s",
162 flags & C_MTIME ? "datetime(checkin_mtime(:vid, rid), "
163 "'unixepoch', toLocal())" : "''" /*safe-for-%s*/,
164 flags & C_SIZE ? "coalesce(blob.size, 0)" : "0" /*safe-for-%s*/,
@@ -174,11 +175,11 @@
175 if( flags & C_EXTRA ){
176 if( blob_size(&sql) ){
177 blob_append_sql(&sql, " UNION ALL");
178 }
179 blob_append_sql(&sql,
180 " SELECT pathname, %s, %s, 0, 0, 0, 0, 0, NULL"
181 " FROM sfile WHERE pathname NOT IN (%s)%s",
182 flags & C_MTIME ? "datetime(mtime, 'unixepoch', toLocal())" : "''",
183 flags & C_SIZE ? "size" : "0",
184 fossil_all_reserved_names(0), blob_sql_text(&where));
185 }
@@ -211,10 +212,11 @@
212 int size = db_column_int(&q, 2);
213 int isDeleted = db_column_int(&q, 3);
214 int isChnged = db_column_int(&q, 4);
215 int isNew = isManaged && !db_column_int(&q, 5);
216 int isRenamed = db_column_int(&q, 6);
217 const char *zOrigName = 0;
218 char *zFullName = mprintf("%s%s", g.zLocalRoot, zPathname);
219 int isMissing = !file_isfile_or_link(zFullName);
220
221 /* Determine the file change classification, if any. */
222 if( isDeleted ){
@@ -265,10 +267,11 @@
267 }else if( (flags & (C_EDITED | C_CHANGED)) && isChnged
268 && (isChnged<2 || isChnged>9) ){
269 zClass = "EDITED";
270 }else if( (flags & C_RENAMED) && isRenamed ){
271 zClass = "RENAMED";
272 zOrigName = db_column_text(&q,8);
273 }else if( (flags & C_UNCHANGED) && isManaged && !isNew
274 && !isChnged && !isRenamed ){
275 zClass = "UNCHANGED";
276 }else if( (flags & C_EXTRA) && !isManaged ){
277 zClass = "EXTRA";
@@ -295,11 +298,15 @@
298 file_relative_name(zFullName, &rewrittenPathname, 0);
299 zDisplayName = blob_str(&rewrittenPathname);
300 if( zDisplayName[0]=='.' && zDisplayName[1]=='/' ){
301 zDisplayName += 2; /* no unnecessary ./ prefix */
302 }
303 if( (flags & (C_FILTER ^ C_RENAMED)) && zOrigName ){
304 blob_appendf(report, "%s -> %s", zOrigName, zDisplayName);
305 }else{
306 blob_append(report, zDisplayName, -1);
307 }
308 }else{
309 /* If not C_RELPATH, display paths relative to project root. */
310 blob_append(report, zPathname, -1);
311 }
312 blob_append(report, "\n", 1);
@@ -2081,11 +2088,11 @@
2088 char **pB = (char**)b;
2089 return fossil_strcmp(pA[0], pB[0]);
2090 }
2091
2092 /*
2093 ** COMMAND: ci#
2094 ** COMMAND: commit
2095 **
2096 ** Usage: %fossil commit ?OPTIONS? ?FILE...?
2097 ** or: %fossil ci ?OPTIONS? ?FILE...?
2098 **
2099
+2 -2
--- src/checkout.c
+++ src/checkout.c
@@ -257,11 +257,11 @@
257257
}
258258
259259
260260
/*
261261
** COMMAND: checkout*
262
-** COMMAND: co*
262
+** COMMAND: co#
263263
**
264264
** Usage: %fossil checkout ?VERSION | --latest? ?OPTIONS?
265265
** or: %fossil co ?VERSION | --latest? ?OPTIONS?
266266
**
267267
** NOTE: Most people use "fossil update" instead of "fossil checkout" for
@@ -278,11 +278,11 @@
278278
** The --latest flag can be used in place of VERSION to checkout the
279279
** latest version in the repository.
280280
**
281281
** Options:
282282
** --force Ignore edited files in the current checkout
283
-** --keep Only update the manifest and manifest.uuid files
283
+** --keep Only update the manifest file(s)
284284
** --force-missing Force checkout even if content is missing
285285
** --setmtime Set timestamps of all files to match their SCM-side
286286
** times (the timestamp of the last checkin which modified
287287
** them)
288288
**
289289
--- src/checkout.c
+++ src/checkout.c
@@ -257,11 +257,11 @@
257 }
258
259
260 /*
261 ** COMMAND: checkout*
262 ** COMMAND: co*
263 **
264 ** Usage: %fossil checkout ?VERSION | --latest? ?OPTIONS?
265 ** or: %fossil co ?VERSION | --latest? ?OPTIONS?
266 **
267 ** NOTE: Most people use "fossil update" instead of "fossil checkout" for
@@ -278,11 +278,11 @@
278 ** The --latest flag can be used in place of VERSION to checkout the
279 ** latest version in the repository.
280 **
281 ** Options:
282 ** --force Ignore edited files in the current checkout
283 ** --keep Only update the manifest and manifest.uuid files
284 ** --force-missing Force checkout even if content is missing
285 ** --setmtime Set timestamps of all files to match their SCM-side
286 ** times (the timestamp of the last checkin which modified
287 ** them)
288 **
289
--- src/checkout.c
+++ src/checkout.c
@@ -257,11 +257,11 @@
257 }
258
259
260 /*
261 ** COMMAND: checkout*
262 ** COMMAND: co#
263 **
264 ** Usage: %fossil checkout ?VERSION | --latest? ?OPTIONS?
265 ** or: %fossil co ?VERSION | --latest? ?OPTIONS?
266 **
267 ** NOTE: Most people use "fossil update" instead of "fossil checkout" for
@@ -278,11 +278,11 @@
278 ** The --latest flag can be used in place of VERSION to checkout the
279 ** latest version in the repository.
280 **
281 ** Options:
282 ** --force Ignore edited files in the current checkout
283 ** --keep Only update the manifest file(s)
284 ** --force-missing Force checkout even if content is missing
285 ** --setmtime Set timestamps of all files to match their SCM-side
286 ** times (the timestamp of the last checkin which modified
287 ** them)
288 **
289
--- src/configure.c
+++ src/configure.c
@@ -844,11 +844,13 @@
844844
url_enable_proxy("via proxy: ");
845845
if( overwriteFlag ) mask |= CONFIGSET_OVERWRITE;
846846
if( strncmp(zMethod, "push", n)==0 ){
847847
client_sync(0,0,(unsigned)mask,0);
848848
}else if( strncmp(zMethod, "pull", n)==0 ){
849
+ if( overwriteFlag ) db_unprotect(PROTECT_USER);
849850
client_sync(0,(unsigned)mask,0,0);
851
+ if( overwriteFlag ) db_protect_pop();
850852
}else{
851853
client_sync(0,(unsigned)mask,(unsigned)mask,0);
852854
}
853855
}else
854856
if( strncmp(zMethod, "reset", n)==0 ){
855857
--- src/configure.c
+++ src/configure.c
@@ -844,11 +844,13 @@
844 url_enable_proxy("via proxy: ");
845 if( overwriteFlag ) mask |= CONFIGSET_OVERWRITE;
846 if( strncmp(zMethod, "push", n)==0 ){
847 client_sync(0,0,(unsigned)mask,0);
848 }else if( strncmp(zMethod, "pull", n)==0 ){
 
849 client_sync(0,(unsigned)mask,0,0);
 
850 }else{
851 client_sync(0,(unsigned)mask,(unsigned)mask,0);
852 }
853 }else
854 if( strncmp(zMethod, "reset", n)==0 ){
855
--- src/configure.c
+++ src/configure.c
@@ -844,11 +844,13 @@
844 url_enable_proxy("via proxy: ");
845 if( overwriteFlag ) mask |= CONFIGSET_OVERWRITE;
846 if( strncmp(zMethod, "push", n)==0 ){
847 client_sync(0,0,(unsigned)mask,0);
848 }else if( strncmp(zMethod, "pull", n)==0 ){
849 if( overwriteFlag ) db_unprotect(PROTECT_USER);
850 client_sync(0,(unsigned)mask,0,0);
851 if( overwriteFlag ) db_protect_pop();
852 }else{
853 client_sync(0,(unsigned)mask,(unsigned)mask,0);
854 }
855 }else
856 if( strncmp(zMethod, "reset", n)==0 ){
857
+19 -11
--- src/db.c
+++ src/db.c
@@ -125,11 +125,11 @@
125125
int nPrepare; /* Number of calls to sqlite3_prepare_v2() */
126126
int nDeleteOnFail; /* Number of entries in azDeleteOnFail[] */
127127
struct sCommitHook {
128128
int (*xHook)(void); /* Functions to call at db_end_transaction() */
129129
int sequence; /* Call functions in sequence order */
130
- } aHook[5];
130
+ } aHook[6];
131131
char *azDeleteOnFail[3]; /* Files to delete on a failure */
132132
char *azBeforeCommit[5]; /* Commands to run prior to COMMIT */
133133
int nBeforeCommit; /* Number of entries in azBeforeCommit */
134134
int nPriorChanges; /* sqlite3_total_changes() at transaction start */
135135
const char *zStartFile; /* File in which transaction was started */
@@ -1464,10 +1464,14 @@
14641464
db_protected_setting_func, 0, 0);
14651465
sqlite3_create_function(db, "win_reserved", 1, SQLITE_UTF8, 0,
14661466
db_win_reserved_func,0,0);
14671467
sqlite3_create_function(db, "url_nouser", 1, SQLITE_UTF8, 0,
14681468
url_nouser_func,0,0);
1469
+ sqlite3_create_function(db, "chat_msg_from_event", 4,
1470
+ SQLITE_UTF8 | SQLITE_INNOCUOUS, 0,
1471
+ chat_msg_from_event, 0, 0);
1472
+
14691473
}
14701474
14711475
#if USE_SEE
14721476
/*
14731477
** This is a pointer to the saved database encryption key string.
@@ -1614,10 +1618,11 @@
16141618
void db_read_saved_encryption_key_from_process_via_th1(
16151619
const char *zConfig /* The TH1 script to evaluate. */
16161620
){
16171621
int rc;
16181622
char *zResult;
1623
+ char *zPwd = file_getcwd(0, 0);
16191624
Th_FossilInit(TH_INIT_DEFAULT | TH_INIT_NEED_CONFIG | TH_INIT_NO_REPO);
16201625
rc = Th_Eval(g.interp, 0, zConfig, -1);
16211626
zResult = (char*)Th_GetResult(g.interp, 0);
16221627
if( rc!=TH_OK ){
16231628
fossil_fatal("script for pid key failed: %s", zResult);
@@ -1627,10 +1632,12 @@
16271632
LPVOID pAddress = NULL;
16281633
SIZE_T nSize = 0;
16291634
parse_pid_key_value(zResult, &processId, &pAddress, &nSize);
16301635
db_read_saved_encryption_key_from_process(processId, pAddress, nSize);
16311636
}
1637
+ file_chdir(zPwd, 0);
1638
+ fossil_free(zPwd);
16321639
}
16331640
#endif /* defined(_WIN32) */
16341641
#endif /* USE_SEE */
16351642
16361643
/*
@@ -2803,11 +2810,11 @@
28032810
manifest_crosslink(rid, &manifest, MC_NONE);
28042811
}
28052812
}
28062813
28072814
/*
2808
-** COMMAND: new*
2815
+** COMMAND: new#
28092816
** COMMAND: init
28102817
**
28112818
** Usage: %fossil new ?OPTIONS? FILENAME
28122819
** or: %fossil init ?OPTIONS? FILENAME
28132820
**
@@ -3047,11 +3054,11 @@
30473054
sqlite3_result_int(context, file_is_win_reserved(zName)!=0);
30483055
}
30493056
}
30503057
30513058
/*
3052
-** Convert the input string into a artifact hash. Make a notation in the
3059
+** Convert the input string into an artifact hash. Make a notation in the
30533060
** CONCEALED table so that the hash can be undo using the db_reveal()
30543061
** function at some later time.
30553062
**
30563063
** The value returned is stored in static space and will be overwritten
30573064
** on subsequent calls.
@@ -3679,11 +3686,11 @@
36793686
** with the local repository. If you commit this checkout,
36803687
** it will become a new "initial" commit in the repository.
36813688
** -f|--force Continue with the open even if the working directory is
36823689
** not empty.
36833690
** --force-missing Force opening a repository with missing content
3684
-** -k|--keep Only modify the manifest and manifest.uuid files
3691
+** -k|--keep Only modify the manifest file(s)
36853692
** --nested Allow opening a repository inside an opened checkout
36863693
** --nosync Do not auto-sync the repository prior to opening even
36873694
** if the autosync setting is on.
36883695
** --repodir DIR If REPOSITORY is a URI that will be cloned, store
36893696
** the clone in DIR rather than in "."
@@ -4252,20 +4259,21 @@
42524259
** If true, then the Fossil web server will redirect unencrypted
42534260
** login screen requests to HTTPS.
42544261
*/
42554262
/*
42564263
** SETTING: ignore-glob width=40 versionable block-text
4257
-** The value is a comma or newline-separated list of GLOB
4258
-** patterns specifying files that the "add", "addremove",
4259
-** "clean", and "extras" commands will ignore.
4264
+** The value is a list of GLOB patterns, separated by spaces,
4265
+** commas, or newlines, specifying files that the "add",
4266
+** "addremove", "clean", and "extras" commands will ignore.
42604267
**
4261
-** Example: *.log customCode.c notes.txt
4268
+** Example: *.log, customCode.c, notes.txt
42624269
*/
42634270
/*
42644271
** SETTING: keep-glob width=40 versionable block-text
4265
-** The value is a comma or newline-separated list of GLOB
4266
-** patterns specifying files that the "clean" command will keep.
4272
+** The value is list of GLOB patterns, separated by spaces,
4273
+** commas, or newlines, specifying files that the "clean"
4274
+** command will keep.
42674275
*/
42684276
/*
42694277
** SETTING: localauth boolean default=off
42704278
** If enabled, require that HTTP connections from the loopback
42714279
** address (127.0.0.1) be authenticated by password. If false,
@@ -4769,11 +4777,11 @@
47694777
**
47704778
** The purpose of this command is for testing the WITHOUT ROWID capabilities
47714779
** of SQLite. There is no big advantage to using WITHOUT ROWID in Fossil.
47724780
**
47734781
** Options:
4774
-** --dryrun | -n No changes. Just print what would happen.
4782
+** --dry-run | -n No changes. Just print what would happen.
47754783
*/
47764784
void test_without_rowid(void){
47774785
int i, j;
47784786
Stmt q;
47794787
Blob allSql;
47804788
--- src/db.c
+++ src/db.c
@@ -125,11 +125,11 @@
125 int nPrepare; /* Number of calls to sqlite3_prepare_v2() */
126 int nDeleteOnFail; /* Number of entries in azDeleteOnFail[] */
127 struct sCommitHook {
128 int (*xHook)(void); /* Functions to call at db_end_transaction() */
129 int sequence; /* Call functions in sequence order */
130 } aHook[5];
131 char *azDeleteOnFail[3]; /* Files to delete on a failure */
132 char *azBeforeCommit[5]; /* Commands to run prior to COMMIT */
133 int nBeforeCommit; /* Number of entries in azBeforeCommit */
134 int nPriorChanges; /* sqlite3_total_changes() at transaction start */
135 const char *zStartFile; /* File in which transaction was started */
@@ -1464,10 +1464,14 @@
1464 db_protected_setting_func, 0, 0);
1465 sqlite3_create_function(db, "win_reserved", 1, SQLITE_UTF8, 0,
1466 db_win_reserved_func,0,0);
1467 sqlite3_create_function(db, "url_nouser", 1, SQLITE_UTF8, 0,
1468 url_nouser_func,0,0);
 
 
 
 
1469 }
1470
1471 #if USE_SEE
1472 /*
1473 ** This is a pointer to the saved database encryption key string.
@@ -1614,10 +1618,11 @@
1614 void db_read_saved_encryption_key_from_process_via_th1(
1615 const char *zConfig /* The TH1 script to evaluate. */
1616 ){
1617 int rc;
1618 char *zResult;
 
1619 Th_FossilInit(TH_INIT_DEFAULT | TH_INIT_NEED_CONFIG | TH_INIT_NO_REPO);
1620 rc = Th_Eval(g.interp, 0, zConfig, -1);
1621 zResult = (char*)Th_GetResult(g.interp, 0);
1622 if( rc!=TH_OK ){
1623 fossil_fatal("script for pid key failed: %s", zResult);
@@ -1627,10 +1632,12 @@
1627 LPVOID pAddress = NULL;
1628 SIZE_T nSize = 0;
1629 parse_pid_key_value(zResult, &processId, &pAddress, &nSize);
1630 db_read_saved_encryption_key_from_process(processId, pAddress, nSize);
1631 }
 
 
1632 }
1633 #endif /* defined(_WIN32) */
1634 #endif /* USE_SEE */
1635
1636 /*
@@ -2803,11 +2810,11 @@
2803 manifest_crosslink(rid, &manifest, MC_NONE);
2804 }
2805 }
2806
2807 /*
2808 ** COMMAND: new*
2809 ** COMMAND: init
2810 **
2811 ** Usage: %fossil new ?OPTIONS? FILENAME
2812 ** or: %fossil init ?OPTIONS? FILENAME
2813 **
@@ -3047,11 +3054,11 @@
3047 sqlite3_result_int(context, file_is_win_reserved(zName)!=0);
3048 }
3049 }
3050
3051 /*
3052 ** Convert the input string into a artifact hash. Make a notation in the
3053 ** CONCEALED table so that the hash can be undo using the db_reveal()
3054 ** function at some later time.
3055 **
3056 ** The value returned is stored in static space and will be overwritten
3057 ** on subsequent calls.
@@ -3679,11 +3686,11 @@
3679 ** with the local repository. If you commit this checkout,
3680 ** it will become a new "initial" commit in the repository.
3681 ** -f|--force Continue with the open even if the working directory is
3682 ** not empty.
3683 ** --force-missing Force opening a repository with missing content
3684 ** -k|--keep Only modify the manifest and manifest.uuid files
3685 ** --nested Allow opening a repository inside an opened checkout
3686 ** --nosync Do not auto-sync the repository prior to opening even
3687 ** if the autosync setting is on.
3688 ** --repodir DIR If REPOSITORY is a URI that will be cloned, store
3689 ** the clone in DIR rather than in "."
@@ -4252,20 +4259,21 @@
4252 ** If true, then the Fossil web server will redirect unencrypted
4253 ** login screen requests to HTTPS.
4254 */
4255 /*
4256 ** SETTING: ignore-glob width=40 versionable block-text
4257 ** The value is a comma or newline-separated list of GLOB
4258 ** patterns specifying files that the "add", "addremove",
4259 ** "clean", and "extras" commands will ignore.
4260 **
4261 ** Example: *.log customCode.c notes.txt
4262 */
4263 /*
4264 ** SETTING: keep-glob width=40 versionable block-text
4265 ** The value is a comma or newline-separated list of GLOB
4266 ** patterns specifying files that the "clean" command will keep.
 
4267 */
4268 /*
4269 ** SETTING: localauth boolean default=off
4270 ** If enabled, require that HTTP connections from the loopback
4271 ** address (127.0.0.1) be authenticated by password. If false,
@@ -4769,11 +4777,11 @@
4769 **
4770 ** The purpose of this command is for testing the WITHOUT ROWID capabilities
4771 ** of SQLite. There is no big advantage to using WITHOUT ROWID in Fossil.
4772 **
4773 ** Options:
4774 ** --dryrun | -n No changes. Just print what would happen.
4775 */
4776 void test_without_rowid(void){
4777 int i, j;
4778 Stmt q;
4779 Blob allSql;
4780
--- src/db.c
+++ src/db.c
@@ -125,11 +125,11 @@
125 int nPrepare; /* Number of calls to sqlite3_prepare_v2() */
126 int nDeleteOnFail; /* Number of entries in azDeleteOnFail[] */
127 struct sCommitHook {
128 int (*xHook)(void); /* Functions to call at db_end_transaction() */
129 int sequence; /* Call functions in sequence order */
130 } aHook[6];
131 char *azDeleteOnFail[3]; /* Files to delete on a failure */
132 char *azBeforeCommit[5]; /* Commands to run prior to COMMIT */
133 int nBeforeCommit; /* Number of entries in azBeforeCommit */
134 int nPriorChanges; /* sqlite3_total_changes() at transaction start */
135 const char *zStartFile; /* File in which transaction was started */
@@ -1464,10 +1464,14 @@
1464 db_protected_setting_func, 0, 0);
1465 sqlite3_create_function(db, "win_reserved", 1, SQLITE_UTF8, 0,
1466 db_win_reserved_func,0,0);
1467 sqlite3_create_function(db, "url_nouser", 1, SQLITE_UTF8, 0,
1468 url_nouser_func,0,0);
1469 sqlite3_create_function(db, "chat_msg_from_event", 4,
1470 SQLITE_UTF8 | SQLITE_INNOCUOUS, 0,
1471 chat_msg_from_event, 0, 0);
1472
1473 }
1474
1475 #if USE_SEE
1476 /*
1477 ** This is a pointer to the saved database encryption key string.
@@ -1614,10 +1618,11 @@
1618 void db_read_saved_encryption_key_from_process_via_th1(
1619 const char *zConfig /* The TH1 script to evaluate. */
1620 ){
1621 int rc;
1622 char *zResult;
1623 char *zPwd = file_getcwd(0, 0);
1624 Th_FossilInit(TH_INIT_DEFAULT | TH_INIT_NEED_CONFIG | TH_INIT_NO_REPO);
1625 rc = Th_Eval(g.interp, 0, zConfig, -1);
1626 zResult = (char*)Th_GetResult(g.interp, 0);
1627 if( rc!=TH_OK ){
1628 fossil_fatal("script for pid key failed: %s", zResult);
@@ -1627,10 +1632,12 @@
1632 LPVOID pAddress = NULL;
1633 SIZE_T nSize = 0;
1634 parse_pid_key_value(zResult, &processId, &pAddress, &nSize);
1635 db_read_saved_encryption_key_from_process(processId, pAddress, nSize);
1636 }
1637 file_chdir(zPwd, 0);
1638 fossil_free(zPwd);
1639 }
1640 #endif /* defined(_WIN32) */
1641 #endif /* USE_SEE */
1642
1643 /*
@@ -2803,11 +2810,11 @@
2810 manifest_crosslink(rid, &manifest, MC_NONE);
2811 }
2812 }
2813
2814 /*
2815 ** COMMAND: new#
2816 ** COMMAND: init
2817 **
2818 ** Usage: %fossil new ?OPTIONS? FILENAME
2819 ** or: %fossil init ?OPTIONS? FILENAME
2820 **
@@ -3047,11 +3054,11 @@
3054 sqlite3_result_int(context, file_is_win_reserved(zName)!=0);
3055 }
3056 }
3057
3058 /*
3059 ** Convert the input string into an artifact hash. Make a notation in the
3060 ** CONCEALED table so that the hash can be undo using the db_reveal()
3061 ** function at some later time.
3062 **
3063 ** The value returned is stored in static space and will be overwritten
3064 ** on subsequent calls.
@@ -3679,11 +3686,11 @@
3686 ** with the local repository. If you commit this checkout,
3687 ** it will become a new "initial" commit in the repository.
3688 ** -f|--force Continue with the open even if the working directory is
3689 ** not empty.
3690 ** --force-missing Force opening a repository with missing content
3691 ** -k|--keep Only modify the manifest file(s)
3692 ** --nested Allow opening a repository inside an opened checkout
3693 ** --nosync Do not auto-sync the repository prior to opening even
3694 ** if the autosync setting is on.
3695 ** --repodir DIR If REPOSITORY is a URI that will be cloned, store
3696 ** the clone in DIR rather than in "."
@@ -4252,20 +4259,21 @@
4259 ** If true, then the Fossil web server will redirect unencrypted
4260 ** login screen requests to HTTPS.
4261 */
4262 /*
4263 ** SETTING: ignore-glob width=40 versionable block-text
4264 ** The value is a list of GLOB patterns, separated by spaces,
4265 ** commas, or newlines, specifying files that the "add",
4266 ** "addremove", "clean", and "extras" commands will ignore.
4267 **
4268 ** Example: *.log, customCode.c, notes.txt
4269 */
4270 /*
4271 ** SETTING: keep-glob width=40 versionable block-text
4272 ** The value is list of GLOB patterns, separated by spaces,
4273 ** commas, or newlines, specifying files that the "clean"
4274 ** command will keep.
4275 */
4276 /*
4277 ** SETTING: localauth boolean default=off
4278 ** If enabled, require that HTTP connections from the loopback
4279 ** address (127.0.0.1) be authenticated by password. If false,
@@ -4769,11 +4777,11 @@
4777 **
4778 ** The purpose of this command is for testing the WITHOUT ROWID capabilities
4779 ** of SQLite. There is no big advantage to using WITHOUT ROWID in Fossil.
4780 **
4781 ** Options:
4782 ** --dry-run | -n No changes. Just print what would happen.
4783 */
4784 void test_without_rowid(void){
4785 int i, j;
4786 Stmt q;
4787 Blob allSql;
4788
--- src/default.css
+++ src/default.css
@@ -236,10 +236,13 @@
236236
}
237237
.columns li {
238238
break-inside: avoid;
239239
page-break-inside: avoid;
240240
}
241
+body.help .columns li {
242
+ white-space: nowrap /* keep command name aliases from wrapping */;
243
+}
241244
.filetree {
242245
margin: 1em 0;
243246
line-height: 1.5;
244247
}
245248
.filetree > ul {
@@ -1577,10 +1580,16 @@
15771580
/* ^^^ Centered non-source-view elements */
15781581
div.pikchr-wrapper.center.source.source-inline > pre.pikchr-src,
15791582
div.pikchr-wrapper.center.source.source-inline > div.pikchr-svg
15801583
/* ^^^ Centered inline-source-view elements */{
15811584
display:inline-block/*allows parent text-align to do the alignment*/;
1585
+ /* ^^^^ Browser incompatibility: inline-block causes the centered
1586
+ pikchr to shrink to the point of illegiblity in Chrome. The
1587
+ closest match on Chrome seems to be using 'unset', which centers
1588
+ by virtue of stretching it to the width of the window. Similarly,
1589
+ using {display: grid; place-items: center} centers and sizes well
1590
+ on FF but Chrome shrinks it in the same way. */
15821591
}
15831592
div.pikchr-wrapper.indent:not(.source),
15841593
div.pikchr-wrapper.indent.source.source-inline{
15851594
margin-left: 4em;
15861595
}
15871596
--- src/default.css
+++ src/default.css
@@ -236,10 +236,13 @@
236 }
237 .columns li {
238 break-inside: avoid;
239 page-break-inside: avoid;
240 }
 
 
 
241 .filetree {
242 margin: 1em 0;
243 line-height: 1.5;
244 }
245 .filetree > ul {
@@ -1577,10 +1580,16 @@
1577 /* ^^^ Centered non-source-view elements */
1578 div.pikchr-wrapper.center.source.source-inline > pre.pikchr-src,
1579 div.pikchr-wrapper.center.source.source-inline > div.pikchr-svg
1580 /* ^^^ Centered inline-source-view elements */{
1581 display:inline-block/*allows parent text-align to do the alignment*/;
 
 
 
 
 
 
1582 }
1583 div.pikchr-wrapper.indent:not(.source),
1584 div.pikchr-wrapper.indent.source.source-inline{
1585 margin-left: 4em;
1586 }
1587
--- src/default.css
+++ src/default.css
@@ -236,10 +236,13 @@
236 }
237 .columns li {
238 break-inside: avoid;
239 page-break-inside: avoid;
240 }
241 body.help .columns li {
242 white-space: nowrap /* keep command name aliases from wrapping */;
243 }
244 .filetree {
245 margin: 1em 0;
246 line-height: 1.5;
247 }
248 .filetree > ul {
@@ -1577,10 +1580,16 @@
1580 /* ^^^ Centered non-source-view elements */
1581 div.pikchr-wrapper.center.source.source-inline > pre.pikchr-src,
1582 div.pikchr-wrapper.center.source.source-inline > div.pikchr-svg
1583 /* ^^^ Centered inline-source-view elements */{
1584 display:inline-block/*allows parent text-align to do the alignment*/;
1585 /* ^^^^ Browser incompatibility: inline-block causes the centered
1586 pikchr to shrink to the point of illegiblity in Chrome. The
1587 closest match on Chrome seems to be using 'unset', which centers
1588 by virtue of stretching it to the width of the window. Similarly,
1589 using {display: grid; place-items: center} centers and sizes well
1590 on FF but Chrome shrinks it in the same way. */
1591 }
1592 div.pikchr-wrapper.indent:not(.source),
1593 div.pikchr-wrapper.indent.source.source-inline{
1594 margin-left: 4em;
1595 }
1596
+2
--- src/diff.c
+++ src/diff.c
@@ -47,10 +47,11 @@
4747
#define DIFF_JSON 0x00010000 /* JSON output */
4848
#define DIFF_DEBUG 0x00020000 /* Debugging diff output */
4949
#define DIFF_RAW 0x00040000 /* Raw triples - for debugging */
5050
#define DIFF_TCL 0x00080000 /* For the --tk option */
5151
#define DIFF_INCBINARY 0x00100000 /* The --diff-binary option */
52
+#define DIFF_SHOW_VERS 0x00200000 /* Show compared versions */
5253
5354
/*
5455
** These error messages are shared in multiple locations. They are defined
5556
** here for consistency.
5657
*/
@@ -3161,10 +3162,11 @@
31613162
pCfg->wColumn = f;
31623163
}
31633164
if( find_option("linenum","n",0)!=0 ) diffFlags |= DIFF_LINENO;
31643165
if( find_option("noopt",0,0)!=0 ) diffFlags |= DIFF_NOOPT;
31653166
if( find_option("numstat",0,0)!=0 ) diffFlags |= DIFF_NUMSTAT;
3167
+ if( find_option("versions","h",0)!=0 ) diffFlags |= DIFF_SHOW_VERS;
31663168
if( find_option("invert",0,0)!=0 ) diffFlags |= DIFF_INVERT;
31673169
if( find_option("brief",0,0)!=0 ) diffFlags |= DIFF_BRIEF;
31683170
if( find_option("internal","i",0)==0
31693171
&& (diffFlags & (DIFF_HTML|DIFF_TCL|DIFF_DEBUG|DIFF_JSON))==0
31703172
){
31713173
--- src/diff.c
+++ src/diff.c
@@ -47,10 +47,11 @@
47 #define DIFF_JSON 0x00010000 /* JSON output */
48 #define DIFF_DEBUG 0x00020000 /* Debugging diff output */
49 #define DIFF_RAW 0x00040000 /* Raw triples - for debugging */
50 #define DIFF_TCL 0x00080000 /* For the --tk option */
51 #define DIFF_INCBINARY 0x00100000 /* The --diff-binary option */
 
52
53 /*
54 ** These error messages are shared in multiple locations. They are defined
55 ** here for consistency.
56 */
@@ -3161,10 +3162,11 @@
3161 pCfg->wColumn = f;
3162 }
3163 if( find_option("linenum","n",0)!=0 ) diffFlags |= DIFF_LINENO;
3164 if( find_option("noopt",0,0)!=0 ) diffFlags |= DIFF_NOOPT;
3165 if( find_option("numstat",0,0)!=0 ) diffFlags |= DIFF_NUMSTAT;
 
3166 if( find_option("invert",0,0)!=0 ) diffFlags |= DIFF_INVERT;
3167 if( find_option("brief",0,0)!=0 ) diffFlags |= DIFF_BRIEF;
3168 if( find_option("internal","i",0)==0
3169 && (diffFlags & (DIFF_HTML|DIFF_TCL|DIFF_DEBUG|DIFF_JSON))==0
3170 ){
3171
--- src/diff.c
+++ src/diff.c
@@ -47,10 +47,11 @@
47 #define DIFF_JSON 0x00010000 /* JSON output */
48 #define DIFF_DEBUG 0x00020000 /* Debugging diff output */
49 #define DIFF_RAW 0x00040000 /* Raw triples - for debugging */
50 #define DIFF_TCL 0x00080000 /* For the --tk option */
51 #define DIFF_INCBINARY 0x00100000 /* The --diff-binary option */
52 #define DIFF_SHOW_VERS 0x00200000 /* Show compared versions */
53
54 /*
55 ** These error messages are shared in multiple locations. They are defined
56 ** here for consistency.
57 */
@@ -3161,10 +3162,11 @@
3162 pCfg->wColumn = f;
3163 }
3164 if( find_option("linenum","n",0)!=0 ) diffFlags |= DIFF_LINENO;
3165 if( find_option("noopt",0,0)!=0 ) diffFlags |= DIFF_NOOPT;
3166 if( find_option("numstat",0,0)!=0 ) diffFlags |= DIFF_NUMSTAT;
3167 if( find_option("versions","h",0)!=0 ) diffFlags |= DIFF_SHOW_VERS;
3168 if( find_option("invert",0,0)!=0 ) diffFlags |= DIFF_INVERT;
3169 if( find_option("brief",0,0)!=0 ) diffFlags |= DIFF_BRIEF;
3170 if( find_option("internal","i",0)==0
3171 && (diffFlags & (DIFF_HTML|DIFF_TCL|DIFF_DEBUG|DIFF_JSON))==0
3172 ){
3173
+39 -1
--- src/diffcmd.c
+++ src/diffcmd.c
@@ -109,10 +109,37 @@
109109
p->nUsed++;
110110
return 1;
111111
}
112112
return 0;
113113
}
114
+
115
+/*
116
+** Print details about the compared versions - possibly the working directory
117
+** or the undo buffer. For check-ins, show hash and commit time.
118
+**
119
+** This is intended primarily to go into the "header garbage" that is ignored
120
+** by patch(1).
121
+**
122
+** zFrom and zTo are interpreted as symbolic version names, unless they
123
+** start with '(', in which case they are printed directly.
124
+*/
125
+void diff_print_versions(const char *zFrom, const char *zTo, DiffConfig *pCfg){
126
+ if( (pCfg->diffFlags & (DIFF_SIDEBYSIDE|DIFF_BRIEF|DIFF_NUMSTAT|
127
+ DIFF_HTML|DIFF_WEBPAGE|DIFF_BROWSER|DIFF_JSON|DIFF_TCL))==0 ){
128
+ fossil_print("Fossil-Diff-From: %s\n",
129
+ zFrom[0]=='(' ? zFrom : mprintf("%S %s",
130
+ rid_to_uuid(symbolic_name_to_rid(zFrom, "ci")),
131
+ db_text("","SELECT datetime(%f)||' UTC'",
132
+ symbolic_name_to_mtime(zFrom, 0))));
133
+ fossil_print("Fossil-Diff-To: %s\n",
134
+ zTo[0]=='(' ? zTo : mprintf("%S %s",
135
+ rid_to_uuid(symbolic_name_to_rid(zTo, "ci")),
136
+ db_text("","SELECT datetime(%f)||' UTC'",
137
+ symbolic_name_to_mtime(zTo, 0))));
138
+ fossil_print("%.66c\n", '-');
139
+ }
140
+}
114141
115142
/*
116143
** Print the "Index:" message that patches wants to see at the top of a diff.
117144
*/
118145
void diff_print_index(const char *zFile, DiffConfig *pCfg, Blob *pOut){
@@ -125,10 +152,11 @@
125152
}
126153
127154
/*
128155
** Print the +++/--- filename lines or whatever filename information
129156
** is appropriate for the output format.
157
+**
130158
*/
131159
void diff_print_filenames(
132160
const char *zLeft, /* Name of the left file */
133161
const char *zRight, /* Name of the right file */
134162
DiffConfig *pCfg, /* Diff configuration */
@@ -659,10 +687,14 @@
659687
" WHERE vid=%d"
660688
" AND (deleted OR chnged OR rid==0)"
661689
" ORDER BY pathname /*scan*/",
662690
vid
663691
);
692
+ }
693
+ if( (pCfg->diffFlags & DIFF_SHOW_VERS)!=0 ){
694
+ diff_print_versions(zFrom ? zFrom : db_lget("checkout-hash", 0),
695
+ "(workdir)", pCfg);
664696
}
665697
db_prepare(&q, "%s", blob_sql_text(&sql));
666698
blob_reset(&sql);
667699
while( db_step(&q)==SQLITE_ROW ){
668700
const char *zPathname = db_column_text(&q,0);
@@ -744,10 +776,13 @@
744776
){
745777
Stmt q;
746778
Blob content;
747779
db_prepare(&q, "SELECT pathname, content FROM undo");
748780
blob_init(&content, 0, 0);
781
+ if( (pCfg->diffFlags & DIFF_SHOW_VERS)!=0 ){
782
+ diff_print_versions("(undo)", "(workdir)", pCfg);
783
+ }
749784
while( db_step(&q)==SQLITE_ROW ){
750785
char *zFullName;
751786
const char *zFile = (const char*)db_column_text(&q, 0);
752787
if( !file_dir_match(pFileDir, zFile) ) continue;
753788
zFullName = mprintf("%s%s", g.zLocalRoot, zFile);
@@ -828,11 +863,13 @@
828863
manifest_file_rewind(pFrom);
829864
pFromFile = manifest_file_next(pFrom,0);
830865
pTo = manifest_get_by_name(zTo, 0);
831866
manifest_file_rewind(pTo);
832867
pToFile = manifest_file_next(pTo,0);
833
-
868
+ if( (pCfg->diffFlags & DIFF_SHOW_VERS)!=0 ){
869
+ diff_print_versions(zFrom, zTo, pCfg);
870
+ }
834871
while( pFromFile || pToFile ){
835872
int cmp;
836873
if( pFromFile==0 ){
837874
cmp = +1;
838875
}else if( pToFile==0 ){
@@ -1058,10 +1095,11 @@
10581095
** --tk Launch a Tcl/Tk GUI for display
10591096
** --to VERSION Select VERSION as target for the diff
10601097
** --undo Diff against the "undo" buffer
10611098
** --unified Unified diff
10621099
** -v|--verbose Output complete text of added or deleted files
1100
+** -h|--versions Show compared versions in the diff header
10631101
** --webpage Format output as a stand-alone HTML webpage
10641102
** -W|--width N Width of lines in side-by-side diff
10651103
** -Z|--ignore-trailing-space Ignore changes to end-of-line whitespace
10661104
*/
10671105
void diff_cmd(void){
10681106
--- src/diffcmd.c
+++ src/diffcmd.c
@@ -109,10 +109,37 @@
109 p->nUsed++;
110 return 1;
111 }
112 return 0;
113 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
115 /*
116 ** Print the "Index:" message that patches wants to see at the top of a diff.
117 */
118 void diff_print_index(const char *zFile, DiffConfig *pCfg, Blob *pOut){
@@ -125,10 +152,11 @@
125 }
126
127 /*
128 ** Print the +++/--- filename lines or whatever filename information
129 ** is appropriate for the output format.
 
130 */
131 void diff_print_filenames(
132 const char *zLeft, /* Name of the left file */
133 const char *zRight, /* Name of the right file */
134 DiffConfig *pCfg, /* Diff configuration */
@@ -659,10 +687,14 @@
659 " WHERE vid=%d"
660 " AND (deleted OR chnged OR rid==0)"
661 " ORDER BY pathname /*scan*/",
662 vid
663 );
 
 
 
 
664 }
665 db_prepare(&q, "%s", blob_sql_text(&sql));
666 blob_reset(&sql);
667 while( db_step(&q)==SQLITE_ROW ){
668 const char *zPathname = db_column_text(&q,0);
@@ -744,10 +776,13 @@
744 ){
745 Stmt q;
746 Blob content;
747 db_prepare(&q, "SELECT pathname, content FROM undo");
748 blob_init(&content, 0, 0);
 
 
 
749 while( db_step(&q)==SQLITE_ROW ){
750 char *zFullName;
751 const char *zFile = (const char*)db_column_text(&q, 0);
752 if( !file_dir_match(pFileDir, zFile) ) continue;
753 zFullName = mprintf("%s%s", g.zLocalRoot, zFile);
@@ -828,11 +863,13 @@
828 manifest_file_rewind(pFrom);
829 pFromFile = manifest_file_next(pFrom,0);
830 pTo = manifest_get_by_name(zTo, 0);
831 manifest_file_rewind(pTo);
832 pToFile = manifest_file_next(pTo,0);
833
 
 
834 while( pFromFile || pToFile ){
835 int cmp;
836 if( pFromFile==0 ){
837 cmp = +1;
838 }else if( pToFile==0 ){
@@ -1058,10 +1095,11 @@
1058 ** --tk Launch a Tcl/Tk GUI for display
1059 ** --to VERSION Select VERSION as target for the diff
1060 ** --undo Diff against the "undo" buffer
1061 ** --unified Unified diff
1062 ** -v|--verbose Output complete text of added or deleted files
 
1063 ** --webpage Format output as a stand-alone HTML webpage
1064 ** -W|--width N Width of lines in side-by-side diff
1065 ** -Z|--ignore-trailing-space Ignore changes to end-of-line whitespace
1066 */
1067 void diff_cmd(void){
1068
--- src/diffcmd.c
+++ src/diffcmd.c
@@ -109,10 +109,37 @@
109 p->nUsed++;
110 return 1;
111 }
112 return 0;
113 }
114
115 /*
116 ** Print details about the compared versions - possibly the working directory
117 ** or the undo buffer. For check-ins, show hash and commit time.
118 **
119 ** This is intended primarily to go into the "header garbage" that is ignored
120 ** by patch(1).
121 **
122 ** zFrom and zTo are interpreted as symbolic version names, unless they
123 ** start with '(', in which case they are printed directly.
124 */
125 void diff_print_versions(const char *zFrom, const char *zTo, DiffConfig *pCfg){
126 if( (pCfg->diffFlags & (DIFF_SIDEBYSIDE|DIFF_BRIEF|DIFF_NUMSTAT|
127 DIFF_HTML|DIFF_WEBPAGE|DIFF_BROWSER|DIFF_JSON|DIFF_TCL))==0 ){
128 fossil_print("Fossil-Diff-From: %s\n",
129 zFrom[0]=='(' ? zFrom : mprintf("%S %s",
130 rid_to_uuid(symbolic_name_to_rid(zFrom, "ci")),
131 db_text("","SELECT datetime(%f)||' UTC'",
132 symbolic_name_to_mtime(zFrom, 0))));
133 fossil_print("Fossil-Diff-To: %s\n",
134 zTo[0]=='(' ? zTo : mprintf("%S %s",
135 rid_to_uuid(symbolic_name_to_rid(zTo, "ci")),
136 db_text("","SELECT datetime(%f)||' UTC'",
137 symbolic_name_to_mtime(zTo, 0))));
138 fossil_print("%.66c\n", '-');
139 }
140 }
141
142 /*
143 ** Print the "Index:" message that patches wants to see at the top of a diff.
144 */
145 void diff_print_index(const char *zFile, DiffConfig *pCfg, Blob *pOut){
@@ -125,10 +152,11 @@
152 }
153
154 /*
155 ** Print the +++/--- filename lines or whatever filename information
156 ** is appropriate for the output format.
157 **
158 */
159 void diff_print_filenames(
160 const char *zLeft, /* Name of the left file */
161 const char *zRight, /* Name of the right file */
162 DiffConfig *pCfg, /* Diff configuration */
@@ -659,10 +687,14 @@
687 " WHERE vid=%d"
688 " AND (deleted OR chnged OR rid==0)"
689 " ORDER BY pathname /*scan*/",
690 vid
691 );
692 }
693 if( (pCfg->diffFlags & DIFF_SHOW_VERS)!=0 ){
694 diff_print_versions(zFrom ? zFrom : db_lget("checkout-hash", 0),
695 "(workdir)", pCfg);
696 }
697 db_prepare(&q, "%s", blob_sql_text(&sql));
698 blob_reset(&sql);
699 while( db_step(&q)==SQLITE_ROW ){
700 const char *zPathname = db_column_text(&q,0);
@@ -744,10 +776,13 @@
776 ){
777 Stmt q;
778 Blob content;
779 db_prepare(&q, "SELECT pathname, content FROM undo");
780 blob_init(&content, 0, 0);
781 if( (pCfg->diffFlags & DIFF_SHOW_VERS)!=0 ){
782 diff_print_versions("(undo)", "(workdir)", pCfg);
783 }
784 while( db_step(&q)==SQLITE_ROW ){
785 char *zFullName;
786 const char *zFile = (const char*)db_column_text(&q, 0);
787 if( !file_dir_match(pFileDir, zFile) ) continue;
788 zFullName = mprintf("%s%s", g.zLocalRoot, zFile);
@@ -828,11 +863,13 @@
863 manifest_file_rewind(pFrom);
864 pFromFile = manifest_file_next(pFrom,0);
865 pTo = manifest_get_by_name(zTo, 0);
866 manifest_file_rewind(pTo);
867 pToFile = manifest_file_next(pTo,0);
868 if( (pCfg->diffFlags & DIFF_SHOW_VERS)!=0 ){
869 diff_print_versions(zFrom, zTo, pCfg);
870 }
871 while( pFromFile || pToFile ){
872 int cmp;
873 if( pFromFile==0 ){
874 cmp = +1;
875 }else if( pToFile==0 ){
@@ -1058,10 +1095,11 @@
1095 ** --tk Launch a Tcl/Tk GUI for display
1096 ** --to VERSION Select VERSION as target for the diff
1097 ** --undo Diff against the "undo" buffer
1098 ** --unified Unified diff
1099 ** -v|--verbose Output complete text of added or deleted files
1100 ** -h|--versions Show compared versions in the diff header
1101 ** --webpage Format output as a stand-alone HTML webpage
1102 ** -W|--width N Width of lines in side-by-side diff
1103 ** -Z|--ignore-trailing-space Ignore changes to end-of-line whitespace
1104 */
1105 void diff_cmd(void){
1106
+124 -31
--- src/dispatch.c
+++ src/dispatch.c
@@ -31,10 +31,11 @@
3131
*/
3232
struct CmdOrPage {
3333
const char *zName; /* Name. Webpages start with "/". Commands do not */
3434
void (*xFunc)(void); /* Implementation function, or NULL for settings */
3535
const char *zHelp; /* Raw help text */
36
+ int iHelp; /* Index of help variable */
3637
unsigned int eCmdFlags; /* Flags */
3738
};
3839
3940
/***************************************************************************
4041
** These macros must match similar macros in mkindex.c
@@ -51,10 +52,11 @@
5152
#define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */
5253
#define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret POST content */
5354
/* NOTE: 0x0400 = CMDFLAG_SENSITIVE in mkindex.c! */
5455
#define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */
5556
#define CMDFLAG_LDAVG_EXEMPT 0x1000 /* Exempt from load_control() */
57
+#define CMDFLAG_ALIAS 0x2000 /* Command aliases */
5658
/**************************************************************************/
5759
5860
/* Values for the 2nd parameter to dispatch_name_search() */
5961
#define CMDFLAG_ANY 0x0038 /* Match anything */
6062
#define CMDFLAG_PREFIX 0x0200 /* Prefix match is ok */
@@ -77,10 +79,11 @@
7779
** source code files looking for header comments on the functions that
7880
** implement command and webpages.
7981
*/
8082
#include "page_index.h"
8183
#define MX_COMMAND count(aCommand)
84
+#define MX_HELP_DUP 5 /* Upper bound estimate on help string duplication */
8285
8386
/*
8487
** Given a command, webpage, or setting name in zName, find the corresponding
8588
** CmdOrPage object and return a pointer to that object in *ppCmd.
8689
**
@@ -546,45 +549,65 @@
546549
/*
547550
** Display help for all commands based on provided flags.
548551
*/
549552
static void display_all_help(int mask, int useHtml, int rawOut){
550553
int i;
554
+ unsigned char occHelp[FOSSIL_MX_CMDIDX] = {0}; /* Help string occurrences */
555
+ int bktHelp[FOSSIL_MX_CMDIDX][MX_HELP_DUP] = {0};/* Help strings -> commands*/
551556
if( useHtml ) fossil_print("<!--\n");
552557
fossil_print("Help text for:\n");
553558
if( mask & CMDFLAG_1ST_TIER ) fossil_print(" * Commands\n");
554559
if( mask & CMDFLAG_2ND_TIER ) fossil_print(" * Auxiliary commands\n");
560
+ if( mask & CMDFLAG_ALIAS ) fossil_print(" * Aliases\n");
555561
if( mask & CMDFLAG_TEST ) fossil_print(" * Test commands\n");
556562
if( mask & CMDFLAG_WEBPAGE ) fossil_print(" * Web pages\n");
557563
if( mask & CMDFLAG_SETTING ) fossil_print(" * Settings\n");
558564
if( useHtml ){
559565
fossil_print("-->\n");
560566
fossil_print("<!-- start_all_help -->\n");
561567
}else{
562568
fossil_print("---\n");
563569
}
570
+ /* Fill in help string buckets */
571
+ for(i=0; i<MX_COMMAND; i++){
572
+ if( (aCommand[i].eCmdFlags & mask)==0 ) continue;
573
+ else if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue;
574
+ bktHelp[aCommand[i].iHelp][occHelp[aCommand[i].iHelp]++] = i;
575
+ }
564576
for(i=0; i<MX_COMMAND; i++){
565577
if( (aCommand[i].eCmdFlags & mask)==0 ) continue;
566578
else if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue;
567
- if( useHtml ){
568
- Blob html;
569
- blob_init(&html, 0, 0);
570
- help_to_html(aCommand[i].zHelp, &html);
571
- fossil_print("<h1>%h</h1>\n", aCommand[i].zName);
572
- fossil_print("%s\n<hr>\n", blob_str(&html));
573
- blob_reset(&html);
574
- }else if( rawOut ){
575
- fossil_print("# %s\n", aCommand[i].zName);
576
- fossil_print("%s\n\n", aCommand[i].zHelp);
577
- }else{
578
- Blob txt;
579
- blob_init(&txt, 0, 0);
580
- help_to_text(aCommand[i].zHelp, &txt);
581
- fossil_print("# %s%s\n", aCommand[i].zName,
582
- (aCommand[i].eCmdFlags & CMDFLAG_VERSIONABLE)!=0 ?
583
- " (versionable)" : "");
584
- fossil_print("%s\n\n", blob_str(&txt));
585
- blob_reset(&txt);
579
+ if( occHelp[aCommand[i].iHelp] > 0 ){
580
+ int j;
581
+ if( useHtml ){
582
+ Blob html;
583
+ blob_init(&html, 0, 0);
584
+ help_to_html(aCommand[i].zHelp, &html);
585
+ for(j=0; j<occHelp[aCommand[i].iHelp]; j++){
586
+ fossil_print("<h1>%h</h1>\n",
587
+ aCommand[bktHelp[aCommand[i].iHelp][j]].zName);
588
+ }
589
+ fossil_print("%s\n<hr>\n", blob_str(&html));
590
+ blob_reset(&html);
591
+ }else if( rawOut ){
592
+ for(j=0; j<occHelp[aCommand[i].iHelp]; j++)
593
+ fossil_print("# %s\n", aCommand[bktHelp[aCommand[i].iHelp][j]].zName);
594
+ fossil_print("%s\n\n", aCommand[i].zHelp);
595
+ }else{
596
+ Blob txt;
597
+ blob_init(&txt, 0, 0);
598
+ help_to_text(aCommand[i].zHelp, &txt);
599
+ for(j=0; j<occHelp[aCommand[i].iHelp]; j++){
600
+ fossil_print("# %s%s\n",
601
+ aCommand[bktHelp[aCommand[i].iHelp][j]].zName,
602
+ (aCommand[i].eCmdFlags & CMDFLAG_VERSIONABLE)!=0 ?
603
+ " (versionable)" : "");
604
+ }
605
+ fossil_print("%s\n\n", blob_str(&txt));
606
+ blob_reset(&txt);
607
+ }
608
+ occHelp[aCommand[i].iHelp] = 0;
586609
}
587610
}
588611
if( useHtml ){
589612
fossil_print("<!-- end_all_help -->\n");
590613
}else{
@@ -601,17 +624,19 @@
601624
** Show help text for commands and pages. Useful for proof-reading.
602625
** Defaults to just the CLI commands. Specify --www to see only the
603626
** web pages, or --everything to see both commands and pages.
604627
**
605628
** Options:
606
-** -e|--everything Show all commands and pages.
629
+** -a|--aliases Show aliases.
630
+** -e|--everything Show all commands and pages. Omit aliases to
631
+** avoid duplicates.
632
+** -h|--html Transform output to HTML.
633
+** -o|--options Show global options.
634
+** -r|--raw No output formatting.
635
+** -s|--settings Show settings.
607636
** -t|--test Include test- commands.
608637
** -w|--www Show WWW pages.
609
-** -s|--settings Show settings.
610
-** -h|--html Transform output to HTML.
611
-** -r|--raw No output formatting.
612
-** -o|--options Show global options.
613638
*/
614639
void test_all_help_cmd(void){
615640
int mask = CMDFLAG_1ST_TIER | CMDFLAG_2ND_TIER;
616641
int useHtml = find_option("html","h",0)!=0;
617642
int rawOut = find_option("raw","r",0)!=0;
@@ -619,15 +644,18 @@
619644
if( find_option("www","w",0) ){
620645
mask = CMDFLAG_WEBPAGE;
621646
}
622647
if( find_option("everything","e",0) ){
623648
mask = CMDFLAG_1ST_TIER | CMDFLAG_2ND_TIER | CMDFLAG_WEBPAGE |
624
- CMDFLAG_SETTING | CMDFLAG_TEST;
649
+ CMDFLAG_ALIAS | CMDFLAG_SETTING | CMDFLAG_TEST;
625650
}
626651
if( find_option("settings","s",0) ){
627652
mask = CMDFLAG_SETTING;
628653
}
654
+ if( find_option("aliases","a",0) ){
655
+ mask = CMDFLAG_ALIAS;
656
+ }
629657
if( find_option("test","t",0) ){
630658
mask |= CMDFLAG_TEST;
631659
}
632660
display_all_help(mask, useHtml, rawOut);
633661
}
@@ -655,10 +683,12 @@
655683
countCmds( CMDFLAG_COMMAND ));
656684
fossil_print(" 1st tier %4d\n",
657685
countCmds( CMDFLAG_1ST_TIER ));
658686
fossil_print(" 2nd tier %4d\n",
659687
countCmds( CMDFLAG_2ND_TIER ));
688
+ fossil_print(" alias %4d\n",
689
+ countCmds( CMDFLAG_ALIAS ));
660690
fossil_print(" test %4d\n",
661691
countCmds( CMDFLAG_TEST ));
662692
fossil_print("web-pages: %4d\n",
663693
countCmds( CMDFLAG_WEBPAGE ));
664694
fossil_print("settings: %4d\n",
@@ -828,26 +858,56 @@
828858
@ </div>
829859
}
830860
}
831861
}else{
832862
int i;
833
-
863
+ unsigned char occHelp[FOSSIL_MX_CMDIDX] = {0}; /* Help str occurrences */
864
+ int bktHelp[FOSSIL_MX_CMDIDX][MX_HELP_DUP] = {0};/* Help str -> commands */
834865
style_header("Help");
835866
836867
@ <a name='commands'></a>
837868
@ <h1>Available commands:</h1>
838869
@ <div class="columns" style="column-width: 12ex;">
839870
@ <ul>
871
+ /* Fill in help string buckets */
872
+ for(i=0; i<MX_COMMAND; i++){
873
+ if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue;
874
+ bktHelp[aCommand[i].iHelp][occHelp[aCommand[i].iHelp]++] = i;
875
+ }
840876
for(i=0; i<MX_COMMAND; i++){
841877
const char *z = aCommand[i].zName;
842878
const char *zBoldOn = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"<b>" :"";
843879
const char *zBoldOff = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"</b>":"";
844880
if( '/'==*z || strncmp(z,"test",4)==0 ) continue;
845881
if( (aCommand[i].eCmdFlags & CMDFLAG_SETTING)!=0 ) continue;
846882
else if( (aCommand[i].eCmdFlags & CMDFLAG_HIDDEN)!=0 ) continue;
847
- @ <li><a href="%R/help?cmd=%s(z)">%s(zBoldOn)%s(z)%s(zBoldOff)</a></li>
883
+ else if( (aCommand[i].eCmdFlags & CMDFLAG_ALIAS)!=0 ) continue;
884
+ @ <li><a href="%R/help?cmd=%s(z)">%s(zBoldOn)%s(z)%s(zBoldOff)</a>
885
+ /* Output aliases */
886
+ if( occHelp[aCommand[i].iHelp] > 1 ){
887
+ int j;
888
+ int aliases[MX_HELP_DUP], nAliases=0;
889
+ for(j=0; j<occHelp[aCommand[i].iHelp]; j++){
890
+ if( bktHelp[aCommand[i].iHelp][j] != i ){
891
+ if( aCommand[bktHelp[aCommand[i].iHelp][j]].eCmdFlags & CMDFLAG_ALIAS ){
892
+ aliases[nAliases++] = bktHelp[aCommand[i].iHelp][j];
893
+ }
894
+ }
895
+ }
896
+ if( nAliases>0 ){
897
+ int k;
898
+ @(\
899
+ for(k=0; k<nAliases; k++){
900
+ @<a href="%R/help?cmd=%s(aCommand[aliases[k]].zName)">\
901
+ @%s(aCommand[aliases[k]].zName)</a>%s((k<nAliases-1)?", ":"")\
902
+ }
903
+ @)\
904
+ }
905
+ }
906
+ @ </li>
848907
}
908
+
849909
@ </ul></div>
850910
851911
@ <a name='webpages'></a>
852912
@ <h1>Available web UI pages:</h1>
853913
@ <div class="columns" style="column-width: 18ex;">
@@ -905,22 +965,31 @@
905965
**
906966
** Show all help text on a single page. Useful for proof-reading.
907967
*/
908968
void test_all_help_page(void){
909969
int i;
970
+ unsigned char occHelp[FOSSIL_MX_CMDIDX] = {0}; /* Help string occurrences */
971
+ int bktHelp[FOSSIL_MX_CMDIDX][MX_HELP_DUP] = {0};/* Help strings -> commands*/
910972
Blob buf;
911973
blob_init(&buf,0,0);
912974
style_set_current_feature("test");
913975
style_header("All Help Text");
914976
@ <dl>
977
+ /* Fill in help string buckets */
978
+ for(i=0; i<MX_COMMAND; i++){
979
+ if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue;
980
+ bktHelp[aCommand[i].iHelp][occHelp[aCommand[i].iHelp]++] = i;
981
+ }
915982
for(i=0; i<MX_COMMAND; i++){
916983
const char *zDesc;
917984
unsigned int e = aCommand[i].eCmdFlags;
918985
if( e & CMDFLAG_1ST_TIER ){
919986
zDesc = "1st tier command";
920987
}else if( e & CMDFLAG_2ND_TIER ){
921988
zDesc = "2nd tier command";
989
+ }else if( e & CMDFLAG_ALIAS ){
990
+ zDesc = "alias";
922991
}else if( e & CMDFLAG_TEST ){
923992
zDesc = "test command";
924993
}else if( e & CMDFLAG_WEBPAGE ){
925994
if( e & CMDFLAG_RAWCONTENT ){
926995
zDesc = "raw-content web page";
@@ -940,14 +1009,38 @@
9401009
}
9411010
blob_appendf(&buf,"setting");
9421011
zDesc = blob_str(&buf);
9431012
}
9441013
if( memcmp(aCommand[i].zName, "test", 4)==0 ) continue;
945
- @ <dt><big><b>%s(aCommand[i].zName)</b></big> (%s(zDesc))</dt>
946
- @ <dd>
947
- help_to_html(aCommand[i].zHelp, cgi_output_blob());
948
- @ </dd>
1014
+ if( occHelp[aCommand[i].iHelp] > 0 ){
1015
+ int j;
1016
+ for(j=0; j<occHelp[aCommand[i].iHelp]; j++){
1017
+ unsigned int e = aCommand[bktHelp[aCommand[i].iHelp][j]].eCmdFlags;
1018
+ if( e & CMDFLAG_1ST_TIER ){
1019
+ zDesc = "1st tier command";
1020
+ }else if( e & CMDFLAG_2ND_TIER ){
1021
+ zDesc = "2nd tier command";
1022
+ }else if( e & CMDFLAG_ALIAS ){
1023
+ zDesc = "alias";
1024
+ }else if( e & CMDFLAG_TEST ){
1025
+ zDesc = "test command";
1026
+ }else if( e & CMDFLAG_WEBPAGE ){
1027
+ if( e & CMDFLAG_RAWCONTENT ){
1028
+ zDesc = "raw-content web page";
1029
+ }else{
1030
+ zDesc = "web page";
1031
+ }
1032
+ }
1033
+
1034
+ @ <dt><big><b>%s(aCommand[bktHelp[aCommand[i].iHelp][j]].zName)</b>
1035
+ @</big> (%s(zDesc))</dt>
1036
+ }
1037
+ @ <dd>
1038
+ help_to_html(aCommand[i].zHelp, cgi_output_blob());
1039
+ @ </dd>
1040
+ occHelp[aCommand[i].iHelp] = 0;
1041
+ }
9491042
}
9501043
@ </dl>
9511044
blob_reset(&buf);
9521045
style_finish_page();
9531046
}
9541047
--- src/dispatch.c
+++ src/dispatch.c
@@ -31,10 +31,11 @@
31 */
32 struct CmdOrPage {
33 const char *zName; /* Name. Webpages start with "/". Commands do not */
34 void (*xFunc)(void); /* Implementation function, or NULL for settings */
35 const char *zHelp; /* Raw help text */
 
36 unsigned int eCmdFlags; /* Flags */
37 };
38
39 /***************************************************************************
40 ** These macros must match similar macros in mkindex.c
@@ -51,10 +52,11 @@
51 #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */
52 #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret POST content */
53 /* NOTE: 0x0400 = CMDFLAG_SENSITIVE in mkindex.c! */
54 #define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */
55 #define CMDFLAG_LDAVG_EXEMPT 0x1000 /* Exempt from load_control() */
 
56 /**************************************************************************/
57
58 /* Values for the 2nd parameter to dispatch_name_search() */
59 #define CMDFLAG_ANY 0x0038 /* Match anything */
60 #define CMDFLAG_PREFIX 0x0200 /* Prefix match is ok */
@@ -77,10 +79,11 @@
77 ** source code files looking for header comments on the functions that
78 ** implement command and webpages.
79 */
80 #include "page_index.h"
81 #define MX_COMMAND count(aCommand)
 
82
83 /*
84 ** Given a command, webpage, or setting name in zName, find the corresponding
85 ** CmdOrPage object and return a pointer to that object in *ppCmd.
86 **
@@ -546,45 +549,65 @@
546 /*
547 ** Display help for all commands based on provided flags.
548 */
549 static void display_all_help(int mask, int useHtml, int rawOut){
550 int i;
 
 
551 if( useHtml ) fossil_print("<!--\n");
552 fossil_print("Help text for:\n");
553 if( mask & CMDFLAG_1ST_TIER ) fossil_print(" * Commands\n");
554 if( mask & CMDFLAG_2ND_TIER ) fossil_print(" * Auxiliary commands\n");
 
555 if( mask & CMDFLAG_TEST ) fossil_print(" * Test commands\n");
556 if( mask & CMDFLAG_WEBPAGE ) fossil_print(" * Web pages\n");
557 if( mask & CMDFLAG_SETTING ) fossil_print(" * Settings\n");
558 if( useHtml ){
559 fossil_print("-->\n");
560 fossil_print("<!-- start_all_help -->\n");
561 }else{
562 fossil_print("---\n");
563 }
 
 
 
 
 
 
564 for(i=0; i<MX_COMMAND; i++){
565 if( (aCommand[i].eCmdFlags & mask)==0 ) continue;
566 else if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue;
567 if( useHtml ){
568 Blob html;
569 blob_init(&html, 0, 0);
570 help_to_html(aCommand[i].zHelp, &html);
571 fossil_print("<h1>%h</h1>\n", aCommand[i].zName);
572 fossil_print("%s\n<hr>\n", blob_str(&html));
573 blob_reset(&html);
574 }else if( rawOut ){
575 fossil_print("# %s\n", aCommand[i].zName);
576 fossil_print("%s\n\n", aCommand[i].zHelp);
577 }else{
578 Blob txt;
579 blob_init(&txt, 0, 0);
580 help_to_text(aCommand[i].zHelp, &txt);
581 fossil_print("# %s%s\n", aCommand[i].zName,
582 (aCommand[i].eCmdFlags & CMDFLAG_VERSIONABLE)!=0 ?
583 " (versionable)" : "");
584 fossil_print("%s\n\n", blob_str(&txt));
585 blob_reset(&txt);
 
 
 
 
 
 
 
 
 
 
 
586 }
587 }
588 if( useHtml ){
589 fossil_print("<!-- end_all_help -->\n");
590 }else{
@@ -601,17 +624,19 @@
601 ** Show help text for commands and pages. Useful for proof-reading.
602 ** Defaults to just the CLI commands. Specify --www to see only the
603 ** web pages, or --everything to see both commands and pages.
604 **
605 ** Options:
606 ** -e|--everything Show all commands and pages.
 
 
 
 
 
 
607 ** -t|--test Include test- commands.
608 ** -w|--www Show WWW pages.
609 ** -s|--settings Show settings.
610 ** -h|--html Transform output to HTML.
611 ** -r|--raw No output formatting.
612 ** -o|--options Show global options.
613 */
614 void test_all_help_cmd(void){
615 int mask = CMDFLAG_1ST_TIER | CMDFLAG_2ND_TIER;
616 int useHtml = find_option("html","h",0)!=0;
617 int rawOut = find_option("raw","r",0)!=0;
@@ -619,15 +644,18 @@
619 if( find_option("www","w",0) ){
620 mask = CMDFLAG_WEBPAGE;
621 }
622 if( find_option("everything","e",0) ){
623 mask = CMDFLAG_1ST_TIER | CMDFLAG_2ND_TIER | CMDFLAG_WEBPAGE |
624 CMDFLAG_SETTING | CMDFLAG_TEST;
625 }
626 if( find_option("settings","s",0) ){
627 mask = CMDFLAG_SETTING;
628 }
 
 
 
629 if( find_option("test","t",0) ){
630 mask |= CMDFLAG_TEST;
631 }
632 display_all_help(mask, useHtml, rawOut);
633 }
@@ -655,10 +683,12 @@
655 countCmds( CMDFLAG_COMMAND ));
656 fossil_print(" 1st tier %4d\n",
657 countCmds( CMDFLAG_1ST_TIER ));
658 fossil_print(" 2nd tier %4d\n",
659 countCmds( CMDFLAG_2ND_TIER ));
 
 
660 fossil_print(" test %4d\n",
661 countCmds( CMDFLAG_TEST ));
662 fossil_print("web-pages: %4d\n",
663 countCmds( CMDFLAG_WEBPAGE ));
664 fossil_print("settings: %4d\n",
@@ -828,26 +858,56 @@
828 @ </div>
829 }
830 }
831 }else{
832 int i;
833
 
834 style_header("Help");
835
836 @ <a name='commands'></a>
837 @ <h1>Available commands:</h1>
838 @ <div class="columns" style="column-width: 12ex;">
839 @ <ul>
 
 
 
 
 
840 for(i=0; i<MX_COMMAND; i++){
841 const char *z = aCommand[i].zName;
842 const char *zBoldOn = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"<b>" :"";
843 const char *zBoldOff = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"</b>":"";
844 if( '/'==*z || strncmp(z,"test",4)==0 ) continue;
845 if( (aCommand[i].eCmdFlags & CMDFLAG_SETTING)!=0 ) continue;
846 else if( (aCommand[i].eCmdFlags & CMDFLAG_HIDDEN)!=0 ) continue;
847 @ <li><a href="%R/help?cmd=%s(z)">%s(zBoldOn)%s(z)%s(zBoldOff)</a></li>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
848 }
 
849 @ </ul></div>
850
851 @ <a name='webpages'></a>
852 @ <h1>Available web UI pages:</h1>
853 @ <div class="columns" style="column-width: 18ex;">
@@ -905,22 +965,31 @@
905 **
906 ** Show all help text on a single page. Useful for proof-reading.
907 */
908 void test_all_help_page(void){
909 int i;
 
 
910 Blob buf;
911 blob_init(&buf,0,0);
912 style_set_current_feature("test");
913 style_header("All Help Text");
914 @ <dl>
 
 
 
 
 
915 for(i=0; i<MX_COMMAND; i++){
916 const char *zDesc;
917 unsigned int e = aCommand[i].eCmdFlags;
918 if( e & CMDFLAG_1ST_TIER ){
919 zDesc = "1st tier command";
920 }else if( e & CMDFLAG_2ND_TIER ){
921 zDesc = "2nd tier command";
 
 
922 }else if( e & CMDFLAG_TEST ){
923 zDesc = "test command";
924 }else if( e & CMDFLAG_WEBPAGE ){
925 if( e & CMDFLAG_RAWCONTENT ){
926 zDesc = "raw-content web page";
@@ -940,14 +1009,38 @@
940 }
941 blob_appendf(&buf,"setting");
942 zDesc = blob_str(&buf);
943 }
944 if( memcmp(aCommand[i].zName, "test", 4)==0 ) continue;
945 @ <dt><big><b>%s(aCommand[i].zName)</b></big> (%s(zDesc))</dt>
946 @ <dd>
947 help_to_html(aCommand[i].zHelp, cgi_output_blob());
948 @ </dd>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
949 }
950 @ </dl>
951 blob_reset(&buf);
952 style_finish_page();
953 }
954
--- src/dispatch.c
+++ src/dispatch.c
@@ -31,10 +31,11 @@
31 */
32 struct CmdOrPage {
33 const char *zName; /* Name. Webpages start with "/". Commands do not */
34 void (*xFunc)(void); /* Implementation function, or NULL for settings */
35 const char *zHelp; /* Raw help text */
36 int iHelp; /* Index of help variable */
37 unsigned int eCmdFlags; /* Flags */
38 };
39
40 /***************************************************************************
41 ** These macros must match similar macros in mkindex.c
@@ -51,10 +52,11 @@
52 #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */
53 #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret POST content */
54 /* NOTE: 0x0400 = CMDFLAG_SENSITIVE in mkindex.c! */
55 #define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */
56 #define CMDFLAG_LDAVG_EXEMPT 0x1000 /* Exempt from load_control() */
57 #define CMDFLAG_ALIAS 0x2000 /* Command aliases */
58 /**************************************************************************/
59
60 /* Values for the 2nd parameter to dispatch_name_search() */
61 #define CMDFLAG_ANY 0x0038 /* Match anything */
62 #define CMDFLAG_PREFIX 0x0200 /* Prefix match is ok */
@@ -77,10 +79,11 @@
79 ** source code files looking for header comments on the functions that
80 ** implement command and webpages.
81 */
82 #include "page_index.h"
83 #define MX_COMMAND count(aCommand)
84 #define MX_HELP_DUP 5 /* Upper bound estimate on help string duplication */
85
86 /*
87 ** Given a command, webpage, or setting name in zName, find the corresponding
88 ** CmdOrPage object and return a pointer to that object in *ppCmd.
89 **
@@ -546,45 +549,65 @@
549 /*
550 ** Display help for all commands based on provided flags.
551 */
552 static void display_all_help(int mask, int useHtml, int rawOut){
553 int i;
554 unsigned char occHelp[FOSSIL_MX_CMDIDX] = {0}; /* Help string occurrences */
555 int bktHelp[FOSSIL_MX_CMDIDX][MX_HELP_DUP] = {0};/* Help strings -> commands*/
556 if( useHtml ) fossil_print("<!--\n");
557 fossil_print("Help text for:\n");
558 if( mask & CMDFLAG_1ST_TIER ) fossil_print(" * Commands\n");
559 if( mask & CMDFLAG_2ND_TIER ) fossil_print(" * Auxiliary commands\n");
560 if( mask & CMDFLAG_ALIAS ) fossil_print(" * Aliases\n");
561 if( mask & CMDFLAG_TEST ) fossil_print(" * Test commands\n");
562 if( mask & CMDFLAG_WEBPAGE ) fossil_print(" * Web pages\n");
563 if( mask & CMDFLAG_SETTING ) fossil_print(" * Settings\n");
564 if( useHtml ){
565 fossil_print("-->\n");
566 fossil_print("<!-- start_all_help -->\n");
567 }else{
568 fossil_print("---\n");
569 }
570 /* Fill in help string buckets */
571 for(i=0; i<MX_COMMAND; i++){
572 if( (aCommand[i].eCmdFlags & mask)==0 ) continue;
573 else if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue;
574 bktHelp[aCommand[i].iHelp][occHelp[aCommand[i].iHelp]++] = i;
575 }
576 for(i=0; i<MX_COMMAND; i++){
577 if( (aCommand[i].eCmdFlags & mask)==0 ) continue;
578 else if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue;
579 if( occHelp[aCommand[i].iHelp] > 0 ){
580 int j;
581 if( useHtml ){
582 Blob html;
583 blob_init(&html, 0, 0);
584 help_to_html(aCommand[i].zHelp, &html);
585 for(j=0; j<occHelp[aCommand[i].iHelp]; j++){
586 fossil_print("<h1>%h</h1>\n",
587 aCommand[bktHelp[aCommand[i].iHelp][j]].zName);
588 }
589 fossil_print("%s\n<hr>\n", blob_str(&html));
590 blob_reset(&html);
591 }else if( rawOut ){
592 for(j=0; j<occHelp[aCommand[i].iHelp]; j++)
593 fossil_print("# %s\n", aCommand[bktHelp[aCommand[i].iHelp][j]].zName);
594 fossil_print("%s\n\n", aCommand[i].zHelp);
595 }else{
596 Blob txt;
597 blob_init(&txt, 0, 0);
598 help_to_text(aCommand[i].zHelp, &txt);
599 for(j=0; j<occHelp[aCommand[i].iHelp]; j++){
600 fossil_print("# %s%s\n",
601 aCommand[bktHelp[aCommand[i].iHelp][j]].zName,
602 (aCommand[i].eCmdFlags & CMDFLAG_VERSIONABLE)!=0 ?
603 " (versionable)" : "");
604 }
605 fossil_print("%s\n\n", blob_str(&txt));
606 blob_reset(&txt);
607 }
608 occHelp[aCommand[i].iHelp] = 0;
609 }
610 }
611 if( useHtml ){
612 fossil_print("<!-- end_all_help -->\n");
613 }else{
@@ -601,17 +624,19 @@
624 ** Show help text for commands and pages. Useful for proof-reading.
625 ** Defaults to just the CLI commands. Specify --www to see only the
626 ** web pages, or --everything to see both commands and pages.
627 **
628 ** Options:
629 ** -a|--aliases Show aliases.
630 ** -e|--everything Show all commands and pages. Omit aliases to
631 ** avoid duplicates.
632 ** -h|--html Transform output to HTML.
633 ** -o|--options Show global options.
634 ** -r|--raw No output formatting.
635 ** -s|--settings Show settings.
636 ** -t|--test Include test- commands.
637 ** -w|--www Show WWW pages.
 
 
 
 
638 */
639 void test_all_help_cmd(void){
640 int mask = CMDFLAG_1ST_TIER | CMDFLAG_2ND_TIER;
641 int useHtml = find_option("html","h",0)!=0;
642 int rawOut = find_option("raw","r",0)!=0;
@@ -619,15 +644,18 @@
644 if( find_option("www","w",0) ){
645 mask = CMDFLAG_WEBPAGE;
646 }
647 if( find_option("everything","e",0) ){
648 mask = CMDFLAG_1ST_TIER | CMDFLAG_2ND_TIER | CMDFLAG_WEBPAGE |
649 CMDFLAG_ALIAS | CMDFLAG_SETTING | CMDFLAG_TEST;
650 }
651 if( find_option("settings","s",0) ){
652 mask = CMDFLAG_SETTING;
653 }
654 if( find_option("aliases","a",0) ){
655 mask = CMDFLAG_ALIAS;
656 }
657 if( find_option("test","t",0) ){
658 mask |= CMDFLAG_TEST;
659 }
660 display_all_help(mask, useHtml, rawOut);
661 }
@@ -655,10 +683,12 @@
683 countCmds( CMDFLAG_COMMAND ));
684 fossil_print(" 1st tier %4d\n",
685 countCmds( CMDFLAG_1ST_TIER ));
686 fossil_print(" 2nd tier %4d\n",
687 countCmds( CMDFLAG_2ND_TIER ));
688 fossil_print(" alias %4d\n",
689 countCmds( CMDFLAG_ALIAS ));
690 fossil_print(" test %4d\n",
691 countCmds( CMDFLAG_TEST ));
692 fossil_print("web-pages: %4d\n",
693 countCmds( CMDFLAG_WEBPAGE ));
694 fossil_print("settings: %4d\n",
@@ -828,26 +858,56 @@
858 @ </div>
859 }
860 }
861 }else{
862 int i;
863 unsigned char occHelp[FOSSIL_MX_CMDIDX] = {0}; /* Help str occurrences */
864 int bktHelp[FOSSIL_MX_CMDIDX][MX_HELP_DUP] = {0};/* Help str -> commands */
865 style_header("Help");
866
867 @ <a name='commands'></a>
868 @ <h1>Available commands:</h1>
869 @ <div class="columns" style="column-width: 12ex;">
870 @ <ul>
871 /* Fill in help string buckets */
872 for(i=0; i<MX_COMMAND; i++){
873 if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue;
874 bktHelp[aCommand[i].iHelp][occHelp[aCommand[i].iHelp]++] = i;
875 }
876 for(i=0; i<MX_COMMAND; i++){
877 const char *z = aCommand[i].zName;
878 const char *zBoldOn = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"<b>" :"";
879 const char *zBoldOff = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"</b>":"";
880 if( '/'==*z || strncmp(z,"test",4)==0 ) continue;
881 if( (aCommand[i].eCmdFlags & CMDFLAG_SETTING)!=0 ) continue;
882 else if( (aCommand[i].eCmdFlags & CMDFLAG_HIDDEN)!=0 ) continue;
883 else if( (aCommand[i].eCmdFlags & CMDFLAG_ALIAS)!=0 ) continue;
884 @ <li><a href="%R/help?cmd=%s(z)">%s(zBoldOn)%s(z)%s(zBoldOff)</a>
885 /* Output aliases */
886 if( occHelp[aCommand[i].iHelp] > 1 ){
887 int j;
888 int aliases[MX_HELP_DUP], nAliases=0;
889 for(j=0; j<occHelp[aCommand[i].iHelp]; j++){
890 if( bktHelp[aCommand[i].iHelp][j] != i ){
891 if( aCommand[bktHelp[aCommand[i].iHelp][j]].eCmdFlags & CMDFLAG_ALIAS ){
892 aliases[nAliases++] = bktHelp[aCommand[i].iHelp][j];
893 }
894 }
895 }
896 if( nAliases>0 ){
897 int k;
898 @(\
899 for(k=0; k<nAliases; k++){
900 @<a href="%R/help?cmd=%s(aCommand[aliases[k]].zName)">\
901 @%s(aCommand[aliases[k]].zName)</a>%s((k<nAliases-1)?", ":"")\
902 }
903 @)\
904 }
905 }
906 @ </li>
907 }
908
909 @ </ul></div>
910
911 @ <a name='webpages'></a>
912 @ <h1>Available web UI pages:</h1>
913 @ <div class="columns" style="column-width: 18ex;">
@@ -905,22 +965,31 @@
965 **
966 ** Show all help text on a single page. Useful for proof-reading.
967 */
968 void test_all_help_page(void){
969 int i;
970 unsigned char occHelp[FOSSIL_MX_CMDIDX] = {0}; /* Help string occurrences */
971 int bktHelp[FOSSIL_MX_CMDIDX][MX_HELP_DUP] = {0};/* Help strings -> commands*/
972 Blob buf;
973 blob_init(&buf,0,0);
974 style_set_current_feature("test");
975 style_header("All Help Text");
976 @ <dl>
977 /* Fill in help string buckets */
978 for(i=0; i<MX_COMMAND; i++){
979 if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue;
980 bktHelp[aCommand[i].iHelp][occHelp[aCommand[i].iHelp]++] = i;
981 }
982 for(i=0; i<MX_COMMAND; i++){
983 const char *zDesc;
984 unsigned int e = aCommand[i].eCmdFlags;
985 if( e & CMDFLAG_1ST_TIER ){
986 zDesc = "1st tier command";
987 }else if( e & CMDFLAG_2ND_TIER ){
988 zDesc = "2nd tier command";
989 }else if( e & CMDFLAG_ALIAS ){
990 zDesc = "alias";
991 }else if( e & CMDFLAG_TEST ){
992 zDesc = "test command";
993 }else if( e & CMDFLAG_WEBPAGE ){
994 if( e & CMDFLAG_RAWCONTENT ){
995 zDesc = "raw-content web page";
@@ -940,14 +1009,38 @@
1009 }
1010 blob_appendf(&buf,"setting");
1011 zDesc = blob_str(&buf);
1012 }
1013 if( memcmp(aCommand[i].zName, "test", 4)==0 ) continue;
1014 if( occHelp[aCommand[i].iHelp] > 0 ){
1015 int j;
1016 for(j=0; j<occHelp[aCommand[i].iHelp]; j++){
1017 unsigned int e = aCommand[bktHelp[aCommand[i].iHelp][j]].eCmdFlags;
1018 if( e & CMDFLAG_1ST_TIER ){
1019 zDesc = "1st tier command";
1020 }else if( e & CMDFLAG_2ND_TIER ){
1021 zDesc = "2nd tier command";
1022 }else if( e & CMDFLAG_ALIAS ){
1023 zDesc = "alias";
1024 }else if( e & CMDFLAG_TEST ){
1025 zDesc = "test command";
1026 }else if( e & CMDFLAG_WEBPAGE ){
1027 if( e & CMDFLAG_RAWCONTENT ){
1028 zDesc = "raw-content web page";
1029 }else{
1030 zDesc = "web page";
1031 }
1032 }
1033
1034 @ <dt><big><b>%s(aCommand[bktHelp[aCommand[i].iHelp][j]].zName)</b>
1035 @</big> (%s(zDesc))</dt>
1036 }
1037 @ <dd>
1038 help_to_html(aCommand[i].zHelp, cgi_output_blob());
1039 @ </dd>
1040 occHelp[aCommand[i].iHelp] = 0;
1041 }
1042 }
1043 @ </dl>
1044 blob_reset(&buf);
1045 style_finish_page();
1046 }
1047
+5 -7
--- src/file.c
+++ src/file.c
@@ -38,11 +38,11 @@
3838
# include <sys/time.h>
3939
#endif
4040
4141
#if INTERFACE
4242
43
-/* Many APIs take a eFType argument which must be one of ExtFILE, RepoFILE,
43
+/* Many APIs take an eFType argument which must be one of ExtFILE, RepoFILE,
4444
** or SymFILE.
4545
**
4646
** The difference is in the handling of symbolic links. RepoFILE should be
4747
** used for files that are under management by a Fossil repository. ExtFILE
4848
** should be used for files that are not under management. SymFILE is for
@@ -1192,14 +1192,13 @@
11921192
**
11931193
** Store the value of the CWD in zBuf which is nBuf bytes in size.
11941194
** or if zBuf==0, allocate space to hold the result using fossil_malloc().
11951195
*/
11961196
char *file_getcwd(char *zBuf, int nBuf){
1197
- char zTemp[2000];
11981197
if( zBuf==0 ){
1199
- zBuf = zTemp;
1200
- nBuf = sizeof(zTemp);
1198
+ char zTemp[2000];
1199
+ return fossil_strdup(file_getcwd(zTemp, sizeof(zTemp)));
12011200
}
12021201
#ifdef _WIN32
12031202
win32_getcwd(zBuf, nBuf);
12041203
#else
12051204
if( getcwd(zBuf, nBuf-1)==0 ){
@@ -1209,11 +1208,11 @@
12091208
fossil_fatal("cannot find current working directory; %s",
12101209
strerror(errno));
12111210
}
12121211
}
12131212
#endif
1214
- return zBuf==zTemp ? fossil_strdup(zBuf) : zBuf;
1213
+ return zBuf;
12151214
}
12161215
12171216
/*
12181217
** Return true if zPath is an absolute pathname. Return false
12191218
** if it is relative.
@@ -2493,12 +2492,11 @@
24932492
Stmt q;
24942493
Blob absBuffer = empty_blob; /* Absolute filename buffer */
24952494
24962495
verboseFlag = find_option("verbose","v",0)!=0;
24972496
quietFlag = find_option("quiet","q",0)!=0 || g.fQuiet;
2498
- dryRunFlag = find_option("dry-run","n",0)!=0
2499
- || find_option("dryrun",0,0)!=0;
2497
+ dryRunFlag = find_option("dry-run","n",0)!=0;
25002498
zGlobList = find_option("glob", "g",1);
25012499
zGlobFile = find_option("globfile", "G",1);
25022500
25032501
if(zGlobList && zGlobFile){
25042502
fossil_fatal("Options -g and -G may not be used together.");
25052503
--- src/file.c
+++ src/file.c
@@ -38,11 +38,11 @@
38 # include <sys/time.h>
39 #endif
40
41 #if INTERFACE
42
43 /* Many APIs take a eFType argument which must be one of ExtFILE, RepoFILE,
44 ** or SymFILE.
45 **
46 ** The difference is in the handling of symbolic links. RepoFILE should be
47 ** used for files that are under management by a Fossil repository. ExtFILE
48 ** should be used for files that are not under management. SymFILE is for
@@ -1192,14 +1192,13 @@
1192 **
1193 ** Store the value of the CWD in zBuf which is nBuf bytes in size.
1194 ** or if zBuf==0, allocate space to hold the result using fossil_malloc().
1195 */
1196 char *file_getcwd(char *zBuf, int nBuf){
1197 char zTemp[2000];
1198 if( zBuf==0 ){
1199 zBuf = zTemp;
1200 nBuf = sizeof(zTemp);
1201 }
1202 #ifdef _WIN32
1203 win32_getcwd(zBuf, nBuf);
1204 #else
1205 if( getcwd(zBuf, nBuf-1)==0 ){
@@ -1209,11 +1208,11 @@
1209 fossil_fatal("cannot find current working directory; %s",
1210 strerror(errno));
1211 }
1212 }
1213 #endif
1214 return zBuf==zTemp ? fossil_strdup(zBuf) : zBuf;
1215 }
1216
1217 /*
1218 ** Return true if zPath is an absolute pathname. Return false
1219 ** if it is relative.
@@ -2493,12 +2492,11 @@
2493 Stmt q;
2494 Blob absBuffer = empty_blob; /* Absolute filename buffer */
2495
2496 verboseFlag = find_option("verbose","v",0)!=0;
2497 quietFlag = find_option("quiet","q",0)!=0 || g.fQuiet;
2498 dryRunFlag = find_option("dry-run","n",0)!=0
2499 || find_option("dryrun",0,0)!=0;
2500 zGlobList = find_option("glob", "g",1);
2501 zGlobFile = find_option("globfile", "G",1);
2502
2503 if(zGlobList && zGlobFile){
2504 fossil_fatal("Options -g and -G may not be used together.");
2505
--- src/file.c
+++ src/file.c
@@ -38,11 +38,11 @@
38 # include <sys/time.h>
39 #endif
40
41 #if INTERFACE
42
43 /* Many APIs take an eFType argument which must be one of ExtFILE, RepoFILE,
44 ** or SymFILE.
45 **
46 ** The difference is in the handling of symbolic links. RepoFILE should be
47 ** used for files that are under management by a Fossil repository. ExtFILE
48 ** should be used for files that are not under management. SymFILE is for
@@ -1192,14 +1192,13 @@
1192 **
1193 ** Store the value of the CWD in zBuf which is nBuf bytes in size.
1194 ** or if zBuf==0, allocate space to hold the result using fossil_malloc().
1195 */
1196 char *file_getcwd(char *zBuf, int nBuf){
 
1197 if( zBuf==0 ){
1198 char zTemp[2000];
1199 return fossil_strdup(file_getcwd(zTemp, sizeof(zTemp)));
1200 }
1201 #ifdef _WIN32
1202 win32_getcwd(zBuf, nBuf);
1203 #else
1204 if( getcwd(zBuf, nBuf-1)==0 ){
@@ -1209,11 +1208,11 @@
1208 fossil_fatal("cannot find current working directory; %s",
1209 strerror(errno));
1210 }
1211 }
1212 #endif
1213 return zBuf;
1214 }
1215
1216 /*
1217 ** Return true if zPath is an absolute pathname. Return false
1218 ** if it is relative.
@@ -2493,12 +2492,11 @@
2492 Stmt q;
2493 Blob absBuffer = empty_blob; /* Absolute filename buffer */
2494
2495 verboseFlag = find_option("verbose","v",0)!=0;
2496 quietFlag = find_option("quiet","q",0)!=0 || g.fQuiet;
2497 dryRunFlag = find_option("dry-run","n",0)!=0;
 
2498 zGlobList = find_option("glob", "g",1);
2499 zGlobFile = find_option("globfile", "G",1);
2500
2501 if(zGlobList && zGlobFile){
2502 fossil_fatal("Options -g and -G may not be used together.");
2503
+2 -1
--- src/forum.c
+++ src/forum.c
@@ -862,11 +862,10 @@
862862
}
863863
froot = db_int(0, "SELECT froot FROM forumpost WHERE fpid=%d", fpid);
864864
if( froot==0 ){
865865
webpage_notfound_error("Not a forum post: \"%s\"", zName);
866866
}
867
- if( fossil_strcmp(g.zPath,"forumthread")==0 ) fpid = 0;
868867
869868
/* Decode the mode parameters. */
870869
if( bRaw ){
871870
mode = FD_RAW;
872871
bUnf = 1;
@@ -916,10 +915,11 @@
916915
}
917916
style_submenu_checkbox("unf", "Unformatted", 0, 0);
918917
style_submenu_checkbox("hist", "History", 0, 0);
919918
920919
/* Display the thread. */
920
+ if( fossil_strcmp(g.zPath,"forumthread")==0 ) fpid = 0;
921921
forum_display_thread(froot, fpid, mode, autoMode, bUnf, bHist);
922922
923923
/* Emit Forum Javascript. */
924924
builtin_request_js("forum.js");
925925
forum_emit_js();
@@ -1397,10 +1397,11 @@
13971397
login_needed(g.anon.RdForum);
13981398
return;
13991399
}
14001400
style_set_current_feature("forum");
14011401
style_header( "%s", isSearch ? "Forum Search Results" : "Forum" );
1402
+ style_submenu_element("Timeline", "%R/timeline?ss=v&y=f&vfx");
14021403
if( g.perm.WrForum ){
14031404
style_submenu_element("New Thread","%R/forumnew");
14041405
}else{
14051406
/* Can't combine this with previous case using the ternary operator
14061407
* because that causes an error yelling about "non-constant format"
14071408
--- src/forum.c
+++ src/forum.c
@@ -862,11 +862,10 @@
862 }
863 froot = db_int(0, "SELECT froot FROM forumpost WHERE fpid=%d", fpid);
864 if( froot==0 ){
865 webpage_notfound_error("Not a forum post: \"%s\"", zName);
866 }
867 if( fossil_strcmp(g.zPath,"forumthread")==0 ) fpid = 0;
868
869 /* Decode the mode parameters. */
870 if( bRaw ){
871 mode = FD_RAW;
872 bUnf = 1;
@@ -916,10 +915,11 @@
916 }
917 style_submenu_checkbox("unf", "Unformatted", 0, 0);
918 style_submenu_checkbox("hist", "History", 0, 0);
919
920 /* Display the thread. */
 
921 forum_display_thread(froot, fpid, mode, autoMode, bUnf, bHist);
922
923 /* Emit Forum Javascript. */
924 builtin_request_js("forum.js");
925 forum_emit_js();
@@ -1397,10 +1397,11 @@
1397 login_needed(g.anon.RdForum);
1398 return;
1399 }
1400 style_set_current_feature("forum");
1401 style_header( "%s", isSearch ? "Forum Search Results" : "Forum" );
 
1402 if( g.perm.WrForum ){
1403 style_submenu_element("New Thread","%R/forumnew");
1404 }else{
1405 /* Can't combine this with previous case using the ternary operator
1406 * because that causes an error yelling about "non-constant format"
1407
--- src/forum.c
+++ src/forum.c
@@ -862,11 +862,10 @@
862 }
863 froot = db_int(0, "SELECT froot FROM forumpost WHERE fpid=%d", fpid);
864 if( froot==0 ){
865 webpage_notfound_error("Not a forum post: \"%s\"", zName);
866 }
 
867
868 /* Decode the mode parameters. */
869 if( bRaw ){
870 mode = FD_RAW;
871 bUnf = 1;
@@ -916,10 +915,11 @@
915 }
916 style_submenu_checkbox("unf", "Unformatted", 0, 0);
917 style_submenu_checkbox("hist", "History", 0, 0);
918
919 /* Display the thread. */
920 if( fossil_strcmp(g.zPath,"forumthread")==0 ) fpid = 0;
921 forum_display_thread(froot, fpid, mode, autoMode, bUnf, bHist);
922
923 /* Emit Forum Javascript. */
924 builtin_request_js("forum.js");
925 forum_emit_js();
@@ -1397,10 +1397,11 @@
1397 login_needed(g.anon.RdForum);
1398 return;
1399 }
1400 style_set_current_feature("forum");
1401 style_header( "%s", isSearch ? "Forum Search Results" : "Forum" );
1402 style_submenu_element("Timeline", "%R/timeline?ss=v&y=f&vfx");
1403 if( g.perm.WrForum ){
1404 style_submenu_element("New Thread","%R/forumnew");
1405 }else{
1406 /* Can't combine this with previous case using the ternary operator
1407 * because that causes an error yelling about "non-constant format"
1408
--- src/fossil.page.pikchrshowasm.js
+++ src/fossil.page.pikchrshowasm.js
@@ -170,14 +170,14 @@
170170
171171
PS.e.previewModeLabel.innerText =
172172
PS.renderModeLabels[PS.renderModes[PS.renderModes.selectedIndex]];
173173
174174
/**
175
- The 'pikchrshow-ready' event is fired (with no payload) when the
175
+ The 'pikchr-ready' event is fired (with no payload) when the
176176
wasm module has finished loading. */
177
- PS.addMsgHandler('pikchrshow-ready', function(){
178
- PS.clearMsgHandlers('pikchrshow-ready');
177
+ PS.addMsgHandler('pikchr-ready', function(){
178
+ PS.clearMsgHandlers('pikchr-ready');
179179
F.page.onPikchrshowLoaded();
180180
});
181181
182182
/**
183183
Performs all app initialization which must wait until after the
184184
--- src/fossil.page.pikchrshowasm.js
+++ src/fossil.page.pikchrshowasm.js
@@ -170,14 +170,14 @@
170
171 PS.e.previewModeLabel.innerText =
172 PS.renderModeLabels[PS.renderModes[PS.renderModes.selectedIndex]];
173
174 /**
175 The 'pikchrshow-ready' event is fired (with no payload) when the
176 wasm module has finished loading. */
177 PS.addMsgHandler('pikchrshow-ready', function(){
178 PS.clearMsgHandlers('pikchrshow-ready');
179 F.page.onPikchrshowLoaded();
180 });
181
182 /**
183 Performs all app initialization which must wait until after the
184
--- src/fossil.page.pikchrshowasm.js
+++ src/fossil.page.pikchrshowasm.js
@@ -170,14 +170,14 @@
170
171 PS.e.previewModeLabel.innerText =
172 PS.renderModeLabels[PS.renderModes[PS.renderModes.selectedIndex]];
173
174 /**
175 The 'pikchr-ready' event is fired (with no payload) when the
176 wasm module has finished loading. */
177 PS.addMsgHandler('pikchr-ready', function(){
178 PS.clearMsgHandlers('pikchr-ready');
179 F.page.onPikchrshowLoaded();
180 });
181
182 /**
183 Performs all app initialization which must wait until after the
184
+1 -1
--- src/http_ssl.c
+++ src/http_ssl.c
@@ -622,11 +622,11 @@
622622
X509_free(cert);
623623
return 0;
624624
}
625625
626626
/*
627
-** Remember that the cert with the given hash is a acceptable for
627
+** Remember that the cert with the given hash is acceptable for
628628
** use with pUrlData->name.
629629
*/
630630
LOCAL void ssl_remember_certificate_exception(
631631
UrlData *pUrlData,
632632
const char *zHash
633633
--- src/http_ssl.c
+++ src/http_ssl.c
@@ -622,11 +622,11 @@
622 X509_free(cert);
623 return 0;
624 }
625
626 /*
627 ** Remember that the cert with the given hash is a acceptable for
628 ** use with pUrlData->name.
629 */
630 LOCAL void ssl_remember_certificate_exception(
631 UrlData *pUrlData,
632 const char *zHash
633
--- src/http_ssl.c
+++ src/http_ssl.c
@@ -622,11 +622,11 @@
622 X509_free(cert);
623 return 0;
624 }
625
626 /*
627 ** Remember that the cert with the given hash is acceptable for
628 ** use with pUrlData->name.
629 */
630 LOCAL void ssl_remember_certificate_exception(
631 UrlData *pUrlData,
632 const char *zHash
633
+12 -7
--- src/info.c
+++ src/info.c
@@ -181,11 +181,11 @@
181181
** information about that repository.
182182
**
183183
** If the argument is a repository name, then the --verbose option shows
184184
** all known check-out locations for that repository and all URLs used
185185
** to access the repository. The --verbose is (currently) a no-op if
186
-** the argument is the name of a object within the repository.
186
+** the argument is the name of an object within the repository.
187187
**
188188
** Use the "finfo" command to get information about a specific
189189
** file in a checkout.
190190
**
191191
** Options:
@@ -680,11 +680,12 @@
680680
zUser = zEUser ? zEUser : zOrigUser;
681681
zComment = db_column_text(&q1, 3);
682682
zDate = db_column_text(&q1,1);
683683
zOrigDate = db_column_text(&q1, 4);
684684
if( zOrigDate==0 ) zOrigDate = zDate;
685
- @ <div class="section">Overview</div>
685
+ @ <div class="section accordion">Overview</div>
686
+ @ <div class="accordion_panel">
686687
@ <table class="label-value">
687688
@ <tr><th>Comment:</th><td class="infoComment">\
688689
@ %!W(zEComment?zEComment:zComment)</td></tr>
689690
690691
/* The Download: line */
@@ -868,17 +869,21 @@
868869
}else{
869870
style_header("Check-in Information");
870871
login_anonymous_available();
871872
}
872873
db_finalize(&q1);
874
+ @ </div>
875
+ builtin_request_js("accordion.js");
873876
if( !PB("nowiki") ){
874877
wiki_render_associated("checkin", zUuid, 0);
875878
}
876
- render_backlink_graph(zUuid, "<div class=\"section\">References</div>\n");
877
- @ <div class="section">Context</div>
879
+ render_backlink_graph(zUuid,
880
+ "<div class=\"section accordion\">References</div>\n");
881
+ @ <div class="section accordion">Context</div><div class="accordion_panel">
878882
render_checkin_context(rid, 0, 0, 0);
879
- @ <div class="section">Changes</div>
883
+ @ </div><div class="section accordion">Changes</div>
884
+ @ <div class="accordion_panel">
880885
@ <div class="sectionmenu">
881886
pCfg = construct_diff_flags(diffType, &DCfg);
882887
DCfg.pRe = pRe;
883888
zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
884889
if( diffType!=0 ){
@@ -907,11 +912,11 @@
907912
@ Patch</a>
908913
}
909914
if( g.perm.Admin ){
910915
@ %z(chref("button","%R/mlink?ci=%!S",zUuid))MLink Table</a>
911916
}
912
- @</div>
917
+ @ </div>
913918
if( pRe ){
914919
@ <p><b>Only differences that match regular expression "%h(zRe)"
915920
@ are shown.</b></p>
916921
}
917922
db_prepare(&q3,
@@ -935,10 +940,11 @@
935940
const char *zOldName = db_column_text(&q3, 4);
936941
append_file_change_line(zUuid, zName, zOld, zNew, zOldName,
937942
pCfg,mperm);
938943
}
939944
db_finalize(&q3);
945
+ @ </div>
940946
append_diff_javascript(diffType);
941947
style_finish_page();
942948
}
943949
944950
/*
@@ -3539,11 +3545,10 @@
35393545
pzNewTags = find_repeatable_option("tag",0,&nTags);
35403546
pzCancelTags = find_repeatable_option("cancel",0,&nCancels);
35413547
fClose = find_option("close",0,0)!=0;
35423548
fHide = find_option("hide",0,0)!=0;
35433549
fDryRun = find_option("dry-run","n",0)!=0;
3544
- if( fDryRun==0 ) fDryRun = find_option("dryrun","n",0)!=0;
35453550
zChngTime = find_option("date-override",0,1);
35463551
if( zChngTime==0 ) zChngTime = find_option("chngtime",0,1);
35473552
zUserOvrd = find_option("user-override",0,1);
35483553
db_find_and_open_repository(0,0);
35493554
user_select();
35503555
--- src/info.c
+++ src/info.c
@@ -181,11 +181,11 @@
181 ** information about that repository.
182 **
183 ** If the argument is a repository name, then the --verbose option shows
184 ** all known check-out locations for that repository and all URLs used
185 ** to access the repository. The --verbose is (currently) a no-op if
186 ** the argument is the name of a object within the repository.
187 **
188 ** Use the "finfo" command to get information about a specific
189 ** file in a checkout.
190 **
191 ** Options:
@@ -680,11 +680,12 @@
680 zUser = zEUser ? zEUser : zOrigUser;
681 zComment = db_column_text(&q1, 3);
682 zDate = db_column_text(&q1,1);
683 zOrigDate = db_column_text(&q1, 4);
684 if( zOrigDate==0 ) zOrigDate = zDate;
685 @ <div class="section">Overview</div>
 
686 @ <table class="label-value">
687 @ <tr><th>Comment:</th><td class="infoComment">\
688 @ %!W(zEComment?zEComment:zComment)</td></tr>
689
690 /* The Download: line */
@@ -868,17 +869,21 @@
868 }else{
869 style_header("Check-in Information");
870 login_anonymous_available();
871 }
872 db_finalize(&q1);
 
 
873 if( !PB("nowiki") ){
874 wiki_render_associated("checkin", zUuid, 0);
875 }
876 render_backlink_graph(zUuid, "<div class=\"section\">References</div>\n");
877 @ <div class="section">Context</div>
 
878 render_checkin_context(rid, 0, 0, 0);
879 @ <div class="section">Changes</div>
 
880 @ <div class="sectionmenu">
881 pCfg = construct_diff_flags(diffType, &DCfg);
882 DCfg.pRe = pRe;
883 zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
884 if( diffType!=0 ){
@@ -907,11 +912,11 @@
907 @ Patch</a>
908 }
909 if( g.perm.Admin ){
910 @ %z(chref("button","%R/mlink?ci=%!S",zUuid))MLink Table</a>
911 }
912 @</div>
913 if( pRe ){
914 @ <p><b>Only differences that match regular expression "%h(zRe)"
915 @ are shown.</b></p>
916 }
917 db_prepare(&q3,
@@ -935,10 +940,11 @@
935 const char *zOldName = db_column_text(&q3, 4);
936 append_file_change_line(zUuid, zName, zOld, zNew, zOldName,
937 pCfg,mperm);
938 }
939 db_finalize(&q3);
 
940 append_diff_javascript(diffType);
941 style_finish_page();
942 }
943
944 /*
@@ -3539,11 +3545,10 @@
3539 pzNewTags = find_repeatable_option("tag",0,&nTags);
3540 pzCancelTags = find_repeatable_option("cancel",0,&nCancels);
3541 fClose = find_option("close",0,0)!=0;
3542 fHide = find_option("hide",0,0)!=0;
3543 fDryRun = find_option("dry-run","n",0)!=0;
3544 if( fDryRun==0 ) fDryRun = find_option("dryrun","n",0)!=0;
3545 zChngTime = find_option("date-override",0,1);
3546 if( zChngTime==0 ) zChngTime = find_option("chngtime",0,1);
3547 zUserOvrd = find_option("user-override",0,1);
3548 db_find_and_open_repository(0,0);
3549 user_select();
3550
--- src/info.c
+++ src/info.c
@@ -181,11 +181,11 @@
181 ** information about that repository.
182 **
183 ** If the argument is a repository name, then the --verbose option shows
184 ** all known check-out locations for that repository and all URLs used
185 ** to access the repository. The --verbose is (currently) a no-op if
186 ** the argument is the name of an object within the repository.
187 **
188 ** Use the "finfo" command to get information about a specific
189 ** file in a checkout.
190 **
191 ** Options:
@@ -680,11 +680,12 @@
680 zUser = zEUser ? zEUser : zOrigUser;
681 zComment = db_column_text(&q1, 3);
682 zDate = db_column_text(&q1,1);
683 zOrigDate = db_column_text(&q1, 4);
684 if( zOrigDate==0 ) zOrigDate = zDate;
685 @ <div class="section accordion">Overview</div>
686 @ <div class="accordion_panel">
687 @ <table class="label-value">
688 @ <tr><th>Comment:</th><td class="infoComment">\
689 @ %!W(zEComment?zEComment:zComment)</td></tr>
690
691 /* The Download: line */
@@ -868,17 +869,21 @@
869 }else{
870 style_header("Check-in Information");
871 login_anonymous_available();
872 }
873 db_finalize(&q1);
874 @ </div>
875 builtin_request_js("accordion.js");
876 if( !PB("nowiki") ){
877 wiki_render_associated("checkin", zUuid, 0);
878 }
879 render_backlink_graph(zUuid,
880 "<div class=\"section accordion\">References</div>\n");
881 @ <div class="section accordion">Context</div><div class="accordion_panel">
882 render_checkin_context(rid, 0, 0, 0);
883 @ </div><div class="section accordion">Changes</div>
884 @ <div class="accordion_panel">
885 @ <div class="sectionmenu">
886 pCfg = construct_diff_flags(diffType, &DCfg);
887 DCfg.pRe = pRe;
888 zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
889 if( diffType!=0 ){
@@ -907,11 +912,11 @@
912 @ Patch</a>
913 }
914 if( g.perm.Admin ){
915 @ %z(chref("button","%R/mlink?ci=%!S",zUuid))MLink Table</a>
916 }
917 @ </div>
918 if( pRe ){
919 @ <p><b>Only differences that match regular expression "%h(zRe)"
920 @ are shown.</b></p>
921 }
922 db_prepare(&q3,
@@ -935,10 +940,11 @@
940 const char *zOldName = db_column_text(&q3, 4);
941 append_file_change_line(zUuid, zName, zOld, zNew, zOldName,
942 pCfg,mperm);
943 }
944 db_finalize(&q3);
945 @ </div>
946 append_diff_javascript(diffType);
947 style_finish_page();
948 }
949
950 /*
@@ -3539,11 +3545,10 @@
3545 pzNewTags = find_repeatable_option("tag",0,&nTags);
3546 pzCancelTags = find_repeatable_option("cancel",0,&nCancels);
3547 fClose = find_option("close",0,0)!=0;
3548 fHide = find_option("hide",0,0)!=0;
3549 fDryRun = find_option("dry-run","n",0)!=0;
 
3550 zChngTime = find_option("date-override",0,1);
3551 if( zChngTime==0 ) zChngTime = find_option("chngtime",0,1);
3552 zUserOvrd = find_option("user-override",0,1);
3553 db_find_and_open_repository(0,0);
3554 user_select();
3555
+1 -1
--- src/interwiki.c
+++ src/interwiki.c
@@ -167,11 +167,11 @@
167167
**
168168
** Delete one or more interwiki maps.
169169
**
170170
** > fossil interwiki edit TAG --base URL --hash PATH --wiki PATH
171171
**
172
-** Create a interwiki referenced call TAG. The base URL is
172
+** Create an interwiki referenced call TAG. The base URL is
173173
** the --base option, which is required. The --hash and --wiki
174174
** paths are optional. The TAG must be lower-case alphanumeric
175175
** and must be unique. A new entry is created if it does not
176176
** already exit.
177177
**
178178
--- src/interwiki.c
+++ src/interwiki.c
@@ -167,11 +167,11 @@
167 **
168 ** Delete one or more interwiki maps.
169 **
170 ** > fossil interwiki edit TAG --base URL --hash PATH --wiki PATH
171 **
172 ** Create a interwiki referenced call TAG. The base URL is
173 ** the --base option, which is required. The --hash and --wiki
174 ** paths are optional. The TAG must be lower-case alphanumeric
175 ** and must be unique. A new entry is created if it does not
176 ** already exit.
177 **
178
--- src/interwiki.c
+++ src/interwiki.c
@@ -167,11 +167,11 @@
167 **
168 ** Delete one or more interwiki maps.
169 **
170 ** > fossil interwiki edit TAG --base URL --hash PATH --wiki PATH
171 **
172 ** Create an interwiki referenced call TAG. The base URL is
173 ** the --base option, which is required. The --hash and --wiki
174 ** paths are optional. The TAG must be lower-case alphanumeric
175 ** and must be unique. A new entry is created if it does not
176 ** already exit.
177 **
178
--- src/json_branch.c
+++ src/json_branch.c
@@ -128,11 +128,11 @@
128128
cson_object_set(pay,"current",json_new_string(zCurrent));
129129
}
130130
}
131131
132132
133
- branch_prepare_list_query(&q, branchListFlags, 0);
133
+ branch_prepare_list_query(&q, branchListFlags, 0, 0);
134134
cson_object_set(pay,"branches",listV);
135135
while((SQLITE_ROW==db_step(&q))){
136136
cson_value * v = cson_sqlite3_column_to_value(q.pStmt,0);
137137
if(v){
138138
cson_array_append(list,v);
139139
--- src/json_branch.c
+++ src/json_branch.c
@@ -128,11 +128,11 @@
128 cson_object_set(pay,"current",json_new_string(zCurrent));
129 }
130 }
131
132
133 branch_prepare_list_query(&q, branchListFlags, 0);
134 cson_object_set(pay,"branches",listV);
135 while((SQLITE_ROW==db_step(&q))){
136 cson_value * v = cson_sqlite3_column_to_value(q.pStmt,0);
137 if(v){
138 cson_array_append(list,v);
139
--- src/json_branch.c
+++ src/json_branch.c
@@ -128,11 +128,11 @@
128 cson_object_set(pay,"current",json_new_string(zCurrent));
129 }
130 }
131
132
133 branch_prepare_list_query(&q, branchListFlags, 0, 0);
134 cson_object_set(pay,"branches",listV);
135 while((SQLITE_ROW==db_step(&q))){
136 cson_value * v = cson_sqlite3_column_to_value(q.pStmt,0);
137 if(v){
138 cson_array_append(list,v);
139
+7 -6
--- src/login.c
+++ src/login.c
@@ -2127,16 +2127,17 @@
21272127
**
21282128
** > fossil login-group
21292129
**
21302130
** Show the login-group to which the repository belongs.
21312131
**
2132
-** > fossil login-group join ?--name NAME?
2132
+** > fossil login-group join REPO ?--name NAME?
21332133
**
21342134
** Add this repository to login group to which REPO belongs, or creates a
21352135
** new login group between itself and REPO if REPO does not already belong
21362136
** to a login-group. When creating a new login-group, the name of the new
2137
-** group is determined by the "--name" option.
2137
+** group is determined by the "--name" option. REPO may optionally be
2138
+** specified using the -R REPO flag.
21382139
**
21392140
** > fossil login-group leave
21402141
**
21412142
** Takes the repository out of whatever login group it is currently
21422143
** a part of.
@@ -2163,17 +2164,17 @@
21632164
if( g.argc>2 ){
21642165
zCmd = g.argv[2];
21652166
nCmd = (int)strlen(zCmd);
21662167
if( strncmp(zCmd,"join",nCmd)==0 && nCmd>=1 ){
21672168
const char *zNewName = find_option("name",0,1);
2168
- const char *zOther;
2169
+ const char *zOther = g.zRepositoryOption
2170
+ ? g.zRepositoryOption : (g.argc>3 ? g.argv[3] : 0);
21692171
char *zErr = 0;
21702172
verify_all_options();
2171
- if( g.argc!=4 ){
2172
- fossil_fatal("unknown extra arguments to \"login-group join\"");
2173
+ if( g.zRepositoryOption ? g.argc!=3 : g.argc!=4 ){
2174
+ fossil_fatal("unexpected argument count for \"login-group join\"");
21732175
}
2174
- zOther = g.argv[3];
21752176
login_group_leave(&zErr);
21762177
sqlite3_free(zErr);
21772178
zErr = 0;
21782179
login_group_join(zOther,0,0,0,zNewName,&zErr);
21792180
if( zErr ){
21802181
--- src/login.c
+++ src/login.c
@@ -2127,16 +2127,17 @@
2127 **
2128 ** > fossil login-group
2129 **
2130 ** Show the login-group to which the repository belongs.
2131 **
2132 ** > fossil login-group join ?--name NAME?
2133 **
2134 ** Add this repository to login group to which REPO belongs, or creates a
2135 ** new login group between itself and REPO if REPO does not already belong
2136 ** to a login-group. When creating a new login-group, the name of the new
2137 ** group is determined by the "--name" option.
 
2138 **
2139 ** > fossil login-group leave
2140 **
2141 ** Takes the repository out of whatever login group it is currently
2142 ** a part of.
@@ -2163,17 +2164,17 @@
2163 if( g.argc>2 ){
2164 zCmd = g.argv[2];
2165 nCmd = (int)strlen(zCmd);
2166 if( strncmp(zCmd,"join",nCmd)==0 && nCmd>=1 ){
2167 const char *zNewName = find_option("name",0,1);
2168 const char *zOther;
 
2169 char *zErr = 0;
2170 verify_all_options();
2171 if( g.argc!=4 ){
2172 fossil_fatal("unknown extra arguments to \"login-group join\"");
2173 }
2174 zOther = g.argv[3];
2175 login_group_leave(&zErr);
2176 sqlite3_free(zErr);
2177 zErr = 0;
2178 login_group_join(zOther,0,0,0,zNewName,&zErr);
2179 if( zErr ){
2180
--- src/login.c
+++ src/login.c
@@ -2127,16 +2127,17 @@
2127 **
2128 ** > fossil login-group
2129 **
2130 ** Show the login-group to which the repository belongs.
2131 **
2132 ** > fossil login-group join REPO ?--name NAME?
2133 **
2134 ** Add this repository to login group to which REPO belongs, or creates a
2135 ** new login group between itself and REPO if REPO does not already belong
2136 ** to a login-group. When creating a new login-group, the name of the new
2137 ** group is determined by the "--name" option. REPO may optionally be
2138 ** specified using the -R REPO flag.
2139 **
2140 ** > fossil login-group leave
2141 **
2142 ** Takes the repository out of whatever login group it is currently
2143 ** a part of.
@@ -2163,17 +2164,17 @@
2164 if( g.argc>2 ){
2165 zCmd = g.argv[2];
2166 nCmd = (int)strlen(zCmd);
2167 if( strncmp(zCmd,"join",nCmd)==0 && nCmd>=1 ){
2168 const char *zNewName = find_option("name",0,1);
2169 const char *zOther = g.zRepositoryOption
2170 ? g.zRepositoryOption : (g.argc>3 ? g.argv[3] : 0);
2171 char *zErr = 0;
2172 verify_all_options();
2173 if( g.zRepositoryOption ? g.argc!=3 : g.argc!=4 ){
2174 fossil_fatal("unexpected argument count for \"login-group join\"");
2175 }
 
2176 login_group_leave(&zErr);
2177 sqlite3_free(zErr);
2178 zErr = 0;
2179 login_group_join(zOther,0,0,0,zNewName,&zErr);
2180 if( zErr ){
2181
+82 -40
--- src/main.c
+++ src/main.c
@@ -437,11 +437,15 @@
437437
for(i=1; i<g.argc-1; i++){
438438
z = g.argv[i];
439439
if( z[0]!='-' ) continue;
440440
z++;
441441
if( z[0]=='-' ) z++;
442
- if( z[0]==0 ) return; /* Stop searching at "--" */
442
+ /* Maintenance reminder: we do not stop at a "--" flag here,
443
+ ** instead delegating that to find_option(). Doing it here
444
+ ** introduces some weird corner cases, as covered in forum thread
445
+ ** 4382bbc66757c39f. e.g. (fossil -U -- --args ...) is handled
446
+ ** differently when we stop at "--" here. */
443447
if( fossil_strcmp(z, "args")==0 ) break;
444448
}
445449
if( i>=g.argc-1 ) return;
446450
447451
zFileName = g.argv[i+1];
@@ -1172,38 +1176,51 @@
11721176
** the "version" command and "test-version" web page. It assumes the blob
11731177
** passed to it is uninitialized; otherwise, it will leak memory.
11741178
*/
11751179
void fossil_version_blob(
11761180
Blob *pOut, /* Write the manifest here */
1177
- int bVerbose /* Non-zero for full information. */
1181
+ int eVerbose /* 0: brief. 1: more text, 2: lots of text */
11781182
){
11791183
#if defined(FOSSIL_ENABLE_TCL)
11801184
int rc;
11811185
const char *zRc;
11821186
#endif
11831187
Stmt q;
11841188
size_t pageSize = 0;
11851189
blob_zero(pOut);
11861190
blob_appendf(pOut, "This is fossil version %s\n", get_version());
1187
- if( !bVerbose ) return;
1191
+ if( eVerbose<=0 ) return;
1192
+
11881193
blob_appendf(pOut, "Compiled on %s %s using %s (%d-bit)\n",
11891194
__DATE__, __TIME__, COMPILER_NAME, sizeof(void*)*8);
1195
+ blob_appendf(pOut, "SQLite %s %.30s\n", sqlite3_libversion(),
1196
+ sqlite3_sourceid());
1197
+#if defined(FOSSIL_ENABLE_SSL)
1198
+ blob_appendf(pOut, "SSL (%s)\n", SSLeay_version(SSLEAY_VERSION));
1199
+#endif
1200
+ blob_appendf(pOut, "zlib %s, loaded %s\n", ZLIB_VERSION, zlibVersion());
1201
+#if defined(FOSSIL_HAVE_FUSEFS)
1202
+ blob_appendf(pOut, "libfuse %s, loaded %s\n", fusefs_inc_version(),
1203
+ fusefs_lib_version());
1204
+#endif
1205
+#if defined(FOSSIL_ENABLE_TCL)
1206
+ Th_FossilInit(TH_INIT_DEFAULT | TH_INIT_FORCE_TCL);
1207
+ rc = Th_Eval(g.interp, 0, "tclInvoke info patchlevel", -1);
1208
+ zRc = Th_ReturnCodeName(rc, 0);
1209
+ blob_appendf(pOut, "TCL (Tcl %s, loaded %s: %s)\n",
1210
+ TCL_PATCH_LEVEL, zRc, Th_GetResult(g.interp, 0)
1211
+ );
1212
+#endif
1213
+ if( eVerbose<=1 ) return;
1214
+
11901215
blob_appendf(pOut, "Schema version %s\n", AUX_SCHEMA_MAX);
11911216
fossil_get_page_size(&pageSize);
11921217
blob_appendf(pOut, "Detected memory page size is %lu bytes\n",
11931218
(unsigned long)pageSize);
1194
- blob_appendf(pOut, "zlib %s, loaded %s\n", ZLIB_VERSION, zlibVersion());
11951219
#if FOSSIL_HARDENED_SHA1
11961220
blob_appendf(pOut, "hardened-SHA1 by Marc Stevens and Dan Shumow\n");
11971221
#endif
1198
-#if defined(FOSSIL_ENABLE_SSL)
1199
- blob_appendf(pOut, "SSL (%s)\n", SSLeay_version(SSLEAY_VERSION));
1200
-#endif
1201
-#if defined(FOSSIL_HAVE_FUSEFS)
1202
- blob_appendf(pOut, "libfuse %s, loaded %s\n", fusefs_inc_version(),
1203
- fusefs_lib_version());
1204
-#endif
12051222
#if defined(FOSSIL_DEBUG)
12061223
blob_append(pOut, "FOSSIL_DEBUG\n", -1);
12071224
#endif
12081225
#if defined(FOSSIL_ENABLE_DELTA_CKSUM_TEST)
12091226
blob_append(pOut, "FOSSIL_ENABLE_DELTA_CKSUM_TEST\n", -1);
@@ -1215,18 +1232,10 @@
12151232
#if defined(FOSSIL_ENABLE_TH1_DOCS)
12161233
blob_append(pOut, "FOSSIL_ENABLE_TH1_DOCS\n", -1);
12171234
#endif
12181235
#if defined(FOSSIL_ENABLE_TH1_HOOKS)
12191236
blob_append(pOut, "FOSSIL_ENABLE_TH1_HOOKS\n", -1);
1220
-#endif
1221
-#if defined(FOSSIL_ENABLE_TCL)
1222
- Th_FossilInit(TH_INIT_DEFAULT | TH_INIT_FORCE_TCL);
1223
- rc = Th_Eval(g.interp, 0, "tclInvoke info patchlevel", -1);
1224
- zRc = Th_ReturnCodeName(rc, 0);
1225
- blob_appendf(pOut, "TCL (Tcl %s, loaded %s: %s)\n",
1226
- TCL_PATCH_LEVEL, zRc, Th_GetResult(g.interp, 0)
1227
- );
12281237
#endif
12291238
#if defined(USE_TCL_STUBS)
12301239
blob_append(pOut, "USE_TCL_STUBS\n", -1);
12311240
#endif
12321241
#if defined(FOSSIL_ENABLE_TCL_STUBS)
@@ -1259,12 +1268,11 @@
12591268
blob_append(pOut, "USE_SEE\n", -1);
12601269
#endif
12611270
#if defined(FOSSIL_ALLOW_OUT_OF_ORDER_DATES)
12621271
blob_append(pOut, "FOSSIL_ALLOW_OUT_OF_ORDER_DATES\n");
12631272
#endif
1264
- blob_appendf(pOut, "SQLite %s %.30s\n", sqlite3_libversion(),
1265
- sqlite3_sourceid());
1273
+
12661274
if( g.db==0 ) sqlite3_open(":memory:", &g.db);
12671275
db_prepare(&q,
12681276
"pragma compile_options");
12691277
while( db_step(&q)==SQLITE_ROW ){
12701278
const char *text = db_column_text(&q, 0);
@@ -1292,15 +1300,20 @@
12921300
** Usage: %fossil version ?-v|--verbose?
12931301
**
12941302
** Print the source code version number for the fossil executable.
12951303
** If the verbose option is specified, additional details will
12961304
** be output about what optional features this binary was compiled
1297
-** with
1305
+** with.
1306
+**
1307
+** Repeat the -v option or use -vv for even more information.
12981308
*/
12991309
void version_cmd(void){
13001310
Blob versionInfo;
1301
- int verboseFlag = find_option("verbose","v",0)!=0;
1311
+ int verboseFlag = 0;
1312
+
1313
+ while( find_option("verbose","v",0)!=0 ) verboseFlag++;
1314
+ while( find_option("vv",0,0)!=0 ) verboseFlag += 2;
13021315
13031316
/* We should be done with options.. */
13041317
verify_all_options();
13051318
fossil_version_blob(&versionInfo, verboseFlag);
13061319
fossil_print("%s", blob_str(&versionInfo));
@@ -1320,11 +1333,11 @@
13201333
Blob versionInfo;
13211334
int verboseFlag;
13221335
13231336
login_check_credentials();
13241337
if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
1325
- verboseFlag = PD("verbose", 0) != 0;
1338
+ verboseFlag = P("verbose")!=0 ? 2 : 1;
13261339
style_header("Version Information");
13271340
style_submenu_element("Stat", "stat");
13281341
fossil_version_blob(&versionInfo, verboseFlag);
13291342
@ <pre>
13301343
@ %h(blob_str(&versionInfo))
@@ -1458,21 +1471,24 @@
14581471
/*
14591472
** If running as root, chroot to the directory containing the
14601473
** repository zRepo and then drop root privileges. Return the
14611474
** new repository name.
14621475
**
1463
-** zRepo might be a directory itself. In that case chroot into
1464
-** the directory zRepo.
1476
+** zRepo can be a directory. If so and if the repo name was saved
1477
+** to g.zRepositoryName before we were called, we canonicalize the
1478
+** two paths and check that one is the prefix of the other, else you
1479
+** won't be able to open the repo inside the jail. If it all works
1480
+** out, we return the "jailed" version of the repo name.
14651481
**
14661482
** Assume the user-id and group-id of the repository, or if zRepo
14671483
** is a directory, of that directory.
14681484
**
14691485
** The noJail flag means that the chroot jail is not entered. But
14701486
** privileges are still lowered to that of the user-id and group-id
14711487
** of the repository file.
14721488
*/
1473
-char *enter_chroot_jail(char *zRepo, int noJail){
1489
+static char *enter_chroot_jail(const char *zRepo, int noJail){
14741490
#if !defined(_WIN32)
14751491
if( getuid()==0 ){
14761492
int i;
14771493
struct stat sStat;
14781494
Blob dir;
@@ -1483,15 +1499,27 @@
14831499
14841500
file_canonical_name(zRepo, &dir, 0);
14851501
zDir = blob_str(&dir);
14861502
if( !noJail ){
14871503
if( file_isdir(zDir, ExtFILE)==1 ){
1504
+ if( g.zRepositoryName ){
1505
+ size_t n = strlen(zDir);
1506
+ Blob repo;
1507
+ file_canonical_name(g.zRepositoryName, &repo, 0);
1508
+ zRepo = blob_str(&repo);
1509
+ if( strncmp(zRepo, zDir, n)!=0 ){
1510
+ fossil_fatal("repo %s not under chroot dir %s", zRepo, zDir);
1511
+ }
1512
+ zRepo += n;
1513
+ if( *zRepo == '\0' ) zRepo = "/";
1514
+ }else {
1515
+ zRepo = "/";
1516
+ g.fJail = 1;
1517
+ }
14881518
if( file_chdir(zDir, 1) ){
14891519
fossil_panic("unable to chroot into %s", zDir);
14901520
}
1491
- g.fJail = 1;
1492
- zRepo = "/";
14931521
}else{
14941522
for(i=strlen(zDir)-1; i>0 && zDir[i]!='/'; i--){}
14951523
if( zDir[i]!='/' ) fossil_fatal("bad repository name: %s", zRepo);
14961524
if( i>0 ){
14971525
zDir[i] = 0;
@@ -1514,11 +1542,11 @@
15141542
if( g.db==0 && file_isfile(zRepo, ExtFILE) ){
15151543
db_open_repository(zRepo);
15161544
}
15171545
}
15181546
#endif
1519
- return zRepo;
1547
+ return (char*)zRepo; /* no longer const: always reassigned from blob_str() */
15201548
}
15211549
15221550
/*
15231551
** Called whenever a crash is encountered while processing a webpage.
15241552
*/
@@ -2257,10 +2285,15 @@
22572285
** mainmenu: FILE Override the mainmenu config setting with the
22582286
** contents of the given file.
22592287
**
22602288
** Most CGI files contain only a "repository:" line. It is uncommon to
22612289
** use any other option.
2290
+**
2291
+** The lines are processed in the order they are read, which is most
2292
+** significant for "errorlog:", which should be set before "repository:"
2293
+** so that any warnings from the database when opening the repository
2294
+** go to that log file.
22622295
**
22632296
** See also: [[http]], [[server]], [[winsrv]]
22642297
*/
22652298
void cmd_cgi(void){
22662299
const char *zFile;
@@ -2796,15 +2829,12 @@
27962829
zIpAddr = cgi_ssh_remote_addr(0);
27972830
if( zIpAddr && zIpAddr[0] ){
27982831
g.fSshClient |= CGI_SSH_CLIENT;
27992832
}
28002833
}
2801
- if( zChRoot ){
2802
- enter_chroot_jail((char*)zChRoot, noJail);
2803
- }else{
2804
- g.zRepositoryName = enter_chroot_jail(g.zRepositoryName, noJail);
2805
- }
2834
+ g.zRepositoryName = enter_chroot_jail(
2835
+ zChRoot ? zChRoot : g.zRepositoryName, noJail);
28062836
if( useSCGI ){
28072837
cgi_handle_scgi_request();
28082838
}else if( g.fSshClient & CGI_SSH_CLIENT ){
28092839
ssh_request_loop(zIpAddr, glob_create(zFileGlob));
28102840
}else{
@@ -3265,10 +3295,25 @@
32653295
return;
32663296
}
32673297
if( g.repositoryOpen ) flags |= HTTP_SERVER_HAD_REPOSITORY;
32683298
if( g.localOpen ) flags |= HTTP_SERVER_HAD_CHECKOUT;
32693299
db_close(1);
3300
+#if !defined(_WIN32)
3301
+ if( getpid()==1 ){
3302
+ /* Modern kernels suppress SIGTERM to PID 1 to prevent root from
3303
+ ** rebooting the system by nuking the init system. The only way
3304
+ ** Fossil becomes that PID 1 is when it's running solo in a Linux
3305
+ ** container or similar, so we do want to exit immediately, to
3306
+ ** allow the container to shut down quickly.
3307
+ **
3308
+ ** This has to happen ahead of the other signal() calls below.
3309
+ ** They apply after the HTTP hit is handled, but this one needs
3310
+ ** to be registered while we're waiting for that to occur.
3311
+ **/
3312
+ signal(SIGTERM, fossil_exit);
3313
+ }
3314
+#endif /* !WIN32 */
32703315
32713316
/* Start up an HTTP server
32723317
*/
32733318
fossil_setenv("SERVER_SOFTWARE", "fossil version " RELEASE_VERSION
32743319
" " MANIFEST_VERSION " " MANIFEST_DATE);
@@ -3301,15 +3346,12 @@
33013346
g.cgiOutput = 1;
33023347
find_server_repository(2, 0);
33033348
if( fossil_strcmp(g.zRepositoryName,"/")==0 ){
33043349
allowRepoList = 1;
33053350
}else{
3306
- if( zChRoot ){
3307
- enter_chroot_jail((char*)zChRoot, noJail);
3308
- }else{
3309
- g.zRepositoryName = enter_chroot_jail(g.zRepositoryName, noJail);
3310
- }
3351
+ g.zRepositoryName = enter_chroot_jail(
3352
+ zChRoot ? zChRoot : g.zRepositoryName, noJail);
33113353
}
33123354
if( flags & HTTP_SERVER_SCGI ){
33133355
cgi_handle_scgi_request();
33143356
}else if( g.httpUseSSL ){
33153357
#if FOSSIL_ENABLE_SSL
33163358
--- src/main.c
+++ src/main.c
@@ -437,11 +437,15 @@
437 for(i=1; i<g.argc-1; i++){
438 z = g.argv[i];
439 if( z[0]!='-' ) continue;
440 z++;
441 if( z[0]=='-' ) z++;
442 if( z[0]==0 ) return; /* Stop searching at "--" */
 
 
 
 
443 if( fossil_strcmp(z, "args")==0 ) break;
444 }
445 if( i>=g.argc-1 ) return;
446
447 zFileName = g.argv[i+1];
@@ -1172,38 +1176,51 @@
1172 ** the "version" command and "test-version" web page. It assumes the blob
1173 ** passed to it is uninitialized; otherwise, it will leak memory.
1174 */
1175 void fossil_version_blob(
1176 Blob *pOut, /* Write the manifest here */
1177 int bVerbose /* Non-zero for full information. */
1178 ){
1179 #if defined(FOSSIL_ENABLE_TCL)
1180 int rc;
1181 const char *zRc;
1182 #endif
1183 Stmt q;
1184 size_t pageSize = 0;
1185 blob_zero(pOut);
1186 blob_appendf(pOut, "This is fossil version %s\n", get_version());
1187 if( !bVerbose ) return;
 
1188 blob_appendf(pOut, "Compiled on %s %s using %s (%d-bit)\n",
1189 __DATE__, __TIME__, COMPILER_NAME, sizeof(void*)*8);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1190 blob_appendf(pOut, "Schema version %s\n", AUX_SCHEMA_MAX);
1191 fossil_get_page_size(&pageSize);
1192 blob_appendf(pOut, "Detected memory page size is %lu bytes\n",
1193 (unsigned long)pageSize);
1194 blob_appendf(pOut, "zlib %s, loaded %s\n", ZLIB_VERSION, zlibVersion());
1195 #if FOSSIL_HARDENED_SHA1
1196 blob_appendf(pOut, "hardened-SHA1 by Marc Stevens and Dan Shumow\n");
1197 #endif
1198 #if defined(FOSSIL_ENABLE_SSL)
1199 blob_appendf(pOut, "SSL (%s)\n", SSLeay_version(SSLEAY_VERSION));
1200 #endif
1201 #if defined(FOSSIL_HAVE_FUSEFS)
1202 blob_appendf(pOut, "libfuse %s, loaded %s\n", fusefs_inc_version(),
1203 fusefs_lib_version());
1204 #endif
1205 #if defined(FOSSIL_DEBUG)
1206 blob_append(pOut, "FOSSIL_DEBUG\n", -1);
1207 #endif
1208 #if defined(FOSSIL_ENABLE_DELTA_CKSUM_TEST)
1209 blob_append(pOut, "FOSSIL_ENABLE_DELTA_CKSUM_TEST\n", -1);
@@ -1215,18 +1232,10 @@
1215 #if defined(FOSSIL_ENABLE_TH1_DOCS)
1216 blob_append(pOut, "FOSSIL_ENABLE_TH1_DOCS\n", -1);
1217 #endif
1218 #if defined(FOSSIL_ENABLE_TH1_HOOKS)
1219 blob_append(pOut, "FOSSIL_ENABLE_TH1_HOOKS\n", -1);
1220 #endif
1221 #if defined(FOSSIL_ENABLE_TCL)
1222 Th_FossilInit(TH_INIT_DEFAULT | TH_INIT_FORCE_TCL);
1223 rc = Th_Eval(g.interp, 0, "tclInvoke info patchlevel", -1);
1224 zRc = Th_ReturnCodeName(rc, 0);
1225 blob_appendf(pOut, "TCL (Tcl %s, loaded %s: %s)\n",
1226 TCL_PATCH_LEVEL, zRc, Th_GetResult(g.interp, 0)
1227 );
1228 #endif
1229 #if defined(USE_TCL_STUBS)
1230 blob_append(pOut, "USE_TCL_STUBS\n", -1);
1231 #endif
1232 #if defined(FOSSIL_ENABLE_TCL_STUBS)
@@ -1259,12 +1268,11 @@
1259 blob_append(pOut, "USE_SEE\n", -1);
1260 #endif
1261 #if defined(FOSSIL_ALLOW_OUT_OF_ORDER_DATES)
1262 blob_append(pOut, "FOSSIL_ALLOW_OUT_OF_ORDER_DATES\n");
1263 #endif
1264 blob_appendf(pOut, "SQLite %s %.30s\n", sqlite3_libversion(),
1265 sqlite3_sourceid());
1266 if( g.db==0 ) sqlite3_open(":memory:", &g.db);
1267 db_prepare(&q,
1268 "pragma compile_options");
1269 while( db_step(&q)==SQLITE_ROW ){
1270 const char *text = db_column_text(&q, 0);
@@ -1292,15 +1300,20 @@
1292 ** Usage: %fossil version ?-v|--verbose?
1293 **
1294 ** Print the source code version number for the fossil executable.
1295 ** If the verbose option is specified, additional details will
1296 ** be output about what optional features this binary was compiled
1297 ** with
 
 
1298 */
1299 void version_cmd(void){
1300 Blob versionInfo;
1301 int verboseFlag = find_option("verbose","v",0)!=0;
 
 
 
1302
1303 /* We should be done with options.. */
1304 verify_all_options();
1305 fossil_version_blob(&versionInfo, verboseFlag);
1306 fossil_print("%s", blob_str(&versionInfo));
@@ -1320,11 +1333,11 @@
1320 Blob versionInfo;
1321 int verboseFlag;
1322
1323 login_check_credentials();
1324 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
1325 verboseFlag = PD("verbose", 0) != 0;
1326 style_header("Version Information");
1327 style_submenu_element("Stat", "stat");
1328 fossil_version_blob(&versionInfo, verboseFlag);
1329 @ <pre>
1330 @ %h(blob_str(&versionInfo))
@@ -1458,21 +1471,24 @@
1458 /*
1459 ** If running as root, chroot to the directory containing the
1460 ** repository zRepo and then drop root privileges. Return the
1461 ** new repository name.
1462 **
1463 ** zRepo might be a directory itself. In that case chroot into
1464 ** the directory zRepo.
 
 
 
1465 **
1466 ** Assume the user-id and group-id of the repository, or if zRepo
1467 ** is a directory, of that directory.
1468 **
1469 ** The noJail flag means that the chroot jail is not entered. But
1470 ** privileges are still lowered to that of the user-id and group-id
1471 ** of the repository file.
1472 */
1473 char *enter_chroot_jail(char *zRepo, int noJail){
1474 #if !defined(_WIN32)
1475 if( getuid()==0 ){
1476 int i;
1477 struct stat sStat;
1478 Blob dir;
@@ -1483,15 +1499,27 @@
1483
1484 file_canonical_name(zRepo, &dir, 0);
1485 zDir = blob_str(&dir);
1486 if( !noJail ){
1487 if( file_isdir(zDir, ExtFILE)==1 ){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1488 if( file_chdir(zDir, 1) ){
1489 fossil_panic("unable to chroot into %s", zDir);
1490 }
1491 g.fJail = 1;
1492 zRepo = "/";
1493 }else{
1494 for(i=strlen(zDir)-1; i>0 && zDir[i]!='/'; i--){}
1495 if( zDir[i]!='/' ) fossil_fatal("bad repository name: %s", zRepo);
1496 if( i>0 ){
1497 zDir[i] = 0;
@@ -1514,11 +1542,11 @@
1514 if( g.db==0 && file_isfile(zRepo, ExtFILE) ){
1515 db_open_repository(zRepo);
1516 }
1517 }
1518 #endif
1519 return zRepo;
1520 }
1521
1522 /*
1523 ** Called whenever a crash is encountered while processing a webpage.
1524 */
@@ -2257,10 +2285,15 @@
2257 ** mainmenu: FILE Override the mainmenu config setting with the
2258 ** contents of the given file.
2259 **
2260 ** Most CGI files contain only a "repository:" line. It is uncommon to
2261 ** use any other option.
 
 
 
 
 
2262 **
2263 ** See also: [[http]], [[server]], [[winsrv]]
2264 */
2265 void cmd_cgi(void){
2266 const char *zFile;
@@ -2796,15 +2829,12 @@
2796 zIpAddr = cgi_ssh_remote_addr(0);
2797 if( zIpAddr && zIpAddr[0] ){
2798 g.fSshClient |= CGI_SSH_CLIENT;
2799 }
2800 }
2801 if( zChRoot ){
2802 enter_chroot_jail((char*)zChRoot, noJail);
2803 }else{
2804 g.zRepositoryName = enter_chroot_jail(g.zRepositoryName, noJail);
2805 }
2806 if( useSCGI ){
2807 cgi_handle_scgi_request();
2808 }else if( g.fSshClient & CGI_SSH_CLIENT ){
2809 ssh_request_loop(zIpAddr, glob_create(zFileGlob));
2810 }else{
@@ -3265,10 +3295,25 @@
3265 return;
3266 }
3267 if( g.repositoryOpen ) flags |= HTTP_SERVER_HAD_REPOSITORY;
3268 if( g.localOpen ) flags |= HTTP_SERVER_HAD_CHECKOUT;
3269 db_close(1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3270
3271 /* Start up an HTTP server
3272 */
3273 fossil_setenv("SERVER_SOFTWARE", "fossil version " RELEASE_VERSION
3274 " " MANIFEST_VERSION " " MANIFEST_DATE);
@@ -3301,15 +3346,12 @@
3301 g.cgiOutput = 1;
3302 find_server_repository(2, 0);
3303 if( fossil_strcmp(g.zRepositoryName,"/")==0 ){
3304 allowRepoList = 1;
3305 }else{
3306 if( zChRoot ){
3307 enter_chroot_jail((char*)zChRoot, noJail);
3308 }else{
3309 g.zRepositoryName = enter_chroot_jail(g.zRepositoryName, noJail);
3310 }
3311 }
3312 if( flags & HTTP_SERVER_SCGI ){
3313 cgi_handle_scgi_request();
3314 }else if( g.httpUseSSL ){
3315 #if FOSSIL_ENABLE_SSL
3316
--- src/main.c
+++ src/main.c
@@ -437,11 +437,15 @@
437 for(i=1; i<g.argc-1; i++){
438 z = g.argv[i];
439 if( z[0]!='-' ) continue;
440 z++;
441 if( z[0]=='-' ) z++;
442 /* Maintenance reminder: we do not stop at a "--" flag here,
443 ** instead delegating that to find_option(). Doing it here
444 ** introduces some weird corner cases, as covered in forum thread
445 ** 4382bbc66757c39f. e.g. (fossil -U -- --args ...) is handled
446 ** differently when we stop at "--" here. */
447 if( fossil_strcmp(z, "args")==0 ) break;
448 }
449 if( i>=g.argc-1 ) return;
450
451 zFileName = g.argv[i+1];
@@ -1172,38 +1176,51 @@
1176 ** the "version" command and "test-version" web page. It assumes the blob
1177 ** passed to it is uninitialized; otherwise, it will leak memory.
1178 */
1179 void fossil_version_blob(
1180 Blob *pOut, /* Write the manifest here */
1181 int eVerbose /* 0: brief. 1: more text, 2: lots of text */
1182 ){
1183 #if defined(FOSSIL_ENABLE_TCL)
1184 int rc;
1185 const char *zRc;
1186 #endif
1187 Stmt q;
1188 size_t pageSize = 0;
1189 blob_zero(pOut);
1190 blob_appendf(pOut, "This is fossil version %s\n", get_version());
1191 if( eVerbose<=0 ) return;
1192
1193 blob_appendf(pOut, "Compiled on %s %s using %s (%d-bit)\n",
1194 __DATE__, __TIME__, COMPILER_NAME, sizeof(void*)*8);
1195 blob_appendf(pOut, "SQLite %s %.30s\n", sqlite3_libversion(),
1196 sqlite3_sourceid());
1197 #if defined(FOSSIL_ENABLE_SSL)
1198 blob_appendf(pOut, "SSL (%s)\n", SSLeay_version(SSLEAY_VERSION));
1199 #endif
1200 blob_appendf(pOut, "zlib %s, loaded %s\n", ZLIB_VERSION, zlibVersion());
1201 #if defined(FOSSIL_HAVE_FUSEFS)
1202 blob_appendf(pOut, "libfuse %s, loaded %s\n", fusefs_inc_version(),
1203 fusefs_lib_version());
1204 #endif
1205 #if defined(FOSSIL_ENABLE_TCL)
1206 Th_FossilInit(TH_INIT_DEFAULT | TH_INIT_FORCE_TCL);
1207 rc = Th_Eval(g.interp, 0, "tclInvoke info patchlevel", -1);
1208 zRc = Th_ReturnCodeName(rc, 0);
1209 blob_appendf(pOut, "TCL (Tcl %s, loaded %s: %s)\n",
1210 TCL_PATCH_LEVEL, zRc, Th_GetResult(g.interp, 0)
1211 );
1212 #endif
1213 if( eVerbose<=1 ) return;
1214
1215 blob_appendf(pOut, "Schema version %s\n", AUX_SCHEMA_MAX);
1216 fossil_get_page_size(&pageSize);
1217 blob_appendf(pOut, "Detected memory page size is %lu bytes\n",
1218 (unsigned long)pageSize);
 
1219 #if FOSSIL_HARDENED_SHA1
1220 blob_appendf(pOut, "hardened-SHA1 by Marc Stevens and Dan Shumow\n");
1221 #endif
 
 
 
 
 
 
 
1222 #if defined(FOSSIL_DEBUG)
1223 blob_append(pOut, "FOSSIL_DEBUG\n", -1);
1224 #endif
1225 #if defined(FOSSIL_ENABLE_DELTA_CKSUM_TEST)
1226 blob_append(pOut, "FOSSIL_ENABLE_DELTA_CKSUM_TEST\n", -1);
@@ -1215,18 +1232,10 @@
1232 #if defined(FOSSIL_ENABLE_TH1_DOCS)
1233 blob_append(pOut, "FOSSIL_ENABLE_TH1_DOCS\n", -1);
1234 #endif
1235 #if defined(FOSSIL_ENABLE_TH1_HOOKS)
1236 blob_append(pOut, "FOSSIL_ENABLE_TH1_HOOKS\n", -1);
 
 
 
 
 
 
 
 
1237 #endif
1238 #if defined(USE_TCL_STUBS)
1239 blob_append(pOut, "USE_TCL_STUBS\n", -1);
1240 #endif
1241 #if defined(FOSSIL_ENABLE_TCL_STUBS)
@@ -1259,12 +1268,11 @@
1268 blob_append(pOut, "USE_SEE\n", -1);
1269 #endif
1270 #if defined(FOSSIL_ALLOW_OUT_OF_ORDER_DATES)
1271 blob_append(pOut, "FOSSIL_ALLOW_OUT_OF_ORDER_DATES\n");
1272 #endif
1273
 
1274 if( g.db==0 ) sqlite3_open(":memory:", &g.db);
1275 db_prepare(&q,
1276 "pragma compile_options");
1277 while( db_step(&q)==SQLITE_ROW ){
1278 const char *text = db_column_text(&q, 0);
@@ -1292,15 +1300,20 @@
1300 ** Usage: %fossil version ?-v|--verbose?
1301 **
1302 ** Print the source code version number for the fossil executable.
1303 ** If the verbose option is specified, additional details will
1304 ** be output about what optional features this binary was compiled
1305 ** with.
1306 **
1307 ** Repeat the -v option or use -vv for even more information.
1308 */
1309 void version_cmd(void){
1310 Blob versionInfo;
1311 int verboseFlag = 0;
1312
1313 while( find_option("verbose","v",0)!=0 ) verboseFlag++;
1314 while( find_option("vv",0,0)!=0 ) verboseFlag += 2;
1315
1316 /* We should be done with options.. */
1317 verify_all_options();
1318 fossil_version_blob(&versionInfo, verboseFlag);
1319 fossil_print("%s", blob_str(&versionInfo));
@@ -1320,11 +1333,11 @@
1333 Blob versionInfo;
1334 int verboseFlag;
1335
1336 login_check_credentials();
1337 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
1338 verboseFlag = P("verbose")!=0 ? 2 : 1;
1339 style_header("Version Information");
1340 style_submenu_element("Stat", "stat");
1341 fossil_version_blob(&versionInfo, verboseFlag);
1342 @ <pre>
1343 @ %h(blob_str(&versionInfo))
@@ -1458,21 +1471,24 @@
1471 /*
1472 ** If running as root, chroot to the directory containing the
1473 ** repository zRepo and then drop root privileges. Return the
1474 ** new repository name.
1475 **
1476 ** zRepo can be a directory. If so and if the repo name was saved
1477 ** to g.zRepositoryName before we were called, we canonicalize the
1478 ** two paths and check that one is the prefix of the other, else you
1479 ** won't be able to open the repo inside the jail. If it all works
1480 ** out, we return the "jailed" version of the repo name.
1481 **
1482 ** Assume the user-id and group-id of the repository, or if zRepo
1483 ** is a directory, of that directory.
1484 **
1485 ** The noJail flag means that the chroot jail is not entered. But
1486 ** privileges are still lowered to that of the user-id and group-id
1487 ** of the repository file.
1488 */
1489 static char *enter_chroot_jail(const char *zRepo, int noJail){
1490 #if !defined(_WIN32)
1491 if( getuid()==0 ){
1492 int i;
1493 struct stat sStat;
1494 Blob dir;
@@ -1483,15 +1499,27 @@
1499
1500 file_canonical_name(zRepo, &dir, 0);
1501 zDir = blob_str(&dir);
1502 if( !noJail ){
1503 if( file_isdir(zDir, ExtFILE)==1 ){
1504 if( g.zRepositoryName ){
1505 size_t n = strlen(zDir);
1506 Blob repo;
1507 file_canonical_name(g.zRepositoryName, &repo, 0);
1508 zRepo = blob_str(&repo);
1509 if( strncmp(zRepo, zDir, n)!=0 ){
1510 fossil_fatal("repo %s not under chroot dir %s", zRepo, zDir);
1511 }
1512 zRepo += n;
1513 if( *zRepo == '\0' ) zRepo = "/";
1514 }else {
1515 zRepo = "/";
1516 g.fJail = 1;
1517 }
1518 if( file_chdir(zDir, 1) ){
1519 fossil_panic("unable to chroot into %s", zDir);
1520 }
 
 
1521 }else{
1522 for(i=strlen(zDir)-1; i>0 && zDir[i]!='/'; i--){}
1523 if( zDir[i]!='/' ) fossil_fatal("bad repository name: %s", zRepo);
1524 if( i>0 ){
1525 zDir[i] = 0;
@@ -1514,11 +1542,11 @@
1542 if( g.db==0 && file_isfile(zRepo, ExtFILE) ){
1543 db_open_repository(zRepo);
1544 }
1545 }
1546 #endif
1547 return (char*)zRepo; /* no longer const: always reassigned from blob_str() */
1548 }
1549
1550 /*
1551 ** Called whenever a crash is encountered while processing a webpage.
1552 */
@@ -2257,10 +2285,15 @@
2285 ** mainmenu: FILE Override the mainmenu config setting with the
2286 ** contents of the given file.
2287 **
2288 ** Most CGI files contain only a "repository:" line. It is uncommon to
2289 ** use any other option.
2290 **
2291 ** The lines are processed in the order they are read, which is most
2292 ** significant for "errorlog:", which should be set before "repository:"
2293 ** so that any warnings from the database when opening the repository
2294 ** go to that log file.
2295 **
2296 ** See also: [[http]], [[server]], [[winsrv]]
2297 */
2298 void cmd_cgi(void){
2299 const char *zFile;
@@ -2796,15 +2829,12 @@
2829 zIpAddr = cgi_ssh_remote_addr(0);
2830 if( zIpAddr && zIpAddr[0] ){
2831 g.fSshClient |= CGI_SSH_CLIENT;
2832 }
2833 }
2834 g.zRepositoryName = enter_chroot_jail(
2835 zChRoot ? zChRoot : g.zRepositoryName, noJail);
 
 
 
2836 if( useSCGI ){
2837 cgi_handle_scgi_request();
2838 }else if( g.fSshClient & CGI_SSH_CLIENT ){
2839 ssh_request_loop(zIpAddr, glob_create(zFileGlob));
2840 }else{
@@ -3265,10 +3295,25 @@
3295 return;
3296 }
3297 if( g.repositoryOpen ) flags |= HTTP_SERVER_HAD_REPOSITORY;
3298 if( g.localOpen ) flags |= HTTP_SERVER_HAD_CHECKOUT;
3299 db_close(1);
3300 #if !defined(_WIN32)
3301 if( getpid()==1 ){
3302 /* Modern kernels suppress SIGTERM to PID 1 to prevent root from
3303 ** rebooting the system by nuking the init system. The only way
3304 ** Fossil becomes that PID 1 is when it's running solo in a Linux
3305 ** container or similar, so we do want to exit immediately, to
3306 ** allow the container to shut down quickly.
3307 **
3308 ** This has to happen ahead of the other signal() calls below.
3309 ** They apply after the HTTP hit is handled, but this one needs
3310 ** to be registered while we're waiting for that to occur.
3311 **/
3312 signal(SIGTERM, fossil_exit);
3313 }
3314 #endif /* !WIN32 */
3315
3316 /* Start up an HTTP server
3317 */
3318 fossil_setenv("SERVER_SOFTWARE", "fossil version " RELEASE_VERSION
3319 " " MANIFEST_VERSION " " MANIFEST_DATE);
@@ -3301,15 +3346,12 @@
3346 g.cgiOutput = 1;
3347 find_server_repository(2, 0);
3348 if( fossil_strcmp(g.zRepositoryName,"/")==0 ){
3349 allowRepoList = 1;
3350 }else{
3351 g.zRepositoryName = enter_chroot_jail(
3352 zChRoot ? zChRoot : g.zRepositoryName, noJail);
 
 
 
3353 }
3354 if( flags & HTTP_SERVER_SCGI ){
3355 cgi_handle_scgi_request();
3356 }else if( g.httpUseSSL ){
3357 #if FOSSIL_ENABLE_SSL
3358
+3 -2
--- src/main.mk
+++ src/main.mk
@@ -692,13 +692,14 @@
692692
# using -lsqlite3.
693693
#
694694
# Closely related is SQLITE3_ORIGIN, with the same numeric mapping plus
695695
# a value of 2 means that we are building a client-provided sqlite3.c.
696696
SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
697
-SQLITE3_OBJ.1 =
697
+SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o
698698
# SQLITE3_OBJ.2 is set by the configure process
699699
SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
700
+SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN))
700701
701702
# The USE_LINENOISE variable may be undefined, set to 0, or set
702703
# to 1. If it is set to 0, then there is no need to build or link
703704
# the linenoise.o object.
704705
LINENOISE_DEF.0 =
@@ -2089,11 +2090,11 @@
20892090
$(OBJDIR)/zip.o: $(OBJDIR)/zip_.c $(OBJDIR)/zip.h $(SRCDIR)/config.h
20902091
$(XTCC) -o $(OBJDIR)/zip.o -c $(OBJDIR)/zip_.c
20912092
20922093
$(OBJDIR)/zip.h: $(OBJDIR)/headers
20932094
2094
-$(OBJDIR)/sqlite3.o: $(SQLITE3_SRC)
2095
+$(SQLITE3_OBJ): $(SQLITE3_SRC)
20952096
$(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \
20962097
-c $(SQLITE3_SRC) -o $@
20972098
$(OBJDIR)/shell.o: $(SQLITE3_SHELL_SRC) $(SRCDIR_extsrc)/sqlite3.h
20982099
$(XTCC) $(SHELL_OPTIONS) $(SHELL_CFLAGS) $(SEE_FLAGS) $(LINENOISE_DEF.$(USE_LINENOISE)) -c $(SQLITE3_SHELL_SRC) -o $@
20992100
21002101
--- src/main.mk
+++ src/main.mk
@@ -692,13 +692,14 @@
692 # using -lsqlite3.
693 #
694 # Closely related is SQLITE3_ORIGIN, with the same numeric mapping plus
695 # a value of 2 means that we are building a client-provided sqlite3.c.
696 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
697 SQLITE3_OBJ.1 =
698 # SQLITE3_OBJ.2 is set by the configure process
699 SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
 
700
701 # The USE_LINENOISE variable may be undefined, set to 0, or set
702 # to 1. If it is set to 0, then there is no need to build or link
703 # the linenoise.o object.
704 LINENOISE_DEF.0 =
@@ -2089,11 +2090,11 @@
2089 $(OBJDIR)/zip.o: $(OBJDIR)/zip_.c $(OBJDIR)/zip.h $(SRCDIR)/config.h
2090 $(XTCC) -o $(OBJDIR)/zip.o -c $(OBJDIR)/zip_.c
2091
2092 $(OBJDIR)/zip.h: $(OBJDIR)/headers
2093
2094 $(OBJDIR)/sqlite3.o: $(SQLITE3_SRC)
2095 $(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \
2096 -c $(SQLITE3_SRC) -o $@
2097 $(OBJDIR)/shell.o: $(SQLITE3_SHELL_SRC) $(SRCDIR_extsrc)/sqlite3.h
2098 $(XTCC) $(SHELL_OPTIONS) $(SHELL_CFLAGS) $(SEE_FLAGS) $(LINENOISE_DEF.$(USE_LINENOISE)) -c $(SQLITE3_SHELL_SRC) -o $@
2099
2100
--- src/main.mk
+++ src/main.mk
@@ -692,13 +692,14 @@
692 # using -lsqlite3.
693 #
694 # Closely related is SQLITE3_ORIGIN, with the same numeric mapping plus
695 # a value of 2 means that we are building a client-provided sqlite3.c.
696 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
697 SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o
698 # SQLITE3_OBJ.2 is set by the configure process
699 SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
700 SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN))
701
702 # The USE_LINENOISE variable may be undefined, set to 0, or set
703 # to 1. If it is set to 0, then there is no need to build or link
704 # the linenoise.o object.
705 LINENOISE_DEF.0 =
@@ -2089,11 +2090,11 @@
2090 $(OBJDIR)/zip.o: $(OBJDIR)/zip_.c $(OBJDIR)/zip.h $(SRCDIR)/config.h
2091 $(XTCC) -o $(OBJDIR)/zip.o -c $(OBJDIR)/zip_.c
2092
2093 $(OBJDIR)/zip.h: $(OBJDIR)/headers
2094
2095 $(SQLITE3_OBJ): $(SQLITE3_SRC)
2096 $(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \
2097 -c $(SQLITE3_SRC) -o $@
2098 $(OBJDIR)/shell.o: $(SQLITE3_SHELL_SRC) $(SRCDIR_extsrc)/sqlite3.h
2099 $(XTCC) $(SHELL_OPTIONS) $(SHELL_CFLAGS) $(SEE_FLAGS) $(LINENOISE_DEF.$(USE_LINENOISE)) -c $(SQLITE3_SHELL_SRC) -o $@
2100
2101
+16 -12
--- src/markdown.c
+++ src/markdown.c
@@ -1505,34 +1505,38 @@
15051505
struct render *rndr,
15061506
char *data,
15071507
size_t offset,
15081508
size_t size /* parse_inline() ensures that size > 0 */
15091509
){
1510
- const int is_img = (offset && data[-1] == '!');
1511
- size_t i = 1, txt_e;
1512
- struct Blob *content = 0;
1513
- struct Blob *link = 0;
1514
- struct Blob *title = 0;
1510
+ const int bFsfn = (size>3 && data[1]=='^'); /*free-standing footnote ref*/
1511
+ const int bImg = !bFsfn && (offset && data[-1] == '!');
1512
+ size_t i, txt_e;
1513
+ struct Blob *content;
1514
+ struct Blob *link;
1515
+ struct Blob *title;
15151516
struct footnote fn;
15161517
int ret;
15171518
15181519
/* checking whether the correct renderer exists */
1519
- if( (is_img && !rndr->make.image) || (!is_img && !rndr->make.link) ){
1520
- return 0;
1520
+ if( !bFsfn ){
1521
+ if( (bImg && !rndr->make.image) || (!bImg && !rndr->make.link) ){
1522
+ return 0;
1523
+ }
15211524
}
15221525
15231526
/* looking for the matching closing bracket */
15241527
txt_e = matching_bracket_offset(data, data+size);
15251528
if( !txt_e ) return 0;
15261529
i = txt_e + 1;
15271530
ret = 0; /* error if we don't get to the callback */
1528
- fn.nUsed = 0;
15291531
1530
- /* free-standing footnote refernece */
1531
- if(!is_img && size>3 && data[1]=='^'){
1532
+ /* free-standing footnote reference */
1533
+ if( bFsfn ){
15321534
fn = get_footnote(rndr, data+2, txt_e-2);
1535
+ content = link = title = 0;
15331536
}else{
1537
+ fn.nUsed = 0;
15341538
15351539
/* skip "inter-bracket-whitespace" - any amount of whitespace or newline */
15361540
/* (this is much more lax than original markdown syntax) */
15371541
while( i<size && (data[i]==' ' || data[i]=='\t' || data[i]=='\n') ){ i++; }
15381542
@@ -1599,16 +1603,16 @@
15991603
i = txt_e+1;
16001604
}
16011605
}
16021606
/* building content: img alt is escaped, link content is parsed */
16031607
if( txt_e>1 && content ){
1604
- if( is_img ) blob_append(content, data+1, txt_e-1);
1608
+ if( bImg ) blob_append(content, data+1, txt_e-1);
16051609
else parse_inline(content, rndr, data+1, txt_e-1);
16061610
}
16071611
16081612
/* calling the relevant rendering function */
1609
- if( is_img ){
1613
+ if( bImg ){
16101614
if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ){
16111615
ob->nUsed--;
16121616
}
16131617
ret = rndr->make.image(ob, link, title, content, rndr->make.opaque);
16141618
}else if( fn.nUsed ){
16151619
--- src/markdown.c
+++ src/markdown.c
@@ -1505,34 +1505,38 @@
1505 struct render *rndr,
1506 char *data,
1507 size_t offset,
1508 size_t size /* parse_inline() ensures that size > 0 */
1509 ){
1510 const int is_img = (offset && data[-1] == '!');
1511 size_t i = 1, txt_e;
1512 struct Blob *content = 0;
1513 struct Blob *link = 0;
1514 struct Blob *title = 0;
 
1515 struct footnote fn;
1516 int ret;
1517
1518 /* checking whether the correct renderer exists */
1519 if( (is_img && !rndr->make.image) || (!is_img && !rndr->make.link) ){
1520 return 0;
 
 
1521 }
1522
1523 /* looking for the matching closing bracket */
1524 txt_e = matching_bracket_offset(data, data+size);
1525 if( !txt_e ) return 0;
1526 i = txt_e + 1;
1527 ret = 0; /* error if we don't get to the callback */
1528 fn.nUsed = 0;
1529
1530 /* free-standing footnote refernece */
1531 if(!is_img && size>3 && data[1]=='^'){
1532 fn = get_footnote(rndr, data+2, txt_e-2);
 
1533 }else{
 
1534
1535 /* skip "inter-bracket-whitespace" - any amount of whitespace or newline */
1536 /* (this is much more lax than original markdown syntax) */
1537 while( i<size && (data[i]==' ' || data[i]=='\t' || data[i]=='\n') ){ i++; }
1538
@@ -1599,16 +1603,16 @@
1599 i = txt_e+1;
1600 }
1601 }
1602 /* building content: img alt is escaped, link content is parsed */
1603 if( txt_e>1 && content ){
1604 if( is_img ) blob_append(content, data+1, txt_e-1);
1605 else parse_inline(content, rndr, data+1, txt_e-1);
1606 }
1607
1608 /* calling the relevant rendering function */
1609 if( is_img ){
1610 if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ){
1611 ob->nUsed--;
1612 }
1613 ret = rndr->make.image(ob, link, title, content, rndr->make.opaque);
1614 }else if( fn.nUsed ){
1615
--- src/markdown.c
+++ src/markdown.c
@@ -1505,34 +1505,38 @@
1505 struct render *rndr,
1506 char *data,
1507 size_t offset,
1508 size_t size /* parse_inline() ensures that size > 0 */
1509 ){
1510 const int bFsfn = (size>3 && data[1]=='^'); /*free-standing footnote ref*/
1511 const int bImg = !bFsfn && (offset && data[-1] == '!');
1512 size_t i, txt_e;
1513 struct Blob *content;
1514 struct Blob *link;
1515 struct Blob *title;
1516 struct footnote fn;
1517 int ret;
1518
1519 /* checking whether the correct renderer exists */
1520 if( !bFsfn ){
1521 if( (bImg && !rndr->make.image) || (!bImg && !rndr->make.link) ){
1522 return 0;
1523 }
1524 }
1525
1526 /* looking for the matching closing bracket */
1527 txt_e = matching_bracket_offset(data, data+size);
1528 if( !txt_e ) return 0;
1529 i = txt_e + 1;
1530 ret = 0; /* error if we don't get to the callback */
 
1531
1532 /* free-standing footnote reference */
1533 if( bFsfn ){
1534 fn = get_footnote(rndr, data+2, txt_e-2);
1535 content = link = title = 0;
1536 }else{
1537 fn.nUsed = 0;
1538
1539 /* skip "inter-bracket-whitespace" - any amount of whitespace or newline */
1540 /* (this is much more lax than original markdown syntax) */
1541 while( i<size && (data[i]==' ' || data[i]=='\t' || data[i]=='\n') ){ i++; }
1542
@@ -1599,16 +1603,16 @@
1603 i = txt_e+1;
1604 }
1605 }
1606 /* building content: img alt is escaped, link content is parsed */
1607 if( txt_e>1 && content ){
1608 if( bImg ) blob_append(content, data+1, txt_e-1);
1609 else parse_inline(content, rndr, data+1, txt_e-1);
1610 }
1611
1612 /* calling the relevant rendering function */
1613 if( bImg ){
1614 if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ){
1615 ob->nUsed--;
1616 }
1617 ret = rndr->make.image(ob, link, title, content, rndr->make.opaque);
1618 }else if( fn.nUsed ){
1619
+16 -12
--- src/markdown.c
+++ src/markdown.c
@@ -1505,34 +1505,38 @@
15051505
struct render *rndr,
15061506
char *data,
15071507
size_t offset,
15081508
size_t size /* parse_inline() ensures that size > 0 */
15091509
){
1510
- const int is_img = (offset && data[-1] == '!');
1511
- size_t i = 1, txt_e;
1512
- struct Blob *content = 0;
1513
- struct Blob *link = 0;
1514
- struct Blob *title = 0;
1510
+ const int bFsfn = (size>3 && data[1]=='^'); /*free-standing footnote ref*/
1511
+ const int bImg = !bFsfn && (offset && data[-1] == '!');
1512
+ size_t i, txt_e;
1513
+ struct Blob *content;
1514
+ struct Blob *link;
1515
+ struct Blob *title;
15151516
struct footnote fn;
15161517
int ret;
15171518
15181519
/* checking whether the correct renderer exists */
1519
- if( (is_img && !rndr->make.image) || (!is_img && !rndr->make.link) ){
1520
- return 0;
1520
+ if( !bFsfn ){
1521
+ if( (bImg && !rndr->make.image) || (!bImg && !rndr->make.link) ){
1522
+ return 0;
1523
+ }
15211524
}
15221525
15231526
/* looking for the matching closing bracket */
15241527
txt_e = matching_bracket_offset(data, data+size);
15251528
if( !txt_e ) return 0;
15261529
i = txt_e + 1;
15271530
ret = 0; /* error if we don't get to the callback */
1528
- fn.nUsed = 0;
15291531
1530
- /* free-standing footnote refernece */
1531
- if(!is_img && size>3 && data[1]=='^'){
1532
+ /* free-standing footnote reference */
1533
+ if( bFsfn ){
15321534
fn = get_footnote(rndr, data+2, txt_e-2);
1535
+ content = link = title = 0;
15331536
}else{
1537
+ fn.nUsed = 0;
15341538
15351539
/* skip "inter-bracket-whitespace" - any amount of whitespace or newline */
15361540
/* (this is much more lax than original markdown syntax) */
15371541
while( i<size && (data[i]==' ' || data[i]=='\t' || data[i]=='\n') ){ i++; }
15381542
@@ -1599,16 +1603,16 @@
15991603
i = txt_e+1;
16001604
}
16011605
}
16021606
/* building content: img alt is escaped, link content is parsed */
16031607
if( txt_e>1 && content ){
1604
- if( is_img ) blob_append(content, data+1, txt_e-1);
1608
+ if( bImg ) blob_append(content, data+1, txt_e-1);
16051609
else parse_inline(content, rndr, data+1, txt_e-1);
16061610
}
16071611
16081612
/* calling the relevant rendering function */
1609
- if( is_img ){
1613
+ if( bImg ){
16101614
if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ){
16111615
ob->nUsed--;
16121616
}
16131617
ret = rndr->make.image(ob, link, title, content, rndr->make.opaque);
16141618
}else if( fn.nUsed ){
16151619
--- src/markdown.c
+++ src/markdown.c
@@ -1505,34 +1505,38 @@
1505 struct render *rndr,
1506 char *data,
1507 size_t offset,
1508 size_t size /* parse_inline() ensures that size > 0 */
1509 ){
1510 const int is_img = (offset && data[-1] == '!');
1511 size_t i = 1, txt_e;
1512 struct Blob *content = 0;
1513 struct Blob *link = 0;
1514 struct Blob *title = 0;
 
1515 struct footnote fn;
1516 int ret;
1517
1518 /* checking whether the correct renderer exists */
1519 if( (is_img && !rndr->make.image) || (!is_img && !rndr->make.link) ){
1520 return 0;
 
 
1521 }
1522
1523 /* looking for the matching closing bracket */
1524 txt_e = matching_bracket_offset(data, data+size);
1525 if( !txt_e ) return 0;
1526 i = txt_e + 1;
1527 ret = 0; /* error if we don't get to the callback */
1528 fn.nUsed = 0;
1529
1530 /* free-standing footnote refernece */
1531 if(!is_img && size>3 && data[1]=='^'){
1532 fn = get_footnote(rndr, data+2, txt_e-2);
 
1533 }else{
 
1534
1535 /* skip "inter-bracket-whitespace" - any amount of whitespace or newline */
1536 /* (this is much more lax than original markdown syntax) */
1537 while( i<size && (data[i]==' ' || data[i]=='\t' || data[i]=='\n') ){ i++; }
1538
@@ -1599,16 +1603,16 @@
1599 i = txt_e+1;
1600 }
1601 }
1602 /* building content: img alt is escaped, link content is parsed */
1603 if( txt_e>1 && content ){
1604 if( is_img ) blob_append(content, data+1, txt_e-1);
1605 else parse_inline(content, rndr, data+1, txt_e-1);
1606 }
1607
1608 /* calling the relevant rendering function */
1609 if( is_img ){
1610 if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ){
1611 ob->nUsed--;
1612 }
1613 ret = rndr->make.image(ob, link, title, content, rndr->make.opaque);
1614 }else if( fn.nUsed ){
1615
--- src/markdown.c
+++ src/markdown.c
@@ -1505,34 +1505,38 @@
1505 struct render *rndr,
1506 char *data,
1507 size_t offset,
1508 size_t size /* parse_inline() ensures that size > 0 */
1509 ){
1510 const int bFsfn = (size>3 && data[1]=='^'); /*free-standing footnote ref*/
1511 const int bImg = !bFsfn && (offset && data[-1] == '!');
1512 size_t i, txt_e;
1513 struct Blob *content;
1514 struct Blob *link;
1515 struct Blob *title;
1516 struct footnote fn;
1517 int ret;
1518
1519 /* checking whether the correct renderer exists */
1520 if( !bFsfn ){
1521 if( (bImg && !rndr->make.image) || (!bImg && !rndr->make.link) ){
1522 return 0;
1523 }
1524 }
1525
1526 /* looking for the matching closing bracket */
1527 txt_e = matching_bracket_offset(data, data+size);
1528 if( !txt_e ) return 0;
1529 i = txt_e + 1;
1530 ret = 0; /* error if we don't get to the callback */
 
1531
1532 /* free-standing footnote reference */
1533 if( bFsfn ){
1534 fn = get_footnote(rndr, data+2, txt_e-2);
1535 content = link = title = 0;
1536 }else{
1537 fn.nUsed = 0;
1538
1539 /* skip "inter-bracket-whitespace" - any amount of whitespace or newline */
1540 /* (this is much more lax than original markdown syntax) */
1541 while( i<size && (data[i]==' ' || data[i]=='\t' || data[i]=='\n') ){ i++; }
1542
@@ -1599,16 +1603,16 @@
1603 i = txt_e+1;
1604 }
1605 }
1606 /* building content: img alt is escaped, link content is parsed */
1607 if( txt_e>1 && content ){
1608 if( bImg ) blob_append(content, data+1, txt_e-1);
1609 else parse_inline(content, rndr, data+1, txt_e-1);
1610 }
1611
1612 /* calling the relevant rendering function */
1613 if( bImg ){
1614 if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ){
1615 ob->nUsed--;
1616 }
1617 ret = rndr->make.image(ob, link, title, content, rndr->make.opaque);
1618 }else if( fn.nUsed ){
1619
+1 -1
--- src/md5.c
+++ src/md5.c
@@ -303,11 +303,11 @@
303303
}
304304
zBuf[j] = 0;
305305
}
306306
307307
/*
308
-** The state of a incremental MD5 checksum computation. Only one
308
+** The state of an incremental MD5 checksum computation. Only one
309309
** such computation can be underway at a time, of course.
310310
*/
311311
static MD5Context incrCtx;
312312
static int incrInit = 0;
313313
314314
--- src/md5.c
+++ src/md5.c
@@ -303,11 +303,11 @@
303 }
304 zBuf[j] = 0;
305 }
306
307 /*
308 ** The state of a incremental MD5 checksum computation. Only one
309 ** such computation can be underway at a time, of course.
310 */
311 static MD5Context incrCtx;
312 static int incrInit = 0;
313
314
--- src/md5.c
+++ src/md5.c
@@ -303,11 +303,11 @@
303 }
304 zBuf[j] = 0;
305 }
306
307 /*
308 ** The state of an incremental MD5 checksum computation. Only one
309 ** such computation can be underway at a time, of course.
310 */
311 static MD5Context incrCtx;
312 static int incrInit = 0;
313
314
+1 -1
--- src/name.c
+++ src/name.c
@@ -244,11 +244,11 @@
244244
245245
/*
246246
** Convert a symbolic name into a RID. Acceptable forms:
247247
**
248248
** * artifact hash (optionally enclosed in [...])
249
-** * 4-character or larger prefix of a artifact
249
+** * 4-character or larger prefix of an artifact
250250
** * Symbolic Name
251251
** * "tag:" + symbolic name
252252
** * Date or date-time
253253
** * "date:" + Date or date-time
254254
** * symbolic-name ":" date-time
255255
--- src/name.c
+++ src/name.c
@@ -244,11 +244,11 @@
244
245 /*
246 ** Convert a symbolic name into a RID. Acceptable forms:
247 **
248 ** * artifact hash (optionally enclosed in [...])
249 ** * 4-character or larger prefix of a artifact
250 ** * Symbolic Name
251 ** * "tag:" + symbolic name
252 ** * Date or date-time
253 ** * "date:" + Date or date-time
254 ** * symbolic-name ":" date-time
255
--- src/name.c
+++ src/name.c
@@ -244,11 +244,11 @@
244
245 /*
246 ** Convert a symbolic name into a RID. Acceptable forms:
247 **
248 ** * artifact hash (optionally enclosed in [...])
249 ** * 4-character or larger prefix of an artifact
250 ** * Symbolic Name
251 ** * "tag:" + symbolic name
252 ** * Date or date-time
253 ** * "date:" + Date or date-time
254 ** * symbolic-name ":" date-time
255
+5 -5
--- src/patch.c
+++ src/patch.c
@@ -855,11 +855,11 @@
855855
** in the current directory if DIRECTORY is omitted. Options:
856856
**
857857
** -f|--force Apply the patch even though there are unsaved
858858
** changes in the current check-out. Unsaved changes
859859
** are reverted and permanently lost.
860
-** -n|--dryrun Do nothing, but print what would have happened.
860
+** -n|--dry-run Do nothing, but print what would have happened.
861861
** -v|--verbose Extra output explaining what happens.
862862
**
863863
** > fossil patch diff [DIRECTORY] FILENAME
864864
**
865865
** Show a human-readable diff for the patch. All the usual
@@ -884,11 +884,11 @@
884884
** -f|--force Apply the patch even though there are unsaved
885885
** changes in the current check-out. Unsaved
886886
** changes will be reverted and then the patch is
887887
** applied.
888888
** --fossilcmd EXE Name of the "fossil" executable on the remote
889
-** -n|--dryrun Do nothing, but print what would have happened.
889
+** -n|--dry-run Do nothing, but print what would have happened.
890890
** -v|--verbose Extra output explaining what happens.
891891
**
892892
**
893893
** > fossil patch pull REMOTE-CHECKOUT
894894
**
@@ -913,11 +913,11 @@
913913
zCmd = g.argv[2];
914914
n = strlen(zCmd);
915915
if( strncmp(zCmd, "apply", n)==0 ){
916916
char *zIn;
917917
unsigned flags = 0;
918
- if( find_option("dryrun","n",0) ) flags |= PATCH_DRYRUN;
918
+ if( find_option("dry-run","n",0) ) flags |= PATCH_DRYRUN;
919919
if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE;
920920
if( find_option("force","f",0) ) flags |= PATCH_FORCE;
921921
zIn = patch_find_patch_filename("apply");
922922
db_must_be_within_tree();
923923
patch_attach(zIn, stdin);
@@ -955,11 +955,11 @@
955955
}else
956956
if( strncmp(zCmd, "pull", n)==0 ){
957957
FILE *pIn = 0;
958958
unsigned flags = 0;
959959
const char *zFossilCmd = find_option("fossilcmd",0,1);
960
- if( find_option("dryrun","n",0) ) flags |= PATCH_DRYRUN;
960
+ if( find_option("dry-run","n",0) ) flags |= PATCH_DRYRUN;
961961
if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE;
962962
if( find_option("force","f",0) ) flags |= PATCH_FORCE;
963963
db_must_be_within_tree();
964964
verify_all_options();
965965
pIn = patch_remote_command(flags & (~PATCH_FORCE),
@@ -972,11 +972,11 @@
972972
}else
973973
if( strncmp(zCmd, "push", n)==0 ){
974974
FILE *pOut = 0;
975975
unsigned flags = 0;
976976
const char *zFossilCmd = find_option("fossilcmd",0,1);
977
- if( find_option("dryrun","n",0) ) flags |= PATCH_DRYRUN;
977
+ if( find_option("dry-run","n",0) ) flags |= PATCH_DRYRUN;
978978
if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE;
979979
if( find_option("force","f",0) ) flags |= PATCH_FORCE;
980980
db_must_be_within_tree();
981981
verify_all_options();
982982
pOut = patch_remote_command(flags, "push", "apply", zFossilCmd, "w");
983983
--- src/patch.c
+++ src/patch.c
@@ -855,11 +855,11 @@
855 ** in the current directory if DIRECTORY is omitted. Options:
856 **
857 ** -f|--force Apply the patch even though there are unsaved
858 ** changes in the current check-out. Unsaved changes
859 ** are reverted and permanently lost.
860 ** -n|--dryrun Do nothing, but print what would have happened.
861 ** -v|--verbose Extra output explaining what happens.
862 **
863 ** > fossil patch diff [DIRECTORY] FILENAME
864 **
865 ** Show a human-readable diff for the patch. All the usual
@@ -884,11 +884,11 @@
884 ** -f|--force Apply the patch even though there are unsaved
885 ** changes in the current check-out. Unsaved
886 ** changes will be reverted and then the patch is
887 ** applied.
888 ** --fossilcmd EXE Name of the "fossil" executable on the remote
889 ** -n|--dryrun Do nothing, but print what would have happened.
890 ** -v|--verbose Extra output explaining what happens.
891 **
892 **
893 ** > fossil patch pull REMOTE-CHECKOUT
894 **
@@ -913,11 +913,11 @@
913 zCmd = g.argv[2];
914 n = strlen(zCmd);
915 if( strncmp(zCmd, "apply", n)==0 ){
916 char *zIn;
917 unsigned flags = 0;
918 if( find_option("dryrun","n",0) ) flags |= PATCH_DRYRUN;
919 if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE;
920 if( find_option("force","f",0) ) flags |= PATCH_FORCE;
921 zIn = patch_find_patch_filename("apply");
922 db_must_be_within_tree();
923 patch_attach(zIn, stdin);
@@ -955,11 +955,11 @@
955 }else
956 if( strncmp(zCmd, "pull", n)==0 ){
957 FILE *pIn = 0;
958 unsigned flags = 0;
959 const char *zFossilCmd = find_option("fossilcmd",0,1);
960 if( find_option("dryrun","n",0) ) flags |= PATCH_DRYRUN;
961 if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE;
962 if( find_option("force","f",0) ) flags |= PATCH_FORCE;
963 db_must_be_within_tree();
964 verify_all_options();
965 pIn = patch_remote_command(flags & (~PATCH_FORCE),
@@ -972,11 +972,11 @@
972 }else
973 if( strncmp(zCmd, "push", n)==0 ){
974 FILE *pOut = 0;
975 unsigned flags = 0;
976 const char *zFossilCmd = find_option("fossilcmd",0,1);
977 if( find_option("dryrun","n",0) ) flags |= PATCH_DRYRUN;
978 if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE;
979 if( find_option("force","f",0) ) flags |= PATCH_FORCE;
980 db_must_be_within_tree();
981 verify_all_options();
982 pOut = patch_remote_command(flags, "push", "apply", zFossilCmd, "w");
983
--- src/patch.c
+++ src/patch.c
@@ -855,11 +855,11 @@
855 ** in the current directory if DIRECTORY is omitted. Options:
856 **
857 ** -f|--force Apply the patch even though there are unsaved
858 ** changes in the current check-out. Unsaved changes
859 ** are reverted and permanently lost.
860 ** -n|--dry-run Do nothing, but print what would have happened.
861 ** -v|--verbose Extra output explaining what happens.
862 **
863 ** > fossil patch diff [DIRECTORY] FILENAME
864 **
865 ** Show a human-readable diff for the patch. All the usual
@@ -884,11 +884,11 @@
884 ** -f|--force Apply the patch even though there are unsaved
885 ** changes in the current check-out. Unsaved
886 ** changes will be reverted and then the patch is
887 ** applied.
888 ** --fossilcmd EXE Name of the "fossil" executable on the remote
889 ** -n|--dry-run Do nothing, but print what would have happened.
890 ** -v|--verbose Extra output explaining what happens.
891 **
892 **
893 ** > fossil patch pull REMOTE-CHECKOUT
894 **
@@ -913,11 +913,11 @@
913 zCmd = g.argv[2];
914 n = strlen(zCmd);
915 if( strncmp(zCmd, "apply", n)==0 ){
916 char *zIn;
917 unsigned flags = 0;
918 if( find_option("dry-run","n",0) ) flags |= PATCH_DRYRUN;
919 if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE;
920 if( find_option("force","f",0) ) flags |= PATCH_FORCE;
921 zIn = patch_find_patch_filename("apply");
922 db_must_be_within_tree();
923 patch_attach(zIn, stdin);
@@ -955,11 +955,11 @@
955 }else
956 if( strncmp(zCmd, "pull", n)==0 ){
957 FILE *pIn = 0;
958 unsigned flags = 0;
959 const char *zFossilCmd = find_option("fossilcmd",0,1);
960 if( find_option("dry-run","n",0) ) flags |= PATCH_DRYRUN;
961 if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE;
962 if( find_option("force","f",0) ) flags |= PATCH_FORCE;
963 db_must_be_within_tree();
964 verify_all_options();
965 pIn = patch_remote_command(flags & (~PATCH_FORCE),
@@ -972,11 +972,11 @@
972 }else
973 if( strncmp(zCmd, "push", n)==0 ){
974 FILE *pOut = 0;
975 unsigned flags = 0;
976 const char *zFossilCmd = find_option("fossilcmd",0,1);
977 if( find_option("dry-run","n",0) ) flags |= PATCH_DRYRUN;
978 if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE;
979 if( find_option("force","f",0) ) flags |= PATCH_FORCE;
980 db_must_be_within_tree();
981 verify_all_options();
982 pOut = patch_remote_command(flags, "push", "apply", zFossilCmd, "w");
983
+1 -1
--- src/printf.c
+++ src/printf.c
@@ -281,11 +281,11 @@
281281
** ap This is a pointer to a list of arguments. Same as in
282282
** vfprint.
283283
**
284284
** OUTPUTS:
285285
** The return value is the total number of characters sent to
286
-** the function "func". Returns -1 on a error.
286
+** the function "func". Returns -1 on error.
287287
**
288288
** Note that the order in which automatic variables are declared below
289289
** seems to make a big difference in determining how fast this beast
290290
** will run.
291291
*/
292292
--- src/printf.c
+++ src/printf.c
@@ -281,11 +281,11 @@
281 ** ap This is a pointer to a list of arguments. Same as in
282 ** vfprint.
283 **
284 ** OUTPUTS:
285 ** The return value is the total number of characters sent to
286 ** the function "func". Returns -1 on a error.
287 **
288 ** Note that the order in which automatic variables are declared below
289 ** seems to make a big difference in determining how fast this beast
290 ** will run.
291 */
292
--- src/printf.c
+++ src/printf.c
@@ -281,11 +281,11 @@
281 ** ap This is a pointer to a list of arguments. Same as in
282 ** vfprint.
283 **
284 ** OUTPUTS:
285 ** The return value is the total number of characters sent to
286 ** the function "func". Returns -1 on error.
287 **
288 ** Note that the order in which automatic variables are declared below
289 ** seems to make a big difference in determining how fast this beast
290 ** will run.
291 */
292
--- src/repolist.c
+++ src/repolist.c
@@ -230,10 +230,30 @@
230230
blob_append_sql(&html, "%h (hidden)", zName);
231231
} else if( allRepo && sqlite3_strglob("[a-zA-Z]:/?*", zName)!=0 ){
232232
blob_append_sql(&html,
233233
"<a href='%R/%T/home' target='_blank'>/%h</a>\n",
234234
zUrl, zName);
235
+ }else if( sqlite3_strglob("*/*.fossil", zName)==0 ){
236
+ /* As described in
237
+ ** https://fossil-scm.org/forum/info/f50f647c97c72fc1: if
238
+ ** foo.fossil and foo/bar.fossil both exist and we create a
239
+ ** link to foo/bar/... then the URI dispatcher will instead
240
+ ** see that as a link to foo.fossil. In such cases, do not
241
+ ** emit a link to foo/bar.fossil. */
242
+ char * zDirPart = file_dirname(zName);
243
+ if( db_exists("SELECT 1 FROM sfile "
244
+ "WHERE pathname=(%Q || '.fossil') COLLATE nocase",
245
+ zDirPart) ){
246
+ blob_append_sql(&html,
247
+ "<s>%h</s> (directory/repo name collision)\n",
248
+ zName);
249
+ }else{
250
+ blob_append_sql(&html,
251
+ "<a href='%R/%T/home' target='_blank'>%h</a>\n",
252
+ zUrl, zName);
253
+ }
254
+ fossil_free(zDirPart);
235255
}else{
236256
blob_append_sql(&html,
237257
"<a href='%R/%T/home' target='_blank'>%h</a>\n",
238258
zUrl, zName);
239259
}
240260
--- src/repolist.c
+++ src/repolist.c
@@ -230,10 +230,30 @@
230 blob_append_sql(&html, "%h (hidden)", zName);
231 } else if( allRepo && sqlite3_strglob("[a-zA-Z]:/?*", zName)!=0 ){
232 blob_append_sql(&html,
233 "<a href='%R/%T/home' target='_blank'>/%h</a>\n",
234 zUrl, zName);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235 }else{
236 blob_append_sql(&html,
237 "<a href='%R/%T/home' target='_blank'>%h</a>\n",
238 zUrl, zName);
239 }
240
--- src/repolist.c
+++ src/repolist.c
@@ -230,10 +230,30 @@
230 blob_append_sql(&html, "%h (hidden)", zName);
231 } else if( allRepo && sqlite3_strglob("[a-zA-Z]:/?*", zName)!=0 ){
232 blob_append_sql(&html,
233 "<a href='%R/%T/home' target='_blank'>/%h</a>\n",
234 zUrl, zName);
235 }else if( sqlite3_strglob("*/*.fossil", zName)==0 ){
236 /* As described in
237 ** https://fossil-scm.org/forum/info/f50f647c97c72fc1: if
238 ** foo.fossil and foo/bar.fossil both exist and we create a
239 ** link to foo/bar/... then the URI dispatcher will instead
240 ** see that as a link to foo.fossil. In such cases, do not
241 ** emit a link to foo/bar.fossil. */
242 char * zDirPart = file_dirname(zName);
243 if( db_exists("SELECT 1 FROM sfile "
244 "WHERE pathname=(%Q || '.fossil') COLLATE nocase",
245 zDirPart) ){
246 blob_append_sql(&html,
247 "<s>%h</s> (directory/repo name collision)\n",
248 zName);
249 }else{
250 blob_append_sql(&html,
251 "<a href='%R/%T/home' target='_blank'>%h</a>\n",
252 zUrl, zName);
253 }
254 fossil_free(zDirPart);
255 }else{
256 blob_append_sql(&html,
257 "<a href='%R/%T/home' target='_blank'>%h</a>\n",
258 zUrl, zName);
259 }
260
+40 -32
--- src/rss.c
+++ src/rss.c
@@ -57,10 +57,11 @@
5757
const char zSQL1[] =
5858
@ SELECT
5959
@ blob.rid,
6060
@ uuid,
6161
@ event.mtime,
62
+ @ event.type,
6263
@ coalesce(ecomment,comment),
6364
@ coalesce(euser,user),
6465
@ (SELECT count(*) FROM plink WHERE pid=blob.rid AND isprim),
6566
@ (SELECT count(*) FROM plink WHERE cid=blob.rid),
6667
@ (SELECT group_concat(substr(tagname,5), ', ') FROM tag, tagxref
@@ -74,37 +75,33 @@
7475
if( !g.perm.Read && !g.perm.RdTkt && !g.perm.RdWiki ){
7576
return;
7677
}
7778
7879
blob_zero(&bSQL);
79
- blob_append( &bSQL, zSQL1, -1 );
80
+ blob_append_sql( &bSQL, "%s", zSQL1/*safe-for-%s*/ );
8081
8182
if( zType[0]!='a' ){
8283
if( zType[0]=='c' && !g.perm.Read ) zType = "x";
8384
if( zType[0]=='w' && !g.perm.RdWiki ) zType = "x";
8485
if( zType[0]=='t' && !g.perm.RdTkt ) zType = "x";
86
+ if( zType[0]=='f' && !g.perm.RdForum ) zType = "x";
8587
blob_append_sql(&bSQL, " AND event.type=%Q", zType);
8688
}else{
87
- if( !g.perm.Read ){
88
- if( g.perm.RdTkt && g.perm.RdWiki ){
89
- blob_append(&bSQL, " AND event.type!='ci'", -1);
90
- }else if( g.perm.RdTkt ){
91
- blob_append(&bSQL, " AND event.type=='t'", -1);
92
-
93
- }else{
94
- blob_append(&bSQL, " AND event.type=='w'", -1);
95
- }
96
- }else if( !g.perm.RdWiki ){
97
- if( g.perm.RdTkt ){
98
- blob_append(&bSQL, " AND event.type!='w'", -1);
99
- }else{
100
- blob_append(&bSQL, " AND event.type=='ci'", -1);
101
- }
102
- }else if( !g.perm.RdTkt ){
103
- assert( !g.perm.RdTkt && g.perm.Read && g.perm.RdWiki );
104
- blob_append(&bSQL, " AND event.type!='t'", -1);
105
- }
89
+ blob_append_sql(&bSQL, " AND event.type in (");
90
+ if( g.perm.Read ){
91
+ blob_append_sql(&bSQL, "'ci',");
92
+ }
93
+ if( g.perm.RdTkt ){
94
+ blob_append_sql(&bSQL, "'t',");
95
+ }
96
+ if( g.perm.RdWiki ){
97
+ blob_append_sql(&bSQL, "'w',");
98
+ }
99
+ if( g.perm.RdForum ){
100
+ blob_append_sql(&bSQL, "'f',");
101
+ }
102
+ blob_append_sql(&bSQL, "'x')");
106103
}
107104
108105
if( zTicketUuid ){
109106
nTagId = db_int(0, "SELECT tagid FROM tag WHERE tagname GLOB 'tkt-%q*'",
110107
zTicketUuid);
@@ -134,16 +131,17 @@
134131
" WHERE tagid=%d AND tagtype>0 AND rid=blob.rid))", nTagId);
135132
}
136133
137134
if( zFilename ){
138135
blob_append_sql(&bSQL,
139
- " AND (SELECT mlink.fnid FROM mlink WHERE event.objid=mlink.mid) IN (SELECT fnid FROM filename WHERE name=%Q %s)",
136
+ " AND (SELECT mlink.fnid FROM mlink WHERE event.objid=mlink.mid) "
137
+ " IN (SELECT fnid FROM filename WHERE name=%Q %s)",
140138
zFilename, filename_collation()
141139
);
142140
}
143141
144
- blob_append( &bSQL, " ORDER BY event.mtime DESC", -1 );
142
+ blob_append_sql( &bSQL, " ORDER BY event.mtime DESC" );
145143
146144
cgi_set_content_type("application/rss+xml");
147145
148146
zProjectName = db_get("project-name", 0);
149147
if( zProjectName==0 ){
@@ -168,30 +166,40 @@
168166
free(zPubDate);
169167
db_prepare(&q, "%s", blob_sql_text(&bSQL));
170168
blob_reset( &bSQL );
171169
while( db_step(&q)==SQLITE_ROW && nLine<nLimit ){
172170
const char *zId = db_column_text(&q, 1);
173
- const char *zCom = db_column_text(&q, 3);
174
- const char *zAuthor = db_column_text(&q, 4);
171
+ const char *zEType = db_column_text(&q, 3);
172
+ const char *zCom = db_column_text(&q, 4);
173
+ const char *zAuthor = db_column_text(&q, 5);
175174
char *zPrefix = "";
176175
char *zSuffix = 0;
177176
char *zDate;
178177
int nChild = db_column_int(&q, 5);
179
- int nParent = db_column_int(&q, 6);
180
- const char *zTagList = db_column_text(&q, 7);
178
+ int nParent = db_column_int(&q, 7);
179
+ const char *zTagList = db_column_text(&q, 8);
181180
time_t ts;
182181
183182
if( zTagList && zTagList[0]==0 ) zTagList = 0;
184183
ts = (time_t)((db_column_double(&q,2) - 2440587.5)*86400.0);
185184
zDate = cgi_rfc822_datestamp(ts);
186185
187
- if( nParent>1 && nChild>1 ){
188
- zPrefix = "*MERGE/FORK* ";
189
- }else if( nParent>1 ){
190
- zPrefix = "*MERGE* ";
191
- }else if( nChild>1 ){
192
- zPrefix = "*FORK* ";
186
+ if('c'==zEType[0]){
187
+ if( nParent>1 && nChild>1 ){
188
+ zPrefix = "*MERGE/FORK* ";
189
+ }else if( nParent>1 ){
190
+ zPrefix = "*MERGE* ";
191
+ }else if( nChild>1 ){
192
+ zPrefix = "*FORK* ";
193
+ }
194
+ }else if('w'==zEType[0]){
195
+ switch(zCom ? zCom[0] : 0){
196
+ case ':': zPrefix = "Edit wiki page: "; break;
197
+ case '+': zPrefix = "Add wiki page: "; break;
198
+ case '-': zPrefix = "Delete wiki page: "; break;
199
+ }
200
+ if(*zPrefix) ++zCom;
193201
}
194202
195203
if( zTagList ){
196204
zSuffix = mprintf(" (tags: %s)", zTagList);
197205
}
198206
--- src/rss.c
+++ src/rss.c
@@ -57,10 +57,11 @@
57 const char zSQL1[] =
58 @ SELECT
59 @ blob.rid,
60 @ uuid,
61 @ event.mtime,
 
62 @ coalesce(ecomment,comment),
63 @ coalesce(euser,user),
64 @ (SELECT count(*) FROM plink WHERE pid=blob.rid AND isprim),
65 @ (SELECT count(*) FROM plink WHERE cid=blob.rid),
66 @ (SELECT group_concat(substr(tagname,5), ', ') FROM tag, tagxref
@@ -74,37 +75,33 @@
74 if( !g.perm.Read && !g.perm.RdTkt && !g.perm.RdWiki ){
75 return;
76 }
77
78 blob_zero(&bSQL);
79 blob_append( &bSQL, zSQL1, -1 );
80
81 if( zType[0]!='a' ){
82 if( zType[0]=='c' && !g.perm.Read ) zType = "x";
83 if( zType[0]=='w' && !g.perm.RdWiki ) zType = "x";
84 if( zType[0]=='t' && !g.perm.RdTkt ) zType = "x";
 
85 blob_append_sql(&bSQL, " AND event.type=%Q", zType);
86 }else{
87 if( !g.perm.Read ){
88 if( g.perm.RdTkt && g.perm.RdWiki ){
89 blob_append(&bSQL, " AND event.type!='ci'", -1);
90 }else if( g.perm.RdTkt ){
91 blob_append(&bSQL, " AND event.type=='t'", -1);
92
93 }else{
94 blob_append(&bSQL, " AND event.type=='w'", -1);
95 }
96 }else if( !g.perm.RdWiki ){
97 if( g.perm.RdTkt ){
98 blob_append(&bSQL, " AND event.type!='w'", -1);
99 }else{
100 blob_append(&bSQL, " AND event.type=='ci'", -1);
101 }
102 }else if( !g.perm.RdTkt ){
103 assert( !g.perm.RdTkt && g.perm.Read && g.perm.RdWiki );
104 blob_append(&bSQL, " AND event.type!='t'", -1);
105 }
106 }
107
108 if( zTicketUuid ){
109 nTagId = db_int(0, "SELECT tagid FROM tag WHERE tagname GLOB 'tkt-%q*'",
110 zTicketUuid);
@@ -134,16 +131,17 @@
134 " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid))", nTagId);
135 }
136
137 if( zFilename ){
138 blob_append_sql(&bSQL,
139 " AND (SELECT mlink.fnid FROM mlink WHERE event.objid=mlink.mid) IN (SELECT fnid FROM filename WHERE name=%Q %s)",
 
140 zFilename, filename_collation()
141 );
142 }
143
144 blob_append( &bSQL, " ORDER BY event.mtime DESC", -1 );
145
146 cgi_set_content_type("application/rss+xml");
147
148 zProjectName = db_get("project-name", 0);
149 if( zProjectName==0 ){
@@ -168,30 +166,40 @@
168 free(zPubDate);
169 db_prepare(&q, "%s", blob_sql_text(&bSQL));
170 blob_reset( &bSQL );
171 while( db_step(&q)==SQLITE_ROW && nLine<nLimit ){
172 const char *zId = db_column_text(&q, 1);
173 const char *zCom = db_column_text(&q, 3);
174 const char *zAuthor = db_column_text(&q, 4);
 
175 char *zPrefix = "";
176 char *zSuffix = 0;
177 char *zDate;
178 int nChild = db_column_int(&q, 5);
179 int nParent = db_column_int(&q, 6);
180 const char *zTagList = db_column_text(&q, 7);
181 time_t ts;
182
183 if( zTagList && zTagList[0]==0 ) zTagList = 0;
184 ts = (time_t)((db_column_double(&q,2) - 2440587.5)*86400.0);
185 zDate = cgi_rfc822_datestamp(ts);
186
187 if( nParent>1 && nChild>1 ){
188 zPrefix = "*MERGE/FORK* ";
189 }else if( nParent>1 ){
190 zPrefix = "*MERGE* ";
191 }else if( nChild>1 ){
192 zPrefix = "*FORK* ";
 
 
 
 
 
 
 
 
 
193 }
194
195 if( zTagList ){
196 zSuffix = mprintf(" (tags: %s)", zTagList);
197 }
198
--- src/rss.c
+++ src/rss.c
@@ -57,10 +57,11 @@
57 const char zSQL1[] =
58 @ SELECT
59 @ blob.rid,
60 @ uuid,
61 @ event.mtime,
62 @ event.type,
63 @ coalesce(ecomment,comment),
64 @ coalesce(euser,user),
65 @ (SELECT count(*) FROM plink WHERE pid=blob.rid AND isprim),
66 @ (SELECT count(*) FROM plink WHERE cid=blob.rid),
67 @ (SELECT group_concat(substr(tagname,5), ', ') FROM tag, tagxref
@@ -74,37 +75,33 @@
75 if( !g.perm.Read && !g.perm.RdTkt && !g.perm.RdWiki ){
76 return;
77 }
78
79 blob_zero(&bSQL);
80 blob_append_sql( &bSQL, "%s", zSQL1/*safe-for-%s*/ );
81
82 if( zType[0]!='a' ){
83 if( zType[0]=='c' && !g.perm.Read ) zType = "x";
84 if( zType[0]=='w' && !g.perm.RdWiki ) zType = "x";
85 if( zType[0]=='t' && !g.perm.RdTkt ) zType = "x";
86 if( zType[0]=='f' && !g.perm.RdForum ) zType = "x";
87 blob_append_sql(&bSQL, " AND event.type=%Q", zType);
88 }else{
89 blob_append_sql(&bSQL, " AND event.type in (");
90 if( g.perm.Read ){
91 blob_append_sql(&bSQL, "'ci',");
92 }
93 if( g.perm.RdTkt ){
94 blob_append_sql(&bSQL, "'t',");
95 }
96 if( g.perm.RdWiki ){
97 blob_append_sql(&bSQL, "'w',");
98 }
99 if( g.perm.RdForum ){
100 blob_append_sql(&bSQL, "'f',");
101 }
102 blob_append_sql(&bSQL, "'x')");
 
 
 
 
 
103 }
104
105 if( zTicketUuid ){
106 nTagId = db_int(0, "SELECT tagid FROM tag WHERE tagname GLOB 'tkt-%q*'",
107 zTicketUuid);
@@ -134,16 +131,17 @@
131 " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid))", nTagId);
132 }
133
134 if( zFilename ){
135 blob_append_sql(&bSQL,
136 " AND (SELECT mlink.fnid FROM mlink WHERE event.objid=mlink.mid) "
137 " IN (SELECT fnid FROM filename WHERE name=%Q %s)",
138 zFilename, filename_collation()
139 );
140 }
141
142 blob_append_sql( &bSQL, " ORDER BY event.mtime DESC" );
143
144 cgi_set_content_type("application/rss+xml");
145
146 zProjectName = db_get("project-name", 0);
147 if( zProjectName==0 ){
@@ -168,30 +166,40 @@
166 free(zPubDate);
167 db_prepare(&q, "%s", blob_sql_text(&bSQL));
168 blob_reset( &bSQL );
169 while( db_step(&q)==SQLITE_ROW && nLine<nLimit ){
170 const char *zId = db_column_text(&q, 1);
171 const char *zEType = db_column_text(&q, 3);
172 const char *zCom = db_column_text(&q, 4);
173 const char *zAuthor = db_column_text(&q, 5);
174 char *zPrefix = "";
175 char *zSuffix = 0;
176 char *zDate;
177 int nChild = db_column_int(&q, 5);
178 int nParent = db_column_int(&q, 7);
179 const char *zTagList = db_column_text(&q, 8);
180 time_t ts;
181
182 if( zTagList && zTagList[0]==0 ) zTagList = 0;
183 ts = (time_t)((db_column_double(&q,2) - 2440587.5)*86400.0);
184 zDate = cgi_rfc822_datestamp(ts);
185
186 if('c'==zEType[0]){
187 if( nParent>1 && nChild>1 ){
188 zPrefix = "*MERGE/FORK* ";
189 }else if( nParent>1 ){
190 zPrefix = "*MERGE* ";
191 }else if( nChild>1 ){
192 zPrefix = "*FORK* ";
193 }
194 }else if('w'==zEType[0]){
195 switch(zCom ? zCom[0] : 0){
196 case ':': zPrefix = "Edit wiki page: "; break;
197 case '+': zPrefix = "Add wiki page: "; break;
198 case '-': zPrefix = "Delete wiki page: "; break;
199 }
200 if(*zPrefix) ++zCom;
201 }
202
203 if( zTagList ){
204 zSuffix = mprintf(" (tags: %s)", zTagList);
205 }
206
+1 -1
--- src/schema.c
+++ src/schema.c
@@ -584,11 +584,11 @@
584584
@ -- file tree. If a VFILE entry with id has merged with another
585585
@ -- record, there is an entry in this table with (id,merge) where
586586
@ -- merge is the RECORD table entry that the file merged against.
587587
@ -- An id of 0 or <-3 here means the version record itself. When
588588
@ -- id==(-1) that is a cherrypick merge, id==(-2) that is a
589
-@ -- backout merge and id==(-4) is a integrate merge.
589
+@ -- backout merge and id==(-4) is an integrate merge.
590590
@ --
591591
@
592592
@ CREATE TABLE vmerge(
593593
@ id INTEGER REFERENCES vfile, -- VFILE entry that has been merged
594594
@ merge INTEGER, -- Merged with this record
595595
--- src/schema.c
+++ src/schema.c
@@ -584,11 +584,11 @@
584 @ -- file tree. If a VFILE entry with id has merged with another
585 @ -- record, there is an entry in this table with (id,merge) where
586 @ -- merge is the RECORD table entry that the file merged against.
587 @ -- An id of 0 or <-3 here means the version record itself. When
588 @ -- id==(-1) that is a cherrypick merge, id==(-2) that is a
589 @ -- backout merge and id==(-4) is a integrate merge.
590 @ --
591 @
592 @ CREATE TABLE vmerge(
593 @ id INTEGER REFERENCES vfile, -- VFILE entry that has been merged
594 @ merge INTEGER, -- Merged with this record
595
--- src/schema.c
+++ src/schema.c
@@ -584,11 +584,11 @@
584 @ -- file tree. If a VFILE entry with id has merged with another
585 @ -- record, there is an entry in this table with (id,merge) where
586 @ -- merge is the RECORD table entry that the file merged against.
587 @ -- An id of 0 or <-3 here means the version record itself. When
588 @ -- id==(-1) that is a cherrypick merge, id==(-2) that is a
589 @ -- backout merge and id==(-4) is an integrate merge.
590 @ --
591 @
592 @ CREATE TABLE vmerge(
593 @ id INTEGER REFERENCES vfile, -- VFILE entry that has been merged
594 @ merge INTEGER, -- Merged with this record
595
+1 -1
--- src/search.c
+++ src/search.c
@@ -19,11 +19,11 @@
1919
** against timeline comments, check-in content, wiki pages, tickets,
2020
** and/or forum posts.
2121
**
2222
** The search can be either a per-query "grep"-like search that scans
2323
** the entire corpus. Or it can use the FTS4 search engine of SQLite.
24
-** The choice is a administrator configuration option.
24
+** The choice is an administrator configuration option.
2525
**
2626
** The first option is referred to as "full-scan search". The second
2727
** option is called "indexed search".
2828
**
2929
** The code in this file is ordered approximately as follows:
3030
--- src/search.c
+++ src/search.c
@@ -19,11 +19,11 @@
19 ** against timeline comments, check-in content, wiki pages, tickets,
20 ** and/or forum posts.
21 **
22 ** The search can be either a per-query "grep"-like search that scans
23 ** the entire corpus. Or it can use the FTS4 search engine of SQLite.
24 ** The choice is a administrator configuration option.
25 **
26 ** The first option is referred to as "full-scan search". The second
27 ** option is called "indexed search".
28 **
29 ** The code in this file is ordered approximately as follows:
30
--- src/search.c
+++ src/search.c
@@ -19,11 +19,11 @@
19 ** against timeline comments, check-in content, wiki pages, tickets,
20 ** and/or forum posts.
21 **
22 ** The search can be either a per-query "grep"-like search that scans
23 ** the entire corpus. Or it can use the FTS4 search engine of SQLite.
24 ** The choice is an administrator configuration option.
25 **
26 ** The first option is referred to as "full-scan search". The second
27 ** option is called "indexed search".
28 **
29 ** The code in this file is ordered approximately as follows:
30
--- src/security_audit.c
+++ src/security_audit.c
@@ -208,12 +208,12 @@
208208
zPublicUrl = public_url();
209209
if( zPublicUrl!=0 ){
210210
int nOther = db_int(0, "SELECT count(*) FROM config"
211211
" WHERE name GLOB 'baseurl:*'"
212212
" AND name<>'baseurl:%q'", zPublicUrl);
213
- @ <li><p>The canonical URL for this repository is
214
- @ <a href="%s(zPublicUrl)">%h(zPublicUrl)</a>.
213
+ @ <li><p>The <a href="setup_config#eurl">canonical URL</a> for this
214
+ @ repository is <a href="%s(zPublicUrl)">%h(zPublicUrl)</a>.
215215
if( nOther==1 ){
216216
@ This is also <a href="urllist?urlonly">1 other URL</a> that has
217217
@ been used to access this repository.
218218
}else if( nOther>=2 ){
219219
@ There are also
@@ -221,11 +221,12 @@
221221
@ been used to access this repository.
222222
}
223223
}else{
224224
int nUrl = db_int(0, "SELECT count(*) FROM config"
225225
" WHERE name GLOB 'baseurl:*'");
226
- @ <li><p>This repository does not have a canonical access URL.
226
+ @ <li><p>This repository does not have a
227
+ @ <a href="setup_config#eurl">canonical access URL</a>.
227228
if( nUrl==1 ){
228229
@ There is
229230
@ <a href="urllist?urlonly">1 non-canonical URL</a>
230231
@ that has been used to access this repository.
231232
}else if( nUrl>=2 ){
232233
--- src/security_audit.c
+++ src/security_audit.c
@@ -208,12 +208,12 @@
208 zPublicUrl = public_url();
209 if( zPublicUrl!=0 ){
210 int nOther = db_int(0, "SELECT count(*) FROM config"
211 " WHERE name GLOB 'baseurl:*'"
212 " AND name<>'baseurl:%q'", zPublicUrl);
213 @ <li><p>The canonical URL for this repository is
214 @ <a href="%s(zPublicUrl)">%h(zPublicUrl)</a>.
215 if( nOther==1 ){
216 @ This is also <a href="urllist?urlonly">1 other URL</a> that has
217 @ been used to access this repository.
218 }else if( nOther>=2 ){
219 @ There are also
@@ -221,11 +221,12 @@
221 @ been used to access this repository.
222 }
223 }else{
224 int nUrl = db_int(0, "SELECT count(*) FROM config"
225 " WHERE name GLOB 'baseurl:*'");
226 @ <li><p>This repository does not have a canonical access URL.
 
227 if( nUrl==1 ){
228 @ There is
229 @ <a href="urllist?urlonly">1 non-canonical URL</a>
230 @ that has been used to access this repository.
231 }else if( nUrl>=2 ){
232
--- src/security_audit.c
+++ src/security_audit.c
@@ -208,12 +208,12 @@
208 zPublicUrl = public_url();
209 if( zPublicUrl!=0 ){
210 int nOther = db_int(0, "SELECT count(*) FROM config"
211 " WHERE name GLOB 'baseurl:*'"
212 " AND name<>'baseurl:%q'", zPublicUrl);
213 @ <li><p>The <a href="setup_config#eurl">canonical URL</a> for this
214 @ repository is <a href="%s(zPublicUrl)">%h(zPublicUrl)</a>.
215 if( nOther==1 ){
216 @ This is also <a href="urllist?urlonly">1 other URL</a> that has
217 @ been used to access this repository.
218 }else if( nOther>=2 ){
219 @ There are also
@@ -221,11 +221,12 @@
221 @ been used to access this repository.
222 }
223 }else{
224 int nUrl = db_int(0, "SELECT count(*) FROM config"
225 " WHERE name GLOB 'baseurl:*'");
226 @ <li><p>This repository does not have a
227 @ <a href="setup_config#eurl">canonical access URL</a>.
228 if( nUrl==1 ){
229 @ There is
230 @ <a href="urllist?urlonly">1 non-canonical URL</a>
231 @ that has been used to access this repository.
232 }else if( nUrl>=2 ){
233
+9 -1
--- src/setup.c
+++ src/setup.c
@@ -1102,11 +1102,11 @@
11021102
@ engines as well as a short RSS description.
11031103
@ (Property: "project-description")</p>
11041104
@ <hr />
11051105
entry_attribute("Canonical Server URL", 40, "email-url",
11061106
"eurl", "", 0);
1107
- @ <p>This is the URL used access this repository as a server.
1107
+ @ <p>This is the URL used to access this repository as a server.
11081108
@ Other repositories use this URL to clone or sync against this repository.
11091109
@ This is also the basename for hyperlinks included in email alert text.
11101110
@ Omit the trailing "/".
11111111
@ If this repo will not be set up as a persistent server and will not
11121112
@ be sending email alerts, then leave this entry blank.
@@ -1351,10 +1351,18 @@
13511351
@ default setting of approximately 7 minutes works well on many systems.
13521352
@ Shorter delays might be required on installations that use proxies
13531353
@ or web-servers with short timeouts. For best efficiency, this value
13541354
@ should be larger rather than smaller.
13551355
@ (Property: "chat-poll-timeout")</p>
1356
+ @ <hr />
1357
+ entry_attribute("Chat Timeline Robot Username", 15,
1358
+ "chat-timeline-user", "chatrobot", "", 0);
1359
+ @ <p>If this setting is not an empty string, then any changes that appear
1360
+ @ on the timeline are announced in the chatroom under the username
1361
+ @ supplied. The username does not need to actually exist in the USER table.
1362
+ @ Suggested username: "chat-robot".
1363
+ @ (Property: "chat-timeline-user")</p>
13561364
@ <hr />
13571365
13581366
multiple_choice_attribute("Alert sound",
13591367
"chat-alert-sound", "snd", azAlerts[0],
13601368
count(azAlerts)/2, azAlerts);
13611369
--- src/setup.c
+++ src/setup.c
@@ -1102,11 +1102,11 @@
1102 @ engines as well as a short RSS description.
1103 @ (Property: "project-description")</p>
1104 @ <hr />
1105 entry_attribute("Canonical Server URL", 40, "email-url",
1106 "eurl", "", 0);
1107 @ <p>This is the URL used access this repository as a server.
1108 @ Other repositories use this URL to clone or sync against this repository.
1109 @ This is also the basename for hyperlinks included in email alert text.
1110 @ Omit the trailing "/".
1111 @ If this repo will not be set up as a persistent server and will not
1112 @ be sending email alerts, then leave this entry blank.
@@ -1351,10 +1351,18 @@
1351 @ default setting of approximately 7 minutes works well on many systems.
1352 @ Shorter delays might be required on installations that use proxies
1353 @ or web-servers with short timeouts. For best efficiency, this value
1354 @ should be larger rather than smaller.
1355 @ (Property: "chat-poll-timeout")</p>
 
 
 
 
 
 
 
 
1356 @ <hr />
1357
1358 multiple_choice_attribute("Alert sound",
1359 "chat-alert-sound", "snd", azAlerts[0],
1360 count(azAlerts)/2, azAlerts);
1361
--- src/setup.c
+++ src/setup.c
@@ -1102,11 +1102,11 @@
1102 @ engines as well as a short RSS description.
1103 @ (Property: "project-description")</p>
1104 @ <hr />
1105 entry_attribute("Canonical Server URL", 40, "email-url",
1106 "eurl", "", 0);
1107 @ <p>This is the URL used to access this repository as a server.
1108 @ Other repositories use this URL to clone or sync against this repository.
1109 @ This is also the basename for hyperlinks included in email alert text.
1110 @ Omit the trailing "/".
1111 @ If this repo will not be set up as a persistent server and will not
1112 @ be sending email alerts, then leave this entry blank.
@@ -1351,10 +1351,18 @@
1351 @ default setting of approximately 7 minutes works well on many systems.
1352 @ Shorter delays might be required on installations that use proxies
1353 @ or web-servers with short timeouts. For best efficiency, this value
1354 @ should be larger rather than smaller.
1355 @ (Property: "chat-poll-timeout")</p>
1356 @ <hr />
1357 entry_attribute("Chat Timeline Robot Username", 15,
1358 "chat-timeline-user", "chatrobot", "", 0);
1359 @ <p>If this setting is not an empty string, then any changes that appear
1360 @ on the timeline are announced in the chatroom under the username
1361 @ supplied. The username does not need to actually exist in the USER table.
1362 @ Suggested username: "chat-robot".
1363 @ (Property: "chat-timeline-user")</p>
1364 @ <hr />
1365
1366 multiple_choice_attribute("Alert sound",
1367 "chat-alert-sound", "snd", azAlerts[0],
1368 count(azAlerts)/2, azAlerts);
1369
+4 -1
--- src/setupuser.c
+++ src/setupuser.c
@@ -586,11 +586,14 @@
586586
/* Begin generating the page
587587
*/
588588
style_submenu_element("Cancel", "%s", cgi_referer("setup_ulist"));
589589
if( uid ){
590590
style_header("Edit User %h", zLogin);
591
- style_submenu_element("Access Log", "%R/access_log?u=%t", zLogin);
591
+ if( !login_is_special(zLogin) ){
592
+ style_submenu_element("Access Log", "%R/access_log?u=%t", zLogin);
593
+ style_submenu_element("Timeline","%R/timeline?u=%t", zLogin);
594
+ }
592595
}else{
593596
style_header("Add A New User");
594597
}
595598
@ <div class="ueditCapBox">
596599
@ <form action="%s(g.zPath)" method="post"><div>
597600
--- src/setupuser.c
+++ src/setupuser.c
@@ -586,11 +586,14 @@
586 /* Begin generating the page
587 */
588 style_submenu_element("Cancel", "%s", cgi_referer("setup_ulist"));
589 if( uid ){
590 style_header("Edit User %h", zLogin);
591 style_submenu_element("Access Log", "%R/access_log?u=%t", zLogin);
 
 
 
592 }else{
593 style_header("Add A New User");
594 }
595 @ <div class="ueditCapBox">
596 @ <form action="%s(g.zPath)" method="post"><div>
597
--- src/setupuser.c
+++ src/setupuser.c
@@ -586,11 +586,14 @@
586 /* Begin generating the page
587 */
588 style_submenu_element("Cancel", "%s", cgi_referer("setup_ulist"));
589 if( uid ){
590 style_header("Edit User %h", zLogin);
591 if( !login_is_special(zLogin) ){
592 style_submenu_element("Access Log", "%R/access_log?u=%t", zLogin);
593 style_submenu_element("Timeline","%R/timeline?u=%t", zLogin);
594 }
595 }else{
596 style_header("Add A New User");
597 }
598 @ <div class="ueditCapBox">
599 @ <form action="%s(g.zPath)" method="post"><div>
600
+1 -1
--- src/sha1.c
+++ src/sha1.c
@@ -276,11 +276,11 @@
276276
}
277277
*zBuf = '\0';
278278
}
279279
280280
/*
281
-** The state of a incremental SHA1 checksum computation. Only one
281
+** The state of an incremental SHA1 checksum computation. Only one
282282
** such computation can be underway at a time, of course.
283283
*/
284284
static SHA1Context incrCtx;
285285
static int incrInit = 0;
286286
287287
--- src/sha1.c
+++ src/sha1.c
@@ -276,11 +276,11 @@
276 }
277 *zBuf = '\0';
278 }
279
280 /*
281 ** The state of a incremental SHA1 checksum computation. Only one
282 ** such computation can be underway at a time, of course.
283 */
284 static SHA1Context incrCtx;
285 static int incrInit = 0;
286
287
--- src/sha1.c
+++ src/sha1.c
@@ -276,11 +276,11 @@
276 }
277 *zBuf = '\0';
278 }
279
280 /*
281 ** The state of an incremental SHA1 checksum computation. Only one
282 ** such computation can be underway at a time, of course.
283 */
284 static SHA1Context incrCtx;
285 static int incrInit = 0;
286
287
+1 -1
--- src/sha3.c
+++ src/sha3.c
@@ -484,11 +484,11 @@
484484
}
485485
*zBuf = '\0';
486486
}
487487
488488
/*
489
-** The state of a incremental SHA3 checksum computation. Only one
489
+** The state of an incremental SHA3 checksum computation. Only one
490490
** such computation can be underway at a time, of course.
491491
*/
492492
static SHA3Context incrCtx;
493493
static int incrInit = 0;
494494
495495
--- src/sha3.c
+++ src/sha3.c
@@ -484,11 +484,11 @@
484 }
485 *zBuf = '\0';
486 }
487
488 /*
489 ** The state of a incremental SHA3 checksum computation. Only one
490 ** such computation can be underway at a time, of course.
491 */
492 static SHA3Context incrCtx;
493 static int incrInit = 0;
494
495
--- src/sha3.c
+++ src/sha3.c
@@ -484,11 +484,11 @@
484 }
485 *zBuf = '\0';
486 }
487
488 /*
489 ** The state of an incremental SHA3 checksum computation. Only one
490 ** such computation can be underway at a time, of course.
491 */
492 static SHA3Context incrCtx;
493 static int incrInit = 0;
494
495
+1 -1
--- src/skins.c
+++ src/skins.c
@@ -849,11 +849,11 @@
849849
@ <form action="%R/setup_skinedit" method="post"><div>
850850
login_insert_csrf_secret();
851851
@ <input type='hidden' name='w' value='%d(ii)'>
852852
@ <input type='hidden' name='sk' value='%d(iSkin)'>
853853
@ <h2>Edit %s(zTitle):</h2>
854
- if( P("submit") && cgi_csrf_safe(0) && strcmp(zOrig,zContent)!=0 ){
854
+ if( P("submit") && cgi_csrf_safe(0) && (zOrig==0 || strcmp(zOrig,zContent)!=0) ){
855855
db_set_mprintf(zContent, 0, "draft%d-%s",iSkin,zFile);
856856
}
857857
@ <textarea name="%s(zFile)" rows="10" cols="80">\
858858
@ %h(zContent)</textarea>
859859
@ <br />
860860
--- src/skins.c
+++ src/skins.c
@@ -849,11 +849,11 @@
849 @ <form action="%R/setup_skinedit" method="post"><div>
850 login_insert_csrf_secret();
851 @ <input type='hidden' name='w' value='%d(ii)'>
852 @ <input type='hidden' name='sk' value='%d(iSkin)'>
853 @ <h2>Edit %s(zTitle):</h2>
854 if( P("submit") && cgi_csrf_safe(0) && strcmp(zOrig,zContent)!=0 ){
855 db_set_mprintf(zContent, 0, "draft%d-%s",iSkin,zFile);
856 }
857 @ <textarea name="%s(zFile)" rows="10" cols="80">\
858 @ %h(zContent)</textarea>
859 @ <br />
860
--- src/skins.c
+++ src/skins.c
@@ -849,11 +849,11 @@
849 @ <form action="%R/setup_skinedit" method="post"><div>
850 login_insert_csrf_secret();
851 @ <input type='hidden' name='w' value='%d(ii)'>
852 @ <input type='hidden' name='sk' value='%d(iSkin)'>
853 @ <h2>Edit %s(zTitle):</h2>
854 if( P("submit") && cgi_csrf_safe(0) && (zOrig==0 || strcmp(zOrig,zContent)!=0) ){
855 db_set_mprintf(zContent, 0, "draft%d-%s",iSkin,zFile);
856 }
857 @ <textarea name="%s(zFile)" rows="10" cols="80">\
858 @ %h(zContent)</textarea>
859 @ <br />
860
+1 -1
--- src/stat.c
+++ src/stat.c
@@ -231,11 +231,11 @@
231231
@ <tr><th>Number&nbsp;Of&nbsp;Wiki&nbsp;Pages:</th><td>
232232
n = db_int(0, "SELECT count(*) FROM tag /*scan*/"
233233
" WHERE +tagname GLOB 'wiki-*'");
234234
@ %,d(n)
235235
@ </td></tr>
236
- if( db_table_exists("repository","chat") ){
236
+ if( g.perm.Chat && db_table_exists("repository","chat") ){
237237
sqlite3_int64 sz = 0;
238238
char zSz[100];
239239
n = db_int(0, "SELECT max(msgid) FROM chat");
240240
m = db_int(0, "SELECT count(*) FROM chat WHERE mdel IS NOT TRUE");
241241
sz = db_int64(0, "SELECT sum(coalesce(length(xmsg),0)+"
242242
--- src/stat.c
+++ src/stat.c
@@ -231,11 +231,11 @@
231 @ <tr><th>Number&nbsp;Of&nbsp;Wiki&nbsp;Pages:</th><td>
232 n = db_int(0, "SELECT count(*) FROM tag /*scan*/"
233 " WHERE +tagname GLOB 'wiki-*'");
234 @ %,d(n)
235 @ </td></tr>
236 if( db_table_exists("repository","chat") ){
237 sqlite3_int64 sz = 0;
238 char zSz[100];
239 n = db_int(0, "SELECT max(msgid) FROM chat");
240 m = db_int(0, "SELECT count(*) FROM chat WHERE mdel IS NOT TRUE");
241 sz = db_int64(0, "SELECT sum(coalesce(length(xmsg),0)+"
242
--- src/stat.c
+++ src/stat.c
@@ -231,11 +231,11 @@
231 @ <tr><th>Number&nbsp;Of&nbsp;Wiki&nbsp;Pages:</th><td>
232 n = db_int(0, "SELECT count(*) FROM tag /*scan*/"
233 " WHERE +tagname GLOB 'wiki-*'");
234 @ %,d(n)
235 @ </td></tr>
236 if( g.perm.Chat && db_table_exists("repository","chat") ){
237 sqlite3_int64 sz = 0;
238 char zSz[100];
239 n = db_int(0, "SELECT max(msgid) FROM chat");
240 m = db_int(0, "SELECT count(*) FROM chat WHERE mdel IS NOT TRUE");
241 sz = db_int64(0, "SELECT sum(coalesce(length(xmsg),0)+"
242
+1 -1
--- src/style.c
+++ src/style.c
@@ -101,11 +101,11 @@
101101
** Extra JS added to the end of the file.
102102
*/
103103
static Blob blobOnLoad = BLOB_INITIALIZER;
104104
105105
/*
106
-** Generate and return a anchor tag like this:
106
+** Generate and return an anchor tag like this:
107107
**
108108
** <a href="URL">
109109
** or <a id="ID">
110110
**
111111
** The form of the anchor tag is determined by the g.jsHref
112112
--- src/style.c
+++ src/style.c
@@ -101,11 +101,11 @@
101 ** Extra JS added to the end of the file.
102 */
103 static Blob blobOnLoad = BLOB_INITIALIZER;
104
105 /*
106 ** Generate and return a anchor tag like this:
107 **
108 ** <a href="URL">
109 ** or <a id="ID">
110 **
111 ** The form of the anchor tag is determined by the g.jsHref
112
--- src/style.c
+++ src/style.c
@@ -101,11 +101,11 @@
101 ** Extra JS added to the end of the file.
102 */
103 static Blob blobOnLoad = BLOB_INITIALIZER;
104
105 /*
106 ** Generate and return an anchor tag like this:
107 **
108 ** <a href="URL">
109 ** or <a id="ID">
110 **
111 ** The form of the anchor tag is determined by the g.jsHref
112
+8 -8
--- src/tag.c
+++ src/tag.c
@@ -282,11 +282,11 @@
282282
}
283283
284284
/*
285285
** OR this value into the tagtype argument to tag_add_artifact to
286286
** cause the tag to be displayed on standard output rather than be
287
-** inserted. Used for --dryrun options and debugging.
287
+** inserted. Used for --dry-run options and debugging.
288288
*/
289289
#if INTERFACE
290290
#define TAG_ADD_DRYRUN 0x04
291291
#endif
292292
@@ -407,11 +407,11 @@
407407
** --raw Raw tag name. Ignored for
408408
** non-CHECK-IN artifacts.
409409
** --propagate Propagating tag.
410410
** --date-override DATETIME Set date and time added.
411411
** --user-override USER Name USER when adding the tag.
412
-** -n|--dryrun Display the tag text, but do not
412
+** -n|--dry-run Display the tag text, but do not
413413
** actually insert it into the database.
414414
**
415415
** The --date-override and --user-override options support
416416
** importing history from other SCM systems. DATETIME has
417417
** the form 'YYYY-MMM-DD HH:MM:SS'.
@@ -422,20 +422,20 @@
422422
**
423423
** > fossil tag cancel ?--raw? TAGNAME ARTIFACT-ID
424424
**
425425
** Remove the tag TAGNAME from the artifact referenced by
426426
** ARTIFACT-ID, and also remove the propagation of the tag to
427
-** any descendants. Use the the -n|--dryrun option to see
427
+** any descendants. Use the the -n|--dry-run option to see
428428
** what would have happened. Certain tag name prefixes are
429429
** forbidden, as documented for the 'add' subcommand.
430430
**
431431
** Options:
432432
** --raw Raw tag name. Ignored for
433433
** non-CHECK-IN artifacts.
434434
** --date-override DATETIME Set date and time deleted.
435435
** --user-override USER Name USER when deleting the tag.
436
-** -n|--dryrun Display the control artifact, but do
436
+** -n|--dry-run Display the control artifact, but do
437437
** not insert it into the database.
438438
**
439439
** > fossil tag find ?OPTIONS? TAGNAME
440440
**
441441
** List all objects that use TAGNAME.
@@ -514,11 +514,11 @@
514514
const char *zDateOvrd = find_option("date-override",0,1);
515515
const char *zUserOvrd = find_option("user-override",0,1);
516516
const char *zTag;
517517
const char *zObjId;
518518
int objType;
519
- if( find_option("dryrun","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN;
519
+ if( find_option("dry-run","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN;
520520
if( g.argc!=5 && g.argc!=6 ){
521521
usage("add ?options? TAGNAME ARTIFACT-ID ?VALUE?");
522522
}
523523
zTag = g.argv[3];
524524
tag_cmd_tagname_check(zTag);
@@ -552,11 +552,11 @@
552552
const char *zDateOvrd = find_option("date-override",0,1);
553553
const char *zUserOvrd = find_option("user-override",0,1);
554554
const char *zTag;
555555
const char *zObjId;
556556
int objType;
557
- if( find_option("dryrun","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN;
557
+ if( find_option("dry-run","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN;
558558
if( g.argc!=5 ){
559559
usage("cancel ?options? TAGNAME ARTIFACT-ID");
560560
}
561561
zTag = g.argv[3];
562562
tag_cmd_tagname_check(zTag);
@@ -751,11 +751,11 @@
751751
** reparenting operation, simply delete the tag.
752752
**
753753
** --test Make database entries but do not add the tag artifact.
754754
** So the reparent operation will be undone by the next
755755
** "fossil rebuild" command.
756
-** -n|--dryrun Print the tag that would have been created but do not
756
+** -n|--dry-run Print the tag that would have been created but do not
757757
** actually change the database in any way.
758758
** --date-override DATETIME Set the change time on the control artifact
759759
** --user-override USER Set the user name on the control artifact
760760
*/
761761
void reparent_cmd(void){
@@ -766,11 +766,11 @@
766766
char *zUuid;
767767
int dryRun = 0;
768768
const char *zDateOvrd; /* The change time on the control artifact */
769769
const char *zUserOvrd; /* The user name on the control artifact */
770770
771
- if( find_option("dryrun","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN;
771
+ if( find_option("dry-run","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN;
772772
zDateOvrd = find_option("date-override",0,1);
773773
zUserOvrd = find_option("user-override",0,1);
774774
db_find_and_open_repository(0, 0);
775775
verify_all_options();
776776
if( g.argc<4 ){
777777
--- src/tag.c
+++ src/tag.c
@@ -282,11 +282,11 @@
282 }
283
284 /*
285 ** OR this value into the tagtype argument to tag_add_artifact to
286 ** cause the tag to be displayed on standard output rather than be
287 ** inserted. Used for --dryrun options and debugging.
288 */
289 #if INTERFACE
290 #define TAG_ADD_DRYRUN 0x04
291 #endif
292
@@ -407,11 +407,11 @@
407 ** --raw Raw tag name. Ignored for
408 ** non-CHECK-IN artifacts.
409 ** --propagate Propagating tag.
410 ** --date-override DATETIME Set date and time added.
411 ** --user-override USER Name USER when adding the tag.
412 ** -n|--dryrun Display the tag text, but do not
413 ** actually insert it into the database.
414 **
415 ** The --date-override and --user-override options support
416 ** importing history from other SCM systems. DATETIME has
417 ** the form 'YYYY-MMM-DD HH:MM:SS'.
@@ -422,20 +422,20 @@
422 **
423 ** > fossil tag cancel ?--raw? TAGNAME ARTIFACT-ID
424 **
425 ** Remove the tag TAGNAME from the artifact referenced by
426 ** ARTIFACT-ID, and also remove the propagation of the tag to
427 ** any descendants. Use the the -n|--dryrun option to see
428 ** what would have happened. Certain tag name prefixes are
429 ** forbidden, as documented for the 'add' subcommand.
430 **
431 ** Options:
432 ** --raw Raw tag name. Ignored for
433 ** non-CHECK-IN artifacts.
434 ** --date-override DATETIME Set date and time deleted.
435 ** --user-override USER Name USER when deleting the tag.
436 ** -n|--dryrun Display the control artifact, but do
437 ** not insert it into the database.
438 **
439 ** > fossil tag find ?OPTIONS? TAGNAME
440 **
441 ** List all objects that use TAGNAME.
@@ -514,11 +514,11 @@
514 const char *zDateOvrd = find_option("date-override",0,1);
515 const char *zUserOvrd = find_option("user-override",0,1);
516 const char *zTag;
517 const char *zObjId;
518 int objType;
519 if( find_option("dryrun","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN;
520 if( g.argc!=5 && g.argc!=6 ){
521 usage("add ?options? TAGNAME ARTIFACT-ID ?VALUE?");
522 }
523 zTag = g.argv[3];
524 tag_cmd_tagname_check(zTag);
@@ -552,11 +552,11 @@
552 const char *zDateOvrd = find_option("date-override",0,1);
553 const char *zUserOvrd = find_option("user-override",0,1);
554 const char *zTag;
555 const char *zObjId;
556 int objType;
557 if( find_option("dryrun","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN;
558 if( g.argc!=5 ){
559 usage("cancel ?options? TAGNAME ARTIFACT-ID");
560 }
561 zTag = g.argv[3];
562 tag_cmd_tagname_check(zTag);
@@ -751,11 +751,11 @@
751 ** reparenting operation, simply delete the tag.
752 **
753 ** --test Make database entries but do not add the tag artifact.
754 ** So the reparent operation will be undone by the next
755 ** "fossil rebuild" command.
756 ** -n|--dryrun Print the tag that would have been created but do not
757 ** actually change the database in any way.
758 ** --date-override DATETIME Set the change time on the control artifact
759 ** --user-override USER Set the user name on the control artifact
760 */
761 void reparent_cmd(void){
@@ -766,11 +766,11 @@
766 char *zUuid;
767 int dryRun = 0;
768 const char *zDateOvrd; /* The change time on the control artifact */
769 const char *zUserOvrd; /* The user name on the control artifact */
770
771 if( find_option("dryrun","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN;
772 zDateOvrd = find_option("date-override",0,1);
773 zUserOvrd = find_option("user-override",0,1);
774 db_find_and_open_repository(0, 0);
775 verify_all_options();
776 if( g.argc<4 ){
777
--- src/tag.c
+++ src/tag.c
@@ -282,11 +282,11 @@
282 }
283
284 /*
285 ** OR this value into the tagtype argument to tag_add_artifact to
286 ** cause the tag to be displayed on standard output rather than be
287 ** inserted. Used for --dry-run options and debugging.
288 */
289 #if INTERFACE
290 #define TAG_ADD_DRYRUN 0x04
291 #endif
292
@@ -407,11 +407,11 @@
407 ** --raw Raw tag name. Ignored for
408 ** non-CHECK-IN artifacts.
409 ** --propagate Propagating tag.
410 ** --date-override DATETIME Set date and time added.
411 ** --user-override USER Name USER when adding the tag.
412 ** -n|--dry-run Display the tag text, but do not
413 ** actually insert it into the database.
414 **
415 ** The --date-override and --user-override options support
416 ** importing history from other SCM systems. DATETIME has
417 ** the form 'YYYY-MMM-DD HH:MM:SS'.
@@ -422,20 +422,20 @@
422 **
423 ** > fossil tag cancel ?--raw? TAGNAME ARTIFACT-ID
424 **
425 ** Remove the tag TAGNAME from the artifact referenced by
426 ** ARTIFACT-ID, and also remove the propagation of the tag to
427 ** any descendants. Use the the -n|--dry-run option to see
428 ** what would have happened. Certain tag name prefixes are
429 ** forbidden, as documented for the 'add' subcommand.
430 **
431 ** Options:
432 ** --raw Raw tag name. Ignored for
433 ** non-CHECK-IN artifacts.
434 ** --date-override DATETIME Set date and time deleted.
435 ** --user-override USER Name USER when deleting the tag.
436 ** -n|--dry-run Display the control artifact, but do
437 ** not insert it into the database.
438 **
439 ** > fossil tag find ?OPTIONS? TAGNAME
440 **
441 ** List all objects that use TAGNAME.
@@ -514,11 +514,11 @@
514 const char *zDateOvrd = find_option("date-override",0,1);
515 const char *zUserOvrd = find_option("user-override",0,1);
516 const char *zTag;
517 const char *zObjId;
518 int objType;
519 if( find_option("dry-run","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN;
520 if( g.argc!=5 && g.argc!=6 ){
521 usage("add ?options? TAGNAME ARTIFACT-ID ?VALUE?");
522 }
523 zTag = g.argv[3];
524 tag_cmd_tagname_check(zTag);
@@ -552,11 +552,11 @@
552 const char *zDateOvrd = find_option("date-override",0,1);
553 const char *zUserOvrd = find_option("user-override",0,1);
554 const char *zTag;
555 const char *zObjId;
556 int objType;
557 if( find_option("dry-run","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN;
558 if( g.argc!=5 ){
559 usage("cancel ?options? TAGNAME ARTIFACT-ID");
560 }
561 zTag = g.argv[3];
562 tag_cmd_tagname_check(zTag);
@@ -751,11 +751,11 @@
751 ** reparenting operation, simply delete the tag.
752 **
753 ** --test Make database entries but do not add the tag artifact.
754 ** So the reparent operation will be undone by the next
755 ** "fossil rebuild" command.
756 ** -n|--dry-run Print the tag that would have been created but do not
757 ** actually change the database in any way.
758 ** --date-override DATETIME Set the change time on the control artifact
759 ** --user-override USER Set the user name on the control artifact
760 */
761 void reparent_cmd(void){
@@ -766,11 +766,11 @@
766 char *zUuid;
767 int dryRun = 0;
768 const char *zDateOvrd; /* The change time on the control artifact */
769 const char *zUserOvrd; /* The user name on the control artifact */
770
771 if( find_option("dry-run","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN;
772 zDateOvrd = find_option("date-override",0,1);
773 zUserOvrd = find_option("user-override",0,1);
774 db_find_and_open_repository(0, 0);
775 verify_all_options();
776 if( g.argc<4 ){
777
+1 -1
--- src/tar.c
+++ src/tar.c
@@ -605,11 +605,11 @@
605605
** in "..." or '...' so that it may contain commas. If a file matches both
606606
** --include and --exclude then it is excluded.
607607
**
608608
** If OUTPUTFILE is an empty string or "/dev/null" then no tarball is
609609
** actually generated. This feature can be used in combination with
610
-** the --list option to get a list of the filename that would be in the
610
+** the --list option to get a list of the filenames that would be in the
611611
** tarball had it actually been generated. Note that --list shows only
612612
** filenames. "tar tzf" shows both filesnames and subdirectory names.
613613
**
614614
** Options:
615615
** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude
616616
--- src/tar.c
+++ src/tar.c
@@ -605,11 +605,11 @@
605 ** in "..." or '...' so that it may contain commas. If a file matches both
606 ** --include and --exclude then it is excluded.
607 **
608 ** If OUTPUTFILE is an empty string or "/dev/null" then no tarball is
609 ** actually generated. This feature can be used in combination with
610 ** the --list option to get a list of the filename that would be in the
611 ** tarball had it actually been generated. Note that --list shows only
612 ** filenames. "tar tzf" shows both filesnames and subdirectory names.
613 **
614 ** Options:
615 ** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude
616
--- src/tar.c
+++ src/tar.c
@@ -605,11 +605,11 @@
605 ** in "..." or '...' so that it may contain commas. If a file matches both
606 ** --include and --exclude then it is excluded.
607 **
608 ** If OUTPUTFILE is an empty string or "/dev/null" then no tarball is
609 ** actually generated. This feature can be used in combination with
610 ** the --list option to get a list of the filenames that would be in the
611 ** tarball had it actually been generated. Note that --list shows only
612 ** filenames. "tar tzf" shows both filesnames and subdirectory names.
613 **
614 ** Options:
615 ** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude
616
+41 -5
--- src/timeline.c
+++ src/timeline.c
@@ -521,12 +521,12 @@
521521
&& (zCom[0]=='+' || zCom[0]==':') ){
522522
@ Wiki page "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>"
523523
}else if( zCom[0]=='+' ){
524524
@ Added wiki page "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>"
525525
}else if( zCom[0]==':' ){
526
- @ Changes to wiki page "%z(href("%R/wiki?name=%t",zCom+1))\
527
- @ %h(zCom+1)</a>"
526
+ @ %z(href("%R/wdiff?id=%!S",zUuid))Changes</a> to wiki page
527
+ @ "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>"
528528
}else{
529529
/* Assume this is an attachment message. It _might_ also
530530
** be a legacy-format wiki log entry, in which case it
531531
** will simply be rendered in the older format. */
532532
wiki_convert(&comment, 0, WIKI_INLINE);
@@ -2777,10 +2777,14 @@
27772777
){
27782778
Blob r, co;
27792779
int i, j;
27802780
blob_init(&r, 0, 0);
27812781
blob_init(&co, 0, 0);
2782
+
2783
+ if( 0==zCom ){
2784
+ zCom = "(NULL)";
2785
+ }
27822786
27832787
/* Replace LF and tab with space, delete CR */
27842788
while( zCom[0] ){
27852789
for(j=0; zCom[j] && zCom[j]!='\r' && zCom[j]!='\n' && zCom[j]!='\t'; j++){}
27862790
blob_append(&co, zCom, j);
@@ -3108,10 +3112,12 @@
31083112
** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
31093113
** means UTC.
31103114
**
31113115
**
31123116
** Options:
3117
+** -b|--branch BRANCH Show only items on the branch named BRANCH
3118
+** -c|--current-branch Show only items on the current branch
31133119
** -F|--format Entry format. Values "oneline", "medium", and "full"
31143120
** get mapped to the full options below. Otherwise a
31153121
** string which can contain these placeholders:
31163122
** %n newline
31173123
** %% a raw %
@@ -3125,20 +3131,18 @@
31253131
** %p phase: zero or more of *CURRENT*, *MERGE*,
31263132
** *FORK*, *UNPUBLISHED*, *LEAF*, *BRANCH*
31273133
** --oneline Show only short hash and comment for each entry
31283134
** --medium Medium-verbose entry formatting
31293135
** --full Extra verbose entry formatting
3130
-**
31313136
** -n|--limit N If N is positive, output the first N entries. If
31323137
** N is negative, output the first -N lines. If N is
31333138
** zero, no limit. Default is -20 meaning 20 lines.
31343139
** --offset P skip P changes
31353140
** -p|--path PATH Output items affecting PATH only.
31363141
** PATH can be a file or a sub directory.
31373142
** -R REPO_FILE Specifies the repository db to use. Default is
31383143
** the current checkout's repository.
3139
-
31403144
** --sql Show the SQL used to generate the timeline
31413145
** -t|--type TYPE Output items from the given types only, such as:
31423146
** ci = file commits only
31433147
** e = technical notes only
31443148
** f = forum posts only
@@ -3146,11 +3150,11 @@
31463150
** w = wiki commits only
31473151
** -v|--verbose Output the list of files changed by each commit
31483152
** and the type of each change (edited, deleted,
31493153
** etc.) after the check-in comment.
31503154
** -W|--width N Width of lines (default is to auto-detect). N must be
3151
-** either greater than 20 or it ust be zero 0 to
3155
+** either greater than 20 or it must be zero 0 to
31523156
** indicate no limit, resulting in a single line per
31533157
** entry.
31543158
*/
31553159
void timeline_cmd(void){
31563160
Stmt q;
@@ -3167,10 +3171,11 @@
31673171
int mode = TIMELINE_MODE_NONE;
31683172
int verboseFlag = 0 ;
31693173
int iOffset;
31703174
const char *zFilePattern = 0;
31713175
const char *zFormat = 0;
3176
+ const char *zBr = 0;
31723177
Blob treeName;
31733178
int showSql = 0;
31743179
31753180
verboseFlag = find_option("verbose","v", 0)!=0;
31763181
if( !verboseFlag){
@@ -3180,10 +3185,20 @@
31803185
zLimit = find_option("limit","n",1);
31813186
zWidth = find_option("width","W",1);
31823187
zType = find_option("type","t",1);
31833188
zFilePattern = find_option("path","p",1);
31843189
zFormat = find_option("format","F",1);
3190
+ zBr = find_option("branch","b",1);
3191
+ if( find_option("current-branch","c",0)!=0 ){
3192
+ if( !g.localOpen ){
3193
+ fossil_fatal("not within an open checkout");
3194
+ }else{
3195
+ int vid = db_lget_int("checkout", 0);
3196
+ zBr = db_text(0, "SELECT value FROM tagxref WHERE rid=%d AND tagid=%d",
3197
+ vid, TAG_BRANCH);
3198
+ }
3199
+ }
31853200
if( find_option("oneline",0,0)!= 0 || fossil_strcmp(zFormat,"oneline")==0 )
31863201
zFormat = "%h %c";
31873202
if( find_option("medium",0,0)!= 0 || fossil_strcmp(zFormat,"medium")==0 )
31883203
zFormat = "Commit: %h%nDate: %d%nAuthor: %a%nComment: %c%n";
31893204
if( find_option("full",0,0)!= 0 || fossil_strcmp(zFormat,"full")==0 )
@@ -3325,10 +3340,31 @@
33253340
" OR lower(name) GLOB lower('%q/*'))",
33263341
blob_str(&treeName), blob_str(&treeName));
33273342
}
33283343
blob_append(&sql, ")", -1);
33293344
}
3345
+ if( zBr ){
3346
+ blob_append_sql(&sql,
3347
+ "\n AND blob.rid IN (\n" /* Commits */
3348
+ " SELECT rid FROM tagxref NATURAL JOIN tag\n"
3349
+ " WHERE tagtype>0 AND tagname='sym-%q'\n"
3350
+ " UNION\n" /* Tags */
3351
+ " SELECT srcid FROM tagxref WHERE origid IN (\n"
3352
+ " SELECT rid FROM tagxref NATURAL JOIN tag\n"
3353
+ " WHERE tagname='sym-%q')\n"
3354
+ " UNION\n" /* Branch wikis */
3355
+ " SELECT objid FROM event WHERE comment LIKE '_branch/%q'\n"
3356
+ " UNION\n" /* Checkin wikis */
3357
+ " SELECT e.objid FROM event e\n"
3358
+ " INNER JOIN blob b ON b.uuid=substr(e.comment, 10)\n"
3359
+ " AND e.comment LIKE '_checkin/%%'\n"
3360
+ " LEFT JOIN tagxref tx ON tx.rid=b.rid AND tx.tagid=%d\n"
3361
+ " WHERE tx.value='%q'\n"
3362
+ ")\n" /* No merge closures */
3363
+ " AND (tagxref.value IS NULL OR tagxref.value='%q')",
3364
+ zBr, zBr, zBr, TAG_BRANCH, zBr, zBr);
3365
+ }
33303366
blob_append_sql(&sql, "\nORDER BY event.mtime DESC");
33313367
if( iOffset>0 ){
33323368
/* Don't handle LIMIT here, otherwise print_timeline()
33333369
* will not determine the end-marker correctly! */
33343370
blob_append_sql(&sql, "\n LIMIT -1 OFFSET %d", iOffset);
33353371
--- src/timeline.c
+++ src/timeline.c
@@ -521,12 +521,12 @@
521 && (zCom[0]=='+' || zCom[0]==':') ){
522 @ Wiki page "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>"
523 }else if( zCom[0]=='+' ){
524 @ Added wiki page "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>"
525 }else if( zCom[0]==':' ){
526 @ Changes to wiki page "%z(href("%R/wiki?name=%t",zCom+1))\
527 @ %h(zCom+1)</a>"
528 }else{
529 /* Assume this is an attachment message. It _might_ also
530 ** be a legacy-format wiki log entry, in which case it
531 ** will simply be rendered in the older format. */
532 wiki_convert(&comment, 0, WIKI_INLINE);
@@ -2777,10 +2777,14 @@
2777 ){
2778 Blob r, co;
2779 int i, j;
2780 blob_init(&r, 0, 0);
2781 blob_init(&co, 0, 0);
 
 
 
 
2782
2783 /* Replace LF and tab with space, delete CR */
2784 while( zCom[0] ){
2785 for(j=0; zCom[j] && zCom[j]!='\r' && zCom[j]!='\n' && zCom[j]!='\t'; j++){}
2786 blob_append(&co, zCom, j);
@@ -3108,10 +3112,12 @@
3108 ** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
3109 ** means UTC.
3110 **
3111 **
3112 ** Options:
 
 
3113 ** -F|--format Entry format. Values "oneline", "medium", and "full"
3114 ** get mapped to the full options below. Otherwise a
3115 ** string which can contain these placeholders:
3116 ** %n newline
3117 ** %% a raw %
@@ -3125,20 +3131,18 @@
3125 ** %p phase: zero or more of *CURRENT*, *MERGE*,
3126 ** *FORK*, *UNPUBLISHED*, *LEAF*, *BRANCH*
3127 ** --oneline Show only short hash and comment for each entry
3128 ** --medium Medium-verbose entry formatting
3129 ** --full Extra verbose entry formatting
3130 **
3131 ** -n|--limit N If N is positive, output the first N entries. If
3132 ** N is negative, output the first -N lines. If N is
3133 ** zero, no limit. Default is -20 meaning 20 lines.
3134 ** --offset P skip P changes
3135 ** -p|--path PATH Output items affecting PATH only.
3136 ** PATH can be a file or a sub directory.
3137 ** -R REPO_FILE Specifies the repository db to use. Default is
3138 ** the current checkout's repository.
3139
3140 ** --sql Show the SQL used to generate the timeline
3141 ** -t|--type TYPE Output items from the given types only, such as:
3142 ** ci = file commits only
3143 ** e = technical notes only
3144 ** f = forum posts only
@@ -3146,11 +3150,11 @@
3146 ** w = wiki commits only
3147 ** -v|--verbose Output the list of files changed by each commit
3148 ** and the type of each change (edited, deleted,
3149 ** etc.) after the check-in comment.
3150 ** -W|--width N Width of lines (default is to auto-detect). N must be
3151 ** either greater than 20 or it ust be zero 0 to
3152 ** indicate no limit, resulting in a single line per
3153 ** entry.
3154 */
3155 void timeline_cmd(void){
3156 Stmt q;
@@ -3167,10 +3171,11 @@
3167 int mode = TIMELINE_MODE_NONE;
3168 int verboseFlag = 0 ;
3169 int iOffset;
3170 const char *zFilePattern = 0;
3171 const char *zFormat = 0;
 
3172 Blob treeName;
3173 int showSql = 0;
3174
3175 verboseFlag = find_option("verbose","v", 0)!=0;
3176 if( !verboseFlag){
@@ -3180,10 +3185,20 @@
3180 zLimit = find_option("limit","n",1);
3181 zWidth = find_option("width","W",1);
3182 zType = find_option("type","t",1);
3183 zFilePattern = find_option("path","p",1);
3184 zFormat = find_option("format","F",1);
 
 
 
 
 
 
 
 
 
 
3185 if( find_option("oneline",0,0)!= 0 || fossil_strcmp(zFormat,"oneline")==0 )
3186 zFormat = "%h %c";
3187 if( find_option("medium",0,0)!= 0 || fossil_strcmp(zFormat,"medium")==0 )
3188 zFormat = "Commit: %h%nDate: %d%nAuthor: %a%nComment: %c%n";
3189 if( find_option("full",0,0)!= 0 || fossil_strcmp(zFormat,"full")==0 )
@@ -3325,10 +3340,31 @@
3325 " OR lower(name) GLOB lower('%q/*'))",
3326 blob_str(&treeName), blob_str(&treeName));
3327 }
3328 blob_append(&sql, ")", -1);
3329 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3330 blob_append_sql(&sql, "\nORDER BY event.mtime DESC");
3331 if( iOffset>0 ){
3332 /* Don't handle LIMIT here, otherwise print_timeline()
3333 * will not determine the end-marker correctly! */
3334 blob_append_sql(&sql, "\n LIMIT -1 OFFSET %d", iOffset);
3335
--- src/timeline.c
+++ src/timeline.c
@@ -521,12 +521,12 @@
521 && (zCom[0]=='+' || zCom[0]==':') ){
522 @ Wiki page "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>"
523 }else if( zCom[0]=='+' ){
524 @ Added wiki page "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>"
525 }else if( zCom[0]==':' ){
526 @ %z(href("%R/wdiff?id=%!S",zUuid))Changes</a> to wiki page
527 @ "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>"
528 }else{
529 /* Assume this is an attachment message. It _might_ also
530 ** be a legacy-format wiki log entry, in which case it
531 ** will simply be rendered in the older format. */
532 wiki_convert(&comment, 0, WIKI_INLINE);
@@ -2777,10 +2777,14 @@
2777 ){
2778 Blob r, co;
2779 int i, j;
2780 blob_init(&r, 0, 0);
2781 blob_init(&co, 0, 0);
2782
2783 if( 0==zCom ){
2784 zCom = "(NULL)";
2785 }
2786
2787 /* Replace LF and tab with space, delete CR */
2788 while( zCom[0] ){
2789 for(j=0; zCom[j] && zCom[j]!='\r' && zCom[j]!='\n' && zCom[j]!='\t'; j++){}
2790 blob_append(&co, zCom, j);
@@ -3108,10 +3112,12 @@
3112 ** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
3113 ** means UTC.
3114 **
3115 **
3116 ** Options:
3117 ** -b|--branch BRANCH Show only items on the branch named BRANCH
3118 ** -c|--current-branch Show only items on the current branch
3119 ** -F|--format Entry format. Values "oneline", "medium", and "full"
3120 ** get mapped to the full options below. Otherwise a
3121 ** string which can contain these placeholders:
3122 ** %n newline
3123 ** %% a raw %
@@ -3125,20 +3131,18 @@
3131 ** %p phase: zero or more of *CURRENT*, *MERGE*,
3132 ** *FORK*, *UNPUBLISHED*, *LEAF*, *BRANCH*
3133 ** --oneline Show only short hash and comment for each entry
3134 ** --medium Medium-verbose entry formatting
3135 ** --full Extra verbose entry formatting
 
3136 ** -n|--limit N If N is positive, output the first N entries. If
3137 ** N is negative, output the first -N lines. If N is
3138 ** zero, no limit. Default is -20 meaning 20 lines.
3139 ** --offset P skip P changes
3140 ** -p|--path PATH Output items affecting PATH only.
3141 ** PATH can be a file or a sub directory.
3142 ** -R REPO_FILE Specifies the repository db to use. Default is
3143 ** the current checkout's repository.
 
3144 ** --sql Show the SQL used to generate the timeline
3145 ** -t|--type TYPE Output items from the given types only, such as:
3146 ** ci = file commits only
3147 ** e = technical notes only
3148 ** f = forum posts only
@@ -3146,11 +3150,11 @@
3150 ** w = wiki commits only
3151 ** -v|--verbose Output the list of files changed by each commit
3152 ** and the type of each change (edited, deleted,
3153 ** etc.) after the check-in comment.
3154 ** -W|--width N Width of lines (default is to auto-detect). N must be
3155 ** either greater than 20 or it must be zero 0 to
3156 ** indicate no limit, resulting in a single line per
3157 ** entry.
3158 */
3159 void timeline_cmd(void){
3160 Stmt q;
@@ -3167,10 +3171,11 @@
3171 int mode = TIMELINE_MODE_NONE;
3172 int verboseFlag = 0 ;
3173 int iOffset;
3174 const char *zFilePattern = 0;
3175 const char *zFormat = 0;
3176 const char *zBr = 0;
3177 Blob treeName;
3178 int showSql = 0;
3179
3180 verboseFlag = find_option("verbose","v", 0)!=0;
3181 if( !verboseFlag){
@@ -3180,10 +3185,20 @@
3185 zLimit = find_option("limit","n",1);
3186 zWidth = find_option("width","W",1);
3187 zType = find_option("type","t",1);
3188 zFilePattern = find_option("path","p",1);
3189 zFormat = find_option("format","F",1);
3190 zBr = find_option("branch","b",1);
3191 if( find_option("current-branch","c",0)!=0 ){
3192 if( !g.localOpen ){
3193 fossil_fatal("not within an open checkout");
3194 }else{
3195 int vid = db_lget_int("checkout", 0);
3196 zBr = db_text(0, "SELECT value FROM tagxref WHERE rid=%d AND tagid=%d",
3197 vid, TAG_BRANCH);
3198 }
3199 }
3200 if( find_option("oneline",0,0)!= 0 || fossil_strcmp(zFormat,"oneline")==0 )
3201 zFormat = "%h %c";
3202 if( find_option("medium",0,0)!= 0 || fossil_strcmp(zFormat,"medium")==0 )
3203 zFormat = "Commit: %h%nDate: %d%nAuthor: %a%nComment: %c%n";
3204 if( find_option("full",0,0)!= 0 || fossil_strcmp(zFormat,"full")==0 )
@@ -3325,10 +3340,31 @@
3340 " OR lower(name) GLOB lower('%q/*'))",
3341 blob_str(&treeName), blob_str(&treeName));
3342 }
3343 blob_append(&sql, ")", -1);
3344 }
3345 if( zBr ){
3346 blob_append_sql(&sql,
3347 "\n AND blob.rid IN (\n" /* Commits */
3348 " SELECT rid FROM tagxref NATURAL JOIN tag\n"
3349 " WHERE tagtype>0 AND tagname='sym-%q'\n"
3350 " UNION\n" /* Tags */
3351 " SELECT srcid FROM tagxref WHERE origid IN (\n"
3352 " SELECT rid FROM tagxref NATURAL JOIN tag\n"
3353 " WHERE tagname='sym-%q')\n"
3354 " UNION\n" /* Branch wikis */
3355 " SELECT objid FROM event WHERE comment LIKE '_branch/%q'\n"
3356 " UNION\n" /* Checkin wikis */
3357 " SELECT e.objid FROM event e\n"
3358 " INNER JOIN blob b ON b.uuid=substr(e.comment, 10)\n"
3359 " AND e.comment LIKE '_checkin/%%'\n"
3360 " LEFT JOIN tagxref tx ON tx.rid=b.rid AND tx.tagid=%d\n"
3361 " WHERE tx.value='%q'\n"
3362 ")\n" /* No merge closures */
3363 " AND (tagxref.value IS NULL OR tagxref.value='%q')",
3364 zBr, zBr, zBr, TAG_BRANCH, zBr, zBr);
3365 }
3366 blob_append_sql(&sql, "\nORDER BY event.mtime DESC");
3367 if( iOffset>0 ){
3368 /* Don't handle LIMIT here, otherwise print_timeline()
3369 * will not determine the end-marker correctly! */
3370 blob_append_sql(&sql, "\n LIMIT -1 OFFSET %d", iOffset);
3371
--- src/unversioned.c
+++ src/unversioned.c
@@ -161,11 +161,11 @@
161161
** time of last change and hash of a copy of this file on a remote
162162
** server. Return an integer status code as follows:
163163
**
164164
** 0: zName does not exist in the unversioned table.
165165
** 1: zName exists and should be replaced by the mtime/zHash remote.
166
-** 2: zName exists and is the same as zHash but has a older mtime
166
+** 2: zName exists and is the same as zHash but has an older mtime
167167
** 3: zName exists and is identical to mtime/zHash in all respects.
168168
** 4: zName exists and is the same as zHash but has a newer mtime.
169169
** 5: zName exists and should override the mtime/zHash remote.
170170
*/
171171
int unversioned_status(
@@ -200,11 +200,11 @@
200200
*/
201201
static int unversioned_sync_flags(unsigned syncFlags){
202202
if( find_option("verbose","v",0)!=0 ){
203203
syncFlags |= SYNC_UV_TRACE | SYNC_VERBOSE;
204204
}
205
- if( find_option("dryrun","n",0)!=0 ){
205
+ if( find_option("dry-run","n",0)!=0 ){
206206
syncFlags |= SYNC_UV_DRYRUN | SYNC_UV_TRACE | SYNC_VERBOSE;
207207
}
208208
return syncFlags;
209209
}
210210
@@ -218,11 +218,11 @@
218218
}
219219
return 0;
220220
}
221221
222222
/*
223
-** COMMAND: uv*
223
+** COMMAND: uv#
224224
** COMMAND: unversioned
225225
**
226226
** Usage: %fossil unversioned SUBCOMMAND ARGS...
227227
** or: %fossil uv SUBCOMMAND ARGS..
228228
**
@@ -264,11 +264,11 @@
264264
** local repository to match the remote repository
265265
** URL.
266266
**
267267
** Options:
268268
** -v|--verbose Extra diagnostic output
269
-** -n|--dryrun Show what would have happened
269
+** -n|--dry-run Show what would have happened
270270
**
271271
** remove|rm|delete FILE ...
272272
** Remove unversioned files from the local repository.
273273
** Changes are not pushed to other repositories until
274274
** the next sync. Options:
@@ -281,11 +281,11 @@
281281
** of each file is propagated to all repositories and
282282
** all prior versions are permanently forgotten.
283283
**
284284
** Options:
285285
** -v|--verbose Extra diagnostic output
286
-** -n|--dryrun Show what would have happened
286
+** -n|--dry-run Show what would have happened
287287
**
288288
** touch FILE ... Update the TIMESTAMP on all of the listed files
289289
**
290290
** Options:
291291
**
292292
--- src/unversioned.c
+++ src/unversioned.c
@@ -161,11 +161,11 @@
161 ** time of last change and hash of a copy of this file on a remote
162 ** server. Return an integer status code as follows:
163 **
164 ** 0: zName does not exist in the unversioned table.
165 ** 1: zName exists and should be replaced by the mtime/zHash remote.
166 ** 2: zName exists and is the same as zHash but has a older mtime
167 ** 3: zName exists and is identical to mtime/zHash in all respects.
168 ** 4: zName exists and is the same as zHash but has a newer mtime.
169 ** 5: zName exists and should override the mtime/zHash remote.
170 */
171 int unversioned_status(
@@ -200,11 +200,11 @@
200 */
201 static int unversioned_sync_flags(unsigned syncFlags){
202 if( find_option("verbose","v",0)!=0 ){
203 syncFlags |= SYNC_UV_TRACE | SYNC_VERBOSE;
204 }
205 if( find_option("dryrun","n",0)!=0 ){
206 syncFlags |= SYNC_UV_DRYRUN | SYNC_UV_TRACE | SYNC_VERBOSE;
207 }
208 return syncFlags;
209 }
210
@@ -218,11 +218,11 @@
218 }
219 return 0;
220 }
221
222 /*
223 ** COMMAND: uv*
224 ** COMMAND: unversioned
225 **
226 ** Usage: %fossil unversioned SUBCOMMAND ARGS...
227 ** or: %fossil uv SUBCOMMAND ARGS..
228 **
@@ -264,11 +264,11 @@
264 ** local repository to match the remote repository
265 ** URL.
266 **
267 ** Options:
268 ** -v|--verbose Extra diagnostic output
269 ** -n|--dryrun Show what would have happened
270 **
271 ** remove|rm|delete FILE ...
272 ** Remove unversioned files from the local repository.
273 ** Changes are not pushed to other repositories until
274 ** the next sync. Options:
@@ -281,11 +281,11 @@
281 ** of each file is propagated to all repositories and
282 ** all prior versions are permanently forgotten.
283 **
284 ** Options:
285 ** -v|--verbose Extra diagnostic output
286 ** -n|--dryrun Show what would have happened
287 **
288 ** touch FILE ... Update the TIMESTAMP on all of the listed files
289 **
290 ** Options:
291 **
292
--- src/unversioned.c
+++ src/unversioned.c
@@ -161,11 +161,11 @@
161 ** time of last change and hash of a copy of this file on a remote
162 ** server. Return an integer status code as follows:
163 **
164 ** 0: zName does not exist in the unversioned table.
165 ** 1: zName exists and should be replaced by the mtime/zHash remote.
166 ** 2: zName exists and is the same as zHash but has an older mtime
167 ** 3: zName exists and is identical to mtime/zHash in all respects.
168 ** 4: zName exists and is the same as zHash but has a newer mtime.
169 ** 5: zName exists and should override the mtime/zHash remote.
170 */
171 int unversioned_status(
@@ -200,11 +200,11 @@
200 */
201 static int unversioned_sync_flags(unsigned syncFlags){
202 if( find_option("verbose","v",0)!=0 ){
203 syncFlags |= SYNC_UV_TRACE | SYNC_VERBOSE;
204 }
205 if( find_option("dry-run","n",0)!=0 ){
206 syncFlags |= SYNC_UV_DRYRUN | SYNC_UV_TRACE | SYNC_VERBOSE;
207 }
208 return syncFlags;
209 }
210
@@ -218,11 +218,11 @@
218 }
219 return 0;
220 }
221
222 /*
223 ** COMMAND: uv#
224 ** COMMAND: unversioned
225 **
226 ** Usage: %fossil unversioned SUBCOMMAND ARGS...
227 ** or: %fossil uv SUBCOMMAND ARGS..
228 **
@@ -264,11 +264,11 @@
264 ** local repository to match the remote repository
265 ** URL.
266 **
267 ** Options:
268 ** -v|--verbose Extra diagnostic output
269 ** -n|--dry-run Show what would have happened
270 **
271 ** remove|rm|delete FILE ...
272 ** Remove unversioned files from the local repository.
273 ** Changes are not pushed to other repositories until
274 ** the next sync. Options:
@@ -281,11 +281,11 @@
281 ** of each file is propagated to all repositories and
282 ** all prior versions are permanently forgotten.
283 **
284 ** Options:
285 ** -v|--verbose Extra diagnostic output
286 ** -n|--dry-run Show what would have happened
287 **
288 ** touch FILE ... Update the TIMESTAMP on all of the listed files
289 **
290 ** Options:
291 **
292
+2 -2
--- src/wiki.c
+++ src/wiki.c
@@ -1846,13 +1846,13 @@
18461846
rid2 = name_to_typed_rid(zPid, "w");
18471847
pW2 = manifest_get(rid2, CFTYPE_WIKI, 0);
18481848
blob_init(&w2, pW2->zWiki, -1);
18491849
@ <h2>Changes to \
18501850
@ "%z(href("%R/whistory?name=%s",pW1->zWikiTitle))%h(pW1->zWikiTitle)</a>" \
1851
- zDate = db_text(0, "SELECT datetime(%.16g)",pW2->rDate);
1851
+ zDate = db_text(0, "SELECT datetime(%.16g,toLocal())",pW2->rDate);
18521852
@ between %z(href("%R/info/%s",zPid))%z(zDate)</a> \
1853
- zDate = db_text(0, "SELECT datetime(%.16g)",pW1->rDate);
1853
+ zDate = db_text(0, "SELECT datetime(%.16g,toLocal())",pW1->rDate);
18541854
@ and %z(href("%R/info/%s",zId))%z(zDate)</a></h2>
18551855
style_submenu_element("Previous", "%R/wdiff?id=%S", zPid);
18561856
}else{
18571857
blob_zero(&w2);
18581858
@ <h2>Initial version of \
18591859
--- src/wiki.c
+++ src/wiki.c
@@ -1846,13 +1846,13 @@
1846 rid2 = name_to_typed_rid(zPid, "w");
1847 pW2 = manifest_get(rid2, CFTYPE_WIKI, 0);
1848 blob_init(&w2, pW2->zWiki, -1);
1849 @ <h2>Changes to \
1850 @ "%z(href("%R/whistory?name=%s",pW1->zWikiTitle))%h(pW1->zWikiTitle)</a>" \
1851 zDate = db_text(0, "SELECT datetime(%.16g)",pW2->rDate);
1852 @ between %z(href("%R/info/%s",zPid))%z(zDate)</a> \
1853 zDate = db_text(0, "SELECT datetime(%.16g)",pW1->rDate);
1854 @ and %z(href("%R/info/%s",zId))%z(zDate)</a></h2>
1855 style_submenu_element("Previous", "%R/wdiff?id=%S", zPid);
1856 }else{
1857 blob_zero(&w2);
1858 @ <h2>Initial version of \
1859
--- src/wiki.c
+++ src/wiki.c
@@ -1846,13 +1846,13 @@
1846 rid2 = name_to_typed_rid(zPid, "w");
1847 pW2 = manifest_get(rid2, CFTYPE_WIKI, 0);
1848 blob_init(&w2, pW2->zWiki, -1);
1849 @ <h2>Changes to \
1850 @ "%z(href("%R/whistory?name=%s",pW1->zWikiTitle))%h(pW1->zWikiTitle)</a>" \
1851 zDate = db_text(0, "SELECT datetime(%.16g,toLocal())",pW2->rDate);
1852 @ between %z(href("%R/info/%s",zPid))%z(zDate)</a> \
1853 zDate = db_text(0, "SELECT datetime(%.16g,toLocal())",pW1->rDate);
1854 @ and %z(href("%R/info/%s",zId))%z(zDate)</a></h2>
1855 style_submenu_element("Previous", "%R/wdiff?id=%S", zPid);
1856 }else{
1857 blob_zero(&w2);
1858 @ <h2>Initial version of \
1859
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -597,11 +597,11 @@
597597
if( i<2 || fossil_isspace(z[n]) ) return 0;
598598
return n;
599599
}
600600
601601
/*
602
-** Check to see if the z[] string is the beginning of a enumeration value.
602
+** Check to see if the z[] string is the beginning of an enumeration value.
603603
** If it is, return the length of the bullet text. Otherwise return 0.
604604
**
605605
** Syntax:
606606
** * a tab or two or more spaces
607607
** * one or more digits
608608
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -597,11 +597,11 @@
597 if( i<2 || fossil_isspace(z[n]) ) return 0;
598 return n;
599 }
600
601 /*
602 ** Check to see if the z[] string is the beginning of a enumeration value.
603 ** If it is, return the length of the bullet text. Otherwise return 0.
604 **
605 ** Syntax:
606 ** * a tab or two or more spaces
607 ** * one or more digits
608
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -597,11 +597,11 @@
597 if( i<2 || fossil_isspace(z[n]) ) return 0;
598 return n;
599 }
600
601 /*
602 ** Check to see if the z[] string is the beginning of an enumeration value.
603 ** If it is, return the length of the bullet text. Otherwise return 0.
604 **
605 ** Syntax:
606 ** * a tab or two or more spaces
607 ** * one or more digits
608
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -597,11 +597,11 @@
597597
if( i<2 || fossil_isspace(z[n]) ) return 0;
598598
return n;
599599
}
600600
601601
/*
602
-** Check to see if the z[] string is the beginning of a enumeration value.
602
+** Check to see if the z[] string is the beginning of an enumeration value.
603603
** If it is, return the length of the bullet text. Otherwise return 0.
604604
**
605605
** Syntax:
606606
** * a tab or two or more spaces
607607
** * one or more digits
608608
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -597,11 +597,11 @@
597 if( i<2 || fossil_isspace(z[n]) ) return 0;
598 return n;
599 }
600
601 /*
602 ** Check to see if the z[] string is the beginning of a enumeration value.
603 ** If it is, return the length of the bullet text. Otherwise return 0.
604 **
605 ** Syntax:
606 ** * a tab or two or more spaces
607 ** * one or more digits
608
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -597,11 +597,11 @@
597 if( i<2 || fossil_isspace(z[n]) ) return 0;
598 return n;
599 }
600
601 /*
602 ** Check to see if the z[] string is the beginning of an enumeration value.
603 ** If it is, return the length of the bullet text. Otherwise return 0.
604 **
605 ** Syntax:
606 ** * a tab or two or more spaces
607 ** * one or more digits
608
+1 -1
--- src/winhttp.c
+++ src/winhttp.c
@@ -931,11 +931,11 @@
931931
}
932932
}
933933
934934
/*
935935
** Try to start the http server as a windows service. If we are running in
936
-** a interactive console session, this routine fails and returns a non zero
936
+** an interactive console session, this routine fails and returns a non zero
937937
** integer value. When running as service, this routine does not return until
938938
** the service is stopped. In this case, the return value is zero.
939939
*/
940940
int win32_http_service(
941941
int nPort, /* TCP port number */
942942
--- src/winhttp.c
+++ src/winhttp.c
@@ -931,11 +931,11 @@
931 }
932 }
933
934 /*
935 ** Try to start the http server as a windows service. If we are running in
936 ** a interactive console session, this routine fails and returns a non zero
937 ** integer value. When running as service, this routine does not return until
938 ** the service is stopped. In this case, the return value is zero.
939 */
940 int win32_http_service(
941 int nPort, /* TCP port number */
942
--- src/winhttp.c
+++ src/winhttp.c
@@ -931,11 +931,11 @@
931 }
932 }
933
934 /*
935 ** Try to start the http server as a windows service. If we are running in
936 ** an interactive console session, this routine fails and returns a non zero
937 ** integer value. When running as service, this routine does not return until
938 ** the service is stopped. In this case, the return value is zero.
939 */
940 int win32_http_service(
941 int nPort, /* TCP port number */
942
+1 -1
--- src/xfer.c
+++ src/xfer.c
@@ -1543,11 +1543,11 @@
15431543
}else
15441544
15451545
15461546
/* cookie TEXT
15471547
**
1548
- ** A cookie contains a arbitrary-length argument that is server-defined.
1548
+ ** A cookie contains an arbitrary-length argument that is server-defined.
15491549
** The argument must be encoded so as not to contain any whitespace.
15501550
** The server can optionally send a cookie to the client. The client
15511551
** might then return the same cookie back to the server on its next
15521552
** communication. The cookie might record information that helps
15531553
** the server optimize a push or pull.
15541554
--- src/xfer.c
+++ src/xfer.c
@@ -1543,11 +1543,11 @@
1543 }else
1544
1545
1546 /* cookie TEXT
1547 **
1548 ** A cookie contains a arbitrary-length argument that is server-defined.
1549 ** The argument must be encoded so as not to contain any whitespace.
1550 ** The server can optionally send a cookie to the client. The client
1551 ** might then return the same cookie back to the server on its next
1552 ** communication. The cookie might record information that helps
1553 ** the server optimize a push or pull.
1554
--- src/xfer.c
+++ src/xfer.c
@@ -1543,11 +1543,11 @@
1543 }else
1544
1545
1546 /* cookie TEXT
1547 **
1548 ** A cookie contains an arbitrary-length argument that is server-defined.
1549 ** The argument must be encoded so as not to contain any whitespace.
1550 ** The server can optionally send a cookie to the client. The client
1551 ** might then return the same cookie back to the server on its next
1552 ** communication. The cookie might record information that helps
1553 ** the server optimize a push or pull.
1554
+2 -2
--- src/zip.c
+++ src/zip.c
@@ -814,11 +814,11 @@
814814
** in "..." or '...' so that it may contain commas. If a file matches both
815815
** --include and --exclude then it is excluded.
816816
**
817817
** If OUTPUTFILE is an empty string or "/dev/null" then no ZIP archive is
818818
** actually generated. This feature can be used in combination with
819
-** the --list option to get a list of the filename that would be in the
819
+** the --list option to get a list of the filenames that would be in the
820820
** ZIP archive had it actually been generated.
821821
**
822822
** Options:
823823
** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude
824824
** --include GLOBLIST Comma-separated list of GLOBs of files to include
@@ -846,11 +846,11 @@
846846
** in "..." or '...' so that it may contain commas. If a file matches both
847847
** --include and --exclude then it is excluded.
848848
**
849849
** If OUTPUTFILE is an empty string or "/dev/null" then no SQLAR archive is
850850
** actually generated. This feature can be used in combination with
851
-** the --list option to get a list of the filename that would be in the
851
+** the --list option to get a list of the filenames that would be in the
852852
** SQLAR archive had it actually been generated.
853853
**
854854
** Options:
855855
** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude
856856
** --include GLOBLIST Comma-separated list of GLOBs of files to include
857857
--- src/zip.c
+++ src/zip.c
@@ -814,11 +814,11 @@
814 ** in "..." or '...' so that it may contain commas. If a file matches both
815 ** --include and --exclude then it is excluded.
816 **
817 ** If OUTPUTFILE is an empty string or "/dev/null" then no ZIP archive is
818 ** actually generated. This feature can be used in combination with
819 ** the --list option to get a list of the filename that would be in the
820 ** ZIP archive had it actually been generated.
821 **
822 ** Options:
823 ** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude
824 ** --include GLOBLIST Comma-separated list of GLOBs of files to include
@@ -846,11 +846,11 @@
846 ** in "..." or '...' so that it may contain commas. If a file matches both
847 ** --include and --exclude then it is excluded.
848 **
849 ** If OUTPUTFILE is an empty string or "/dev/null" then no SQLAR archive is
850 ** actually generated. This feature can be used in combination with
851 ** the --list option to get a list of the filename that would be in the
852 ** SQLAR archive had it actually been generated.
853 **
854 ** Options:
855 ** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude
856 ** --include GLOBLIST Comma-separated list of GLOBs of files to include
857
--- src/zip.c
+++ src/zip.c
@@ -814,11 +814,11 @@
814 ** in "..." or '...' so that it may contain commas. If a file matches both
815 ** --include and --exclude then it is excluded.
816 **
817 ** If OUTPUTFILE is an empty string or "/dev/null" then no ZIP archive is
818 ** actually generated. This feature can be used in combination with
819 ** the --list option to get a list of the filenames that would be in the
820 ** ZIP archive had it actually been generated.
821 **
822 ** Options:
823 ** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude
824 ** --include GLOBLIST Comma-separated list of GLOBs of files to include
@@ -846,11 +846,11 @@
846 ** in "..." or '...' so that it may contain commas. If a file matches both
847 ** --include and --exclude then it is excluded.
848 **
849 ** If OUTPUTFILE is an empty string or "/dev/null" then no SQLAR archive is
850 ** actually generated. This feature can be used in combination with
851 ** the --list option to get a list of the filenames that would be in the
852 ** SQLAR archive had it actually been generated.
853 **
854 ** Options:
855 ** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude
856 ** --include GLOBLIST Comma-separated list of GLOBs of files to include
857
--- test/markdown-test3.md
+++ test/markdown-test3.md
@@ -67,10 +67,13 @@
6767
This facilitates the usage in the usual case
6868
when several footnotes are refenrenced at the end
6969
of a phrase.[^scipub][^many-refs](^All these four should
7070
be parsed as "free-standing" footnotes)[^Coelurosauria]
7171
72
+An ambiguity between a link to an image and a *free-standing referenced
73
+footnote* should be resolved as a footnote![^not-image]
74
+
7275
A footnote may not be empty(^)
7376
or consist just of blank characters.(^
7477
)
7578
7679
The same holds for labeled footnotes. If definition of a labeled footnote
@@ -220,10 +223,14 @@
220223
221224
[^markup]: E.g. *emphasis*, and [so on](/md_rules).
222225
BTW, this note may not have a backreference to the "stray".
223226
224227
[^undefined label is used]: For example due to a typo.
228
+
229
+[^not-image]: The rationale is that URLs do not start with **^**
230
+ while a footnote may follow *immediately* after an exclamation mark
231
+ at the end of a sentence.
225232
226233
[^another stray]: Just to verify the correctness of ordering and styling.
227234
228235
[^scipub]: Which is common in the scientific publications.
229236
230237
--- test/markdown-test3.md
+++ test/markdown-test3.md
@@ -67,10 +67,13 @@
67 This facilitates the usage in the usual case
68 when several footnotes are refenrenced at the end
69 of a phrase.[^scipub][^many-refs](^All these four should
70 be parsed as "free-standing" footnotes)[^Coelurosauria]
71
 
 
 
72 A footnote may not be empty(^)
73 or consist just of blank characters.(^
74 )
75
76 The same holds for labeled footnotes. If definition of a labeled footnote
@@ -220,10 +223,14 @@
220
221 [^markup]: E.g. *emphasis*, and [so on](/md_rules).
222 BTW, this note may not have a backreference to the "stray".
223
224 [^undefined label is used]: For example due to a typo.
 
 
 
 
225
226 [^another stray]: Just to verify the correctness of ordering and styling.
227
228 [^scipub]: Which is common in the scientific publications.
229
230
--- test/markdown-test3.md
+++ test/markdown-test3.md
@@ -67,10 +67,13 @@
67 This facilitates the usage in the usual case
68 when several footnotes are refenrenced at the end
69 of a phrase.[^scipub][^many-refs](^All these four should
70 be parsed as "free-standing" footnotes)[^Coelurosauria]
71
72 An ambiguity between a link to an image and a *free-standing referenced
73 footnote* should be resolved as a footnote![^not-image]
74
75 A footnote may not be empty(^)
76 or consist just of blank characters.(^
77 )
78
79 The same holds for labeled footnotes. If definition of a labeled footnote
@@ -220,10 +223,14 @@
223
224 [^markup]: E.g. *emphasis*, and [so on](/md_rules).
225 BTW, this note may not have a backreference to the "stray".
226
227 [^undefined label is used]: For example due to a typo.
228
229 [^not-image]: The rationale is that URLs do not start with **^**
230 while a footnote may follow *immediately* after an exclamation mark
231 at the end of a sentence.
232
233 [^another stray]: Just to verify the correctness of ordering and styling.
234
235 [^scipub]: Which is common in the scientific publications.
236
237
--- tools/makemake.tcl
+++ tools/makemake.tcl
@@ -435,13 +435,14 @@
435435
# using -lsqlite3.
436436
#
437437
# Closely related is SQLITE3_ORIGIN, with the same numeric mapping plus
438438
# a value of 2 means that we are building a client-provided sqlite3.c.
439439
SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
440
-SQLITE3_OBJ.1 =
440
+SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o
441441
# SQLITE3_OBJ.2 is set by the configure process
442442
SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
443
+SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN))
443444
444445
# The USE_LINENOISE variable may be undefined, set to 0, or set
445446
# to 1. If it is set to 0, then there is no need to build or link
446447
# the linenoise.o object.
447448
LINENOISE_DEF.0 =
@@ -535,11 +536,11 @@
535536
writeln "\$(OBJDIR)/$s.o:\t\$(OBJDIR)/${s}_.c \$(OBJDIR)/$s.h$extra_h($s)\$(SRCDIR)/config.h"
536537
writeln "\t\$(XTCC) -o \$(OBJDIR)/$s.o -c \$(OBJDIR)/${s}_.c\n"
537538
writeln "\$(OBJDIR)/$s.h:\t\$(OBJDIR)/headers\n"
538539
}
539540
540
-writeln "\$(OBJDIR)/sqlite3.o:\t\$(SQLITE3_SRC)"
541
+writeln "\$(SQLITE3_OBJ):\t\$(SQLITE3_SRC)"
541542
writeln "\t\$(XTCC) \$(SQLITE_OPTIONS) \$(SQLITE_CFLAGS) \$(SEE_FLAGS) \\"
542543
writeln "\t\t-c \$(SQLITE3_SRC) -o \$@"
543544
544545
writeln "\$(OBJDIR)/shell.o:\t\$(SQLITE3_SHELL_SRC) \$(SRCDIR_extsrc)/sqlite3.h"
545546
writeln "\t\$(XTCC) \$(SHELL_OPTIONS) \$(SHELL_CFLAGS) \$(SEE_FLAGS) \$(LINENOISE_DEF.\$(USE_LINENOISE)) -c \$(SQLITE3_SHELL_SRC) -o \$@\n"
@@ -1125,13 +1126,14 @@
11251126
#
11261127
# Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping,
11271128
# plus a value of 2 means that we are building a client-provided
11281129
# sqlite3.c.
11291130
SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
1130
-SQLITE3_OBJ.1 =
1131
+SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o
11311132
# SQLITE3_OBJ.2 is set by the configure process
11321133
SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
1134
+SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN))
11331135
11341136
# The USE_SEE variable may be undefined, 0 or 1. If undefined or 0,
11351137
# in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the
11361138
# source tree) is used and extra flags are provided to enable the
11371139
# SQLite Encryption Extension.
@@ -1277,11 +1279,11 @@
12771279
set j " \\\n "
12781280
writeln "SQLITE_OPTIONS = [join $MINGW_SQLITE_OPTIONS $j]\n"
12791281
writeln "SHELL_OPTIONS = [join $SHELL_WIN32_OPTIONS $j]\n"
12801282
writeln "PIKCHR_OPTIONS = [join $MINGW_PIKCHR_OPTIONS $j]\n"
12811283
1282
-writeln "\$(OBJDIR)/sqlite3.o:\t\$(SQLITE3_SRC) \$(SRCDIR)/../win/Makefile.mingw"
1284
+writeln "\$(SQLITE3_OBJ):\t\$(SQLITE3_SRC) \$(SRCDIR)/../win/Makefile.mingw"
12831285
writeln "\t\$(XTCC) \$(SQLITE_OPTIONS) \$(SQLITE_CFLAGS) \$(SEE_FLAGS) \\"
12841286
writeln "\t\t-c \$(SQLITE3_SRC) -o \$@\n"
12851287
12861288
writeln "\$(OBJDIR)/cson_amalgamation.o:\t\$(SRCDIR_extsrc)/cson_amalgamation.c"
12871289
writeln "\t\$(XTCC) -c \$(SRCDIR_extsrc)/cson_amalgamation.c -o \$@\n"
12881290
--- tools/makemake.tcl
+++ tools/makemake.tcl
@@ -435,13 +435,14 @@
435 # using -lsqlite3.
436 #
437 # Closely related is SQLITE3_ORIGIN, with the same numeric mapping plus
438 # a value of 2 means that we are building a client-provided sqlite3.c.
439 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
440 SQLITE3_OBJ.1 =
441 # SQLITE3_OBJ.2 is set by the configure process
442 SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
 
443
444 # The USE_LINENOISE variable may be undefined, set to 0, or set
445 # to 1. If it is set to 0, then there is no need to build or link
446 # the linenoise.o object.
447 LINENOISE_DEF.0 =
@@ -535,11 +536,11 @@
535 writeln "\$(OBJDIR)/$s.o:\t\$(OBJDIR)/${s}_.c \$(OBJDIR)/$s.h$extra_h($s)\$(SRCDIR)/config.h"
536 writeln "\t\$(XTCC) -o \$(OBJDIR)/$s.o -c \$(OBJDIR)/${s}_.c\n"
537 writeln "\$(OBJDIR)/$s.h:\t\$(OBJDIR)/headers\n"
538 }
539
540 writeln "\$(OBJDIR)/sqlite3.o:\t\$(SQLITE3_SRC)"
541 writeln "\t\$(XTCC) \$(SQLITE_OPTIONS) \$(SQLITE_CFLAGS) \$(SEE_FLAGS) \\"
542 writeln "\t\t-c \$(SQLITE3_SRC) -o \$@"
543
544 writeln "\$(OBJDIR)/shell.o:\t\$(SQLITE3_SHELL_SRC) \$(SRCDIR_extsrc)/sqlite3.h"
545 writeln "\t\$(XTCC) \$(SHELL_OPTIONS) \$(SHELL_CFLAGS) \$(SEE_FLAGS) \$(LINENOISE_DEF.\$(USE_LINENOISE)) -c \$(SQLITE3_SHELL_SRC) -o \$@\n"
@@ -1125,13 +1126,14 @@
1125 #
1126 # Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping,
1127 # plus a value of 2 means that we are building a client-provided
1128 # sqlite3.c.
1129 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
1130 SQLITE3_OBJ.1 =
1131 # SQLITE3_OBJ.2 is set by the configure process
1132 SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
 
1133
1134 # The USE_SEE variable may be undefined, 0 or 1. If undefined or 0,
1135 # in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the
1136 # source tree) is used and extra flags are provided to enable the
1137 # SQLite Encryption Extension.
@@ -1277,11 +1279,11 @@
1277 set j " \\\n "
1278 writeln "SQLITE_OPTIONS = [join $MINGW_SQLITE_OPTIONS $j]\n"
1279 writeln "SHELL_OPTIONS = [join $SHELL_WIN32_OPTIONS $j]\n"
1280 writeln "PIKCHR_OPTIONS = [join $MINGW_PIKCHR_OPTIONS $j]\n"
1281
1282 writeln "\$(OBJDIR)/sqlite3.o:\t\$(SQLITE3_SRC) \$(SRCDIR)/../win/Makefile.mingw"
1283 writeln "\t\$(XTCC) \$(SQLITE_OPTIONS) \$(SQLITE_CFLAGS) \$(SEE_FLAGS) \\"
1284 writeln "\t\t-c \$(SQLITE3_SRC) -o \$@\n"
1285
1286 writeln "\$(OBJDIR)/cson_amalgamation.o:\t\$(SRCDIR_extsrc)/cson_amalgamation.c"
1287 writeln "\t\$(XTCC) -c \$(SRCDIR_extsrc)/cson_amalgamation.c -o \$@\n"
1288
--- tools/makemake.tcl
+++ tools/makemake.tcl
@@ -435,13 +435,14 @@
435 # using -lsqlite3.
436 #
437 # Closely related is SQLITE3_ORIGIN, with the same numeric mapping plus
438 # a value of 2 means that we are building a client-provided sqlite3.c.
439 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
440 SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o
441 # SQLITE3_OBJ.2 is set by the configure process
442 SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
443 SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN))
444
445 # The USE_LINENOISE variable may be undefined, set to 0, or set
446 # to 1. If it is set to 0, then there is no need to build or link
447 # the linenoise.o object.
448 LINENOISE_DEF.0 =
@@ -535,11 +536,11 @@
536 writeln "\$(OBJDIR)/$s.o:\t\$(OBJDIR)/${s}_.c \$(OBJDIR)/$s.h$extra_h($s)\$(SRCDIR)/config.h"
537 writeln "\t\$(XTCC) -o \$(OBJDIR)/$s.o -c \$(OBJDIR)/${s}_.c\n"
538 writeln "\$(OBJDIR)/$s.h:\t\$(OBJDIR)/headers\n"
539 }
540
541 writeln "\$(SQLITE3_OBJ):\t\$(SQLITE3_SRC)"
542 writeln "\t\$(XTCC) \$(SQLITE_OPTIONS) \$(SQLITE_CFLAGS) \$(SEE_FLAGS) \\"
543 writeln "\t\t-c \$(SQLITE3_SRC) -o \$@"
544
545 writeln "\$(OBJDIR)/shell.o:\t\$(SQLITE3_SHELL_SRC) \$(SRCDIR_extsrc)/sqlite3.h"
546 writeln "\t\$(XTCC) \$(SHELL_OPTIONS) \$(SHELL_CFLAGS) \$(SEE_FLAGS) \$(LINENOISE_DEF.\$(USE_LINENOISE)) -c \$(SQLITE3_SHELL_SRC) -o \$@\n"
@@ -1125,13 +1126,14 @@
1126 #
1127 # Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping,
1128 # plus a value of 2 means that we are building a client-provided
1129 # sqlite3.c.
1130 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
1131 SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o
1132 # SQLITE3_OBJ.2 is set by the configure process
1133 SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
1134 SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN))
1135
1136 # The USE_SEE variable may be undefined, 0 or 1. If undefined or 0,
1137 # in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the
1138 # source tree) is used and extra flags are provided to enable the
1139 # SQLite Encryption Extension.
@@ -1277,11 +1279,11 @@
1279 set j " \\\n "
1280 writeln "SQLITE_OPTIONS = [join $MINGW_SQLITE_OPTIONS $j]\n"
1281 writeln "SHELL_OPTIONS = [join $SHELL_WIN32_OPTIONS $j]\n"
1282 writeln "PIKCHR_OPTIONS = [join $MINGW_PIKCHR_OPTIONS $j]\n"
1283
1284 writeln "\$(SQLITE3_OBJ):\t\$(SQLITE3_SRC) \$(SRCDIR)/../win/Makefile.mingw"
1285 writeln "\t\$(XTCC) \$(SQLITE_OPTIONS) \$(SQLITE_CFLAGS) \$(SEE_FLAGS) \\"
1286 writeln "\t\t-c \$(SQLITE3_SRC) -o \$@\n"
1287
1288 writeln "\$(OBJDIR)/cson_amalgamation.o:\t\$(SRCDIR_extsrc)/cson_amalgamation.c"
1289 writeln "\t\$(XTCC) -c \$(SRCDIR_extsrc)/cson_amalgamation.c -o \$@\n"
1290
--- tools/mkbuiltin.c
+++ tools/mkbuiltin.c
@@ -75,11 +75,11 @@
7575
static void compressJavascript(unsigned char *z, int *pn){
7676
int n = *pn;
7777
int i, j, k;
7878
for(i=j=0; i<n; i++){
7979
unsigned char c = z[i];
80
- if( c=='/' ){
80
+ if( c=='/' && (i==0 || z[i-1]!=':')){
8181
if( z[i+1]=='*' ){
8282
while( j>0 && (z[j-1]==' ' || z[j-1]=='\t') ){ j--; }
8383
for(k=i+3; k<n && (z[k]!='/' || z[k-1]!='*'); k++){}
8484
i = k;
8585
continue;
8686
--- tools/mkbuiltin.c
+++ tools/mkbuiltin.c
@@ -75,11 +75,11 @@
75 static void compressJavascript(unsigned char *z, int *pn){
76 int n = *pn;
77 int i, j, k;
78 for(i=j=0; i<n; i++){
79 unsigned char c = z[i];
80 if( c=='/' ){
81 if( z[i+1]=='*' ){
82 while( j>0 && (z[j-1]==' ' || z[j-1]=='\t') ){ j--; }
83 for(k=i+3; k<n && (z[k]!='/' || z[k-1]!='*'); k++){}
84 i = k;
85 continue;
86
--- tools/mkbuiltin.c
+++ tools/mkbuiltin.c
@@ -75,11 +75,11 @@
75 static void compressJavascript(unsigned char *z, int *pn){
76 int n = *pn;
77 int i, j, k;
78 for(i=j=0; i<n; i++){
79 unsigned char c = z[i];
80 if( c=='/' && (i==0 || z[i-1]!=':')){
81 if( z[i+1]=='*' ){
82 while( j>0 && (z[j-1]==' ' || z[j-1]=='\t') ){ j--; }
83 for(k=i+3; k<n && (z[k]!='/' || z[k-1]!='*'); k++){}
84 i = k;
85 continue;
86
+20 -5
--- tools/mkindex.c
+++ tools/mkindex.c
@@ -37,14 +37,18 @@
3737
** and analysis only.
3838
**
3939
** Commands are 1st-tier by default. If the command name begins with
4040
** "test-" or if the command name has a "test" argument, then it becomes
4141
** a test command. If the command name has a "2nd-tier" argument or ends
42
-** with a "*" character, it is second tier. Examples:
42
+** with a "*" character, it is second tier. If the command name has an "alias"
43
+** argument or ends with a "#" character, it is an alias: another name
44
+** (a one-to-one replacement) for a command. Examples:
4345
**
4446
** COMMAND: abcde*
4547
** COMMAND: fghij 2nd-tier
48
+** COMMAND: mnopq#
49
+** COMMAND: rstuv alias
4650
** COMMAND: test-xyzzy
4751
** COMMAND: xyzzy test
4852
**
4953
** A SETTING: may be followed by arguments that give additional attributes
5054
** to that setting:
@@ -93,10 +97,11 @@
9397
#define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */
9498
#define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret webpage content */
9599
#define CMDFLAG_SENSITIVE 0x0400 /* Security-sensitive setting */
96100
#define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */
97101
#define CMDFLAG_LDAVG_EXEMPT 0x1000 /* Exempt from load_control() */
102
+#define CMDFLAG_ALIAS 0x2000 /* Command aliases */
98103
/**************************************************************************/
99104
100105
/*
101106
** Each entry looks like this:
102107
*/
@@ -219,10 +224,15 @@
219224
}else if( zLine[i+j-1]=='*' ){
220225
/* If the command name ends in '*', remove the '*' from the name
221226
** but move the command into the second tier */
222227
aEntry[nUsed].zPath[j-1] = 0;
223228
aEntry[nUsed].eType |= CMDFLAG_2ND_TIER;
229
+ }else if( zLine[i+j-1]=='#' ){
230
+ /* If the command name ends in '#', remove the '#' from the name
231
+ ** but move the command into aliases */
232
+ aEntry[nUsed].zPath[j-1] = 0;
233
+ aEntry[nUsed].eType |= CMDFLAG_ALIAS;
224234
}else{
225235
/* Otherwise, this is a first-tier command */
226236
aEntry[nUsed].eType |= CMDFLAG_1ST_TIER;
227237
}
228238
}
@@ -232,18 +242,21 @@
232242
i += j;
233243
while( fossil_isspace(zLine[i]) ){ i++; }
234244
if( zLine[i]==0 ) break;
235245
for(j=0; zLine[i+j] && !fossil_isspace(zLine[i+j]); j++){}
236246
if( j==8 && strncmp(&zLine[i], "1st-tier", j)==0 ){
237
- aEntry[nUsed].eType &= ~(CMDFLAG_2ND_TIER|CMDFLAG_TEST);
247
+ aEntry[nUsed].eType &= ~(CMDFLAG_2ND_TIER|CMDFLAG_TEST|CMDFLAG_ALIAS);
238248
aEntry[nUsed].eType |= CMDFLAG_1ST_TIER;
239249
}else if( j==8 && strncmp(&zLine[i], "2nd-tier", j)==0 ){
240
- aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_TEST);
250
+ aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_TEST|CMDFLAG_ALIAS);
241251
aEntry[nUsed].eType |= CMDFLAG_2ND_TIER;
242252
}else if( j==4 && strncmp(&zLine[i], "test", j)==0 ){
243
- aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER);
253
+ aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER|CMDFLAG_ALIAS);
244254
aEntry[nUsed].eType |= CMDFLAG_TEST;
255
+ }else if( j==5 && strncmp(&zLine[i], "alias", j)==0 ){
256
+ aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER|CMDFLAG_TEST);
257
+ aEntry[nUsed].eType |= CMDFLAG_ALIAS;
245258
}else if( j==11 && strncmp(&zLine[i], "raw-content", j)==0 ){
246259
aEntry[nUsed].eType |= CMDFLAG_RAWCONTENT;
247260
}else if( j==7 && strncmp(&zLine[i], "boolean", j)==0 ){
248261
aEntry[nUsed].eType &= ~(CMDFLAG_BLOCKTEXT);
249262
aEntry[nUsed].iWidth = 0;
@@ -453,24 +466,26 @@
453466
if( aEntry[i].zIf ){
454467
printf("%s", aEntry[i].zIf);
455468
}else if( (aEntry[i].eType & CMDFLAG_WEBPAGE)!=0 ){
456469
nWeb++;
457470
}
458
- printf(" { \"%.*s\",%*s%s,%*szHelp%03d, 0x%03x },\n",
471
+ printf(" { \"%.*s\",%*s%s,%*szHelp%03d, %3d, 0x%03x },\n",
459472
n, z,
460473
25-n, "",
461474
aEntry[i].zFunc,
462475
(int)(29-strlen(aEntry[i].zFunc)), "",
476
+ aEntry[i].iHelp,
463477
aEntry[i].iHelp,
464478
aEntry[i].eType
465479
);
466480
if( aEntry[i].zIf ) printf("#endif\n");
467481
}
468482
printf("};\n");
469483
printf("#define FOSSIL_FIRST_CMD %d\n", nWeb);
470484
printf("#define FOSSIL_MX_CMDNAME %d /* max length of any command name */\n",
471485
mxLen);
486
+ printf("#define FOSSIL_MX_CMDIDX %d /* max index for commands */\n", nFixed);
472487
473488
/* Generate the aSetting[] table */
474489
printf("const Setting aSetting[] = {\n");
475490
for(i=0; i<nFixed; i++){
476491
const char *z;
477492
--- tools/mkindex.c
+++ tools/mkindex.c
@@ -37,14 +37,18 @@
37 ** and analysis only.
38 **
39 ** Commands are 1st-tier by default. If the command name begins with
40 ** "test-" or if the command name has a "test" argument, then it becomes
41 ** a test command. If the command name has a "2nd-tier" argument or ends
42 ** with a "*" character, it is second tier. Examples:
 
 
43 **
44 ** COMMAND: abcde*
45 ** COMMAND: fghij 2nd-tier
 
 
46 ** COMMAND: test-xyzzy
47 ** COMMAND: xyzzy test
48 **
49 ** A SETTING: may be followed by arguments that give additional attributes
50 ** to that setting:
@@ -93,10 +97,11 @@
93 #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */
94 #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret webpage content */
95 #define CMDFLAG_SENSITIVE 0x0400 /* Security-sensitive setting */
96 #define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */
97 #define CMDFLAG_LDAVG_EXEMPT 0x1000 /* Exempt from load_control() */
 
98 /**************************************************************************/
99
100 /*
101 ** Each entry looks like this:
102 */
@@ -219,10 +224,15 @@
219 }else if( zLine[i+j-1]=='*' ){
220 /* If the command name ends in '*', remove the '*' from the name
221 ** but move the command into the second tier */
222 aEntry[nUsed].zPath[j-1] = 0;
223 aEntry[nUsed].eType |= CMDFLAG_2ND_TIER;
 
 
 
 
 
224 }else{
225 /* Otherwise, this is a first-tier command */
226 aEntry[nUsed].eType |= CMDFLAG_1ST_TIER;
227 }
228 }
@@ -232,18 +242,21 @@
232 i += j;
233 while( fossil_isspace(zLine[i]) ){ i++; }
234 if( zLine[i]==0 ) break;
235 for(j=0; zLine[i+j] && !fossil_isspace(zLine[i+j]); j++){}
236 if( j==8 && strncmp(&zLine[i], "1st-tier", j)==0 ){
237 aEntry[nUsed].eType &= ~(CMDFLAG_2ND_TIER|CMDFLAG_TEST);
238 aEntry[nUsed].eType |= CMDFLAG_1ST_TIER;
239 }else if( j==8 && strncmp(&zLine[i], "2nd-tier", j)==0 ){
240 aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_TEST);
241 aEntry[nUsed].eType |= CMDFLAG_2ND_TIER;
242 }else if( j==4 && strncmp(&zLine[i], "test", j)==0 ){
243 aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER);
244 aEntry[nUsed].eType |= CMDFLAG_TEST;
 
 
 
245 }else if( j==11 && strncmp(&zLine[i], "raw-content", j)==0 ){
246 aEntry[nUsed].eType |= CMDFLAG_RAWCONTENT;
247 }else if( j==7 && strncmp(&zLine[i], "boolean", j)==0 ){
248 aEntry[nUsed].eType &= ~(CMDFLAG_BLOCKTEXT);
249 aEntry[nUsed].iWidth = 0;
@@ -453,24 +466,26 @@
453 if( aEntry[i].zIf ){
454 printf("%s", aEntry[i].zIf);
455 }else if( (aEntry[i].eType & CMDFLAG_WEBPAGE)!=0 ){
456 nWeb++;
457 }
458 printf(" { \"%.*s\",%*s%s,%*szHelp%03d, 0x%03x },\n",
459 n, z,
460 25-n, "",
461 aEntry[i].zFunc,
462 (int)(29-strlen(aEntry[i].zFunc)), "",
 
463 aEntry[i].iHelp,
464 aEntry[i].eType
465 );
466 if( aEntry[i].zIf ) printf("#endif\n");
467 }
468 printf("};\n");
469 printf("#define FOSSIL_FIRST_CMD %d\n", nWeb);
470 printf("#define FOSSIL_MX_CMDNAME %d /* max length of any command name */\n",
471 mxLen);
 
472
473 /* Generate the aSetting[] table */
474 printf("const Setting aSetting[] = {\n");
475 for(i=0; i<nFixed; i++){
476 const char *z;
477
--- tools/mkindex.c
+++ tools/mkindex.c
@@ -37,14 +37,18 @@
37 ** and analysis only.
38 **
39 ** Commands are 1st-tier by default. If the command name begins with
40 ** "test-" or if the command name has a "test" argument, then it becomes
41 ** a test command. If the command name has a "2nd-tier" argument or ends
42 ** with a "*" character, it is second tier. If the command name has an "alias"
43 ** argument or ends with a "#" character, it is an alias: another name
44 ** (a one-to-one replacement) for a command. Examples:
45 **
46 ** COMMAND: abcde*
47 ** COMMAND: fghij 2nd-tier
48 ** COMMAND: mnopq#
49 ** COMMAND: rstuv alias
50 ** COMMAND: test-xyzzy
51 ** COMMAND: xyzzy test
52 **
53 ** A SETTING: may be followed by arguments that give additional attributes
54 ** to that setting:
@@ -93,10 +97,11 @@
97 #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */
98 #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret webpage content */
99 #define CMDFLAG_SENSITIVE 0x0400 /* Security-sensitive setting */
100 #define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */
101 #define CMDFLAG_LDAVG_EXEMPT 0x1000 /* Exempt from load_control() */
102 #define CMDFLAG_ALIAS 0x2000 /* Command aliases */
103 /**************************************************************************/
104
105 /*
106 ** Each entry looks like this:
107 */
@@ -219,10 +224,15 @@
224 }else if( zLine[i+j-1]=='*' ){
225 /* If the command name ends in '*', remove the '*' from the name
226 ** but move the command into the second tier */
227 aEntry[nUsed].zPath[j-1] = 0;
228 aEntry[nUsed].eType |= CMDFLAG_2ND_TIER;
229 }else if( zLine[i+j-1]=='#' ){
230 /* If the command name ends in '#', remove the '#' from the name
231 ** but move the command into aliases */
232 aEntry[nUsed].zPath[j-1] = 0;
233 aEntry[nUsed].eType |= CMDFLAG_ALIAS;
234 }else{
235 /* Otherwise, this is a first-tier command */
236 aEntry[nUsed].eType |= CMDFLAG_1ST_TIER;
237 }
238 }
@@ -232,18 +242,21 @@
242 i += j;
243 while( fossil_isspace(zLine[i]) ){ i++; }
244 if( zLine[i]==0 ) break;
245 for(j=0; zLine[i+j] && !fossil_isspace(zLine[i+j]); j++){}
246 if( j==8 && strncmp(&zLine[i], "1st-tier", j)==0 ){
247 aEntry[nUsed].eType &= ~(CMDFLAG_2ND_TIER|CMDFLAG_TEST|CMDFLAG_ALIAS);
248 aEntry[nUsed].eType |= CMDFLAG_1ST_TIER;
249 }else if( j==8 && strncmp(&zLine[i], "2nd-tier", j)==0 ){
250 aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_TEST|CMDFLAG_ALIAS);
251 aEntry[nUsed].eType |= CMDFLAG_2ND_TIER;
252 }else if( j==4 && strncmp(&zLine[i], "test", j)==0 ){
253 aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER|CMDFLAG_ALIAS);
254 aEntry[nUsed].eType |= CMDFLAG_TEST;
255 }else if( j==5 && strncmp(&zLine[i], "alias", j)==0 ){
256 aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER|CMDFLAG_TEST);
257 aEntry[nUsed].eType |= CMDFLAG_ALIAS;
258 }else if( j==11 && strncmp(&zLine[i], "raw-content", j)==0 ){
259 aEntry[nUsed].eType |= CMDFLAG_RAWCONTENT;
260 }else if( j==7 && strncmp(&zLine[i], "boolean", j)==0 ){
261 aEntry[nUsed].eType &= ~(CMDFLAG_BLOCKTEXT);
262 aEntry[nUsed].iWidth = 0;
@@ -453,24 +466,26 @@
466 if( aEntry[i].zIf ){
467 printf("%s", aEntry[i].zIf);
468 }else if( (aEntry[i].eType & CMDFLAG_WEBPAGE)!=0 ){
469 nWeb++;
470 }
471 printf(" { \"%.*s\",%*s%s,%*szHelp%03d, %3d, 0x%03x },\n",
472 n, z,
473 25-n, "",
474 aEntry[i].zFunc,
475 (int)(29-strlen(aEntry[i].zFunc)), "",
476 aEntry[i].iHelp,
477 aEntry[i].iHelp,
478 aEntry[i].eType
479 );
480 if( aEntry[i].zIf ) printf("#endif\n");
481 }
482 printf("};\n");
483 printf("#define FOSSIL_FIRST_CMD %d\n", nWeb);
484 printf("#define FOSSIL_MX_CMDNAME %d /* max length of any command name */\n",
485 mxLen);
486 printf("#define FOSSIL_MX_CMDIDX %d /* max index for commands */\n", nFixed);
487
488 /* Generate the aSetting[] table */
489 printf("const Setting aSetting[] = {\n");
490 for(i=0; i<nFixed; i++){
491 const char *z;
492
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -1069,13 +1069,14 @@
10691069
#
10701070
# Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping,
10711071
# plus a value of 2 means that we are building a client-provided
10721072
# sqlite3.c.
10731073
SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
1074
-SQLITE3_OBJ.1 =
1074
+SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o
10751075
# SQLITE3_OBJ.2 is set by the configure process
10761076
SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
1077
+SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN))
10771078
10781079
# The USE_SEE variable may be undefined, 0 or 1. If undefined or 0,
10791080
# in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the
10801081
# source tree) is used and extra flags are provided to enable the
10811082
# SQLite Encryption Extension.
@@ -2567,11 +2568,11 @@
25672568
-Dgetenv=fossil_getenv \
25682569
-Dfopen=fossil_fopen
25692570
25702571
PIKCHR_OPTIONS = -DPIKCHR_TOKEN_LIMIT=10000
25712572
2572
-$(OBJDIR)/sqlite3.o: $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw
2573
+$(SQLITE3_OBJ): $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw
25732574
$(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \
25742575
-c $(SQLITE3_SRC) -o $@
25752576
25762577
$(OBJDIR)/cson_amalgamation.o: $(SRCDIR_extsrc)/cson_amalgamation.c
25772578
$(XTCC) -c $(SRCDIR_extsrc)/cson_amalgamation.c -o $@
25782579
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -1069,13 +1069,14 @@
1069 #
1070 # Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping,
1071 # plus a value of 2 means that we are building a client-provided
1072 # sqlite3.c.
1073 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
1074 SQLITE3_OBJ.1 =
1075 # SQLITE3_OBJ.2 is set by the configure process
1076 SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
 
1077
1078 # The USE_SEE variable may be undefined, 0 or 1. If undefined or 0,
1079 # in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the
1080 # source tree) is used and extra flags are provided to enable the
1081 # SQLite Encryption Extension.
@@ -2567,11 +2568,11 @@
2567 -Dgetenv=fossil_getenv \
2568 -Dfopen=fossil_fopen
2569
2570 PIKCHR_OPTIONS = -DPIKCHR_TOKEN_LIMIT=10000
2571
2572 $(OBJDIR)/sqlite3.o: $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw
2573 $(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \
2574 -c $(SQLITE3_SRC) -o $@
2575
2576 $(OBJDIR)/cson_amalgamation.o: $(SRCDIR_extsrc)/cson_amalgamation.c
2577 $(XTCC) -c $(SRCDIR_extsrc)/cson_amalgamation.c -o $@
2578
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -1069,13 +1069,14 @@
1069 #
1070 # Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping,
1071 # plus a value of 2 means that we are building a client-provided
1072 # sqlite3.c.
1073 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
1074 SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o
1075 # SQLITE3_OBJ.2 is set by the configure process
1076 SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
1077 SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN))
1078
1079 # The USE_SEE variable may be undefined, 0 or 1. If undefined or 0,
1080 # in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the
1081 # source tree) is used and extra flags are provided to enable the
1082 # SQLite Encryption Extension.
@@ -2567,11 +2568,11 @@
2568 -Dgetenv=fossil_getenv \
2569 -Dfopen=fossil_fopen
2570
2571 PIKCHR_OPTIONS = -DPIKCHR_TOKEN_LIMIT=10000
2572
2573 $(SQLITE3_OBJ): $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw
2574 $(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \
2575 -c $(SQLITE3_SRC) -o $@
2576
2577 $(OBJDIR)/cson_amalgamation.o: $(SRCDIR_extsrc)/cson_amalgamation.c
2578 $(XTCC) -c $(SRCDIR_extsrc)/cson_amalgamation.c -o $@
2579
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -54,11 +54,11 @@
5454
5555
#### Enable compiling with debug symbols (much larger binary)
5656
#
5757
# FOSSIL_ENABLE_SYMBOLS = 1
5858
59
-#### Enable JSON (http://www.json.org) support using "cson"
59
+#### Enable JSON (https://www.json.org) support using "cson"
6060
#
6161
FOSSIL_ENABLE_JSON = 1
6262
6363
#### Enable HTTPS support via OpenSSL (links to libssl and libcrypto)
6464
#
@@ -549,10 +549,13 @@
549549
$(SRCDIR)/xfer.c \
550550
$(SRCDIR)/xfersetup.c \
551551
$(SRCDIR)/zip.c
552552
553553
EXTRA_FILES = \
554
+ $(SRCDIR)/../extsrc/pikchr-worker.js \
555
+ $(SRCDIR)/../extsrc/pikchr.js \
556
+ $(SRCDIR)/../extsrc/pikchr.wasm \
554557
$(SRCDIR)/../skins/ardoise/css.txt \
555558
$(SRCDIR)/../skins/ardoise/details.txt \
556559
$(SRCDIR)/../skins/ardoise/footer.txt \
557560
$(SRCDIR)/../skins/ardoise/header.txt \
558561
$(SRCDIR)/../skins/black_and_white/css.txt \
@@ -617,10 +620,11 @@
617620
$(SRCDIR)/fossil.page.brlist.js \
618621
$(SRCDIR)/fossil.page.chat.js \
619622
$(SRCDIR)/fossil.page.fileedit.js \
620623
$(SRCDIR)/fossil.page.forumpost.js \
621624
$(SRCDIR)/fossil.page.pikchrshow.js \
625
+ $(SRCDIR)/fossil.page.pikchrshowasm.js \
622626
$(SRCDIR)/fossil.page.whistory.js \
623627
$(SRCDIR)/fossil.page.wikiedit.js \
624628
$(SRCDIR)/fossil.pikchr.js \
625629
$(SRCDIR)/fossil.popupwidget.js \
626630
$(SRCDIR)/fossil.storage.js \
@@ -652,10 +656,11 @@
652656
$(SRCDIR)/sounds/e.wav \
653657
$(SRCDIR)/sounds/f.wav \
654658
$(SRCDIR)/style.admin_log.css \
655659
$(SRCDIR)/style.chat.css \
656660
$(SRCDIR)/style.fileedit.css \
661
+ $(SRCDIR)/style.pikchrshow.css \
657662
$(SRCDIR)/style.wikiedit.css \
658663
$(SRCDIR)/tree.js \
659664
$(SRCDIR)/useredit.js \
660665
$(SRCDIR)/wiki.wiki
661666
@@ -1064,13 +1069,14 @@
10641069
#
10651070
# Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping,
10661071
# plus a value of 2 means that we are building a client-provided
10671072
# sqlite3.c.
10681073
SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
1069
-SQLITE3_OBJ.1 =
1074
+SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o
10701075
# SQLITE3_OBJ.2 is set by the configure process
10711076
SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
1077
+SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN))
10721078
10731079
# The USE_SEE variable may be undefined, 0 or 1. If undefined or 0,
10741080
# in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the
10751081
# source tree) is used and extra flags are provided to enable the
10761082
# SQLite Encryption Extension.
@@ -2512,65 +2518,61 @@
25122518
-DSQLITE_OMIT_DEPRECATED \
25132519
-DSQLITE_OMIT_PROGRESS_CALLBACK \
25142520
-DSQLITE_OMIT_SHARED_CACHE \
25152521
-DSQLITE_OMIT_LOAD_EXTENSION \
25162522
-DSQLITE_MAX_EXPR_DEPTH=0 \
2517
- -DSQLITE_USE_ALLOCA \
25182523
-DSQLITE_ENABLE_LOCKING_STYLE=0 \
25192524
-DSQLITE_DEFAULT_FILE_FORMAT=4 \
25202525
-DSQLITE_ENABLE_EXPLAIN_COMMENTS \
25212526
-DSQLITE_ENABLE_FTS4 \
25222527
-DSQLITE_ENABLE_DBSTAT_VTAB \
2523
- -DSQLITE_ENABLE_JSON1 \
25242528
-DSQLITE_ENABLE_FTS5 \
25252529
-DSQLITE_ENABLE_STMTVTAB \
25262530
-DSQLITE_HAVE_ZLIB \
2527
- -DSQLITE_INTROSPECTION_PRAGMAS \
25282531
-DSQLITE_ENABLE_DBPAGE_VTAB \
25292532
-DSQLITE_TRUSTED_SCHEMA=0 \
25302533
-DSQLITE_WIN32_NO_ANSI \
25312534
$(MINGW_OPTIONS) \
25322535
-DSQLITE_USE_MALLOC_H \
25332536
-DSQLITE_USE_MSIZE
25342537
25352538
SHELL_OPTIONS = -DNDEBUG=1 \
2536
- -DSQLITE_DQS=0 \
2537
- -DSQLITE_THREADSAFE=0 \
2538
- -DSQLITE_DEFAULT_MEMSTATUS=0 \
2539
- -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
2540
- -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
2541
- -DSQLITE_OMIT_DECLTYPE \
2542
- -DSQLITE_OMIT_DEPRECATED \
2543
- -DSQLITE_OMIT_PROGRESS_CALLBACK \
2544
- -DSQLITE_OMIT_SHARED_CACHE \
2545
- -DSQLITE_OMIT_LOAD_EXTENSION \
2546
- -DSQLITE_MAX_EXPR_DEPTH=0 \
2547
- -DSQLITE_USE_ALLOCA \
2548
- -DSQLITE_ENABLE_LOCKING_STYLE=0 \
2549
- -DSQLITE_DEFAULT_FILE_FORMAT=4 \
2550
- -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
2551
- -DSQLITE_ENABLE_FTS4 \
2552
- -DSQLITE_ENABLE_DBSTAT_VTAB \
2553
- -DSQLITE_ENABLE_JSON1 \
2554
- -DSQLITE_ENABLE_FTS5 \
2555
- -DSQLITE_ENABLE_STMTVTAB \
2556
- -DSQLITE_HAVE_ZLIB \
2557
- -DSQLITE_INTROSPECTION_PRAGMAS \
2558
- -DSQLITE_ENABLE_DBPAGE_VTAB \
2559
- -DSQLITE_TRUSTED_SCHEMA=0 \
2560
- -Dmain=sqlite3_shell \
2561
- -DSQLITE_SHELL_IS_UTF8=1 \
2562
- -DSQLITE_OMIT_LOAD_EXTENSION=1 \
2563
- -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) \
2564
- -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname \
2565
- -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc \
2566
- -Daccess=file_access \
2567
- -Dsystem=fossil_system \
2568
- -Dgetenv=fossil_getenv \
2569
- -Dfopen=fossil_fopen
2570
-
2571
-$(OBJDIR)/sqlite3.o: $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw.mistachkin
2539
+ -DSQLITE_DQS=0 \
2540
+ -DSQLITE_THREADSAFE=0 \
2541
+ -DSQLITE_DEFAULT_MEMSTATUS=0 \
2542
+ -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
2543
+ -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
2544
+ -DSQLITE_OMIT_DECLTYPE \
2545
+ -DSQLITE_OMIT_DEPRECATED \
2546
+ -DSQLITE_OMIT_PROGRESS_CALLBACK \
2547
+ -DSQLITE_OMIT_SHARED_CACHE \
2548
+ -DSQLITE_OMIT_LOAD_EXTENSION \
2549
+ -DSQLITE_MAX_EXPR_DEPTH=0 \
2550
+ -DSQLITE_ENABLE_LOCKING_STYLE=0 \
2551
+ -DSQLITE_DEFAULT_FILE_FORMAT=4 \
2552
+ -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
2553
+ -DSQLITE_ENABLE_FTS4 \
2554
+ -DSQLITE_ENABLE_DBSTAT_VTAB \
2555
+ -DSQLITE_ENABLE_FTS5 \
2556
+ -DSQLITE_ENABLE_STMTVTAB \
2557
+ -DSQLITE_HAVE_ZLIB \
2558
+ -DSQLITE_ENABLE_DBPAGE_VTAB \
2559
+ -DSQLITE_TRUSTED_SCHEMA=0 \
2560
+ -Dmain=sqlite3_shell \
2561
+ -DSQLITE_SHELL_IS_UTF8=1 \
2562
+ -DSQLITE_OMIT_LOAD_EXTENSION=1 \
2563
+ -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) \
2564
+ -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname \
2565
+ -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc \
2566
+ -Daccess=file_access \
2567
+ -Dsystem=fossil_system \
2568
+ -Dgetenv=fossil_getenv \
2569
+ -Dfopen=fossil_fopen
2570
+
2571
+PIKCHR_OPTIONS = -DPIKCHR_TOKEN_LIMIT=10000
2572
+
2573
+$(SQLITE3_OBJ): $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw.mistachkin
25722574
$(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \
25732575
-c $(SQLITE3_SRC) -o $@
25742576
25752577
$(OBJDIR)/cson_amalgamation.o: $(SRCDIR_extsrc)/cson_amalgamation.c
25762578
$(XTCC) -c $(SRCDIR_extsrc)/cson_amalgamation.c -o $@
@@ -2588,7 +2590,7 @@
25882590
25892591
$(OBJDIR)/th_tcl.o: $(SRCDIR)/th_tcl.c
25902592
$(XTCC) -c $(SRCDIR)/th_tcl.c -o $@
25912593
25922594
$(OBJDIR)/pikchr.o: $(SRCDIR_extsrc)/pikchr.c
2593
- $(XTCC) -c $(SRCDIR_extsrc)/pikchr.c -o $@
2595
+ $(XTCC) $(PIKCHR_OPTIONS) -c $(SRCDIR_extsrc)/pikchr.c -o $@
25942596
25952597
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -54,11 +54,11 @@
54
55 #### Enable compiling with debug symbols (much larger binary)
56 #
57 # FOSSIL_ENABLE_SYMBOLS = 1
58
59 #### Enable JSON (http://www.json.org) support using "cson"
60 #
61 FOSSIL_ENABLE_JSON = 1
62
63 #### Enable HTTPS support via OpenSSL (links to libssl and libcrypto)
64 #
@@ -549,10 +549,13 @@
549 $(SRCDIR)/xfer.c \
550 $(SRCDIR)/xfersetup.c \
551 $(SRCDIR)/zip.c
552
553 EXTRA_FILES = \
 
 
 
554 $(SRCDIR)/../skins/ardoise/css.txt \
555 $(SRCDIR)/../skins/ardoise/details.txt \
556 $(SRCDIR)/../skins/ardoise/footer.txt \
557 $(SRCDIR)/../skins/ardoise/header.txt \
558 $(SRCDIR)/../skins/black_and_white/css.txt \
@@ -617,10 +620,11 @@
617 $(SRCDIR)/fossil.page.brlist.js \
618 $(SRCDIR)/fossil.page.chat.js \
619 $(SRCDIR)/fossil.page.fileedit.js \
620 $(SRCDIR)/fossil.page.forumpost.js \
621 $(SRCDIR)/fossil.page.pikchrshow.js \
 
622 $(SRCDIR)/fossil.page.whistory.js \
623 $(SRCDIR)/fossil.page.wikiedit.js \
624 $(SRCDIR)/fossil.pikchr.js \
625 $(SRCDIR)/fossil.popupwidget.js \
626 $(SRCDIR)/fossil.storage.js \
@@ -652,10 +656,11 @@
652 $(SRCDIR)/sounds/e.wav \
653 $(SRCDIR)/sounds/f.wav \
654 $(SRCDIR)/style.admin_log.css \
655 $(SRCDIR)/style.chat.css \
656 $(SRCDIR)/style.fileedit.css \
 
657 $(SRCDIR)/style.wikiedit.css \
658 $(SRCDIR)/tree.js \
659 $(SRCDIR)/useredit.js \
660 $(SRCDIR)/wiki.wiki
661
@@ -1064,13 +1069,14 @@
1064 #
1065 # Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping,
1066 # plus a value of 2 means that we are building a client-provided
1067 # sqlite3.c.
1068 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
1069 SQLITE3_OBJ.1 =
1070 # SQLITE3_OBJ.2 is set by the configure process
1071 SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
 
1072
1073 # The USE_SEE variable may be undefined, 0 or 1. If undefined or 0,
1074 # in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the
1075 # source tree) is used and extra flags are provided to enable the
1076 # SQLite Encryption Extension.
@@ -2512,65 +2518,61 @@
2512 -DSQLITE_OMIT_DEPRECATED \
2513 -DSQLITE_OMIT_PROGRESS_CALLBACK \
2514 -DSQLITE_OMIT_SHARED_CACHE \
2515 -DSQLITE_OMIT_LOAD_EXTENSION \
2516 -DSQLITE_MAX_EXPR_DEPTH=0 \
2517 -DSQLITE_USE_ALLOCA \
2518 -DSQLITE_ENABLE_LOCKING_STYLE=0 \
2519 -DSQLITE_DEFAULT_FILE_FORMAT=4 \
2520 -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
2521 -DSQLITE_ENABLE_FTS4 \
2522 -DSQLITE_ENABLE_DBSTAT_VTAB \
2523 -DSQLITE_ENABLE_JSON1 \
2524 -DSQLITE_ENABLE_FTS5 \
2525 -DSQLITE_ENABLE_STMTVTAB \
2526 -DSQLITE_HAVE_ZLIB \
2527 -DSQLITE_INTROSPECTION_PRAGMAS \
2528 -DSQLITE_ENABLE_DBPAGE_VTAB \
2529 -DSQLITE_TRUSTED_SCHEMA=0 \
2530 -DSQLITE_WIN32_NO_ANSI \
2531 $(MINGW_OPTIONS) \
2532 -DSQLITE_USE_MALLOC_H \
2533 -DSQLITE_USE_MSIZE
2534
2535 SHELL_OPTIONS = -DNDEBUG=1 \
2536 -DSQLITE_DQS=0 \
2537 -DSQLITE_THREADSAFE=0 \
2538 -DSQLITE_DEFAULT_MEMSTATUS=0 \
2539 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
2540 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
2541 -DSQLITE_OMIT_DECLTYPE \
2542 -DSQLITE_OMIT_DEPRECATED \
2543 -DSQLITE_OMIT_PROGRESS_CALLBACK \
2544 -DSQLITE_OMIT_SHARED_CACHE \
2545 -DSQLITE_OMIT_LOAD_EXTENSION \
2546 -DSQLITE_MAX_EXPR_DEPTH=0 \
2547 -DSQLITE_USE_ALLOCA \
2548 -DSQLITE_ENABLE_LOCKING_STYLE=0 \
2549 -DSQLITE_DEFAULT_FILE_FORMAT=4 \
2550 -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
2551 -DSQLITE_ENABLE_FTS4 \
2552 -DSQLITE_ENABLE_DBSTAT_VTAB \
2553 -DSQLITE_ENABLE_JSON1 \
2554 -DSQLITE_ENABLE_FTS5 \
2555 -DSQLITE_ENABLE_STMTVTAB \
2556 -DSQLITE_HAVE_ZLIB \
2557 -DSQLITE_INTROSPECTION_PRAGMAS \
2558 -DSQLITE_ENABLE_DBPAGE_VTAB \
2559 -DSQLITE_TRUSTED_SCHEMA=0 \
2560 -Dmain=sqlite3_shell \
2561 -DSQLITE_SHELL_IS_UTF8=1 \
2562 -DSQLITE_OMIT_LOAD_EXTENSION=1 \
2563 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) \
2564 -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname \
2565 -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc \
2566 -Daccess=file_access \
2567 -Dsystem=fossil_system \
2568 -Dgetenv=fossil_getenv \
2569 -Dfopen=fossil_fopen
2570
2571 $(OBJDIR)/sqlite3.o: $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw.mistachkin
2572 $(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \
2573 -c $(SQLITE3_SRC) -o $@
2574
2575 $(OBJDIR)/cson_amalgamation.o: $(SRCDIR_extsrc)/cson_amalgamation.c
2576 $(XTCC) -c $(SRCDIR_extsrc)/cson_amalgamation.c -o $@
@@ -2588,7 +2590,7 @@
2588
2589 $(OBJDIR)/th_tcl.o: $(SRCDIR)/th_tcl.c
2590 $(XTCC) -c $(SRCDIR)/th_tcl.c -o $@
2591
2592 $(OBJDIR)/pikchr.o: $(SRCDIR_extsrc)/pikchr.c
2593 $(XTCC) -c $(SRCDIR_extsrc)/pikchr.c -o $@
2594
2595
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -54,11 +54,11 @@
54
55 #### Enable compiling with debug symbols (much larger binary)
56 #
57 # FOSSIL_ENABLE_SYMBOLS = 1
58
59 #### Enable JSON (https://www.json.org) support using "cson"
60 #
61 FOSSIL_ENABLE_JSON = 1
62
63 #### Enable HTTPS support via OpenSSL (links to libssl and libcrypto)
64 #
@@ -549,10 +549,13 @@
549 $(SRCDIR)/xfer.c \
550 $(SRCDIR)/xfersetup.c \
551 $(SRCDIR)/zip.c
552
553 EXTRA_FILES = \
554 $(SRCDIR)/../extsrc/pikchr-worker.js \
555 $(SRCDIR)/../extsrc/pikchr.js \
556 $(SRCDIR)/../extsrc/pikchr.wasm \
557 $(SRCDIR)/../skins/ardoise/css.txt \
558 $(SRCDIR)/../skins/ardoise/details.txt \
559 $(SRCDIR)/../skins/ardoise/footer.txt \
560 $(SRCDIR)/../skins/ardoise/header.txt \
561 $(SRCDIR)/../skins/black_and_white/css.txt \
@@ -617,10 +620,11 @@
620 $(SRCDIR)/fossil.page.brlist.js \
621 $(SRCDIR)/fossil.page.chat.js \
622 $(SRCDIR)/fossil.page.fileedit.js \
623 $(SRCDIR)/fossil.page.forumpost.js \
624 $(SRCDIR)/fossil.page.pikchrshow.js \
625 $(SRCDIR)/fossil.page.pikchrshowasm.js \
626 $(SRCDIR)/fossil.page.whistory.js \
627 $(SRCDIR)/fossil.page.wikiedit.js \
628 $(SRCDIR)/fossil.pikchr.js \
629 $(SRCDIR)/fossil.popupwidget.js \
630 $(SRCDIR)/fossil.storage.js \
@@ -652,10 +656,11 @@
656 $(SRCDIR)/sounds/e.wav \
657 $(SRCDIR)/sounds/f.wav \
658 $(SRCDIR)/style.admin_log.css \
659 $(SRCDIR)/style.chat.css \
660 $(SRCDIR)/style.fileedit.css \
661 $(SRCDIR)/style.pikchrshow.css \
662 $(SRCDIR)/style.wikiedit.css \
663 $(SRCDIR)/tree.js \
664 $(SRCDIR)/useredit.js \
665 $(SRCDIR)/wiki.wiki
666
@@ -1064,13 +1069,14 @@
1069 #
1070 # Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping,
1071 # plus a value of 2 means that we are building a client-provided
1072 # sqlite3.c.
1073 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
1074 SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o
1075 # SQLITE3_OBJ.2 is set by the configure process
1076 SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
1077 SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN))
1078
1079 # The USE_SEE variable may be undefined, 0 or 1. If undefined or 0,
1080 # in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the
1081 # source tree) is used and extra flags are provided to enable the
1082 # SQLite Encryption Extension.
@@ -2512,65 +2518,61 @@
2518 -DSQLITE_OMIT_DEPRECATED \
2519 -DSQLITE_OMIT_PROGRESS_CALLBACK \
2520 -DSQLITE_OMIT_SHARED_CACHE \
2521 -DSQLITE_OMIT_LOAD_EXTENSION \
2522 -DSQLITE_MAX_EXPR_DEPTH=0 \
 
2523 -DSQLITE_ENABLE_LOCKING_STYLE=0 \
2524 -DSQLITE_DEFAULT_FILE_FORMAT=4 \
2525 -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
2526 -DSQLITE_ENABLE_FTS4 \
2527 -DSQLITE_ENABLE_DBSTAT_VTAB \
 
2528 -DSQLITE_ENABLE_FTS5 \
2529 -DSQLITE_ENABLE_STMTVTAB \
2530 -DSQLITE_HAVE_ZLIB \
 
2531 -DSQLITE_ENABLE_DBPAGE_VTAB \
2532 -DSQLITE_TRUSTED_SCHEMA=0 \
2533 -DSQLITE_WIN32_NO_ANSI \
2534 $(MINGW_OPTIONS) \
2535 -DSQLITE_USE_MALLOC_H \
2536 -DSQLITE_USE_MSIZE
2537
2538 SHELL_OPTIONS = -DNDEBUG=1 \
2539 -DSQLITE_DQS=0 \
2540 -DSQLITE_THREADSAFE=0 \
2541 -DSQLITE_DEFAULT_MEMSTATUS=0 \
2542 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
2543 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
2544 -DSQLITE_OMIT_DECLTYPE \
2545 -DSQLITE_OMIT_DEPRECATED \
2546 -DSQLITE_OMIT_PROGRESS_CALLBACK \
2547 -DSQLITE_OMIT_SHARED_CACHE \
2548 -DSQLITE_OMIT_LOAD_EXTENSION \
2549 -DSQLITE_MAX_EXPR_DEPTH=0 \
2550 -DSQLITE_ENABLE_LOCKING_STYLE=0 \
2551 -DSQLITE_DEFAULT_FILE_FORMAT=4 \
2552 -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
2553 -DSQLITE_ENABLE_FTS4 \
2554 -DSQLITE_ENABLE_DBSTAT_VTAB \
2555 -DSQLITE_ENABLE_FTS5 \
2556 -DSQLITE_ENABLE_STMTVTAB \
2557 -DSQLITE_HAVE_ZLIB \
2558 -DSQLITE_ENABLE_DBPAGE_VTAB \
2559 -DSQLITE_TRUSTED_SCHEMA=0 \
2560 -Dmain=sqlite3_shell \
2561 -DSQLITE_SHELL_IS_UTF8=1 \
2562 -DSQLITE_OMIT_LOAD_EXTENSION=1 \
2563 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) \
2564 -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname \
2565 -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc \
2566 -Daccess=file_access \
2567 -Dsystem=fossil_system \
2568 -Dgetenv=fossil_getenv \
2569 -Dfopen=fossil_fopen
2570
2571 PIKCHR_OPTIONS = -DPIKCHR_TOKEN_LIMIT=10000
2572
2573 $(SQLITE3_OBJ): $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw.mistachkin
 
2574 $(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \
2575 -c $(SQLITE3_SRC) -o $@
2576
2577 $(OBJDIR)/cson_amalgamation.o: $(SRCDIR_extsrc)/cson_amalgamation.c
2578 $(XTCC) -c $(SRCDIR_extsrc)/cson_amalgamation.c -o $@
@@ -2588,7 +2590,7 @@
2590
2591 $(OBJDIR)/th_tcl.o: $(SRCDIR)/th_tcl.c
2592 $(XTCC) -c $(SRCDIR)/th_tcl.c -o $@
2593
2594 $(OBJDIR)/pikchr.o: $(SRCDIR_extsrc)/pikchr.c
2595 $(XTCC) $(PIKCHR_OPTIONS) -c $(SRCDIR_extsrc)/pikchr.c -o $@
2596
2597
--- win/fossil.exe.manifest
+++ win/fossil.exe.manifest
@@ -1,9 +1,9 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
22
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"
33
xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
4
- <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="fossil"
4
+ <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="fossil"
55
type="win32" />
66
<description>
77
Simple, high-reliability, distributed software configuration management system.
88
</description>
99
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
@@ -34,10 +34,10 @@
3434
</asmv3:windowsSettings>
3535
</asmv3:application>
3636
<dependency>
3737
<dependentAssembly>
3838
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls"
39
- version="6.0.0.0" processorArchitecture="X86"
39
+ version="6.0.0.0" processorArchitecture="*"
4040
publicKeyToken="6595b64144ccf1df" language="*" />
4141
</dependentAssembly>
4242
</dependency>
4343
</assembly>
4444
--- win/fossil.exe.manifest
+++ win/fossil.exe.manifest
@@ -1,9 +1,9 @@
1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"
3 xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
4 <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="fossil"
5 type="win32" />
6 <description>
7 Simple, high-reliability, distributed software configuration management system.
8 </description>
9 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
@@ -34,10 +34,10 @@
34 </asmv3:windowsSettings>
35 </asmv3:application>
36 <dependency>
37 <dependentAssembly>
38 <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls"
39 version="6.0.0.0" processorArchitecture="X86"
40 publicKeyToken="6595b64144ccf1df" language="*" />
41 </dependentAssembly>
42 </dependency>
43 </assembly>
44
--- win/fossil.exe.manifest
+++ win/fossil.exe.manifest
@@ -1,9 +1,9 @@
1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"
3 xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
4 <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="fossil"
5 type="win32" />
6 <description>
7 Simple, high-reliability, distributed software configuration management system.
8 </description>
9 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
@@ -34,10 +34,10 @@
34 </asmv3:windowsSettings>
35 </asmv3:application>
36 <dependency>
37 <dependentAssembly>
38 <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls"
39 version="6.0.0.0" processorArchitecture="*"
40 publicKeyToken="6595b64144ccf1df" language="*" />
41 </dependentAssembly>
42 </dependency>
43 </assembly>
44
+1 -1
--- www/alerts.md
+++ www/alerts.md
@@ -676,11 +676,11 @@
676676
Contrast a password which may be shared with other services, which
677677
then compromises those other services.
678678
679679
* No PII other than the subscriber's email address is available to an
680680
attacker with the `subscriberCode`. Nor can knowledge of the
681
- `subscriberCode` lead to a email flood or other annoyance attack, as
681
+ `subscriberCode` lead to an email flood or other annoyance attack, as
682682
far as I can see.
683683
684684
If the `subscriberCodes` for a Fossil repository are ever compromised,
685685
new ones can be generated as follows:
686686
687687
--- www/alerts.md
+++ www/alerts.md
@@ -676,11 +676,11 @@
676 Contrast a password which may be shared with other services, which
677 then compromises those other services.
678
679 * No PII other than the subscriber's email address is available to an
680 attacker with the `subscriberCode`. Nor can knowledge of the
681 `subscriberCode` lead to a email flood or other annoyance attack, as
682 far as I can see.
683
684 If the `subscriberCodes` for a Fossil repository are ever compromised,
685 new ones can be generated as follows:
686
687
--- www/alerts.md
+++ www/alerts.md
@@ -676,11 +676,11 @@
676 Contrast a password which may be shared with other services, which
677 then compromises those other services.
678
679 * No PII other than the subscriber's email address is available to an
680 attacker with the `subscriberCode`. Nor can knowledge of the
681 `subscriberCode` lead to an email flood or other annoyance attack, as
682 far as I can see.
683
684 If the `subscriberCodes` for a Fossil repository are ever compromised,
685 new ones can be generated as follows:
686
687
+13 -77
--- www/build.wiki
+++ www/build.wiki
@@ -79,11 +79,11 @@
7979
<p>Unpack the ZIP or tarball you downloaded then
8080
<b>cd</b> into the directory created.</p></li>
8181
8282
<li><i>(Optional, Debian-compatible Linux only)</i>
8383
Make sure you have all the necessary tools and libraries at hand by running:
84
-<b>sudo apt install tcl-dev tk libssl-dev</b>.
84
+<b>sudo apt install tcl-dev tk libssl-dev zlib1g-dev</b>.
8585
8686
<li><i>(Optional, Unix only)</i>
8787
Run <b>./configure</b> to construct a makefile.
8888
8989
<ol type="a">
@@ -112,11 +112,12 @@
112112
<p>For more advanced use cases, see the [./ssl.wiki#openssl-bin|OpenSSL
113113
discussion in the "TLS and Fossil" document].</p>
114114
115115
<li><p>
116116
To build a statically linked binary (suitable for use inside a chroot
117
-jail) add the <b>--static</b> option.
117
+jail) add the <b>--static</b> option. (See the [#docker | Docker section
118
+below].)
118119
119120
<li><p>
120121
To enable the native [./th1.md#tclEval | Tcl integration feature] feature,
121122
add the <b>--with-tcl=1</b> and <b>--with-tcl-private-stubs=1</b> options.
122123
@@ -248,85 +249,20 @@
248249
TCC += -Dsocketlen_t=int
249250
TCC += -DSQLITE_MAX_MMAP_SIZE=0
250251
</pre></blockquote>
251252
</ul>
252253
253
-<h2>5.0 Building a Static Binary on Linux using Docker</h2>
254
-
255
-Building a static binary on Linux is not as straightforward as it
256
-could be because the GNU C library requires that certain components be
257
-dynamically loadable. That can be worked around by building against a
258
-different C library, which is simplest to do by way of a container
259
-environment like [https://www.docker.com/ | Docker].
260
-
261
-The following instructions for building fossil using Docker
262
-were adapted from [https://fossil-scm.org/forum/forumpost/5dd2d61e5f | forumpost/5dd2d61e5f].
263
-These instructions assume that docker is installed and that the user running
264
-these instructions has permission to do so (i.e., they are <tt>root</tt> or
265
-are a member of the <tt>docker</tt> group).
266
-
267
-First, create a file named <tt>Dockerfile</tt> with the following contents:
268
-
269
-<pre><code>
270
-FROM alpine:edge
271
-RUN apk update \
272
- && apk upgrade \
273
- && apk add --no-cache \
274
- curl gcc make tcl \
275
- musl-dev \
276
- openssl-dev zlib-dev \
277
- openssl-libs-static zlib-static \
278
- && curl \
279
- "https://fossil-scm.org/home/tarball/fossil-src.tar.gz?name=fossil-src&uuid=trunk" \
280
- -o fossil-src.tar.gz \
281
- && tar xf fossil-src.tar.gz \
282
- && cd fossil-src \
283
- && ./configure \
284
- --static \
285
- --disable-fusefs \
286
- --with-th1-docs \
287
- --with-th1-hooks \
288
- && make
289
-</code></pre>
290
-
291
-Be sure to modify the <tt>configure</tt> flags, if desired. e.g., add <tt>--json</tt>
292
-for JSON support.
293
-
294
-From the directory containing that file, build it with docker:
295
-
296
-<pre><code># docker build -t fossil_static .</code></pre>
297
-
298
-If you get permissions errors when running that as a non-root user,
299
-be sure to add the user to the <tt>docker</tt> group before trying
300
-again.
301
-
302
-That creates a docker image and builds a static fossil binary inside
303
-it. That step will take several minutes or more, depending on the
304
-speed of the build environment.
305
-
306
-Next, create a docker container to host the image we just created:
307
-
308
-<pre><code># docker create --name fossil fossil_static</code></pre>
309
-
310
-Then copy the fossil binary from that container:
311
-
312
-<pre><code># docker cp fossil:/fossil-src/fossil fossil</code></pre>
313
-
314
-The resulting binary will be <em>huge</em> because it is built with
315
-debug info. To strip that information, reducing the size greatly:
316
-
317
-<pre><code># strip fossil</code></pre>
318
-
319
-To delete the Docker container and image (if desired), run:
320
-
321
-<pre><code># docker container rm fossil
322
-# docker image ls
323
-</code></pre>
324
-
325
-Note the IDs of the images named <tt>fossil_static</tt> and <tt>alpine</tt>, then:
326
-
327
-<pre><code>docker image rm THE_FOSSIL_ID THE_ALPINE_ID</code></pre>
254
+
255
+<h2 id="docker" name="oci">5.0 Building a Docker Container</h2>
256
+
257
+The information on building Fossil inside an
258
+[https://opencontainers.org/ | OCI container] is now in
259
+[./containers.md | a separate document].
260
+
261
+This includes the instructions on using the OCI container as an
262
+expedient intermediary for building a statically-linked Fossil binary on
263
+modern Linux platforms, which otherwise make this difficult.
328264
329265
330266
<h2>6.0 Building on/for Android</h2>
331267
332268
<h3>6.1 Cross-compiling from Linux</h3>
333269
--- www/build.wiki
+++ www/build.wiki
@@ -79,11 +79,11 @@
79 <p>Unpack the ZIP or tarball you downloaded then
80 <b>cd</b> into the directory created.</p></li>
81
82 <li><i>(Optional, Debian-compatible Linux only)</i>
83 Make sure you have all the necessary tools and libraries at hand by running:
84 <b>sudo apt install tcl-dev tk libssl-dev</b>.
85
86 <li><i>(Optional, Unix only)</i>
87 Run <b>./configure</b> to construct a makefile.
88
89 <ol type="a">
@@ -112,11 +112,12 @@
112 <p>For more advanced use cases, see the [./ssl.wiki#openssl-bin|OpenSSL
113 discussion in the "TLS and Fossil" document].</p>
114
115 <li><p>
116 To build a statically linked binary (suitable for use inside a chroot
117 jail) add the <b>--static</b> option.
 
118
119 <li><p>
120 To enable the native [./th1.md#tclEval | Tcl integration feature] feature,
121 add the <b>--with-tcl=1</b> and <b>--with-tcl-private-stubs=1</b> options.
122
@@ -248,85 +249,20 @@
248 TCC += -Dsocketlen_t=int
249 TCC += -DSQLITE_MAX_MMAP_SIZE=0
250 </pre></blockquote>
251 </ul>
252
253 <h2>5.0 Building a Static Binary on Linux using Docker</h2>
254
255 Building a static binary on Linux is not as straightforward as it
256 could be because the GNU C library requires that certain components be
257 dynamically loadable. That can be worked around by building against a
258 different C library, which is simplest to do by way of a container
259 environment like [https://www.docker.com/ | Docker].
260
261 The following instructions for building fossil using Docker
262 were adapted from [https://fossil-scm.org/forum/forumpost/5dd2d61e5f | forumpost/5dd2d61e5f].
263 These instructions assume that docker is installed and that the user running
264 these instructions has permission to do so (i.e., they are <tt>root</tt> or
265 are a member of the <tt>docker</tt> group).
266
267 First, create a file named <tt>Dockerfile</tt> with the following contents:
268
269 <pre><code>
270 FROM alpine:edge
271 RUN apk update \
272 && apk upgrade \
273 && apk add --no-cache \
274 curl gcc make tcl \
275 musl-dev \
276 openssl-dev zlib-dev \
277 openssl-libs-static zlib-static \
278 && curl \
279 "https://fossil-scm.org/home/tarball/fossil-src.tar.gz?name=fossil-src&uuid=trunk" \
280 -o fossil-src.tar.gz \
281 && tar xf fossil-src.tar.gz \
282 && cd fossil-src \
283 && ./configure \
284 --static \
285 --disable-fusefs \
286 --with-th1-docs \
287 --with-th1-hooks \
288 && make
289 </code></pre>
290
291 Be sure to modify the <tt>configure</tt> flags, if desired. e.g., add <tt>--json</tt>
292 for JSON support.
293
294 From the directory containing that file, build it with docker:
295
296 <pre><code># docker build -t fossil_static .</code></pre>
297
298 If you get permissions errors when running that as a non-root user,
299 be sure to add the user to the <tt>docker</tt> group before trying
300 again.
301
302 That creates a docker image and builds a static fossil binary inside
303 it. That step will take several minutes or more, depending on the
304 speed of the build environment.
305
306 Next, create a docker container to host the image we just created:
307
308 <pre><code># docker create --name fossil fossil_static</code></pre>
309
310 Then copy the fossil binary from that container:
311
312 <pre><code># docker cp fossil:/fossil-src/fossil fossil</code></pre>
313
314 The resulting binary will be <em>huge</em> because it is built with
315 debug info. To strip that information, reducing the size greatly:
316
317 <pre><code># strip fossil</code></pre>
318
319 To delete the Docker container and image (if desired), run:
320
321 <pre><code># docker container rm fossil
322 # docker image ls
323 </code></pre>
324
325 Note the IDs of the images named <tt>fossil_static</tt> and <tt>alpine</tt>, then:
326
327 <pre><code>docker image rm THE_FOSSIL_ID THE_ALPINE_ID</code></pre>
328
329
330 <h2>6.0 Building on/for Android</h2>
331
332 <h3>6.1 Cross-compiling from Linux</h3>
333
--- www/build.wiki
+++ www/build.wiki
@@ -79,11 +79,11 @@
79 <p>Unpack the ZIP or tarball you downloaded then
80 <b>cd</b> into the directory created.</p></li>
81
82 <li><i>(Optional, Debian-compatible Linux only)</i>
83 Make sure you have all the necessary tools and libraries at hand by running:
84 <b>sudo apt install tcl-dev tk libssl-dev zlib1g-dev</b>.
85
86 <li><i>(Optional, Unix only)</i>
87 Run <b>./configure</b> to construct a makefile.
88
89 <ol type="a">
@@ -112,11 +112,12 @@
112 <p>For more advanced use cases, see the [./ssl.wiki#openssl-bin|OpenSSL
113 discussion in the "TLS and Fossil" document].</p>
114
115 <li><p>
116 To build a statically linked binary (suitable for use inside a chroot
117 jail) add the <b>--static</b> option. (See the [#docker | Docker section
118 below].)
119
120 <li><p>
121 To enable the native [./th1.md#tclEval | Tcl integration feature] feature,
122 add the <b>--with-tcl=1</b> and <b>--with-tcl-private-stubs=1</b> options.
123
@@ -248,85 +249,20 @@
249 TCC += -Dsocketlen_t=int
250 TCC += -DSQLITE_MAX_MMAP_SIZE=0
251 </pre></blockquote>
252 </ul>
253
254
255 <h2 id="docker" name="oci">5.0 Building a Docker Container</h2>
256
257 The information on building Fossil inside an
258 [https://opencontainers.org/ | OCI container] is now in
259 [./containers.md | a separate document].
260
261 This includes the instructions on using the OCI container as an
262 expedient intermediary for building a statically-linked Fossil binary on
263 modern Linux platforms, which otherwise make this difficult.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
264
265
266 <h2>6.0 Building on/for Android</h2>
267
268 <h3>6.1 Cross-compiling from Linux</h3>
269
+24 -4
--- www/cgi.wiki
+++ www/cgi.wiki
@@ -48,14 +48,16 @@
4848
4949
5050
<h2 id="directory">directory: <i>PATH</i></h2>
5151
5252
The PATH is the name of a directory that contains one or more Fossil
53
-repository files having the suffix ".fossil". If this property is used
54
-instead of [#repository|<b>repository:</b>], then the Fossil server is
55
-able to serve all of the repositories in the directory. The specific
56
-repository used is selected by a prefix on the PATH_INFO.
53
+repository files having the suffix ".fossil". If this property is
54
+used instead of [#repository|<b>repository:</b>], then the Fossil
55
+server is able to serve all of the repositories in the directory. The
56
+specific repository used is selected by a prefix on the PATH_INFO. See
57
+the notes for the [#repolist|<b>repolist</b>] option regarding name
58
+collisions between subdirectories and repository files.
5759
5860
5961
<h2 id="notfound">notfound: <i>URL</i></h2>
6062
6163
If the [#directory|<b>directory:</b>] option is used and if the PATH_INFO
@@ -73,10 +75,28 @@
7375
The "skin" of the reply is determined by the first
7476
repository in the list that has a non-zero
7577
[/help?cmd=repolist-skin|repolist-skin] setting.
7678
If no repository has such a non-zero repolist-skin setting, then
7779
the repository list is generic HTML without any decoration.
80
+
81
+The repolist-generated page recurses into subdirectories and will list
82
+all <tt>*.fossil</tt> files found, with the following exceptions:
83
+
84
+ * Filenames starting with a period are treated as "hidden" and skipped.
85
+
86
+ * Subdirectory names which match the base name of a fossil file in
87
+ the same directory are listed in the resulting page but are not
88
+ hyperlinked because the links would be ambiguous and the
89
+ repositories in the subdirectories would be unreachable to
90
+ clients. For example, any repositories under subdirectory
91
+ <tt>XYZ</tt> are unreachable if <tt>XYZ.fossil</tt> exists in
92
+ the same directory as <tt>XYZ</tt>, noting that this particular
93
+ name check is case-insensitive. The entries for such
94
+ repositories are clearly marked in the repolist page's output to
95
+ make the user aware of the problem. To make them accessible,
96
+ move them into a directory which does not share a base name with
97
+ a repository file.
7898
7999
80100
<h2 id="localauth">localauth</h2>
81101
82102
This is a Boolean property.
83103
--- www/cgi.wiki
+++ www/cgi.wiki
@@ -48,14 +48,16 @@
48
49
50 <h2 id="directory">directory: <i>PATH</i></h2>
51
52 The PATH is the name of a directory that contains one or more Fossil
53 repository files having the suffix ".fossil". If this property is used
54 instead of [#repository|<b>repository:</b>], then the Fossil server is
55 able to serve all of the repositories in the directory. The specific
56 repository used is selected by a prefix on the PATH_INFO.
 
 
57
58
59 <h2 id="notfound">notfound: <i>URL</i></h2>
60
61 If the [#directory|<b>directory:</b>] option is used and if the PATH_INFO
@@ -73,10 +75,28 @@
73 The "skin" of the reply is determined by the first
74 repository in the list that has a non-zero
75 [/help?cmd=repolist-skin|repolist-skin] setting.
76 If no repository has such a non-zero repolist-skin setting, then
77 the repository list is generic HTML without any decoration.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
79
80 <h2 id="localauth">localauth</h2>
81
82 This is a Boolean property.
83
--- www/cgi.wiki
+++ www/cgi.wiki
@@ -48,14 +48,16 @@
48
49
50 <h2 id="directory">directory: <i>PATH</i></h2>
51
52 The PATH is the name of a directory that contains one or more Fossil
53 repository files having the suffix ".fossil". If this property is
54 used instead of [#repository|<b>repository:</b>], then the Fossil
55 server is able to serve all of the repositories in the directory. The
56 specific repository used is selected by a prefix on the PATH_INFO. See
57 the notes for the [#repolist|<b>repolist</b>] option regarding name
58 collisions between subdirectories and repository files.
59
60
61 <h2 id="notfound">notfound: <i>URL</i></h2>
62
63 If the [#directory|<b>directory:</b>] option is used and if the PATH_INFO
@@ -73,10 +75,28 @@
75 The "skin" of the reply is determined by the first
76 repository in the list that has a non-zero
77 [/help?cmd=repolist-skin|repolist-skin] setting.
78 If no repository has such a non-zero repolist-skin setting, then
79 the repository list is generic HTML without any decoration.
80
81 The repolist-generated page recurses into subdirectories and will list
82 all <tt>*.fossil</tt> files found, with the following exceptions:
83
84 * Filenames starting with a period are treated as "hidden" and skipped.
85
86 * Subdirectory names which match the base name of a fossil file in
87 the same directory are listed in the resulting page but are not
88 hyperlinked because the links would be ambiguous and the
89 repositories in the subdirectories would be unreachable to
90 clients. For example, any repositories under subdirectory
91 <tt>XYZ</tt> are unreachable if <tt>XYZ.fossil</tt> exists in
92 the same directory as <tt>XYZ</tt>, noting that this particular
93 name check is case-insensitive. The entries for such
94 repositories are clearly marked in the repolist page's output to
95 make the user aware of the problem. To make them accessible,
96 move them into a directory which does not share a base name with
97 a repository file.
98
99
100 <h2 id="localauth">localauth</h2>
101
102 This is a Boolean property.
103
+17 -2
--- www/changes.wiki
+++ www/changes.wiki
@@ -1,8 +1,18 @@
11
<title>Change Log</title>
22
3
-<h2 id='v2_19'>Changes for version 2.19 (pending)</h2>
3
+<h2 id='v2_20'>Changes for version 2.20 (pending)</h2>
4
+ * Added the [/help?cmd=chat-timeline-user|chat-timeline-user setting]. If
5
+ it is not an empty string, then any changes that would appear on the timeline
6
+ are announced in [./chat.md|the chat room].
7
+ * The /unsubscribe page now requests comformation. [./alerts.md|Email notifications]
8
+ now contain only an "Unsubscribe" link, and not a link to subscription management.
9
+ * More elements of the /info page are now inside of an accordion.
10
+ * Replace the <tt>--dryrun</tt> flag with <tt>--dry-run</tt> in all
11
+ commands which still used the former name, for consistency.
12
+
13
+<h2 id='v2_19'>Changes for version 2.19 (2022-07-21)</h2>
414
* On file listing pages, sort filenames using the "uintnocase" collating
515
sequence, so that filenames that contains embedded integers sort in
616
numeric order even if they contain a different number of digits.
717
(Example: "fossil_80_..." comes before "fossil_100.png" in the
818
[/dir?ci=92fd091703a28c07&name=skins/blitz|/skins/blitz] directory listing.)
@@ -31,10 +41,15 @@
3141
* Reimplemented the [/pikchrshow] app to use a WebAssembly build of
3242
pikchr so that it can render pikchrs on the client instead of requiring
3343
a server round-trip.
3444
* Add the [/help?cmd=email-listid|email-listid setting]. If set, it is
3545
used as the List-ID header for all outbound notification emails.
46
+ * Add the "--branch" option to the "[/help?cmd=timeline|timeline]" command
47
+ to restrict the displayed items to a specific branch.
48
+ * Add the "--versions" option to "[/help?cmd=diff|fossil diff]"
49
+ to display details about the compared versions into the patch header.
50
+ * Numerous other minor enhancements.
3651
3752
<h2 id='v2_18'>Changes for version 2.18 (2022-02-23)</h2>
3853
* Added support for [./ssl-server.md|SSL/TLS server mode] for commands
3954
like "[/help?cmd=server|fossil server]" and "[/help?cmd=http|fossil http]"
4055
* The new [/help?cmd=cherry-pick|cherry-pick command] is an alias for
@@ -1725,11 +1740,11 @@
17251740
* Fix the tarball generator to work with very log pathnames
17261741
17271742
<h2>Changes For Version 1.18 (2011-07-14)</h2>
17281743
* Added this Change Log
17291744
* Added sequential version numbering
1730
- * Added a optional configure script - the Makefile still works for most
1745
+ * Added an optional configure script - the Makefile still works for most
17311746
systems.
17321747
* Improvements to the "annotate" algorithm: only search primary
17331748
ancestors and ignore branches.
17341749
* Update the "scrub" command to remove traces of login-groups and
17351750
subrepositories.
17361751
--- www/changes.wiki
+++ www/changes.wiki
@@ -1,8 +1,18 @@
1 <title>Change Log</title>
2
3 <h2 id='v2_19'>Changes for version 2.19 (pending)</h2>
 
 
 
 
 
 
 
 
 
 
4 * On file listing pages, sort filenames using the "uintnocase" collating
5 sequence, so that filenames that contains embedded integers sort in
6 numeric order even if they contain a different number of digits.
7 (Example: "fossil_80_..." comes before "fossil_100.png" in the
8 [/dir?ci=92fd091703a28c07&name=skins/blitz|/skins/blitz] directory listing.)
@@ -31,10 +41,15 @@
31 * Reimplemented the [/pikchrshow] app to use a WebAssembly build of
32 pikchr so that it can render pikchrs on the client instead of requiring
33 a server round-trip.
34 * Add the [/help?cmd=email-listid|email-listid setting]. If set, it is
35 used as the List-ID header for all outbound notification emails.
 
 
 
 
 
36
37 <h2 id='v2_18'>Changes for version 2.18 (2022-02-23)</h2>
38 * Added support for [./ssl-server.md|SSL/TLS server mode] for commands
39 like "[/help?cmd=server|fossil server]" and "[/help?cmd=http|fossil http]"
40 * The new [/help?cmd=cherry-pick|cherry-pick command] is an alias for
@@ -1725,11 +1740,11 @@
1725 * Fix the tarball generator to work with very log pathnames
1726
1727 <h2>Changes For Version 1.18 (2011-07-14)</h2>
1728 * Added this Change Log
1729 * Added sequential version numbering
1730 * Added a optional configure script - the Makefile still works for most
1731 systems.
1732 * Improvements to the "annotate" algorithm: only search primary
1733 ancestors and ignore branches.
1734 * Update the "scrub" command to remove traces of login-groups and
1735 subrepositories.
1736
--- www/changes.wiki
+++ www/changes.wiki
@@ -1,8 +1,18 @@
1 <title>Change Log</title>
2
3 <h2 id='v2_20'>Changes for version 2.20 (pending)</h2>
4 * Added the [/help?cmd=chat-timeline-user|chat-timeline-user setting]. If
5 it is not an empty string, then any changes that would appear on the timeline
6 are announced in [./chat.md|the chat room].
7 * The /unsubscribe page now requests comformation. [./alerts.md|Email notifications]
8 now contain only an "Unsubscribe" link, and not a link to subscription management.
9 * More elements of the /info page are now inside of an accordion.
10 * Replace the <tt>--dryrun</tt> flag with <tt>--dry-run</tt> in all
11 commands which still used the former name, for consistency.
12
13 <h2 id='v2_19'>Changes for version 2.19 (2022-07-21)</h2>
14 * On file listing pages, sort filenames using the "uintnocase" collating
15 sequence, so that filenames that contains embedded integers sort in
16 numeric order even if they contain a different number of digits.
17 (Example: "fossil_80_..." comes before "fossil_100.png" in the
18 [/dir?ci=92fd091703a28c07&name=skins/blitz|/skins/blitz] directory listing.)
@@ -31,10 +41,15 @@
41 * Reimplemented the [/pikchrshow] app to use a WebAssembly build of
42 pikchr so that it can render pikchrs on the client instead of requiring
43 a server round-trip.
44 * Add the [/help?cmd=email-listid|email-listid setting]. If set, it is
45 used as the List-ID header for all outbound notification emails.
46 * Add the "--branch" option to the "[/help?cmd=timeline|timeline]" command
47 to restrict the displayed items to a specific branch.
48 * Add the "--versions" option to "[/help?cmd=diff|fossil diff]"
49 to display details about the compared versions into the patch header.
50 * Numerous other minor enhancements.
51
52 <h2 id='v2_18'>Changes for version 2.18 (2022-02-23)</h2>
53 * Added support for [./ssl-server.md|SSL/TLS server mode] for commands
54 like "[/help?cmd=server|fossil server]" and "[/help?cmd=http|fossil http]"
55 * The new [/help?cmd=cherry-pick|cherry-pick command] is an alias for
@@ -1725,11 +1740,11 @@
1740 * Fix the tarball generator to work with very log pathnames
1741
1742 <h2>Changes For Version 1.18 (2011-07-14)</h2>
1743 * Added this Change Log
1744 * Added sequential version numbering
1745 * Added an optional configure script - the Makefile still works for most
1746 systems.
1747 * Improvements to the "annotate" algorithm: only search primary
1748 ancestors and ignore branches.
1749 * Update the "scrub" command to remove traces of login-groups and
1750 subrepositories.
1751
+12
--- www/chat.md
+++ www/chat.md
@@ -153,10 +153,22 @@
153153
--message 'MESSAGE TEXT' --file file-to-attach.txt
154154
~~~~
155155
156156
Substitute the appropriate project URL, robot account
157157
name and password, message text and file attachment, of course.
158
+
159
+### <a id="chat-robot"></a> Chat Messages For Timeline Events
160
+
161
+If the [chat-timeline-user setting](/help?cmd=chat-timeline-user) is not a
162
+empty string, then any change to the repository that would normally result
163
+in a new timeline entry is announced in the chatroom. The announcement
164
+appears to come from a user whose name is given by the chat-timeline-user
165
+setting.
166
+
167
+This mechanism is similar to [email notification](./alerts.md) except that
168
+the notification is sent via chat instead of via email.
169
+
158170
159171
## Implementation Details
160172
161173
*You do not need to understand how Fossil chat works in order to use it.
162174
But many developers prefer to know how their tools work.
163175
164176
ADDED www/containers.md
--- www/chat.md
+++ www/chat.md
@@ -153,10 +153,22 @@
153 --message 'MESSAGE TEXT' --file file-to-attach.txt
154 ~~~~
155
156 Substitute the appropriate project URL, robot account
157 name and password, message text and file attachment, of course.
 
 
 
 
 
 
 
 
 
 
 
 
158
159 ## Implementation Details
160
161 *You do not need to understand how Fossil chat works in order to use it.
162 But many developers prefer to know how their tools work.
163
164 DDED www/containers.md
--- www/chat.md
+++ www/chat.md
@@ -153,10 +153,22 @@
153 --message 'MESSAGE TEXT' --file file-to-attach.txt
154 ~~~~
155
156 Substitute the appropriate project URL, robot account
157 name and password, message text and file attachment, of course.
158
159 ### <a id="chat-robot"></a> Chat Messages For Timeline Events
160
161 If the [chat-timeline-user setting](/help?cmd=chat-timeline-user) is not a
162 empty string, then any change to the repository that would normally result
163 in a new timeline entry is announced in the chatroom. The announcement
164 appears to come from a user whose name is given by the chat-timeline-user
165 setting.
166
167 This mechanism is similar to [email notification](./alerts.md) except that
168 the notification is sent via chat instead of via email.
169
170
171 ## Implementation Details
172
173 *You do not need to understand how Fossil chat works in order to use it.
174 But many developers prefer to know how their tools work.
175
176 DDED www/containers.md
--- a/www/containers.md
+++ b/www/containers.md
@@ -0,0 +1,795 @@
1
+surprisingly difficulte remains the same as in the distroless Python example
2
+because even AlpineN@2yP,1R: way we set up core Linux
3
+directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot?
4
+
5
+A potentially surprising feature of this container is that it runs
6
+Fossil as root. Sin
7
+to kick in, and a Docker container is a type of über-jail already, you
8
+may be wondering why we bother. Instead, why not either:
9
+
10
+* run f][whatso it starts Fossil as
11
+ that user instead
12
+
13
+The reason is, although this container is quite stripped-down by today’s
14
+standards, it’s based on the [surprising(This author made a
15
+ that were less
16
+powerful than this container.) If someone ever figured out how to make a
17
+Fossil binary execute arbitrary commands on the host or to open up a
18
+remote shell, the power available to them at that point would make it
19
+likely that they’d be able to island-hop from there into the rest of
20
+your network. That power is there for you as the system administrator
21
+alone, to let you inspectquire them.
22
+ Altour build
23
+ process leaves out all the BusyBox utilities that require them.
24
+ Although that set includes common tools like `ping`, we It also strips
25
+out all but the default and darkmode skins to save executable space foresee no
26
+ use that or any of these other elided utilities
27
+ — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
28
+fetched in the build step. To get the latest-and-greatest of everything,
29
+you could say\
30
+ trunk \
31
+ --build-arg BBXVER=master .
32
+```
33
+
34
+(But don’t, for reasons we will getwR ship was created with and
35
+tested R
36
+ific stable release, tharun`”.) ration
37
+settings iput a line like this into the first stage:
38
+
39
+```
40
+ COPY containers/os-releaseR/etc/os-release
41
+```
42
+
43
+That will let you produce a `systemd` “m” This is generally better for
44
+security, but there’s something you need to be aware of: each user has
45
+their own local. Let’s say you’re following, so even though it did build the image, you
46
+can’t create the actual container from that image since that needs to be
47
+done as root.
48
+
49
+The simple way to deal with this is to bounce the container through a
50
+registry that both users can see, such as [Docker
51
+Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest
52
+ $ podman image push mydockername/fossil:latest
53
+```
54
+
55
+That will push the image up to your accound
56
+ process leaves out all the BusyBox utilities that require them.
57
+ Although that set includes common tools like `ping`, we foresee no
58
+ use that or any of these other elided utilities
59
+ — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
60
+fetched in the build step. To get the latest-and-greatest of everything,
61
+you could say\
62
+ trunk \
63
+ --build-arg BBXVER=master .
64
+```
65
+
66
+(But don’t, for reasons we will getwe ship was created with and
67
+tested against a specific stable release, that’s the version we pull by
68
+default. It does try to merge the defaults for any new configuration
69
+settings into the stock set, but since it’s possible this will fail, we
70
+don’t blindly update the BusyBox version merely because a new release
71
+came out. Someone needs to get around to vetting it against our stock
72
+configuration first.
73
+
74
+As for Fossil, it defaults to fetching the same version as the checkout
75
+you’re running the build command from, based on checkin ID. You could
76
+use this to get a release build, for instance\
77
+ our build
78
+ process leaves out all the BusyBox utilities that require them.
79
+ Although that set includes common tools like `ping`, we foresee no
80
+ use that or any of these other elided utilities
81
+ — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
82
+fetched in the build step. To get the latest-and-greatest of everything,
83
+you could say\
84
+ trunk \
85
+ it lets you build on a local system that might be a lot faster
86
+than your remote one, as when the remote is a small VPS. Even with the
87
+overhead of schlepping container images across the Internet, it can be a
88
+net win in terms of build time.
89
+
90
+Another oddity compared to DockerY@760,6: same
91
+h@76d,M:. The changes distill3WC@78M,3SS6XH;One way to can remove the installation of `busybox-static` in STAGE 1 since
92
+Alpine is already based on BusyBox.(^We can’t do “`FROM busybox`” since
93
+we need `apk` in this new second stage. Although this means we end up
94
+with back-to-back Alpine stages, it isn’t redundant; the second one
95
+starts fresh, allowing us to copy in only what we absolutely need from
96
+AWKbecausewe haveRelative to, the change from “`alpmeans we have no BusyBox environment to execute
97
+the `RUN` command with, so we have to copy the `busybox.static` binary
98
+in from STAGE 1 and install
99
+the stock does.(^This is the main reason we change `USER`
100
+temporarily to `root` here.) There are a few other steps required to
101
+avoid causing a conflict between our previously bare-bonerename
102
+il binary executl popular, we have
103
+that ijust a suitable
104
+. Because this will conflict with the
105
+bare-bones “`os`” layer we create, thePython the `RUN`
106
+ in from
107
+ the stock
108
+ temporarily to
109
+`root` here.) The compensating bonus is huge: we don’t leave a package
110
+ image, waiting to be abusedhow much the über-jail nature of
111
+c run yous can save you when
112
+like this. For instance, you might have enabled Fossil’s [risky TH1 docs
113
+feature][th1docrisk] along with the Tcl integration feature, which
114
+effectively gives anyone with check-in rights on your repo the ability
115
+to run arbitrary Tcl code on the host when that document is rendered.
116
+The container layer should stop that script
117
+on the host
118
+namespace, but it *can* still make network connect,
119
+so there is at least a *hope* that WAL will work properly across that
120
+boundary. The success of the scheme depends on the `mmap()` and shared
121
+memory system calls being coordinated properly by the OS kernel the two
122
+worlde network cAt some point, someone should perform tests in the hopes of *failing* to
123
+create database corruption in this scenario.
124
+
125
+Why the tortured grammar? Because you cannot prove a negative, being in
126
+this case “SQLite will not corrupt the database in WAL mode if there’s a
127
+container barrier in the way.” All you can prove is that a given test
128
+didn’t cause corruption. With enough tests of sufficient power, you can
129
+begin to make definitive statements, but even then, science is always
130
+provisional, awaiting a single disproving with the Tcl ints give the sysadmin freedom to impose barriers between
131
+the two worlds, so even if you convince yourself that WAL mode is safe
132
+in a given setup, it’s possible to configure it to fail. As if that
133
+weren’t enough, differentg with the Tcl ints have different defaults,
134
+including details like whether shared memory is truly shared between
135
+the host and its containers.
136
+
137
+Until someone gets around to establishing this ground truth and scoping
138
+its applicable range` with:
139
+
140
+ FROM grc.io/distroless/python3-debian11
141
+
142
+Another case
143
+
144
+
145
+Method 2to
146
+ bind-mounted
147
+ `netstat`, `tYou our build
148
+ process leaves out all the BusyBox utilities that require them.
149
+ Although that set includes common tools like `ping`, we
150
+
151
+ R@2VU,5: RUNN@2bU,1Q:
152
+
153
+Everything else remains the same as in the distroless Python example
154
+because even AlpineN@2yP,1R: way we set up core Linux
155
+directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distroless7Xz@3Z4,qTTBs;exec -it -u fossil fossil sh
156
+```s to get a release build, for instance\
157
+ alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the
158
+`docker` command and everything that sits behind it, some of the tool’s
159
+desis run, as compared to
160
+using Docker.
161
+
162
+The most important of these is that, by default, Podman wants to build
163
+and run your container “[rootless].” This is generally better for
164
+security, but there’s something you need to be aware of: each user has
165
+their own local. Let’s say you’re following, so even though it did build the image, you
166
+can’t create the actual container from that image since that needs to be
167
+done as root.
168
+
169
+The simple way to deal with this is to bounce the container through a
170
+registry that both users can see, such as [Docker
171
+Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest
172
+ $ podman image push mydockername/fossil:latest
173
+```
174
+
175
+That will push the image up to your accound
176
+ process leaves out all the BusyBox utilities that require them.
177
+ Although that set includes common tools like `ping`, we foresee no
178
+ use that or any of these other elided utilities
179
+ — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
180
+fetched in the build step. To get the latest-and-greatest of everything,
181
+you could say\
182
+ trunk \
183
+ --build-arg BBXVER=master .
184
+```
185
+
186
+(But don’t, for reasons we will getwe ship was created with and
187
+tested against a specific stable release, that’s the version we pull by
188
+default. It does try to merge the defaults for any new configuration
189
+settings into the stock set, but since it’s possible this will fail, we
190
+don’t blindly update the BusyBox version merely because a new release
191
+came out. Someone needs to get around to vetting it against our stock
192
+configuration first.
193
+
194
+As for Fossil, it defaults to fetching the same version as the checkout
195
+you’re running the build command from, based on checkin ID. You could
196
+use this to get a release build, for instance\
197
+ our build
198
+ process leaves out all the BusyBox utilities that require them.
199
+ Although that set includes common tools like `ping`, we foresee no
200
+ use that or any of these other elijail��s [risky TH1 docsh user has
201
+their own local. Let’sjailthe image, you
202
+can’t create the actual container from that image since that needs to be
203
+done as root.
204
+
205
+The simple way to deal with this is to bounce the container through a
206
+registry that both users can see, such as [Docker
207
+Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest
208
+ $ podman image push mydockername/fossil:latest
209
+```
210
+
211
+That will push the image up to your accound
212
+ process leaves out all the BusyBox utilities that require them.
213
+ Although that set includes common tools like `ping`, we foresee no
214
+ use that or any of these other elided utilities
215
+ — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
216
+fetched in the build step. To get the latest-and-greatest of everything,
217
+you could say\
218
+ trunk \
219
+ --build-arg BBXVER=master .
220
+```
221
+
222
+(But don’t, for reasons we will getwe ship was created with and
223
+tested against a specific stable release, that’s the version we pull by
224
+default. It does try to merge the defaults for any new configuration
225
+settings into the stock set, but since it’s possible this will fail, we
226
+don’t blindly update the BusyBox version merely because a new release
227
+came out. Someone needs to get around to vetting it against our stock
228
+configuration first.
229
+
230
+As for Fossil, it defaults to fetching the same version as the checkout
231
+you’re running the build command from, based on checkin ID. You could
232
+use this to get a release build, for instance\
233
+ our build
234
+ process leaves out all the BusyBox utilities that require them.
235
+ Although that set includes common tools like `ping`, we foresee no
236
+ use that or any of these other elided utilities
237
+ — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
238
+fetched in the build step. To get the latest-and-greatest of everything,
239
+you could say\
240
+ trunk \
241
+ it lets you build on a local system that might be a lot faster
242
+than your remote one, as when the remote is a small VPjailAlthough that set includes common tools like `ping`, we foresee no
243
+ use that or any of these other elided utilities
244
+ — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
245
+fetched in the build step. To get the latest-and-greatest of everything,
246
+you could say\
247
+ trunk \
248
+ --build-arg BBXVER=master .
249
+```
250
+
251
+(But don’t, for reasons we will getwe ship was created with and
252
+tested against a specific stable release, that’s the version we pull by
253
+default. It does try to merge the defaults for any new configuration
254
+settings into the stock set, but since it’s possible this will fail, we
255
+don’t blindly update the BusyBox version merely because a new release
256
+came out. Someone needs to get around to vetting it against our stock
257
+configuration first.
258
+
259
+As for Fossil, it defaults to fetching the same version as the checkout
260
+you’re running the build command from, based on checkin ID. You could
261
+use this to get a release build, for instance\
262
+ alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the
263
+`docker` command and everything that sits behind it, some of the tool’s
264
+desis run, as compared to
265
+using Docker.
266
+
267
+The most important of thesour ��s [risky TH1 docs
268
+feature][th1docrisk] along with the Tcl integration feature, which
269
+effectively gives anyone with check-in rights on your repo the ability
270
+to run arbitrary Tcl code on the host when that document is rendered.
271
+The container layer should stop that script
272
+on the host
273
+namespace, but it *can* still make network connections, modify the repo
274
+, and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into
275
+one of s. Because this will
276
+
277
+complicated. Essentially, you replace everything in STAGE 2 and 3 inside
278
+the `Dockerfile` with:
279
+
280
+ FROM grc.io/distroless/python3-debian11
281
+
282
+Another case
283
+
284
+
285
+Method 2to
286
+ bind-mounted
287
+ `netstat`, `tYou our build
288
+ process leaves out all the BusyBox utilities that require them.
289
+ Although that set includes common tools like `ping`, we
290
+
291
+ R@2VU,5: RUNN@2bU,1Q:
292
+
293
+Everything else remains the same as in the distroless Python example
294
+because even AlpineN@2yP,1R: way we set up core Linux
295
+directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distroless7Xz@3Z4,qTTBs; bonus is huge: we don’t leave a package
296
+ image, waiting to be abusedhow much the über-jail nature of
297
+c run yous can save you when
298
+like this. For instance, you might have enabled Fossil’s [risky TH1 docs
299
+feature][th1docrisk] along with the Tcl integration feature, which
300
+effectively gives anyone with check-in rights on your repo the ability
301
+to run arbitrary Tcl code on the hThe first configurationtainer is that it runs
302
+Fossil as root. Sin
303
+to kick in, and a Docker container is a type of über-jail already, you
304
+may be wondering why we bother. Instead, why not either:
305
+
306
+* run nojail` to skip the internal chroot; or
307
+* set “`USER fossil`” inbills itself][whatso it starts Fossil as
308
+ that user instead
309
+
310
+The reason is, although this container is quite stripped-down by today’s
311
+standards, it’s based on the [surprising(This author made a
312
+ that were less
313
+powerful than this container.) If someone ever figured out how to make a
314
+Fossil binary execute arbitrary commands on the host or to open up a
315
+remote shell, the power available to them at that point would make it
316
+likely that they’d be able to island-hop from there into the rest of
317
+your network. That power is there for you as the system administrator
318
+alone, to let you inspectinto
319
+a “machine,” as `systemd` calls it. The easiest method ishese other elided utilitiile/Dockerfile)we ship was created with and
320
+tested against a specific stable release, that’s the version we pull by
321
+default. It does try to merge theour build
322
+ process leave`tYou our build
323
+ process leaves out all the BusyBox utilities that require them.
324
+ Although that set includes common tools like `ping`, we
325
+
326
+ R@2VU,5: RUNN@2bU,1Q:
327
+
328
+Everything else remains the same as in the distroless Python example
329
+because even AlpineN@2yP,1R: way we set up core Linux
330
+directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot?
331
+
332
+A potentially surprising feature of this container is that it runs
333
+Fossil as root. Sin
334
+to kick in, and a Docker container is a type of über-jail already, you
335
+may be wondering why we bother. Instead, why not either:
336
+
337
+* run nojail` to skip the internal chroot; or
338
+* set “`USER fossil`” inbills itself][whatso it starts Fossil as
339
+ that user instead
340
+
341
+The reason is, although this container is quite stripped-down by today’s
342
+standards, it’s based on the [surprising(This author made a
343
+ that were less
344
+powerful than this container.) If someone ever figured out how to make a
345
+Fossil binary execute arbitrary commands on the host or to open up a
346
+remote shell, the power available to them at that point would make it
347
+likely that they’d be able to island-hop from there into the rest of
348
+your network. That power is thercess leaves out alainst a specific stable release, that’s the version we pull by
349
+default. It does try to merge the defaults for any new configuration
350
+settiy new configuration
351
+settings i:noja
352
+
353
+A potentially surprissurprisingly difficulte remains the same as in the distroless Python example
354
+because even AlpineN@2yP,1R: way we set up core Linux
355
+directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot?
356
+
357
+A potentially surprising feature of this container is that it runs
358
+Fossil as root. Sin
359
+to kick in, and a Docker container is a type of über-jail already, you
360
+may be wondering why we bother. Instead, why not either:
361
+
362
+* run f][whatso it starts Fossil as
363
+ that user instead
364
+
365
+The reason is, although this container is quite stripped-down by today’s
366
+standards, it’s base4 on the [surprising(This auth and packed with [UPX].)
367
+
368
+[U//upx.github.io/6gF@488,2Ne3im;ofetgly difficulte remains the same as in the distroless Python example
369
+because even AlpineN@2yP,1R: way we set up core Linux
370
+directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot?
371
+
372
+A potentially surprisinculte ripped-down by today’s
373
+standards, it’s based on the [surprising(This author made a
374
+ that were less
375
+powerful than this container.) If someone ever figured out how to make a
376
+Fossil binary execute arbitrary commands on the host or to open up a
377
+remote shell, the power available to them at that point would make it
378
+likely that they’d be able to island-hop from there into the rest of
379
+your network. That power is there for you as the system administrator
380
+alone, to let you inspectquire them.
381
+ Altour build
382
+ process leaves out all the BusyBox utilities that require them.
383
+ Although that set includes common tools like `ping`, we foresee no
384
+ use that or any of these other elided utilities
385
+ — `ether-wake`, `netstat`, `tYou can override The most
386
+common reason to override this is to get a release versionns of Fossil and Bstep. To get the latest-19 .
387
+```
388
+
389
+It’s bestguration
390
+settings iput a line lik rather thanversion we pull by
391
+default. It dobecauss into the first stage:
392
+
393
+```
394
+ COPY containers/os-release /etc/os-release
395
+```
396
+
397
+That will let you pway to can remove the installation of `busybox-static` in STAGE 1 since
398
+Alpine is already based on BusyBox.(^We can’t do “`FURL hasn’t changed, if you hav Alpine stages, it isn’t redundant; the second one
399
+starts fresh, allowing us to copy in only what we absolutely need from
400
+AWKbecausewe haveRelative to, the change from “`alpmeans we have no BusyBox environment to execute
401
+the `RUN` command with, so we have to copy the `busybox.static` binary
402
+in from STAGE 1 and install
403
+the stock does.(^This is the main reason we change `USER`
404
+temporarily to `root` here.) There are a few other steps required to
405
+avoid causing a conflict between our previously bare-bones “OS” layer
406
+and what the is hassleinTcl popular, we have
407
+that intovia a suitable
408
+. Because this will conflict with the
409
+bare-bones “`os`” laye(./server/)create, thePython the `RUN`
410
+ in from
411
+ the stock
412
+ temporarily to
413
+`root` here.) The compensating bonus is huge: we don’t leave a package
414
+ image, waiting to be abusedhow much the über-jail nature of
415
+c run yous can save you when
416
+like this. For instance, you might have enabled Fossil’s [risky TH1 docs
417
+feature][th1docrisk] along with the Tcl integration feature, which
418
+effectively gives anyone with check-in rights on your repo the ability
419
+to run arbitrary Tcl code on the host when that document is rendered.
420
+The container layer should stop that script
421
+on the host
422
+namespace, but it *can* still make network connections, modify the repo
423
+, and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into
424
+one of s. Because this will
425
+
426
+complicated. Essentially, you replace everything in STAGE 2 and 3 inside
427
+the `Dockerfile` with:
428
+
429
+ FROM grc.io/distroless/python3-debian11
430
+
431
+Another case
432
+
433
+
434
+Method 2to
435
+ bind-mounted
436
+ `netstat`, `tYou our build
437
+ process leaves out all the BusyBox utilities that require them.
438
+ Although that set includes common tools like `ping`, we
439
+
440
+ R@2VU,5: RUNN@2bU,1Q:
441
+
442
+Everything else remains the same as in the distroless Python example
443
+because even AlpineN@2yP,1R: way we set up core Linux
444
+directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distroless7Xz@3Z4,qTTBs;exec -it -u fossil fossil sh
445
+```s to get a release build, for instance\
446
+ alternativeAlthough Podman [bills itself][whatis] as a drop-in replachassleinTcl popular, we have
447
+that intovia a suitable
448
+. Because this will conflict with the
449
+bare-bones “`os`” layer we create, thePython the `RUN`
450
+ in from
451
+ the stock
452
+ temporarily to
453
+`root` here.) The compensating bonus is huge: we don’t leave a package
454
+ image, waiting to be abusedhow much the über-jail nature of
455
+c run yous can save you when
456
+like this. For instance, you might have enabled Fossil’s [risky TH1 docs
457
+feature][th1docrisk] along with the Tcl integration feature, which
458
+effectively gives anyone with check-in rights on your repo the ability
459
+to run arbitrary Tcl code on the host when that document is rendered.
460
+The container layer should stop that script
461
+on the host
462
+namespace, but it *can* still make network connections, modify the repo
463
+, and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into
464
+one of s. Because this will
465
+
466
+complicated. Essentially, you replace everything in STAGE 2 and 3 inside
467
+the `Dockerfile` with:
468
+
469
+ FROM grc.io/distroless/python3-debian11
470
+
471
+Another case
472
+
473
+
474
+Method 2to
475
+ bind-mounted
476
+ `netstat`, `tYou our build
477
+ process leaves out all the BusyBox utilities that require them.
478
+ Although that set includes common tools like `ping`, we
479
+
480
+ R@2VU,5: RUNN@2bU,1Q:
481
+
482
+Everything else remains the same as in the distroless Python example
483
+because even AlpineN@2yP,1R: way we set up core Linux
484
+directories like `/etc` and `/tmp` in the absence of any OS imageAs@3it’s about a quarterecause a new release
485
+came , or half
486
+that of the “full” distribution of `nerdctl` and all its dependenciesround to vetting it against our stock
487
+configuration first.
488
+
489
+As for Fossil, it defaults to fetching the same version as the checkout
490
+you’re running the build command from, based on checkin ID. You could
491
+use this to get a release build, for instance\
492
+ our build
493
+ process leaves out all the BusyBox utilities that require them.
494
+ Although that set includes common tools like `ping`, we foresee no
495
+ use that or any of these other elijail��s [risky TH1 docsh user has
496
+their own local. Let’sjailthe image, you
497
+can’t create the actual container from that image since that needs to be
498
+done as root.
499
+
500
+The simple way to deal with this is to bounce the container through a
501
+registry that both users can see, such as [Docker
502
+Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest
503
+ $ podman image push mydockername/fossil:latest
504
+```
505
+
506
+That will push the image up to your accound
507
+ process leaves out all the BusyBox utilities that require them.
508
+ Although that set includes common tools like `ping`, we foresee no
509
+ use that or any of these other elided utilities
510
+ — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
511
+fetched in the build step. To get the latest-and-greatest of everything,
512
+you could say\
513
+ trunk \
514
+ --build-arg BBXVER=master .
515
+```
516
+
517
+(But don’t, for reasons we will getwe ship was created with and
518
+tested against a specific stable release, that’s the version we pull by
519
+default. It does try to merge the defaults for any new configuration
520
+settings into the stock set, but since it’s possible this will fail, we
521
+don’t blindly update the BusyBox version merely because a new release
522
+came out. Someone needs to get around to vetting it against our stock
523
+configuration first.
524
+
525
+As for Fossil, it defaults to fetching the same version as the checkout
526
+you’re running the build command from, based on checkin ID. You could
527
+use this to get a release build, for instance\
528
+ our build
529
+ process leaves out all the BusyBox utilities that require them.
530
+ Although that set includes common tools like `ping`, we foresee no
531
+ use that or any of these other elided utilities
532
+ — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
533
+fetched in the build step. To get the latest-and-greatest of everything,
534
+you could say\
535
+ trunk \
536
+ it lets you build on a local system that might be a lot faster
537
+than your remote one, as when the remote is a small VPjailAlthough that set includes common tools like `ping`, we foresee no
538
+ use that or any of these other elided utilities
539
+ — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
540
+fetched in the build step. To get the latest-and-greatest of everything,
541
+you could say\
542
+ trunk \
543
+ --build-arg BBXVER=master .
544
+```
545
+
546
+(But don’t, for reasons we will getwe ship was created with and
547
+tested against a specific stable release, that’s the version we pull by
548
+default. It does try to merge the defaults for any new configuration
549
+settings into the stock set, but since it’s possible this will fail, we
550
+don’t blindly update the BusyBox version merely because a new release
551
+came out. Someone needs to get around to vetting it against our stock
552
+configuration first.
553
+
554
+As for Fossil, it defaults to fetching the same version as the checkout
555
+you’re running the build command from, based on checkin ID. You could
556
+use this to get a release build, for instance\
557
+ alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the
558
+`docker` command and everything that sits behind it, some of the tool’s
559
+desis run, as compared to
560
+using Docker.
561
+
562
+The most important of thesour ��s [risky TH1 docs
563
+feature][th1docrisk] along with the Tcl integration feature, which
564
+effectively gives anyone with check-in rights on your repo the ability
565
+to run arbitrary Tcl code on the host when that document is rendered.
566
+The container layer should stop that script
567
+on the host
568
+namespace, but it *can* still make network connections, modify the repo
569
+, and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into
570
+one of s. Because this will
571
+
572
+complicated. Essentially, you replace everything in STAGE 2 and 3 inside
573
+the `Dockerfile` with:
574
+
575
+ FROM grc.io/distroless/python3-debian11
576
+
577
+Another case
578
+
579
+
580
+Method 2to
581
+ bind-mounted
582
+ `netstat`, `tYou our build
583
+ process leaves out all the BusyBox utilities that require them.
584
+ Although that set includes common tools like `ping`, we
585
+
586
+ R@2VU,5: RUNN@2bU,1Q:
587
+
588
+Everythin (g else remains the same as in the distroless Pytrhon example
589
+because even AlpineN@2yP,1R: way we set up core Linux
590
+directories like `/etc` and `/)”, as systemdIt’s important that the name of the machine you create &mdash;in this example &mdash; matches tason is, although tsand it will contain. For one[SCGI proxying via nginx][DNT]. For
591
+other use cases, see our collection of [Fossil server configuration
592
+guides][srv], then adjust the command to your local needs.
593
+For another, you will likely have to adjust the `
594
+in the command.
595
+
596
+W.
597
+
598
+S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the
599
+. Thus,-rune reason is, although this containesurprisingly Fossil server configuration
600
+guides][srv], then adjust the command to your local needs.
601
+For another, you will likely have to adjust the `
602
+in the command.
603
+
604
+W.
605
+
606
+S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the
607
+. Thus,Copy the container name from the first step to the second. Yours will
608
+almost certainly be named after a different Fossil commit ID.en adjust the command to your local needs.
609
+For another, you will likely have to adjust the `
610
+in the command.
611
+
612
+W.
613
+
614
+S,ngly diffiemains the same barebones"></a>Bahas no option for installneeds for so, the
615
+. Thus,virtual net
616
+ it wants to hide the service entirely.
617
+
618
+ Another way to put this is thatthing* of what pped-down by today’s
619
+s` does
620
+ despite their superficial similarities.
621
+
622
+ For this container, it doesn’t much matter, since it exposes
623
+ only a single port, and we do want that one port exposed, one way
624
+ or another. Beyond that, weby today’s
625
+standards, it’surprisingly difficulte remains the same as in the distroless Python example
626
+because even AlpineN@2yP,1R: way we set up core Linux
627
+directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot?
628
+
629
+A potentially surprising feature of this container is that it runs
630
+Fossil as root. Sin
631
+to kick in, and a Docker container is a type of über-jail already, you
632
+may be wondering why we bother.I:
633
+
634
+1. `systemd-nspawn` works best with `machinectl`, but if you haven’t
635
+ got `btrfs` available, you run into [trouble](#nspawn-rhel).
636
+
637
+2. O@760,6: same
638
+h@76d
639
+ a strip
640
+ image, causing ly difficulte remains the same as in the distroless Python exampleemains the same as in the distroless Python example
641
+because even Al tutorial][medtut].)
642
+
643
+3. We disable the “private networking” feature since the whole
644
+ point of this container is to expose a network service to the
645
+ public, one way or another. If you do things the way the defaults
646
+ (and thus the official docs) expect, you must push through
647
+ [a whole lot of complexity][ndcmp] to re-expose this single
648
+ network port. That complexity is justified only if your service
649
+ is itself complex, having both privatyou still have options for
650
+running containers that are considerably slimmer, at a high cost to
651
+administration complexity and loss of features.
652
+
653
+Part of the OCI standard is the notion of a “bundle,” being a consistent
654
+way to present a pre-built and configured container to the runtime.
655
+Essentially, it consists of a directory containing a `config.json` file
656
+and a `rootfs/` subdirectory containing the root filesystem image. Many
657
+tools can produce these for you. We’ll show only one method in the first
658
+section below, then reuse that in the following sections.
659
+
660
+
661
+#### 6.3.1 <a id="runc"></a>`runc`
662
+
663
+We mentioned `runc` [above](#nerdctl), but it’s possible to use it
664
+standalone, without `containerd` or its CLI frontend `nerdctl`. You also
665
+lose the build engine, intelligent image layer sharing, image registry
666
+connections, and much more. The plus side is that `runc` alone is
667
+18 MiB.
668
+
669
+Using it without stable release, that’s the version we pull by
670
+default. It does try to merge the defaults for any new configuration
671
+settings into the stock set, but since it’s possible this will fail, we
672
+don’t blindly update the BusyBox version merely because a new release
673
+came out. Someone needs to get around to vetting it against our stock
674
+configuration first.
675
+
676
+As for Fossil, it defaults to fetching the same version as the checkout
677
+you’re running the build command from, based on checkin ID. You could
678
+use this to get a release build, for instance\
679
+ our build
680
+ process leaves out all the BusyBox utilities that require them.
681
+ Although that set includes common tools like `ping`, we foresee no
682
+ use that or any of these other elided utilities
683
+ — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
684
+fetched in the build step. To get the latest-and-greatest of everything,
685
+you could say\
686
+ trunk \
687
+ it lets you build on a local system that might be a lot faster
688
+than your remote one, as when the remote is a small VPjailAlthough that set includes common tools like `ping`, we foresee no
689
+ use that or any of these other elided utilities
690
+ — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
691
+fetched in the build step. To get the latest-and-greatest of everything,
692
+you could say\
693
+ trunk \
694
+ --build-arg BBXVER=master .
695
+```
696
+
697
+(But don’t, for reasons we will getwe ship was created with and
698
+tested against a specific stable release, that’s the version we pull by
699
+default. It does try to merge the defaults for any new configuration
700
+settings into the stock set, but since it’s possible this will fail, we
701
+don’t blindly update the BusyBox version merely because a new release
702
+came out. Someone needs to get around to vetting it against our stock
703
+configuration first.
704
+
705
+As for Fossil, it defaults to fetching the same version as the checkout
706
+you’re running the build command from, based on checkin ID. You could
707
+use this to get a release build, for instance\
708
+ alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the
709
+`docker` command and everything that sits behind it, some of the tool’s
710
+desis run, as compared to
711
+using Docker.
712
+
713
+The most important of thesour ��s [risky TH1 docs
714
+feature][th1docrisk] along with the Tcl integration feature, which
715
+effectively gives anyone with check-in rights on your repo the ability
716
+to run arbitrary Tcl code on the host when that document is rendered.
717
+The container layer should stop that script
718
+on the host
719
+namespace, but it *can* still make network connections, modify the repo
720
+, and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into
721
+one of s. Because this will
722
+
723
+complicated. Essentially, you replace everything in STAGE 2 and 3 inside
724
+the `Dockerfile` with:
725
+
726
+ FROM grc.io/distroless/python3-debian11
727
+
728
+Another case
729
+
730
+
731
+Method 2to
732
+ bind-mounted
733
+ `netstat`, `tYou our build
734
+ process leaves out all the BusyBox utilities that require them.
735
+ Although that set includes common tools like `ping`, we
736
+
737
+ R@2VU,5: RUNN@2bU,1Q:
738
+
739
+Everythin (g else remains the same as in the distroless Pytrhon example
740
+because even AlpineN@2yP,1R: way we set up core Linux
741
+directories like `/etc` and `/)”, as systemdIt’s important that the name of the machine you create &mdash;in this example &mdash; matches tason is, although tsand it will contain. For one[SCGI proxying via nginx][DNT]. For
742
+other use cases, see our collection of [Fossil server configuration
743
+guides][srv], then adjust the command to your local needs.
744
+For another, you will likely have to adjust the `
745
+in the command.
746
+
747
+W.
748
+
749
+S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the
750
+. Thus,-rune reason is, although this containesurprisingly Fossil server configuration
751
+guides][srv], then adjust the command to your local needs.
752
+For another, you will likely have to adjust the `
753
+in the command.
754
+
755
+W.
756
+
757
+S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the
758
+. Thus,Copy the container name from the first step to the second. Yours will
759
+almost certainly be named after a different Fossil commit ID.en adjust the command to your local needs.
760
+For another, you will likely have to adjust the `
761
+in the command.
762
+
763
+W.
764
+
765
+S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the
766
+. Thus,virtual net
767
+ it wants to hide the service entirely.
768
+
769
+ Another way to put this is thatthing* of what pped-down by today’s
770
+s` does
771
+ despite their superficial similarities.
772
+
773
+ For this container, it doesn’t much matter, since it exposes
774
+ only a single port, and we do want that one port exposed, one way
775
+ or another. Beyond that, weby today’s
776
+standards, it’surprisingly difficulte remains the same as in the distroless Python example
777
+because even AlpineN@2yP,1R: way we set up core Linux
778
+directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot?
779
+
780
+A potentially surprising feature of this container is that it runs
781
+Fossil as root. Sin
782
+to kick in, and a Docker container is a type of über-jail already, you
783
+may be wondering why we bother.I:
784
+
785
+1. `systemd-nspawn` works best with `machinectl`, but if you haven’t
786
+ , you’ll get the old versionstages, it isn’t redundant; the second one
787
+starts fresh, allowing us to copy in only what we absolutely need from
788
+AWKbecausewe haveRelative to, the change from “`alpmeans we have no BusyBox environment to execute
789
+the `RUN` command with, so we have to copy the `busybox.static` binary
790
+in from STAGE 1 and install
791
+the stock does.(^This is the main reason we change `USER`
792
+temporarily to `root` here.) There are a few other steps required to
793
+avoid causing a conflict between our previously bare-bones “OS” layer
794
+and what the is hassleinTcl popular, we have
795
+that int
--- a/www/containers.md
+++ b/www/containers.md
@@ -0,0 +1,795 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/www/containers.md
+++ b/www/containers.md
@@ -0,0 +1,795 @@
1 surprisingly difficulte remains the same as in the distroless Python example
2 because even AlpineN@2yP,1R: way we set up core Linux
3 directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot?
4
5 A potentially surprising feature of this container is that it runs
6 Fossil as root. Sin
7 to kick in, and a Docker container is a type of über-jail already, you
8 may be wondering why we bother. Instead, why not either:
9
10 * run f][whatso it starts Fossil as
11 that user instead
12
13 The reason is, although this container is quite stripped-down by today’s
14 standards, it’s based on the [surprising(This author made a
15 that were less
16 powerful than this container.) If someone ever figured out how to make a
17 Fossil binary execute arbitrary commands on the host or to open up a
18 remote shell, the power available to them at that point would make it
19 likely that they’d be able to island-hop from there into the rest of
20 your network. That power is there for you as the system administrator
21 alone, to let you inspectquire them.
22 Altour build
23 process leaves out all the BusyBox utilities that require them.
24 Although that set includes common tools like `ping`, we It also strips
25 out all but the default and darkmode skins to save executable space foresee no
26 use that or any of these other elided utilities
27 — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
28 fetched in the build step. To get the latest-and-greatest of everything,
29 you could say\
30 trunk \
31 --build-arg BBXVER=master .
32 ```
33
34 (But don’t, for reasons we will getwR ship was created with and
35 tested R
36 ific stable release, tharun`”.) ration
37 settings iput a line like this into the first stage:
38
39 ```
40 COPY containers/os-releaseR/etc/os-release
41 ```
42
43 That will let you produce a `systemd` “m” This is generally better for
44 security, but there’s something you need to be aware of: each user has
45 their own local. Let’s say you’re following, so even though it did build the image, you
46 can’t create the actual container from that image since that needs to be
47 done as root.
48
49 The simple way to deal with this is to bounce the container through a
50 registry that both users can see, such as [Docker
51 Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest
52 $ podman image push mydockername/fossil:latest
53 ```
54
55 That will push the image up to your accound
56 process leaves out all the BusyBox utilities that require them.
57 Although that set includes common tools like `ping`, we foresee no
58 use that or any of these other elided utilities
59 — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
60 fetched in the build step. To get the latest-and-greatest of everything,
61 you could say\
62 trunk \
63 --build-arg BBXVER=master .
64 ```
65
66 (But don’t, for reasons we will getwe ship was created with and
67 tested against a specific stable release, that’s the version we pull by
68 default. It does try to merge the defaults for any new configuration
69 settings into the stock set, but since it’s possible this will fail, we
70 don’t blindly update the BusyBox version merely because a new release
71 came out. Someone needs to get around to vetting it against our stock
72 configuration first.
73
74 As for Fossil, it defaults to fetching the same version as the checkout
75 you’re running the build command from, based on checkin ID. You could
76 use this to get a release build, for instance\
77 our build
78 process leaves out all the BusyBox utilities that require them.
79 Although that set includes common tools like `ping`, we foresee no
80 use that or any of these other elided utilities
81 — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
82 fetched in the build step. To get the latest-and-greatest of everything,
83 you could say\
84 trunk \
85 it lets you build on a local system that might be a lot faster
86 than your remote one, as when the remote is a small VPS. Even with the
87 overhead of schlepping container images across the Internet, it can be a
88 net win in terms of build time.
89
90 Another oddity compared to DockerY@760,6: same
91 h@76d,M:. The changes distill3WC@78M,3SS6XH;One way to can remove the installation of `busybox-static` in STAGE 1 since
92 Alpine is already based on BusyBox.(^We can’t do “`FROM busybox`” since
93 we need `apk` in this new second stage. Although this means we end up
94 with back-to-back Alpine stages, it isn’t redundant; the second one
95 starts fresh, allowing us to copy in only what we absolutely need from
96 AWKbecausewe haveRelative to, the change from “`alpmeans we have no BusyBox environment to execute
97 the `RUN` command with, so we have to copy the `busybox.static` binary
98 in from STAGE 1 and install
99 the stock does.(^This is the main reason we change `USER`
100 temporarily to `root` here.) There are a few other steps required to
101 avoid causing a conflict between our previously bare-bonerename
102 il binary executl popular, we have
103 that ijust a suitable
104 . Because this will conflict with the
105 bare-bones “`os`” layer we create, thePython the `RUN`
106 in from
107 the stock
108 temporarily to
109 `root` here.) The compensating bonus is huge: we don’t leave a package
110 image, waiting to be abusedhow much the über-jail nature of
111 c run yous can save you when
112 like this. For instance, you might have enabled Fossil’s [risky TH1 docs
113 feature][th1docrisk] along with the Tcl integration feature, which
114 effectively gives anyone with check-in rights on your repo the ability
115 to run arbitrary Tcl code on the host when that document is rendered.
116 The container layer should stop that script
117 on the host
118 namespace, but it *can* still make network connect,
119 so there is at least a *hope* that WAL will work properly across that
120 boundary. The success of the scheme depends on the `mmap()` and shared
121 memory system calls being coordinated properly by the OS kernel the two
122 worlde network cAt some point, someone should perform tests in the hopes of *failing* to
123 create database corruption in this scenario.
124
125 Why the tortured grammar? Because you cannot prove a negative, being in
126 this case “SQLite will not corrupt the database in WAL mode if there’s a
127 container barrier in the way.” All you can prove is that a given test
128 didn’t cause corruption. With enough tests of sufficient power, you can
129 begin to make definitive statements, but even then, science is always
130 provisional, awaiting a single disproving with the Tcl ints give the sysadmin freedom to impose barriers between
131 the two worlds, so even if you convince yourself that WAL mode is safe
132 in a given setup, it’s possible to configure it to fail. As if that
133 weren’t enough, differentg with the Tcl ints have different defaults,
134 including details like whether shared memory is truly shared between
135 the host and its containers.
136
137 Until someone gets around to establishing this ground truth and scoping
138 its applicable range` with:
139
140 FROM grc.io/distroless/python3-debian11
141
142 Another case
143
144
145 Method 2to
146 bind-mounted
147 `netstat`, `tYou our build
148 process leaves out all the BusyBox utilities that require them.
149 Although that set includes common tools like `ping`, we
150
151 R@2VU,5: RUNN@2bU,1Q:
152
153 Everything else remains the same as in the distroless Python example
154 because even AlpineN@2yP,1R: way we set up core Linux
155 directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distroless7Xz@3Z4,qTTBs;exec -it -u fossil fossil sh
156 ```s to get a release build, for instance\
157 alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the
158 `docker` command and everything that sits behind it, some of the tool’s
159 desis run, as compared to
160 using Docker.
161
162 The most important of these is that, by default, Podman wants to build
163 and run your container “[rootless].” This is generally better for
164 security, but there’s something you need to be aware of: each user has
165 their own local. Let’s say you’re following, so even though it did build the image, you
166 can’t create the actual container from that image since that needs to be
167 done as root.
168
169 The simple way to deal with this is to bounce the container through a
170 registry that both users can see, such as [Docker
171 Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest
172 $ podman image push mydockername/fossil:latest
173 ```
174
175 That will push the image up to your accound
176 process leaves out all the BusyBox utilities that require them.
177 Although that set includes common tools like `ping`, we foresee no
178 use that or any of these other elided utilities
179 — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
180 fetched in the build step. To get the latest-and-greatest of everything,
181 you could say\
182 trunk \
183 --build-arg BBXVER=master .
184 ```
185
186 (But don’t, for reasons we will getwe ship was created with and
187 tested against a specific stable release, that’s the version we pull by
188 default. It does try to merge the defaults for any new configuration
189 settings into the stock set, but since it’s possible this will fail, we
190 don’t blindly update the BusyBox version merely because a new release
191 came out. Someone needs to get around to vetting it against our stock
192 configuration first.
193
194 As for Fossil, it defaults to fetching the same version as the checkout
195 you’re running the build command from, based on checkin ID. You could
196 use this to get a release build, for instance\
197 our build
198 process leaves out all the BusyBox utilities that require them.
199 Although that set includes common tools like `ping`, we foresee no
200 use that or any of these other elijail��s [risky TH1 docsh user has
201 their own local. Let’sjailthe image, you
202 can’t create the actual container from that image since that needs to be
203 done as root.
204
205 The simple way to deal with this is to bounce the container through a
206 registry that both users can see, such as [Docker
207 Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest
208 $ podman image push mydockername/fossil:latest
209 ```
210
211 That will push the image up to your accound
212 process leaves out all the BusyBox utilities that require them.
213 Although that set includes common tools like `ping`, we foresee no
214 use that or any of these other elided utilities
215 — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
216 fetched in the build step. To get the latest-and-greatest of everything,
217 you could say\
218 trunk \
219 --build-arg BBXVER=master .
220 ```
221
222 (But don’t, for reasons we will getwe ship was created with and
223 tested against a specific stable release, that’s the version we pull by
224 default. It does try to merge the defaults for any new configuration
225 settings into the stock set, but since it’s possible this will fail, we
226 don’t blindly update the BusyBox version merely because a new release
227 came out. Someone needs to get around to vetting it against our stock
228 configuration first.
229
230 As for Fossil, it defaults to fetching the same version as the checkout
231 you’re running the build command from, based on checkin ID. You could
232 use this to get a release build, for instance\
233 our build
234 process leaves out all the BusyBox utilities that require them.
235 Although that set includes common tools like `ping`, we foresee no
236 use that or any of these other elided utilities
237 — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
238 fetched in the build step. To get the latest-and-greatest of everything,
239 you could say\
240 trunk \
241 it lets you build on a local system that might be a lot faster
242 than your remote one, as when the remote is a small VPjailAlthough that set includes common tools like `ping`, we foresee no
243 use that or any of these other elided utilities
244 — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
245 fetched in the build step. To get the latest-and-greatest of everything,
246 you could say\
247 trunk \
248 --build-arg BBXVER=master .
249 ```
250
251 (But don’t, for reasons we will getwe ship was created with and
252 tested against a specific stable release, that’s the version we pull by
253 default. It does try to merge the defaults for any new configuration
254 settings into the stock set, but since it’s possible this will fail, we
255 don’t blindly update the BusyBox version merely because a new release
256 came out. Someone needs to get around to vetting it against our stock
257 configuration first.
258
259 As for Fossil, it defaults to fetching the same version as the checkout
260 you’re running the build command from, based on checkin ID. You could
261 use this to get a release build, for instance\
262 alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the
263 `docker` command and everything that sits behind it, some of the tool’s
264 desis run, as compared to
265 using Docker.
266
267 The most important of thesour ��s [risky TH1 docs
268 feature][th1docrisk] along with the Tcl integration feature, which
269 effectively gives anyone with check-in rights on your repo the ability
270 to run arbitrary Tcl code on the host when that document is rendered.
271 The container layer should stop that script
272 on the host
273 namespace, but it *can* still make network connections, modify the repo
274 , and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into
275 one of s. Because this will
276
277 complicated. Essentially, you replace everything in STAGE 2 and 3 inside
278 the `Dockerfile` with:
279
280 FROM grc.io/distroless/python3-debian11
281
282 Another case
283
284
285 Method 2to
286 bind-mounted
287 `netstat`, `tYou our build
288 process leaves out all the BusyBox utilities that require them.
289 Although that set includes common tools like `ping`, we
290
291 R@2VU,5: RUNN@2bU,1Q:
292
293 Everything else remains the same as in the distroless Python example
294 because even AlpineN@2yP,1R: way we set up core Linux
295 directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distroless7Xz@3Z4,qTTBs; bonus is huge: we don’t leave a package
296 image, waiting to be abusedhow much the über-jail nature of
297 c run yous can save you when
298 like this. For instance, you might have enabled Fossil’s [risky TH1 docs
299 feature][th1docrisk] along with the Tcl integration feature, which
300 effectively gives anyone with check-in rights on your repo the ability
301 to run arbitrary Tcl code on the hThe first configurationtainer is that it runs
302 Fossil as root. Sin
303 to kick in, and a Docker container is a type of über-jail already, you
304 may be wondering why we bother. Instead, why not either:
305
306 * run nojail` to skip the internal chroot; or
307 * set “`USER fossil`” inbills itself][whatso it starts Fossil as
308 that user instead
309
310 The reason is, although this container is quite stripped-down by today’s
311 standards, it’s based on the [surprising(This author made a
312 that were less
313 powerful than this container.) If someone ever figured out how to make a
314 Fossil binary execute arbitrary commands on the host or to open up a
315 remote shell, the power available to them at that point would make it
316 likely that they’d be able to island-hop from there into the rest of
317 your network. That power is there for you as the system administrator
318 alone, to let you inspectinto
319 a “machine,” as `systemd` calls it. The easiest method ishese other elided utilitiile/Dockerfile)we ship was created with and
320 tested against a specific stable release, that’s the version we pull by
321 default. It does try to merge theour build
322 process leave`tYou our build
323 process leaves out all the BusyBox utilities that require them.
324 Although that set includes common tools like `ping`, we
325
326 R@2VU,5: RUNN@2bU,1Q:
327
328 Everything else remains the same as in the distroless Python example
329 because even AlpineN@2yP,1R: way we set up core Linux
330 directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot?
331
332 A potentially surprising feature of this container is that it runs
333 Fossil as root. Sin
334 to kick in, and a Docker container is a type of über-jail already, you
335 may be wondering why we bother. Instead, why not either:
336
337 * run nojail` to skip the internal chroot; or
338 * set “`USER fossil`” inbills itself][whatso it starts Fossil as
339 that user instead
340
341 The reason is, although this container is quite stripped-down by today’s
342 standards, it’s based on the [surprising(This author made a
343 that were less
344 powerful than this container.) If someone ever figured out how to make a
345 Fossil binary execute arbitrary commands on the host or to open up a
346 remote shell, the power available to them at that point would make it
347 likely that they’d be able to island-hop from there into the rest of
348 your network. That power is thercess leaves out alainst a specific stable release, that’s the version we pull by
349 default. It does try to merge the defaults for any new configuration
350 settiy new configuration
351 settings i:noja
352
353 A potentially surprissurprisingly difficulte remains the same as in the distroless Python example
354 because even AlpineN@2yP,1R: way we set up core Linux
355 directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot?
356
357 A potentially surprising feature of this container is that it runs
358 Fossil as root. Sin
359 to kick in, and a Docker container is a type of über-jail already, you
360 may be wondering why we bother. Instead, why not either:
361
362 * run f][whatso it starts Fossil as
363 that user instead
364
365 The reason is, although this container is quite stripped-down by today’s
366 standards, it’s base4 on the [surprising(This auth and packed with [UPX].)
367
368 [U//upx.github.io/6gF@488,2Ne3im;ofetgly difficulte remains the same as in the distroless Python example
369 because even AlpineN@2yP,1R: way we set up core Linux
370 directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot?
371
372 A potentially surprisinculte ripped-down by today’s
373 standards, it’s based on the [surprising(This author made a
374 that were less
375 powerful than this container.) If someone ever figured out how to make a
376 Fossil binary execute arbitrary commands on the host or to open up a
377 remote shell, the power available to them at that point would make it
378 likely that they’d be able to island-hop from there into the rest of
379 your network. That power is there for you as the system administrator
380 alone, to let you inspectquire them.
381 Altour build
382 process leaves out all the BusyBox utilities that require them.
383 Although that set includes common tools like `ping`, we foresee no
384 use that or any of these other elided utilities
385 — `ether-wake`, `netstat`, `tYou can override The most
386 common reason to override this is to get a release versionns of Fossil and Bstep. To get the latest-19 .
387 ```
388
389 It’s bestguration
390 settings iput a line lik rather thanversion we pull by
391 default. It dobecauss into the first stage:
392
393 ```
394 COPY containers/os-release /etc/os-release
395 ```
396
397 That will let you pway to can remove the installation of `busybox-static` in STAGE 1 since
398 Alpine is already based on BusyBox.(^We can’t do “`FURL hasn’t changed, if you hav Alpine stages, it isn’t redundant; the second one
399 starts fresh, allowing us to copy in only what we absolutely need from
400 AWKbecausewe haveRelative to, the change from “`alpmeans we have no BusyBox environment to execute
401 the `RUN` command with, so we have to copy the `busybox.static` binary
402 in from STAGE 1 and install
403 the stock does.(^This is the main reason we change `USER`
404 temporarily to `root` here.) There are a few other steps required to
405 avoid causing a conflict between our previously bare-bones “OS” layer
406 and what the is hassleinTcl popular, we have
407 that intovia a suitable
408 . Because this will conflict with the
409 bare-bones “`os`” laye(./server/)create, thePython the `RUN`
410 in from
411 the stock
412 temporarily to
413 `root` here.) The compensating bonus is huge: we don’t leave a package
414 image, waiting to be abusedhow much the über-jail nature of
415 c run yous can save you when
416 like this. For instance, you might have enabled Fossil’s [risky TH1 docs
417 feature][th1docrisk] along with the Tcl integration feature, which
418 effectively gives anyone with check-in rights on your repo the ability
419 to run arbitrary Tcl code on the host when that document is rendered.
420 The container layer should stop that script
421 on the host
422 namespace, but it *can* still make network connections, modify the repo
423 , and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into
424 one of s. Because this will
425
426 complicated. Essentially, you replace everything in STAGE 2 and 3 inside
427 the `Dockerfile` with:
428
429 FROM grc.io/distroless/python3-debian11
430
431 Another case
432
433
434 Method 2to
435 bind-mounted
436 `netstat`, `tYou our build
437 process leaves out all the BusyBox utilities that require them.
438 Although that set includes common tools like `ping`, we
439
440 R@2VU,5: RUNN@2bU,1Q:
441
442 Everything else remains the same as in the distroless Python example
443 because even AlpineN@2yP,1R: way we set up core Linux
444 directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distroless7Xz@3Z4,qTTBs;exec -it -u fossil fossil sh
445 ```s to get a release build, for instance\
446 alternativeAlthough Podman [bills itself][whatis] as a drop-in replachassleinTcl popular, we have
447 that intovia a suitable
448 . Because this will conflict with the
449 bare-bones “`os`” layer we create, thePython the `RUN`
450 in from
451 the stock
452 temporarily to
453 `root` here.) The compensating bonus is huge: we don’t leave a package
454 image, waiting to be abusedhow much the über-jail nature of
455 c run yous can save you when
456 like this. For instance, you might have enabled Fossil’s [risky TH1 docs
457 feature][th1docrisk] along with the Tcl integration feature, which
458 effectively gives anyone with check-in rights on your repo the ability
459 to run arbitrary Tcl code on the host when that document is rendered.
460 The container layer should stop that script
461 on the host
462 namespace, but it *can* still make network connections, modify the repo
463 , and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into
464 one of s. Because this will
465
466 complicated. Essentially, you replace everything in STAGE 2 and 3 inside
467 the `Dockerfile` with:
468
469 FROM grc.io/distroless/python3-debian11
470
471 Another case
472
473
474 Method 2to
475 bind-mounted
476 `netstat`, `tYou our build
477 process leaves out all the BusyBox utilities that require them.
478 Although that set includes common tools like `ping`, we
479
480 R@2VU,5: RUNN@2bU,1Q:
481
482 Everything else remains the same as in the distroless Python example
483 because even AlpineN@2yP,1R: way we set up core Linux
484 directories like `/etc` and `/tmp` in the absence of any OS imageAs@3it’s about a quarterecause a new release
485 came , or half
486 that of the “full” distribution of `nerdctl` and all its dependenciesround to vetting it against our stock
487 configuration first.
488
489 As for Fossil, it defaults to fetching the same version as the checkout
490 you’re running the build command from, based on checkin ID. You could
491 use this to get a release build, for instance\
492 our build
493 process leaves out all the BusyBox utilities that require them.
494 Although that set includes common tools like `ping`, we foresee no
495 use that or any of these other elijail��s [risky TH1 docsh user has
496 their own local. Let’sjailthe image, you
497 can’t create the actual container from that image since that needs to be
498 done as root.
499
500 The simple way to deal with this is to bounce the container through a
501 registry that both users can see, such as [Docker
502 Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest
503 $ podman image push mydockername/fossil:latest
504 ```
505
506 That will push the image up to your accound
507 process leaves out all the BusyBox utilities that require them.
508 Although that set includes common tools like `ping`, we foresee no
509 use that or any of these other elided utilities
510 — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
511 fetched in the build step. To get the latest-and-greatest of everything,
512 you could say\
513 trunk \
514 --build-arg BBXVER=master .
515 ```
516
517 (But don’t, for reasons we will getwe ship was created with and
518 tested against a specific stable release, that’s the version we pull by
519 default. It does try to merge the defaults for any new configuration
520 settings into the stock set, but since it’s possible this will fail, we
521 don’t blindly update the BusyBox version merely because a new release
522 came out. Someone needs to get around to vetting it against our stock
523 configuration first.
524
525 As for Fossil, it defaults to fetching the same version as the checkout
526 you’re running the build command from, based on checkin ID. You could
527 use this to get a release build, for instance\
528 our build
529 process leaves out all the BusyBox utilities that require them.
530 Although that set includes common tools like `ping`, we foresee no
531 use that or any of these other elided utilities
532 — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
533 fetched in the build step. To get the latest-and-greatest of everything,
534 you could say\
535 trunk \
536 it lets you build on a local system that might be a lot faster
537 than your remote one, as when the remote is a small VPjailAlthough that set includes common tools like `ping`, we foresee no
538 use that or any of these other elided utilities
539 — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
540 fetched in the build step. To get the latest-and-greatest of everything,
541 you could say\
542 trunk \
543 --build-arg BBXVER=master .
544 ```
545
546 (But don’t, for reasons we will getwe ship was created with and
547 tested against a specific stable release, that’s the version we pull by
548 default. It does try to merge the defaults for any new configuration
549 settings into the stock set, but since it’s possible this will fail, we
550 don’t blindly update the BusyBox version merely because a new release
551 came out. Someone needs to get around to vetting it against our stock
552 configuration first.
553
554 As for Fossil, it defaults to fetching the same version as the checkout
555 you’re running the build command from, based on checkin ID. You could
556 use this to get a release build, for instance\
557 alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the
558 `docker` command and everything that sits behind it, some of the tool’s
559 desis run, as compared to
560 using Docker.
561
562 The most important of thesour ��s [risky TH1 docs
563 feature][th1docrisk] along with the Tcl integration feature, which
564 effectively gives anyone with check-in rights on your repo the ability
565 to run arbitrary Tcl code on the host when that document is rendered.
566 The container layer should stop that script
567 on the host
568 namespace, but it *can* still make network connections, modify the repo
569 , and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into
570 one of s. Because this will
571
572 complicated. Essentially, you replace everything in STAGE 2 and 3 inside
573 the `Dockerfile` with:
574
575 FROM grc.io/distroless/python3-debian11
576
577 Another case
578
579
580 Method 2to
581 bind-mounted
582 `netstat`, `tYou our build
583 process leaves out all the BusyBox utilities that require them.
584 Although that set includes common tools like `ping`, we
585
586 R@2VU,5: RUNN@2bU,1Q:
587
588 Everythin (g else remains the same as in the distroless Pytrhon example
589 because even AlpineN@2yP,1R: way we set up core Linux
590 directories like `/etc` and `/)”, as systemdIt’s important that the name of the machine you create &mdash;in this example &mdash; matches tason is, although tsand it will contain. For one[SCGI proxying via nginx][DNT]. For
591 other use cases, see our collection of [Fossil server configuration
592 guides][srv], then adjust the command to your local needs.
593 For another, you will likely have to adjust the `
594 in the command.
595
596 W.
597
598 S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the
599 . Thus,-rune reason is, although this containesurprisingly Fossil server configuration
600 guides][srv], then adjust the command to your local needs.
601 For another, you will likely have to adjust the `
602 in the command.
603
604 W.
605
606 S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the
607 . Thus,Copy the container name from the first step to the second. Yours will
608 almost certainly be named after a different Fossil commit ID.en adjust the command to your local needs.
609 For another, you will likely have to adjust the `
610 in the command.
611
612 W.
613
614 S,ngly diffiemains the same barebones"></a>Bahas no option for installneeds for so, the
615 . Thus,virtual net
616 it wants to hide the service entirely.
617
618 Another way to put this is thatthing* of what pped-down by today’s
619 s` does
620 despite their superficial similarities.
621
622 For this container, it doesn’t much matter, since it exposes
623 only a single port, and we do want that one port exposed, one way
624 or another. Beyond that, weby today’s
625 standards, it’surprisingly difficulte remains the same as in the distroless Python example
626 because even AlpineN@2yP,1R: way we set up core Linux
627 directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot?
628
629 A potentially surprising feature of this container is that it runs
630 Fossil as root. Sin
631 to kick in, and a Docker container is a type of über-jail already, you
632 may be wondering why we bother.I:
633
634 1. `systemd-nspawn` works best with `machinectl`, but if you haven’t
635 got `btrfs` available, you run into [trouble](#nspawn-rhel).
636
637 2. O@760,6: same
638 h@76d
639 a strip
640 image, causing ly difficulte remains the same as in the distroless Python exampleemains the same as in the distroless Python example
641 because even Al tutorial][medtut].)
642
643 3. We disable the “private networking” feature since the whole
644 point of this container is to expose a network service to the
645 public, one way or another. If you do things the way the defaults
646 (and thus the official docs) expect, you must push through
647 [a whole lot of complexity][ndcmp] to re-expose this single
648 network port. That complexity is justified only if your service
649 is itself complex, having both privatyou still have options for
650 running containers that are considerably slimmer, at a high cost to
651 administration complexity and loss of features.
652
653 Part of the OCI standard is the notion of a “bundle,” being a consistent
654 way to present a pre-built and configured container to the runtime.
655 Essentially, it consists of a directory containing a `config.json` file
656 and a `rootfs/` subdirectory containing the root filesystem image. Many
657 tools can produce these for you. We’ll show only one method in the first
658 section below, then reuse that in the following sections.
659
660
661 #### 6.3.1 <a id="runc"></a>`runc`
662
663 We mentioned `runc` [above](#nerdctl), but it’s possible to use it
664 standalone, without `containerd` or its CLI frontend `nerdctl`. You also
665 lose the build engine, intelligent image layer sharing, image registry
666 connections, and much more. The plus side is that `runc` alone is
667 18 MiB.
668
669 Using it without stable release, that’s the version we pull by
670 default. It does try to merge the defaults for any new configuration
671 settings into the stock set, but since it’s possible this will fail, we
672 don’t blindly update the BusyBox version merely because a new release
673 came out. Someone needs to get around to vetting it against our stock
674 configuration first.
675
676 As for Fossil, it defaults to fetching the same version as the checkout
677 you’re running the build command from, based on checkin ID. You could
678 use this to get a release build, for instance\
679 our build
680 process leaves out all the BusyBox utilities that require them.
681 Although that set includes common tools like `ping`, we foresee no
682 use that or any of these other elided utilities
683 — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
684 fetched in the build step. To get the latest-and-greatest of everything,
685 you could say\
686 trunk \
687 it lets you build on a local system that might be a lot faster
688 than your remote one, as when the remote is a small VPjailAlthough that set includes common tools like `ping`, we foresee no
689 use that or any of these other elided utilities
690 — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get
691 fetched in the build step. To get the latest-and-greatest of everything,
692 you could say\
693 trunk \
694 --build-arg BBXVER=master .
695 ```
696
697 (But don’t, for reasons we will getwe ship was created with and
698 tested against a specific stable release, that’s the version we pull by
699 default. It does try to merge the defaults for any new configuration
700 settings into the stock set, but since it’s possible this will fail, we
701 don’t blindly update the BusyBox version merely because a new release
702 came out. Someone needs to get around to vetting it against our stock
703 configuration first.
704
705 As for Fossil, it defaults to fetching the same version as the checkout
706 you’re running the build command from, based on checkin ID. You could
707 use this to get a release build, for instance\
708 alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the
709 `docker` command and everything that sits behind it, some of the tool’s
710 desis run, as compared to
711 using Docker.
712
713 The most important of thesour ��s [risky TH1 docs
714 feature][th1docrisk] along with the Tcl integration feature, which
715 effectively gives anyone with check-in rights on your repo the ability
716 to run arbitrary Tcl code on the host when that document is rendered.
717 The container layer should stop that script
718 on the host
719 namespace, but it *can* still make network connections, modify the repo
720 , and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into
721 one of s. Because this will
722
723 complicated. Essentially, you replace everything in STAGE 2 and 3 inside
724 the `Dockerfile` with:
725
726 FROM grc.io/distroless/python3-debian11
727
728 Another case
729
730
731 Method 2to
732 bind-mounted
733 `netstat`, `tYou our build
734 process leaves out all the BusyBox utilities that require them.
735 Although that set includes common tools like `ping`, we
736
737 R@2VU,5: RUNN@2bU,1Q:
738
739 Everythin (g else remains the same as in the distroless Pytrhon example
740 because even AlpineN@2yP,1R: way we set up core Linux
741 directories like `/etc` and `/)”, as systemdIt’s important that the name of the machine you create &mdash;in this example &mdash; matches tason is, although tsand it will contain. For one[SCGI proxying via nginx][DNT]. For
742 other use cases, see our collection of [Fossil server configuration
743 guides][srv], then adjust the command to your local needs.
744 For another, you will likely have to adjust the `
745 in the command.
746
747 W.
748
749 S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the
750 . Thus,-rune reason is, although this containesurprisingly Fossil server configuration
751 guides][srv], then adjust the command to your local needs.
752 For another, you will likely have to adjust the `
753 in the command.
754
755 W.
756
757 S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the
758 . Thus,Copy the container name from the first step to the second. Yours will
759 almost certainly be named after a different Fossil commit ID.en adjust the command to your local needs.
760 For another, you will likely have to adjust the `
761 in the command.
762
763 W.
764
765 S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the
766 . Thus,virtual net
767 it wants to hide the service entirely.
768
769 Another way to put this is thatthing* of what pped-down by today’s
770 s` does
771 despite their superficial similarities.
772
773 For this container, it doesn’t much matter, since it exposes
774 only a single port, and we do want that one port exposed, one way
775 or another. Beyond that, weby today’s
776 standards, it’surprisingly difficulte remains the same as in the distroless Python example
777 because even AlpineN@2yP,1R: way we set up core Linux
778 directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot?
779
780 A potentially surprising feature of this container is that it runs
781 Fossil as root. Sin
782 to kick in, and a Docker container is a type of über-jail already, you
783 may be wondering why we bother.I:
784
785 1. `systemd-nspawn` works best with `machinectl`, but if you haven’t
786 , you’ll get the old versionstages, it isn’t redundant; the second one
787 starts fresh, allowing us to copy in only what we absolutely need from
788 AWKbecausewe haveRelative to, the change from “`alpmeans we have no BusyBox environment to execute
789 the `RUN` command with, so we have to copy the `busybox.static` binary
790 in from STAGE 1 and install
791 the stock does.(^This is the main reason we change `USER`
792 temporarily to `root` here.) There are a few other steps required to
793 avoid causing a conflict between our previously bare-bones “OS” layer
794 and what the is hassleinTcl popular, we have
795 that int
--- www/fossil-v-git.wiki
+++ www/fossil-v-git.wiki
@@ -113,36 +113,41 @@
113113
[/help?cmd=ui|UI],
114114
protected by [./caps/ | a fine-grained role-based
115115
access control system].
116116
These additional capabilities are available for Git as 3rd-party
117117
add-ons, but with Fossil they are integrated into
118
-the design. One way to describe Fossil is that it is
118
+the design, to the point that it approximates
119119
"[https://github.com/ | GitHub]-in-a-box."
120120
121
-Fossil can do operations over all local repo clones and check-out
122
-directories with a single command. For example, Fossil lets you say
123
-"<tt>fossil all sync</tt>" on a laptop prior to taking it off the network
124
-hosting those repos. You can sync up to all of the private repos on your
125
-company network plus those public Internet-hosted repos you use. Whether
126
-going out for a working lunch or on a transoceanic airplane trip, one
127
-command gets you in sync. This works with several other Fossil
128
-sub-commands, such as "<tt>fossil all changes</tt>" to get a list of files
121
+Even if you only want straight version control, Fossil has affordances
122
+not available in Git.
123
+
124
+For instance, Fossil can do operations over all local repo clones and
125
+check-out directories with a single command. You can say "<tt>fossil
126
+all sync</tt>" on a laptop prior to taking it off the network hosting
127
+those repos, as before going on a trip. It doesn't matter if those
128
+repos are private and restricted to your company network or public
129
+Internet-hosted repos, you get synced up with everything you need while
130
+off-network.
131
+
132
+You get the same capability with several other Fossil
133
+sub-commands as well, such as "<tt>fossil all changes</tt>" to get a list of files
129134
that you forgot to commit prior to the end of your working day, across
130135
all repos.
131136
132137
Whenever Fossil is told to modify the local checkout in some destructive
133138
way ([/help?cmd=rm|fossil rm], [/help?cmd=update|fossil update],
134139
[/help?cmd=revert|fossil revert], etc.) Fossil remembers the prior state
135140
and is able to return the check-out directory to that state with a
136
-<tt>fossil undo</tt> command. You cannot undo a commit in Fossil
137
-([#history | on purpose!]) but as long as the change remains confined to
141
+<tt>fossil undo</tt> command. While you cannot undo a commit in Fossil
142
+— [#history | on purpose!] — as long as the change remains confined to
138143
the local check-out directory only, Fossil makes undo
139144
[https://git-scm.com/book/en/v2/Git-Basics-Undoing-Things|easier than in
140145
Git].
141146
142
-For developers who choose to self-host projects (rather than using a
143
-3rd-party service such as GitHub) Fossil is much easier to set up, since
147
+For developers who choose to self-host projects rather than rely on a
148
+3rd-party service such as GitHub, Fossil is much easier to set up:
144149
the stand-alone Fossil executable together with a [./server/any/cgi.md|2-line CGI script]
145150
suffice to instantiate a full-featured developer website. To accomplish
146151
the same using Git requires locating, installing, configuring, integrating,
147152
and managing a wide assortment of separate tools. Standing up a developer
148153
website using Fossil can be done in minutes, whereas doing the same using
@@ -165,27 +170,39 @@
165170
so that most people end up installing it via some kind of package
166171
manager, simply because the creation of complicated binary packages is
167172
best delegated to people skilled in their creation. Normal Git users are
168173
not expected to build Git from source and install it themselves.
169174
170
-Fossil is a single self-contained stand-alone executable which by default
171
-depends only on common platform libraries. You can statically link
172
-to get an executable with no external dependencies at all &mdash; a useful
173
-feature for running inside a restrictive
174
-[https://en.wikipedia.org/wiki/Chroot|chroot jail].
175
-
176
-The precompiled Fossil binaries are delivered as just a single
177
-executable. The precompiled Windows deliveries are just a ZIP archive
175
+Fossil is a single self-contained stand-alone executable which
176
+depends only on common platform libraries in its default configuration.
177
+To install one of [https://fossil-scm.org/home/uv/download.html | our
178
+precompiled binaries], unpack the executable from the archive and put it
179
+somewhere in your <tt>PATH</tt>. To uninstall it, delete the executable.
180
+
181
+This policy is particularly useful when running Fossil inside a
182
+restrictive container, anything from [./chroot.md | classic chroot
183
+jails] to modern [https://en.wikipedia.org/wiki/OS-level_virtualization
184
+| OS-level virtualization mechanisms] such as
185
+[https://en.wikipedia.org/wiki/Docker_(software) | Docker]. By using
186
+executable compression, our
187
+[/file?name=Dockerfile.in&ci=trunk | stock <tt>Dockerfile</tt>]
188
+creates a container that's under 4 MiB on 64-bit Linux, including
189
+a capable [https://www.busybox.net/ | Busybox] environment for live
190
+debugging of the container's innards.
191
+
192
+Modern Linux systems tend to make full static linking
193
+[https://stackoverflow.com/questions/3430400/linux-static-linking-is-dead
194
+| difficult], but our official executables do statically link to OpenSSL
195
+to remove a version dependency, resulting in an executable that's around
196
+6 MiB, depending on the platform. ([Release Build How-To | Details].)
197
+The result is dependent only upon widespread platform libraries with
198
+stable ABIs such as glibc, zlib, etc.
199
+
200
+Full static linking is easier on Windows, so our precompiled Windows
201
+binaries are just a ZIP archive
178202
containing only "<tt>fossil.exe</tt>". There is no "<tt>setup.exe</tt>"
179
-to run. Linux and Mac precompiled binaries are a tarball containing
180
-just the "<tt>fossil</tt>" executable. To install, just put the
181
-executable on your PATH. To uninstall, just delete the executable.
182
-To upgrade (or downgrade) simply replace the executable.
183
-
184
-A typical Fossil executable is between 5 and 7 megabytes uncompressed
185
-(as of 2020-12-12),
186
-assuming that the executable is statically linked against OpenSSL.
203
+to run.
187204
188205
Fossil is easy to build from sources. Just run
189206
"<tt>./configure && make</tt>" on POSIX systems and
190207
"<tt>nmake /f Makefile.msc</tt>" on Windows.
191208
@@ -208,18 +225,20 @@
208225
matters is effectiveness and efficiency. We believe Fossil achieves
209226
this.
210227
211228
The above size comparisons aren't apples-to-apples anyway. We've
212229
compared the size of Fossil with all of its [#features | many built-in
213
-features] to a fairly minimal Git installation. You must add a lot
214
-of third-party
215
-software to Git to give it a Fossil-equivalent feature set. Consider
216
-[https://about.gitlab.com/|GitLab], a third-party extension to Git
217
-wrapping it in many features, making it roughly Fossil-equivalent,
230
+features] to a fairly minimal Git installation. You must add a lot of
231
+third-party software to Git to give it a Fossil-equivalent feature set.
232
+Consider [https://about.gitlab.com/|GitLab], a third-party extension to
233
+Git wrapping it in many features, making it roughly Fossil-equivalent,
218234
though [https://docs.gitlab.com/ee/install/requirements.html|much more
219
-resource hungry] and hence more costly to run than the equivalent
220
-Fossil setup. GitLab's basic requirements are easy to accept when you're dedicating
235
+resource hungry] and hence more costly to run than the equivalent Fossil
236
+setup. [https://hub.docker.com/r/gitlab/gitlab-ce/ | The official GitLab
237
+Community Edition container] currently clocks in at 2.66 GiB!
238
+
239
+GitLab's requirements are easy to accept when you're dedicating
221240
a local rack server or blade to it, since its minimum requirements are
222241
more or less a description of the smallest
223242
thing you could call a "server" these days, but when you go to host that
224243
in the cloud, you can expect to pay about 8 times as much to comfortably host
225244
GitLab as for Fossil.³ This difference is largely due to basic
@@ -267,11 +286,11 @@
267286
Leaf check-ins in Git that lack a "ref" become "detached," making them
268287
difficult to locate and subject to garbage collection. This
269288
[http://gitfaq.org/articles/what-is-a-detached-head.html|detached head
270289
state] problem has caused grief for
271290
[https://www.google.com/search?q=git+detached+head+state | many
272
-of Git users]. With
291
+Git users]. With
273292
Fossil, detached heads are simply impossible because we can always find
274293
our way back into the Merkle tree using one or more of the relations
275294
in the SQL database.
276295
277296
The SQL query capabilities of Fossil make it easier to track the
@@ -287,16 +306,16 @@
287306
walk the data and compute the result. And since that is a lot more
288307
work, the question is seldom asked.
289308
290309
The ease of querying Fossil data using SQL means that status or
291310
history information about the project under management is easier
292
-to obtain. And being easier means that it is more likely to happen.
311
+to obtain. Being easier means that it is more likely to happen.
293312
Fossil reports tend to be more detailed and useful.
294
-Consider the [/timeline?c=6df7a853ec16865b|this Fossil timeline]
295
-compared to its
296
-[https://github.com/drhsqlite/fossil-mirror/commits/master?after=f720c106d297ca1f61bccb30c5c191b88a626d01+34|its
297
-closest equivalent in GitHub]. Judge for yourself: Which of those
313
+Compare [/timeline?c=6df7a853ec16865b|this Fossil timeline]
314
+to
315
+[https://github.com/drhsqlite/fossil-mirror/commits/master?after=f720c106d297ca1f61bccb30c5c191b88a626d01+34 |
316
+its closest equivalent in GitHub]. Judge for yourself: which of those
298317
reports is more useful to a developer trying to understand what happened?
299318
300319
The bottom line is that even though Fossil and Git are built around
301320
the same low-level data structure, the use of SQL
302321
to query this data makes the data more accessible in Fossil, resulting
@@ -513,21 +532,21 @@
513532
contexts, such as in the [https://en.wikipedia.org/wiki/OODA_loop | OODA
514533
loop] concept.
515534
Committing your changes to private branches in order to delay a public
516535
push to the parent repo increases the size of your collaborators'
517536
control loops, either causing them to slow their work in order to safely
518
-react to your work, or to overcorrect in response to each change.
537
+react to your work, or to over-correct in response to each change.
519538
520539
Each DVCS can be used in the opposite style, but doing so works against
521540
their low-friction paths.
522541
523542
524543
<h4 id="scale">2.5.2 Scale</h4>
525544
526545
The Linux kernel has a far bigger developer community than that of
527546
SQLite: there are thousands and thousands of contributors to Linux, most
528
-of whom do not know each others names. These thousands are responsible
547
+of whom do not know each other's names. These thousands are responsible
529548
for producing roughly 89× more code than is in SQLite. (10.7
530549
[https://en.wikipedia.org/wiki/Source_lines_of_code|MLOC] vs. 0.12 MLOC
531550
according to [https://dwheeler.com/sloccount/|SLOCCount].) The Linux
532551
kernel and its development process were already uncommonly large back in
533552
2005 when Git was designed, specifically to support the consequences of
@@ -570,13 +589,13 @@
570589
571590
This difference in emphasis arises from the different purposes of
572591
the two systems. Git focuses on individual branches, because that
573592
is exactly what you want for a highly-distributed bazaar-style project
574593
such as Linux. Linus Torvalds does not want to see every check-in
575
-by every contributor to Linux, as such extreme visibility does not scale
576
-well. But Fossil was written for the cathedral-style SQLite project
577
-with just a handful of active committers. Seeing all
594
+by every contributor to Linux: such extreme visibility does not scale
595
+well. Contrast Fossil, which was written for the cathedral-style SQLite project
596
+and its handful of active committers. Seeing all
578597
changes on all branches all at once helps keep the whole team
579598
up-to-date with what everybody else is doing, resulting in a more
580599
tightly focused and cohesive implementation.
581600
582601
@@ -639,12 +658,14 @@
639658
away in a working directory, then get a call from a customer requiring
640659
that you switch to a stable branch to answer questions in terms of the
641660
version that customer is running. You don't want to stop the test in
642661
order to switch your lone working directory to the stable branch.
643662
644
-Disk space is cheap. Having several working directories, each with its
645
-own local state, makes switching versions cheap and fast. Plus,
663
+Disk space is cheap. Having several working directories — each with its
664
+own local state — makes switching versions cheap and fast.
665
+
666
+Plus,
646667
<tt>cd</tt> is faster to type than <tt>git checkout</tt> or <tt>fossil
647668
update</tt>.
648669
649670
650671
<h3 id="history">2.7 What you should have done vs. What you actually did</h3>
@@ -663,11 +684,11 @@
663684
Fossil, in contrast, puts more emphasis on recording exactly what happened,
664685
including all of the messy errors, dead-ends, experimental branches, and
665686
so forth. One might argue that this
666687
makes the history of a Fossil project "messy," but another point of view
667688
is that this makes the history "accurate." In actual practice, the
668
-superior reporting tools available in Fossil mean that the added "mess"
689
+superior reporting tools available in Fossil mean that this incidental mess
669690
is not a factor.
670691
671692
Like Git, Fossil has an [/help?cmd=amend|amend command] for modifying
672693
prior commits, but unlike in Git, this works not by replacing data in
673694
the repository, but by adding a correction record to the repository that
674695
--- www/fossil-v-git.wiki
+++ www/fossil-v-git.wiki
@@ -113,36 +113,41 @@
113 [/help?cmd=ui|UI],
114 protected by [./caps/ | a fine-grained role-based
115 access control system].
116 These additional capabilities are available for Git as 3rd-party
117 add-ons, but with Fossil they are integrated into
118 the design. One way to describe Fossil is that it is
119 "[https://github.com/ | GitHub]-in-a-box."
120
121 Fossil can do operations over all local repo clones and check-out
122 directories with a single command. For example, Fossil lets you say
123 "<tt>fossil all sync</tt>" on a laptop prior to taking it off the network
124 hosting those repos. You can sync up to all of the private repos on your
125 company network plus those public Internet-hosted repos you use. Whether
126 going out for a working lunch or on a transoceanic airplane trip, one
127 command gets you in sync. This works with several other Fossil
128 sub-commands, such as "<tt>fossil all changes</tt>" to get a list of files
 
 
 
 
 
129 that you forgot to commit prior to the end of your working day, across
130 all repos.
131
132 Whenever Fossil is told to modify the local checkout in some destructive
133 way ([/help?cmd=rm|fossil rm], [/help?cmd=update|fossil update],
134 [/help?cmd=revert|fossil revert], etc.) Fossil remembers the prior state
135 and is able to return the check-out directory to that state with a
136 <tt>fossil undo</tt> command. You cannot undo a commit in Fossil
137 ([#history | on purpose!]) but as long as the change remains confined to
138 the local check-out directory only, Fossil makes undo
139 [https://git-scm.com/book/en/v2/Git-Basics-Undoing-Things|easier than in
140 Git].
141
142 For developers who choose to self-host projects (rather than using a
143 3rd-party service such as GitHub) Fossil is much easier to set up, since
144 the stand-alone Fossil executable together with a [./server/any/cgi.md|2-line CGI script]
145 suffice to instantiate a full-featured developer website. To accomplish
146 the same using Git requires locating, installing, configuring, integrating,
147 and managing a wide assortment of separate tools. Standing up a developer
148 website using Fossil can be done in minutes, whereas doing the same using
@@ -165,27 +170,39 @@
165 so that most people end up installing it via some kind of package
166 manager, simply because the creation of complicated binary packages is
167 best delegated to people skilled in their creation. Normal Git users are
168 not expected to build Git from source and install it themselves.
169
170 Fossil is a single self-contained stand-alone executable which by default
171 depends only on common platform libraries. You can statically link
172 to get an executable with no external dependencies at all &mdash; a useful
173 feature for running inside a restrictive
174 [https://en.wikipedia.org/wiki/Chroot|chroot jail].
175
176 The precompiled Fossil binaries are delivered as just a single
177 executable. The precompiled Windows deliveries are just a ZIP archive
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178 containing only "<tt>fossil.exe</tt>". There is no "<tt>setup.exe</tt>"
179 to run. Linux and Mac precompiled binaries are a tarball containing
180 just the "<tt>fossil</tt>" executable. To install, just put the
181 executable on your PATH. To uninstall, just delete the executable.
182 To upgrade (or downgrade) simply replace the executable.
183
184 A typical Fossil executable is between 5 and 7 megabytes uncompressed
185 (as of 2020-12-12),
186 assuming that the executable is statically linked against OpenSSL.
187
188 Fossil is easy to build from sources. Just run
189 "<tt>./configure && make</tt>" on POSIX systems and
190 "<tt>nmake /f Makefile.msc</tt>" on Windows.
191
@@ -208,18 +225,20 @@
208 matters is effectiveness and efficiency. We believe Fossil achieves
209 this.
210
211 The above size comparisons aren't apples-to-apples anyway. We've
212 compared the size of Fossil with all of its [#features | many built-in
213 features] to a fairly minimal Git installation. You must add a lot
214 of third-party
215 software to Git to give it a Fossil-equivalent feature set. Consider
216 [https://about.gitlab.com/|GitLab], a third-party extension to Git
217 wrapping it in many features, making it roughly Fossil-equivalent,
218 though [https://docs.gitlab.com/ee/install/requirements.html|much more
219 resource hungry] and hence more costly to run than the equivalent
220 Fossil setup. GitLab's basic requirements are easy to accept when you're dedicating
 
 
 
221 a local rack server or blade to it, since its minimum requirements are
222 more or less a description of the smallest
223 thing you could call a "server" these days, but when you go to host that
224 in the cloud, you can expect to pay about 8 times as much to comfortably host
225 GitLab as for Fossil.³ This difference is largely due to basic
@@ -267,11 +286,11 @@
267 Leaf check-ins in Git that lack a "ref" become "detached," making them
268 difficult to locate and subject to garbage collection. This
269 [http://gitfaq.org/articles/what-is-a-detached-head.html|detached head
270 state] problem has caused grief for
271 [https://www.google.com/search?q=git+detached+head+state | many
272 of Git users]. With
273 Fossil, detached heads are simply impossible because we can always find
274 our way back into the Merkle tree using one or more of the relations
275 in the SQL database.
276
277 The SQL query capabilities of Fossil make it easier to track the
@@ -287,16 +306,16 @@
287 walk the data and compute the result. And since that is a lot more
288 work, the question is seldom asked.
289
290 The ease of querying Fossil data using SQL means that status or
291 history information about the project under management is easier
292 to obtain. And being easier means that it is more likely to happen.
293 Fossil reports tend to be more detailed and useful.
294 Consider the [/timeline?c=6df7a853ec16865b|this Fossil timeline]
295 compared to its
296 [https://github.com/drhsqlite/fossil-mirror/commits/master?after=f720c106d297ca1f61bccb30c5c191b88a626d01+34|its
297 closest equivalent in GitHub]. Judge for yourself: Which of those
298 reports is more useful to a developer trying to understand what happened?
299
300 The bottom line is that even though Fossil and Git are built around
301 the same low-level data structure, the use of SQL
302 to query this data makes the data more accessible in Fossil, resulting
@@ -513,21 +532,21 @@
513 contexts, such as in the [https://en.wikipedia.org/wiki/OODA_loop | OODA
514 loop] concept.
515 Committing your changes to private branches in order to delay a public
516 push to the parent repo increases the size of your collaborators'
517 control loops, either causing them to slow their work in order to safely
518 react to your work, or to overcorrect in response to each change.
519
520 Each DVCS can be used in the opposite style, but doing so works against
521 their low-friction paths.
522
523
524 <h4 id="scale">2.5.2 Scale</h4>
525
526 The Linux kernel has a far bigger developer community than that of
527 SQLite: there are thousands and thousands of contributors to Linux, most
528 of whom do not know each others names. These thousands are responsible
529 for producing roughly 89× more code than is in SQLite. (10.7
530 [https://en.wikipedia.org/wiki/Source_lines_of_code|MLOC] vs. 0.12 MLOC
531 according to [https://dwheeler.com/sloccount/|SLOCCount].) The Linux
532 kernel and its development process were already uncommonly large back in
533 2005 when Git was designed, specifically to support the consequences of
@@ -570,13 +589,13 @@
570
571 This difference in emphasis arises from the different purposes of
572 the two systems. Git focuses on individual branches, because that
573 is exactly what you want for a highly-distributed bazaar-style project
574 such as Linux. Linus Torvalds does not want to see every check-in
575 by every contributor to Linux, as such extreme visibility does not scale
576 well. But Fossil was written for the cathedral-style SQLite project
577 with just a handful of active committers. Seeing all
578 changes on all branches all at once helps keep the whole team
579 up-to-date with what everybody else is doing, resulting in a more
580 tightly focused and cohesive implementation.
581
582
@@ -639,12 +658,14 @@
639 away in a working directory, then get a call from a customer requiring
640 that you switch to a stable branch to answer questions in terms of the
641 version that customer is running. You don't want to stop the test in
642 order to switch your lone working directory to the stable branch.
643
644 Disk space is cheap. Having several working directories, each with its
645 own local state, makes switching versions cheap and fast. Plus,
 
 
646 <tt>cd</tt> is faster to type than <tt>git checkout</tt> or <tt>fossil
647 update</tt>.
648
649
650 <h3 id="history">2.7 What you should have done vs. What you actually did</h3>
@@ -663,11 +684,11 @@
663 Fossil, in contrast, puts more emphasis on recording exactly what happened,
664 including all of the messy errors, dead-ends, experimental branches, and
665 so forth. One might argue that this
666 makes the history of a Fossil project "messy," but another point of view
667 is that this makes the history "accurate." In actual practice, the
668 superior reporting tools available in Fossil mean that the added "mess"
669 is not a factor.
670
671 Like Git, Fossil has an [/help?cmd=amend|amend command] for modifying
672 prior commits, but unlike in Git, this works not by replacing data in
673 the repository, but by adding a correction record to the repository that
674
--- www/fossil-v-git.wiki
+++ www/fossil-v-git.wiki
@@ -113,36 +113,41 @@
113 [/help?cmd=ui|UI],
114 protected by [./caps/ | a fine-grained role-based
115 access control system].
116 These additional capabilities are available for Git as 3rd-party
117 add-ons, but with Fossil they are integrated into
118 the design, to the point that it approximates
119 "[https://github.com/ | GitHub]-in-a-box."
120
121 Even if you only want straight version control, Fossil has affordances
122 not available in Git.
123
124 For instance, Fossil can do operations over all local repo clones and
125 check-out directories with a single command. You can say "<tt>fossil
126 all sync</tt>" on a laptop prior to taking it off the network hosting
127 those repos, as before going on a trip. It doesn't matter if those
128 repos are private and restricted to your company network or public
129 Internet-hosted repos, you get synced up with everything you need while
130 off-network.
131
132 You get the same capability with several other Fossil
133 sub-commands as well, such as "<tt>fossil all changes</tt>" to get a list of files
134 that you forgot to commit prior to the end of your working day, across
135 all repos.
136
137 Whenever Fossil is told to modify the local checkout in some destructive
138 way ([/help?cmd=rm|fossil rm], [/help?cmd=update|fossil update],
139 [/help?cmd=revert|fossil revert], etc.) Fossil remembers the prior state
140 and is able to return the check-out directory to that state with a
141 <tt>fossil undo</tt> command. While you cannot undo a commit in Fossil
142 — [#history | on purpose!] — as long as the change remains confined to
143 the local check-out directory only, Fossil makes undo
144 [https://git-scm.com/book/en/v2/Git-Basics-Undoing-Things|easier than in
145 Git].
146
147 For developers who choose to self-host projects rather than rely on a
148 3rd-party service such as GitHub, Fossil is much easier to set up:
149 the stand-alone Fossil executable together with a [./server/any/cgi.md|2-line CGI script]
150 suffice to instantiate a full-featured developer website. To accomplish
151 the same using Git requires locating, installing, configuring, integrating,
152 and managing a wide assortment of separate tools. Standing up a developer
153 website using Fossil can be done in minutes, whereas doing the same using
@@ -165,27 +170,39 @@
170 so that most people end up installing it via some kind of package
171 manager, simply because the creation of complicated binary packages is
172 best delegated to people skilled in their creation. Normal Git users are
173 not expected to build Git from source and install it themselves.
174
175 Fossil is a single self-contained stand-alone executable which
176 depends only on common platform libraries in its default configuration.
177 To install one of [https://fossil-scm.org/home/uv/download.html | our
178 precompiled binaries], unpack the executable from the archive and put it
179 somewhere in your <tt>PATH</tt>. To uninstall it, delete the executable.
180
181 This policy is particularly useful when running Fossil inside a
182 restrictive container, anything from [./chroot.md | classic chroot
183 jails] to modern [https://en.wikipedia.org/wiki/OS-level_virtualization
184 | OS-level virtualization mechanisms] such as
185 [https://en.wikipedia.org/wiki/Docker_(software) | Docker]. By using
186 executable compression, our
187 [/file?name=Dockerfile.in&ci=trunk | stock <tt>Dockerfile</tt>]
188 creates a container that's under 4 MiB on 64-bit Linux, including
189 a capable [https://www.busybox.net/ | Busybox] environment for live
190 debugging of the container's innards.
191
192 Modern Linux systems tend to make full static linking
193 [https://stackoverflow.com/questions/3430400/linux-static-linking-is-dead
194 | difficult], but our official executables do statically link to OpenSSL
195 to remove a version dependency, resulting in an executable that's around
196 6 MiB, depending on the platform. ([Release Build How-To | Details].)
197 The result is dependent only upon widespread platform libraries with
198 stable ABIs such as glibc, zlib, etc.
199
200 Full static linking is easier on Windows, so our precompiled Windows
201 binaries are just a ZIP archive
202 containing only "<tt>fossil.exe</tt>". There is no "<tt>setup.exe</tt>"
203 to run.
 
 
 
 
 
 
 
204
205 Fossil is easy to build from sources. Just run
206 "<tt>./configure && make</tt>" on POSIX systems and
207 "<tt>nmake /f Makefile.msc</tt>" on Windows.
208
@@ -208,18 +225,20 @@
225 matters is effectiveness and efficiency. We believe Fossil achieves
226 this.
227
228 The above size comparisons aren't apples-to-apples anyway. We've
229 compared the size of Fossil with all of its [#features | many built-in
230 features] to a fairly minimal Git installation. You must add a lot of
231 third-party software to Git to give it a Fossil-equivalent feature set.
232 Consider [https://about.gitlab.com/|GitLab], a third-party extension to
233 Git wrapping it in many features, making it roughly Fossil-equivalent,
 
234 though [https://docs.gitlab.com/ee/install/requirements.html|much more
235 resource hungry] and hence more costly to run than the equivalent Fossil
236 setup. [https://hub.docker.com/r/gitlab/gitlab-ce/ | The official GitLab
237 Community Edition container] currently clocks in at 2.66 GiB!
238
239 GitLab's requirements are easy to accept when you're dedicating
240 a local rack server or blade to it, since its minimum requirements are
241 more or less a description of the smallest
242 thing you could call a "server" these days, but when you go to host that
243 in the cloud, you can expect to pay about 8 times as much to comfortably host
244 GitLab as for Fossil.³ This difference is largely due to basic
@@ -267,11 +286,11 @@
286 Leaf check-ins in Git that lack a "ref" become "detached," making them
287 difficult to locate and subject to garbage collection. This
288 [http://gitfaq.org/articles/what-is-a-detached-head.html|detached head
289 state] problem has caused grief for
290 [https://www.google.com/search?q=git+detached+head+state | many
291 Git users]. With
292 Fossil, detached heads are simply impossible because we can always find
293 our way back into the Merkle tree using one or more of the relations
294 in the SQL database.
295
296 The SQL query capabilities of Fossil make it easier to track the
@@ -287,16 +306,16 @@
306 walk the data and compute the result. And since that is a lot more
307 work, the question is seldom asked.
308
309 The ease of querying Fossil data using SQL means that status or
310 history information about the project under management is easier
311 to obtain. Being easier means that it is more likely to happen.
312 Fossil reports tend to be more detailed and useful.
313 Compare [/timeline?c=6df7a853ec16865b|this Fossil timeline]
314 to
315 [https://github.com/drhsqlite/fossil-mirror/commits/master?after=f720c106d297ca1f61bccb30c5c191b88a626d01+34 |
316 its closest equivalent in GitHub]. Judge for yourself: which of those
317 reports is more useful to a developer trying to understand what happened?
318
319 The bottom line is that even though Fossil and Git are built around
320 the same low-level data structure, the use of SQL
321 to query this data makes the data more accessible in Fossil, resulting
@@ -513,21 +532,21 @@
532 contexts, such as in the [https://en.wikipedia.org/wiki/OODA_loop | OODA
533 loop] concept.
534 Committing your changes to private branches in order to delay a public
535 push to the parent repo increases the size of your collaborators'
536 control loops, either causing them to slow their work in order to safely
537 react to your work, or to over-correct in response to each change.
538
539 Each DVCS can be used in the opposite style, but doing so works against
540 their low-friction paths.
541
542
543 <h4 id="scale">2.5.2 Scale</h4>
544
545 The Linux kernel has a far bigger developer community than that of
546 SQLite: there are thousands and thousands of contributors to Linux, most
547 of whom do not know each other's names. These thousands are responsible
548 for producing roughly 89× more code than is in SQLite. (10.7
549 [https://en.wikipedia.org/wiki/Source_lines_of_code|MLOC] vs. 0.12 MLOC
550 according to [https://dwheeler.com/sloccount/|SLOCCount].) The Linux
551 kernel and its development process were already uncommonly large back in
552 2005 when Git was designed, specifically to support the consequences of
@@ -570,13 +589,13 @@
589
590 This difference in emphasis arises from the different purposes of
591 the two systems. Git focuses on individual branches, because that
592 is exactly what you want for a highly-distributed bazaar-style project
593 such as Linux. Linus Torvalds does not want to see every check-in
594 by every contributor to Linux: such extreme visibility does not scale
595 well. Contrast Fossil, which was written for the cathedral-style SQLite project
596 and its handful of active committers. Seeing all
597 changes on all branches all at once helps keep the whole team
598 up-to-date with what everybody else is doing, resulting in a more
599 tightly focused and cohesive implementation.
600
601
@@ -639,12 +658,14 @@
658 away in a working directory, then get a call from a customer requiring
659 that you switch to a stable branch to answer questions in terms of the
660 version that customer is running. You don't want to stop the test in
661 order to switch your lone working directory to the stable branch.
662
663 Disk space is cheap. Having several working directories — each with its
664 own local state — makes switching versions cheap and fast.
665
666 Plus,
667 <tt>cd</tt> is faster to type than <tt>git checkout</tt> or <tt>fossil
668 update</tt>.
669
670
671 <h3 id="history">2.7 What you should have done vs. What you actually did</h3>
@@ -663,11 +684,11 @@
684 Fossil, in contrast, puts more emphasis on recording exactly what happened,
685 including all of the messy errors, dead-ends, experimental branches, and
686 so forth. One might argue that this
687 makes the history of a Fossil project "messy," but another point of view
688 is that this makes the history "accurate." In actual practice, the
689 superior reporting tools available in Fossil mean that this incidental mess
690 is not a factor.
691
692 Like Git, Fossil has an [/help?cmd=amend|amend command] for modifying
693 prior commits, but unlike in Git, this works not by replacing data in
694 the repository, but by adding a correction record to the repository that
695
+80 -69
--- www/gitusers.md
+++ www/gitusers.md
@@ -40,29 +40,30 @@
4040
[ffor]: https://fossil-scm.org/forum
4141
[fvg]: ./fossil-v-git.wiki
4242
4343
4444
<a id="mwd"></a>
45
-## Repositories And Checkouts Are Distinct
45
+## Repositories and Checkouts Are Distinct
4646
47
-A repository and a check-out are distinct concepts in Fossil, whereas
48
-the two are collocated by default with Git. This difference shows up in
49
-several separate places when it comes to moving from Git to Fossil.
47
+A repository and a check-out are distinct in Fossil, allowing them to be
48
+stored in separate directory trees, whereas the two are commingled by
49
+default with Git, with the repository stored in a `.git` subdirectory
50
+underneath your working directory. This difference shows up in several
51
+separate places when it comes to moving from Git to Fossil.
5052
5153
5254
5355
#### <a id="cwork" name="scw"></a> Checkout Workflows
5456
5557
A Fossil repository is a SQLite database storing the entire history of a
5658
project. It is not normally stored inside the working tree.
57
-A Fossil working tree — also called a check-out — is a directory
59
+A Fossil working tree — [also called a check-out](./glossary.md#check-out) — is a directory
5860
that contains a snapshot of your project that you are currently working
5961
on, extracted for you from the repository database file by the `fossil`
6062
program.
6163
62
-Git commingles these two by default, with the repository stored in a
63
-`.git` subdirectory underneath your working directory. There are ways to
64
+There are ways to
6465
[emulate the Fossil working style in Git](#worktree), but because they’re not
6566
designed into the core concept of the tool, Git tutorials usually
6667
advocate a switch-in-place working mode instead, so that is how most
6768
users end up working with Git. Contrast [Fossil’s check-out workflow
6869
document][ckwf] to see the practical differences.
@@ -113,11 +114,11 @@
113114
114115
Someone coming from the Git perspective may perceive that `fossil up`
115116
has two purposes:
116117
117118
* Without the optional `VERSION` argument, it updates the working
118
- checkout to the tip of the current branch, as `git pull` does.
119
+ check-out to the tip of the current branch, as `git pull` does.
119120
120121
* Given a `VERSION` argument, it updates to the named version. If that’s the
121122
name of a branch, it updates to the *tip* of that branch, as
122123
`git checkout BRANCH` does.
123124
@@ -182,13 +183,13 @@
182183
git checkout foo-branch
183184
184185
The symlink trick has a number of problems, the largest being that
185186
symlinks weren’t available on Windows until Vista, and until the Windows
186187
10 Creators Update was released in spring of 2017, you had to be an
187
-Administrator to use the feature besides. ([Source][wsyml]) Git solved
188
+Administrator to use the feature besides. ([Source][wsyml]) Git 2.5 solved
188189
this problem back when Windows XP was Microsoft’s current offering
189
-with the `git-worktree` command, added in Git 2.5:
190
+by adding the `git-worktree` command:
190191
191192
git worktree add ../foo-branch foo-branch
192193
cd ../foo-branch
193194
194195
That is approximately equivalent to this in Fossil:
@@ -195,15 +196,17 @@
195196
196197
mkdir ../foo-branch
197198
cd ../foo-branch
198199
fossil open /path/to/repo.fossil foo-branch
199200
200
-The Fossil alternative is wordier, but this tends to be one-time setup,
201
-not something you do everyday. This author keeps a “scratch” checkout
202
-for cases where is isn’t appropriate to reuse the “trunk” checkout. The
203
-other peer checkouts therefore tend to track long-lived branches, so
204
-they rarely change once a development machine is set up.
201
+The Fossil alternative is wordier, but since this tends to be one-time setup,
202
+not something you do everyday, the overhead is insignificant. This author keeps a “scratch” check-out
203
+for cases where it’s inappropriate to reuse the “trunk” check-out,
204
+isolating all of my expedient switch-in-place actions to that one
205
+working directory. Since the other peer check-outs track long-lived
206
+branches, and that set rarely changes once a development machine is set
207
+up, I rarely pay the cost of these wordier commands.
205208
206209
That then leads us to the closest equivalent in Git to [closing a Fossil
207210
check-out](#close):
208211
209212
git worktree remove .
@@ -219,27 +222,15 @@
219222
220223
This allows you to have your Git repository directory entirely separate
221224
from your working tree, with `.git` in the check-out directory being a
222225
file that points to `../repo.git`, in this example.
223226
224
-As of Fossil 2.14, there is a direct equivalent:
225
-
226
- fossil clone https://example.com/repo
227
-
228
-It’s a shorter command because we deduce `repo.fossil` and the `repo/`
229
-working directory from the last element of the path in the URI. If you
230
-wanted to override both deductions, you’d say:
231
-
232
- fossil clone --workdir foo https://example.com/repo/bar
233
-
234
-That gets you `bar.fossil` with a `foo/` working directory alongside it.
235
-
236227
[mcw]: ./ckout-workflows.md#mcw
237228
[wsyml]: https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/
238229
239230
240
-#### <a id="iip"></a> Init In Place
231
+#### <a id="iip"></a> Init in Place
241232
242233
To illustrate the differences that Fossil’s separation of repository
243234
from working directory creates in practice, consider this common Git “init in place”
244235
method for creating a new repository from an existing tree of files,
245236
perhaps because you are placing that project under version control for
@@ -271,11 +262,11 @@
271262
purposes of this example.
272263
273264
We’ve drawn this example to create a tight parallel between Fossil and
274265
Git, not to commend this `.fsl`-at-project-root trick to you. A better
275266
choice would be `~/museum/home/long-established-project.fossil`, if
276
-you’re following [the directory scheme exemplified above](#rname). That said, it
267
+you’re following [the directory scheme exemplified in the glossary](./glossary.md#repository). That said, it
277268
does emphasize an earlier point: Fossil doesn’t care where you put the
278269
repo DB file or what you name it.
279270
280271
281272
[clone]: /help?cmd=clone
@@ -298,11 +289,13 @@
298289
to produce its [timeline CLI][tlc] and [its `/timeline` web view][tlw]
299290
using indexed SQL lookups, which generally have the info you would have
300291
to manually extract from `git log`, produced much more quickly than Git
301292
can, all else being equal: operations over [SQLite’s B-tree data structures][btree]
302293
generally run in O(log n) time, faster than O(n) for equal *n* when the
303
-constants are equal. Yet the constants are *not* equal because Fossil
294
+constants are equal.
295
+
296
+Yet the constants are *not* equal because Fossil
304297
reads from a single disk file rather than visit potentially many
305298
files in sequence as Git must, so the OS’s buffer cache can result in
306299
[still better performance][35pct].
307300
308301
Unlike Git’s log, Fossil’s timeline shows info across branches by
@@ -430,18 +423,18 @@
430423
[wdm]: ./fossil-v-git.wiki#durable
431424
432425
433426
## <a id="dhead"></a> Detached HEAD State
434427
435
-The SQL indexes in Fossil which we brought up above have a very useful
428
+The SQL indexes in Fossil which we brought up above have a useful
436429
side benefit: you cannot have a [detached HEAD state][gdh] in Fossil,
437430
the source of untold pain and data loss in Git. It simply cannot be done
438431
in Fossil, because the indexes always let us find our way back into the
439432
hash tree.
440433
441434
442
-## <a id="slcom"></a> Summary Line Convention In Commit Comments
435
+## <a id="slcom"></a> Summary Line Convention in Commit Comments
443436
444437
The Git convention of a [length-limited summary line][lsl] at the start
445438
of commit comments is not enforced or obeyed by default in Fossil.
446439
However, there is a setting under Admin → Timeline → “Truncate comment
447440
at first blank line (Git-style)” to change this for `/timeline`
@@ -506,18 +499,23 @@
506499
but we’d rather make changes only to the working directory, test the
507500
changes there, and only commit once we’re sure it’s right.
508501
509502
This also explains why we don’t have anything like `git rebase -i`
510503
to split an existing commit: in Fossil, commits are *commitments,* not
511
-something you want to go back and rewrite later.
504
+something you’re allowed to go back and rewrite later.
512505
513506
If someone does [contribute][ctrb] a commit splitting feature to Fossil,
514507
we’d expect it to be an interactive form of
515508
[`fossil stash apply`][stash], rather than follow Git’s ill-considered
516509
design leads.
510
+
511
+Until then, there’s the third-party tool [`fnc`][fnc] and
512
+[its interactive `stash` command][fncsta].
517513
518514
[ctrb]: https://fossil-scm.org/fossil/doc/trunk/www/contribute.wiki
515
+[fnc]: https://fnc.bsdbox.org/
516
+[fncsta]: https://fnc.bsdbox.org/uv/doc/fnc.1.html#stash
519517
[gcspl]: https://git-scm.com/docs/git-rebase#_splitting_commits
520518
[Patchouli]: https://pypi.org/project/patchouli/
521519
522520
523521
<a id="bneed"></a>
@@ -603,22 +601,20 @@
603601
2. It provides immediate off-machine backup of your commits. Unlike
604602
centralized version control, though, you can still work while
605603
disconnected; your changes will sync up with the remote once you get
606604
back online.
607605
608
-3. Because there is little distinction between the clones in the Fossil
606
+3. Because there is [little distinction][bu] between the clones in the Fossil
609607
model — unlike in Git, where clones often quickly diverge from each
610608
other, quite possibly on purpose — the backup advantage applies in inverse
611609
as well: if the remote server falls over dead, one of those with a
612610
clone of that repository can stand it back up, and everyone can get
613611
back to work simply by re-pointing their local repo at the new
614612
remote. If the failed remote comes back later, it can sync with the
615613
new central version, then perhaps take over as the primary source of
616614
truth once again.
617615
618
- (There are caveats to this, [covered elsewhere][bu].)
619
-
620616
[bu]: ./backup.md
621617
[setup]: ./caps/admin-v-setup.md#apsu
622618
[wflow]: ./concepts.wiki#workflow
623619
624620
@@ -667,11 +663,11 @@
667663
[mbgh]: https://github.com/github/renaming
668664
[mirgh]: ./mirrortogithub.md
669665
670666
671667
<a id="unmanaged"></a>
672
-## The "`fossil status`" Command Does Not Show Unmanaged Files
668
+## Status Does Not Show Unmanaged Files
673669
674670
The "`fossil status`" command shows you what files in your check-out have
675671
been edited and scheduled for adding or removing at the next commit.
676672
But unlike "`git status`", the "`fossil status`" command does not warn
677673
you about unmanaged files in your local check-out. There is a separate
@@ -700,38 +696,52 @@
700696
[3]: ./rebaseharm.md
701697
702698
703699
## <a id="cdiff"></a> Colorized Diffs
704700
705
-The graphical diffs in the Fossil web UI and `fossil diff --tk` use
706
-color to distinguish insertions, deletions, and replacements, but unlike
707
-with `git diff` when the output is to an ANSI X3.64 capable terminal,
708
-`fossil diff` does not.
709
-
710
-There are a few easy ways to add this feature to Fossil, though.
711
-
712
-One is to install
713
-[`colordiff`][cdiff], which is included in [many package systems][cdpkg],
714
-then say:
715
-
716
- fossil set --global diff-command 'colordiff -wu'
717
-
718
-Because this is unconditional, unlike `git diff --color=auto`, you will
719
-then have to remember to add the `-i` option to `fossil diff` commands
720
-when you want color disabled, such as when producing `patch(1)` files
721
-or piping diff output to another
722
-command that doesn’t understand ANSI escape sequences. There’s an
723
-example of this [below](#dstat).
724
-
725
-Another way, which avoids this problem, is to say instead:
726
-
727
- fossil set --global diff-command 'git diff --no-index'
728
-
729
-This delegates `fossil diff` to `git diff` by using the latter’s
730
-ability to run on files not inside any repository.
701
+When you run `git diff` on an ANSI X3.64 capable terminal, it uses color
702
+to distinguish insertions, deletions, and replacements, but as of this
703
+writing, `fossil diff` produces traditional uncolored [unified diff
704
+format][udiff] output, suitable for producing a [patch file][pfile].
705
+
706
+Nevertheless, there are multiple ways to get colorized diff output from
707
+Fossil:
708
+
709
+* The most direct method is to delegate diff behavior back to Git:
710
+
711
+ fossil set --global diff-command 'git diff --no-index'
712
+
713
+ The flag permits it to diff files that aren’t inside a Git repository.
714
+
715
+* Another method is to install [`colordiff`][cdiff] — included in
716
+ [many package systems][cdpkg] — then say:
717
+
718
+ fossil set --global diff-command 'colordiff -wu'
719
+
720
+ Because this is unconditional, unlike `git diff --color=auto`, you
721
+ will then have to remember to add the `-i` option to `fossil diff`
722
+ commands when you want color disabled, such as when producing
723
+ `patch(1)` files or piping diff output to another command that
724
+ doesn’t understand ANSI escape sequences. There’s an example of this
725
+ [below](#dstat).
726
+
727
+* Use the Fossil web UI to diff existing commits.
728
+
729
+* To diff the current working directory contents against some parent
730
+ instead, Fossil 2.17 expanded the diff command so it can produce
731
+ colorized HTML output and open it in the OS’s default web browser.
732
+ For example, `fossil diff -by` will show side-by-side diffs.
733
+
734
+* Use the older `fossil diff --tk` option to do much the same using
735
+ Tcl/Tk instead of a browser.
736
+
737
+Viewed this way, Fossil doesn’t lack colorized diffs, it simply has
738
+*one* method where they *aren’t* colorized.
731739
732740
[cdpkg]: https://repology.org/project/colordiff/versions
741
+[pfile]: https://en.wikipedia.org/wiki/Patch_(Unix)
742
+[udiff]: https://en.wikipedia.org/wiki/Diff#Unified_format
733743
734744
735745
## <a id="show"></a> Showing Information About Commits
736746
737747
While there is no direct equivalent to Git’s “`show`” command, similar
@@ -746,11 +756,11 @@
746756
747757
fossil diff --checkin COMMIT_ID
748758
749759
…only without the patch email header. Git comes out of the [LKML] world,
750760
where emailing a patch is a normal thing to do. Fossil is [designed for
751
-cohesive teams][devorg] where such drive-by patches are rarer.
761
+cohesive teams][devorg] where drive-by patches are rarer.
752762
753763
You can use any of [Fossil’s special check-in names][scin] in place of
754764
the `COMMIT_ID` in this and later examples. Fossil docs usually say
755765
“`VERSION`” or “`NAME`” where this is allowed, since the version string
756766
or name might not refer to a commit ID, but instead to a forum post, a
@@ -812,18 +822,18 @@
812822
[dcset]: https://fossil-scm.org/home/help?cmd=diff-command
813823
[dst]: https://invisible-island.net/diffstat/diffstat.html
814824
815825
816826
<a id="btnames"></a>
817
-## Branch And Tag Names
827
+## Branch and Tag Names
818828
819829
Fossil has no special restrictions on the names of tags and branches,
820830
though you might want to keep [Git's tag and branch name restrictions][gcrf]
821831
in mind if you plan on [mirroring your Fossil repository to GitHub][mirgh].
822832
823833
Fossil does not require tag and branch names to be unique. It is
824
-common, for example, to put a "`release`" tag on every release for a
834
+common, for example, to put a “`release`” tag on every release for a
825835
Fossil-hosted project. This does not create a conflict in Fossil, since
826836
Fossil resolves the ambiguity in a predictable way: the newest match
827837
wins. Therefore, “`fossil up release`” always gets you the current
828838
release in a project that uses this tagging convention.
829839
@@ -837,25 +847,26 @@
837847
838848
839849
840850
841851
<a id="cpickrev"></a>
842
-## Cherry-Picking And Reverting Commits
852
+## Cherry-Picking and Reverting Commits
843853
844854
Git’s separate "`git cherry-pick`" and “`git revert`” commands are
845855
options to the [`fossil merge` command][merge]: `--cherrypick` and
846
-`--backout`, respectively.
856
+`--backout`, respectively. We view this as sensible, since these are
857
+both merge operations, and the two actions differ only in direction.
847858
848859
Unlike in Git, the Fossil file format remembers cherrypicks and backouts
849860
and can later show them as dashed lines on the graphical timeline.
850861
851862
[merge]: /help?cmd=merge
852863
853864
854865
855866
<a id="mvrm"></a>
856
-## File Moves And Renames Are Soft By Default
867
+## File Moves and Renames Are Soft by Default
857868
858869
The "[`fossil mv`][mv]" and "[`fossil rm`][rm]" commands work like they
859870
do in CVS in that they schedule the changes for the next commit by
860871
default: they do not actually rename or delete the files in your
861872
check-out.
862873
--- www/gitusers.md
+++ www/gitusers.md
@@ -40,29 +40,30 @@
40 [ffor]: https://fossil-scm.org/forum
41 [fvg]: ./fossil-v-git.wiki
42
43
44 <a id="mwd"></a>
45 ## Repositories And Checkouts Are Distinct
46
47 A repository and a check-out are distinct concepts in Fossil, whereas
48 the two are collocated by default with Git. This difference shows up in
49 several separate places when it comes to moving from Git to Fossil.
 
 
50
51
52
53 #### <a id="cwork" name="scw"></a> Checkout Workflows
54
55 A Fossil repository is a SQLite database storing the entire history of a
56 project. It is not normally stored inside the working tree.
57 A Fossil working tree — also called a check-out — is a directory
58 that contains a snapshot of your project that you are currently working
59 on, extracted for you from the repository database file by the `fossil`
60 program.
61
62 Git commingles these two by default, with the repository stored in a
63 `.git` subdirectory underneath your working directory. There are ways to
64 [emulate the Fossil working style in Git](#worktree), but because they’re not
65 designed into the core concept of the tool, Git tutorials usually
66 advocate a switch-in-place working mode instead, so that is how most
67 users end up working with Git. Contrast [Fossil’s check-out workflow
68 document][ckwf] to see the practical differences.
@@ -113,11 +114,11 @@
113
114 Someone coming from the Git perspective may perceive that `fossil up`
115 has two purposes:
116
117 * Without the optional `VERSION` argument, it updates the working
118 checkout to the tip of the current branch, as `git pull` does.
119
120 * Given a `VERSION` argument, it updates to the named version. If that’s the
121 name of a branch, it updates to the *tip* of that branch, as
122 `git checkout BRANCH` does.
123
@@ -182,13 +183,13 @@
182 git checkout foo-branch
183
184 The symlink trick has a number of problems, the largest being that
185 symlinks weren’t available on Windows until Vista, and until the Windows
186 10 Creators Update was released in spring of 2017, you had to be an
187 Administrator to use the feature besides. ([Source][wsyml]) Git solved
188 this problem back when Windows XP was Microsoft’s current offering
189 with the `git-worktree` command, added in Git 2.5:
190
191 git worktree add ../foo-branch foo-branch
192 cd ../foo-branch
193
194 That is approximately equivalent to this in Fossil:
@@ -195,15 +196,17 @@
195
196 mkdir ../foo-branch
197 cd ../foo-branch
198 fossil open /path/to/repo.fossil foo-branch
199
200 The Fossil alternative is wordier, but this tends to be one-time setup,
201 not something you do everyday. This author keeps a “scratch” checkout
202 for cases where is isn’t appropriate to reuse the “trunk” checkout. The
203 other peer checkouts therefore tend to track long-lived branches, so
204 they rarely change once a development machine is set up.
 
 
205
206 That then leads us to the closest equivalent in Git to [closing a Fossil
207 check-out](#close):
208
209 git worktree remove .
@@ -219,27 +222,15 @@
219
220 This allows you to have your Git repository directory entirely separate
221 from your working tree, with `.git` in the check-out directory being a
222 file that points to `../repo.git`, in this example.
223
224 As of Fossil 2.14, there is a direct equivalent:
225
226 fossil clone https://example.com/repo
227
228 It’s a shorter command because we deduce `repo.fossil` and the `repo/`
229 working directory from the last element of the path in the URI. If you
230 wanted to override both deductions, you’d say:
231
232 fossil clone --workdir foo https://example.com/repo/bar
233
234 That gets you `bar.fossil` with a `foo/` working directory alongside it.
235
236 [mcw]: ./ckout-workflows.md#mcw
237 [wsyml]: https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/
238
239
240 #### <a id="iip"></a> Init In Place
241
242 To illustrate the differences that Fossil’s separation of repository
243 from working directory creates in practice, consider this common Git “init in place”
244 method for creating a new repository from an existing tree of files,
245 perhaps because you are placing that project under version control for
@@ -271,11 +262,11 @@
271 purposes of this example.
272
273 We’ve drawn this example to create a tight parallel between Fossil and
274 Git, not to commend this `.fsl`-at-project-root trick to you. A better
275 choice would be `~/museum/home/long-established-project.fossil`, if
276 you’re following [the directory scheme exemplified above](#rname). That said, it
277 does emphasize an earlier point: Fossil doesn’t care where you put the
278 repo DB file or what you name it.
279
280
281 [clone]: /help?cmd=clone
@@ -298,11 +289,13 @@
298 to produce its [timeline CLI][tlc] and [its `/timeline` web view][tlw]
299 using indexed SQL lookups, which generally have the info you would have
300 to manually extract from `git log`, produced much more quickly than Git
301 can, all else being equal: operations over [SQLite’s B-tree data structures][btree]
302 generally run in O(log n) time, faster than O(n) for equal *n* when the
303 constants are equal. Yet the constants are *not* equal because Fossil
 
 
304 reads from a single disk file rather than visit potentially many
305 files in sequence as Git must, so the OS’s buffer cache can result in
306 [still better performance][35pct].
307
308 Unlike Git’s log, Fossil’s timeline shows info across branches by
@@ -430,18 +423,18 @@
430 [wdm]: ./fossil-v-git.wiki#durable
431
432
433 ## <a id="dhead"></a> Detached HEAD State
434
435 The SQL indexes in Fossil which we brought up above have a very useful
436 side benefit: you cannot have a [detached HEAD state][gdh] in Fossil,
437 the source of untold pain and data loss in Git. It simply cannot be done
438 in Fossil, because the indexes always let us find our way back into the
439 hash tree.
440
441
442 ## <a id="slcom"></a> Summary Line Convention In Commit Comments
443
444 The Git convention of a [length-limited summary line][lsl] at the start
445 of commit comments is not enforced or obeyed by default in Fossil.
446 However, there is a setting under Admin → Timeline → “Truncate comment
447 at first blank line (Git-style)” to change this for `/timeline`
@@ -506,18 +499,23 @@
506 but we’d rather make changes only to the working directory, test the
507 changes there, and only commit once we’re sure it’s right.
508
509 This also explains why we don’t have anything like `git rebase -i`
510 to split an existing commit: in Fossil, commits are *commitments,* not
511 something you want to go back and rewrite later.
512
513 If someone does [contribute][ctrb] a commit splitting feature to Fossil,
514 we’d expect it to be an interactive form of
515 [`fossil stash apply`][stash], rather than follow Git’s ill-considered
516 design leads.
 
 
 
517
518 [ctrb]: https://fossil-scm.org/fossil/doc/trunk/www/contribute.wiki
 
 
519 [gcspl]: https://git-scm.com/docs/git-rebase#_splitting_commits
520 [Patchouli]: https://pypi.org/project/patchouli/
521
522
523 <a id="bneed"></a>
@@ -603,22 +601,20 @@
603 2. It provides immediate off-machine backup of your commits. Unlike
604 centralized version control, though, you can still work while
605 disconnected; your changes will sync up with the remote once you get
606 back online.
607
608 3. Because there is little distinction between the clones in the Fossil
609 model — unlike in Git, where clones often quickly diverge from each
610 other, quite possibly on purpose — the backup advantage applies in inverse
611 as well: if the remote server falls over dead, one of those with a
612 clone of that repository can stand it back up, and everyone can get
613 back to work simply by re-pointing their local repo at the new
614 remote. If the failed remote comes back later, it can sync with the
615 new central version, then perhaps take over as the primary source of
616 truth once again.
617
618 (There are caveats to this, [covered elsewhere][bu].)
619
620 [bu]: ./backup.md
621 [setup]: ./caps/admin-v-setup.md#apsu
622 [wflow]: ./concepts.wiki#workflow
623
624
@@ -667,11 +663,11 @@
667 [mbgh]: https://github.com/github/renaming
668 [mirgh]: ./mirrortogithub.md
669
670
671 <a id="unmanaged"></a>
672 ## The "`fossil status`" Command Does Not Show Unmanaged Files
673
674 The "`fossil status`" command shows you what files in your check-out have
675 been edited and scheduled for adding or removing at the next commit.
676 But unlike "`git status`", the "`fossil status`" command does not warn
677 you about unmanaged files in your local check-out. There is a separate
@@ -700,38 +696,52 @@
700 [3]: ./rebaseharm.md
701
702
703 ## <a id="cdiff"></a> Colorized Diffs
704
705 The graphical diffs in the Fossil web UI and `fossil diff --tk` use
706 color to distinguish insertions, deletions, and replacements, but unlike
707 with `git diff` when the output is to an ANSI X3.64 capable terminal,
708 `fossil diff` does not.
709
710 There are a few easy ways to add this feature to Fossil, though.
711
712 One is to install
713 [`colordiff`][cdiff], which is included in [many package systems][cdpkg],
714 then say:
715
716 fossil set --global diff-command 'colordiff -wu'
717
718 Because this is unconditional, unlike `git diff --color=auto`, you will
719 then have to remember to add the `-i` option to `fossil diff` commands
720 when you want color disabled, such as when producing `patch(1)` files
721 or piping diff output to another
722 command that doesn’t understand ANSI escape sequences. There’s an
723 example of this [below](#dstat).
724
725 Another way, which avoids this problem, is to say instead:
726
727 fossil set --global diff-command 'git diff --no-index'
728
729 This delegates `fossil diff` to `git diff` by using the latter’s
730 ability to run on files not inside any repository.
 
 
 
 
 
 
 
 
 
 
 
 
731
732 [cdpkg]: https://repology.org/project/colordiff/versions
 
 
733
734
735 ## <a id="show"></a> Showing Information About Commits
736
737 While there is no direct equivalent to Git’s “`show`” command, similar
@@ -746,11 +756,11 @@
746
747 fossil diff --checkin COMMIT_ID
748
749 …only without the patch email header. Git comes out of the [LKML] world,
750 where emailing a patch is a normal thing to do. Fossil is [designed for
751 cohesive teams][devorg] where such drive-by patches are rarer.
752
753 You can use any of [Fossil’s special check-in names][scin] in place of
754 the `COMMIT_ID` in this and later examples. Fossil docs usually say
755 “`VERSION`” or “`NAME`” where this is allowed, since the version string
756 or name might not refer to a commit ID, but instead to a forum post, a
@@ -812,18 +822,18 @@
812 [dcset]: https://fossil-scm.org/home/help?cmd=diff-command
813 [dst]: https://invisible-island.net/diffstat/diffstat.html
814
815
816 <a id="btnames"></a>
817 ## Branch And Tag Names
818
819 Fossil has no special restrictions on the names of tags and branches,
820 though you might want to keep [Git's tag and branch name restrictions][gcrf]
821 in mind if you plan on [mirroring your Fossil repository to GitHub][mirgh].
822
823 Fossil does not require tag and branch names to be unique. It is
824 common, for example, to put a "`release`" tag on every release for a
825 Fossil-hosted project. This does not create a conflict in Fossil, since
826 Fossil resolves the ambiguity in a predictable way: the newest match
827 wins. Therefore, “`fossil up release`” always gets you the current
828 release in a project that uses this tagging convention.
829
@@ -837,25 +847,26 @@
837
838
839
840
841 <a id="cpickrev"></a>
842 ## Cherry-Picking And Reverting Commits
843
844 Git’s separate "`git cherry-pick`" and “`git revert`” commands are
845 options to the [`fossil merge` command][merge]: `--cherrypick` and
846 `--backout`, respectively.
 
847
848 Unlike in Git, the Fossil file format remembers cherrypicks and backouts
849 and can later show them as dashed lines on the graphical timeline.
850
851 [merge]: /help?cmd=merge
852
853
854
855 <a id="mvrm"></a>
856 ## File Moves And Renames Are Soft By Default
857
858 The "[`fossil mv`][mv]" and "[`fossil rm`][rm]" commands work like they
859 do in CVS in that they schedule the changes for the next commit by
860 default: they do not actually rename or delete the files in your
861 check-out.
862
--- www/gitusers.md
+++ www/gitusers.md
@@ -40,29 +40,30 @@
40 [ffor]: https://fossil-scm.org/forum
41 [fvg]: ./fossil-v-git.wiki
42
43
44 <a id="mwd"></a>
45 ## Repositories and Checkouts Are Distinct
46
47 A repository and a check-out are distinct in Fossil, allowing them to be
48 stored in separate directory trees, whereas the two are commingled by
49 default with Git, with the repository stored in a `.git` subdirectory
50 underneath your working directory. This difference shows up in several
51 separate places when it comes to moving from Git to Fossil.
52
53
54
55 #### <a id="cwork" name="scw"></a> Checkout Workflows
56
57 A Fossil repository is a SQLite database storing the entire history of a
58 project. It is not normally stored inside the working tree.
59 A Fossil working tree — [also called a check-out](./glossary.md#check-out) — is a directory
60 that contains a snapshot of your project that you are currently working
61 on, extracted for you from the repository database file by the `fossil`
62 program.
63
64 There are ways to
 
65 [emulate the Fossil working style in Git](#worktree), but because they’re not
66 designed into the core concept of the tool, Git tutorials usually
67 advocate a switch-in-place working mode instead, so that is how most
68 users end up working with Git. Contrast [Fossil’s check-out workflow
69 document][ckwf] to see the practical differences.
@@ -113,11 +114,11 @@
114
115 Someone coming from the Git perspective may perceive that `fossil up`
116 has two purposes:
117
118 * Without the optional `VERSION` argument, it updates the working
119 check-out to the tip of the current branch, as `git pull` does.
120
121 * Given a `VERSION` argument, it updates to the named version. If that’s the
122 name of a branch, it updates to the *tip* of that branch, as
123 `git checkout BRANCH` does.
124
@@ -182,13 +183,13 @@
183 git checkout foo-branch
184
185 The symlink trick has a number of problems, the largest being that
186 symlinks weren’t available on Windows until Vista, and until the Windows
187 10 Creators Update was released in spring of 2017, you had to be an
188 Administrator to use the feature besides. ([Source][wsyml]) Git 2.5 solved
189 this problem back when Windows XP was Microsoft’s current offering
190 by adding the `git-worktree` command:
191
192 git worktree add ../foo-branch foo-branch
193 cd ../foo-branch
194
195 That is approximately equivalent to this in Fossil:
@@ -195,15 +196,17 @@
196
197 mkdir ../foo-branch
198 cd ../foo-branch
199 fossil open /path/to/repo.fossil foo-branch
200
201 The Fossil alternative is wordier, but since this tends to be one-time setup,
202 not something you do everyday, the overhead is insignificant. This author keeps a “scratch” check-out
203 for cases where it’s inappropriate to reuse the “trunk” check-out,
204 isolating all of my expedient switch-in-place actions to that one
205 working directory. Since the other peer check-outs track long-lived
206 branches, and that set rarely changes once a development machine is set
207 up, I rarely pay the cost of these wordier commands.
208
209 That then leads us to the closest equivalent in Git to [closing a Fossil
210 check-out](#close):
211
212 git worktree remove .
@@ -219,27 +222,15 @@
222
223 This allows you to have your Git repository directory entirely separate
224 from your working tree, with `.git` in the check-out directory being a
225 file that points to `../repo.git`, in this example.
226
 
 
 
 
 
 
 
 
 
 
 
 
227 [mcw]: ./ckout-workflows.md#mcw
228 [wsyml]: https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/
229
230
231 #### <a id="iip"></a> Init in Place
232
233 To illustrate the differences that Fossil’s separation of repository
234 from working directory creates in practice, consider this common Git “init in place”
235 method for creating a new repository from an existing tree of files,
236 perhaps because you are placing that project under version control for
@@ -271,11 +262,11 @@
262 purposes of this example.
263
264 We’ve drawn this example to create a tight parallel between Fossil and
265 Git, not to commend this `.fsl`-at-project-root trick to you. A better
266 choice would be `~/museum/home/long-established-project.fossil`, if
267 you’re following [the directory scheme exemplified in the glossary](./glossary.md#repository). That said, it
268 does emphasize an earlier point: Fossil doesn’t care where you put the
269 repo DB file or what you name it.
270
271
272 [clone]: /help?cmd=clone
@@ -298,11 +289,13 @@
289 to produce its [timeline CLI][tlc] and [its `/timeline` web view][tlw]
290 using indexed SQL lookups, which generally have the info you would have
291 to manually extract from `git log`, produced much more quickly than Git
292 can, all else being equal: operations over [SQLite’s B-tree data structures][btree]
293 generally run in O(log n) time, faster than O(n) for equal *n* when the
294 constants are equal.
295
296 Yet the constants are *not* equal because Fossil
297 reads from a single disk file rather than visit potentially many
298 files in sequence as Git must, so the OS’s buffer cache can result in
299 [still better performance][35pct].
300
301 Unlike Git’s log, Fossil’s timeline shows info across branches by
@@ -430,18 +423,18 @@
423 [wdm]: ./fossil-v-git.wiki#durable
424
425
426 ## <a id="dhead"></a> Detached HEAD State
427
428 The SQL indexes in Fossil which we brought up above have a useful
429 side benefit: you cannot have a [detached HEAD state][gdh] in Fossil,
430 the source of untold pain and data loss in Git. It simply cannot be done
431 in Fossil, because the indexes always let us find our way back into the
432 hash tree.
433
434
435 ## <a id="slcom"></a> Summary Line Convention in Commit Comments
436
437 The Git convention of a [length-limited summary line][lsl] at the start
438 of commit comments is not enforced or obeyed by default in Fossil.
439 However, there is a setting under Admin → Timeline → “Truncate comment
440 at first blank line (Git-style)” to change this for `/timeline`
@@ -506,18 +499,23 @@
499 but we’d rather make changes only to the working directory, test the
500 changes there, and only commit once we’re sure it’s right.
501
502 This also explains why we don’t have anything like `git rebase -i`
503 to split an existing commit: in Fossil, commits are *commitments,* not
504 something you’re allowed to go back and rewrite later.
505
506 If someone does [contribute][ctrb] a commit splitting feature to Fossil,
507 we’d expect it to be an interactive form of
508 [`fossil stash apply`][stash], rather than follow Git’s ill-considered
509 design leads.
510
511 Until then, there’s the third-party tool [`fnc`][fnc] and
512 [its interactive `stash` command][fncsta].
513
514 [ctrb]: https://fossil-scm.org/fossil/doc/trunk/www/contribute.wiki
515 [fnc]: https://fnc.bsdbox.org/
516 [fncsta]: https://fnc.bsdbox.org/uv/doc/fnc.1.html#stash
517 [gcspl]: https://git-scm.com/docs/git-rebase#_splitting_commits
518 [Patchouli]: https://pypi.org/project/patchouli/
519
520
521 <a id="bneed"></a>
@@ -603,22 +601,20 @@
601 2. It provides immediate off-machine backup of your commits. Unlike
602 centralized version control, though, you can still work while
603 disconnected; your changes will sync up with the remote once you get
604 back online.
605
606 3. Because there is [little distinction][bu] between the clones in the Fossil
607 model — unlike in Git, where clones often quickly diverge from each
608 other, quite possibly on purpose — the backup advantage applies in inverse
609 as well: if the remote server falls over dead, one of those with a
610 clone of that repository can stand it back up, and everyone can get
611 back to work simply by re-pointing their local repo at the new
612 remote. If the failed remote comes back later, it can sync with the
613 new central version, then perhaps take over as the primary source of
614 truth once again.
615
 
 
616 [bu]: ./backup.md
617 [setup]: ./caps/admin-v-setup.md#apsu
618 [wflow]: ./concepts.wiki#workflow
619
620
@@ -667,11 +663,11 @@
663 [mbgh]: https://github.com/github/renaming
664 [mirgh]: ./mirrortogithub.md
665
666
667 <a id="unmanaged"></a>
668 ## Status Does Not Show Unmanaged Files
669
670 The "`fossil status`" command shows you what files in your check-out have
671 been edited and scheduled for adding or removing at the next commit.
672 But unlike "`git status`", the "`fossil status`" command does not warn
673 you about unmanaged files in your local check-out. There is a separate
@@ -700,38 +696,52 @@
696 [3]: ./rebaseharm.md
697
698
699 ## <a id="cdiff"></a> Colorized Diffs
700
701 When you run `git diff` on an ANSI X3.64 capable terminal, it uses color
702 to distinguish insertions, deletions, and replacements, but as of this
703 writing, `fossil diff` produces traditional uncolored [unified diff
704 format][udiff] output, suitable for producing a [patch file][pfile].
705
706 Nevertheless, there are multiple ways to get colorized diff output from
707 Fossil:
708
709 * The most direct method is to delegate diff behavior back to Git:
710
711 fossil set --global diff-command 'git diff --no-index'
712
713 The flag permits it to diff files that aren’t inside a Git repository.
714
715 * Another method is to install [`colordiff`][cdiff] — included in
716 [many package systems][cdpkg] — then say:
717
718 fossil set --global diff-command 'colordiff -wu'
719
720 Because this is unconditional, unlike `git diff --color=auto`, you
721 will then have to remember to add the `-i` option to `fossil diff`
722 commands when you want color disabled, such as when producing
723 `patch(1)` files or piping diff output to another command that
724 doesn’t understand ANSI escape sequences. There’s an example of this
725 [below](#dstat).
726
727 * Use the Fossil web UI to diff existing commits.
728
729 * To diff the current working directory contents against some parent
730 instead, Fossil 2.17 expanded the diff command so it can produce
731 colorized HTML output and open it in the OS’s default web browser.
732 For example, `fossil diff -by` will show side-by-side diffs.
733
734 * Use the older `fossil diff --tk` option to do much the same using
735 Tcl/Tk instead of a browser.
736
737 Viewed this way, Fossil doesn’t lack colorized diffs, it simply has
738 *one* method where they *aren’t* colorized.
739
740 [cdpkg]: https://repology.org/project/colordiff/versions
741 [pfile]: https://en.wikipedia.org/wiki/Patch_(Unix)
742 [udiff]: https://en.wikipedia.org/wiki/Diff#Unified_format
743
744
745 ## <a id="show"></a> Showing Information About Commits
746
747 While there is no direct equivalent to Git’s “`show`” command, similar
@@ -746,11 +756,11 @@
756
757 fossil diff --checkin COMMIT_ID
758
759 …only without the patch email header. Git comes out of the [LKML] world,
760 where emailing a patch is a normal thing to do. Fossil is [designed for
761 cohesive teams][devorg] where drive-by patches are rarer.
762
763 You can use any of [Fossil’s special check-in names][scin] in place of
764 the `COMMIT_ID` in this and later examples. Fossil docs usually say
765 “`VERSION`” or “`NAME`” where this is allowed, since the version string
766 or name might not refer to a commit ID, but instead to a forum post, a
@@ -812,18 +822,18 @@
822 [dcset]: https://fossil-scm.org/home/help?cmd=diff-command
823 [dst]: https://invisible-island.net/diffstat/diffstat.html
824
825
826 <a id="btnames"></a>
827 ## Branch and Tag Names
828
829 Fossil has no special restrictions on the names of tags and branches,
830 though you might want to keep [Git's tag and branch name restrictions][gcrf]
831 in mind if you plan on [mirroring your Fossil repository to GitHub][mirgh].
832
833 Fossil does not require tag and branch names to be unique. It is
834 common, for example, to put a “`release`” tag on every release for a
835 Fossil-hosted project. This does not create a conflict in Fossil, since
836 Fossil resolves the ambiguity in a predictable way: the newest match
837 wins. Therefore, “`fossil up release`” always gets you the current
838 release in a project that uses this tagging convention.
839
@@ -837,25 +847,26 @@
847
848
849
850
851 <a id="cpickrev"></a>
852 ## Cherry-Picking and Reverting Commits
853
854 Git’s separate "`git cherry-pick`" and “`git revert`” commands are
855 options to the [`fossil merge` command][merge]: `--cherrypick` and
856 `--backout`, respectively. We view this as sensible, since these are
857 both merge operations, and the two actions differ only in direction.
858
859 Unlike in Git, the Fossil file format remembers cherrypicks and backouts
860 and can later show them as dashed lines on the graphical timeline.
861
862 [merge]: /help?cmd=merge
863
864
865
866 <a id="mvrm"></a>
867 ## File Moves and Renames Are Soft by Default
868
869 The "[`fossil mv`][mv]" and "[`fossil rm`][rm]" commands work like they
870 do in CVS in that they schedule the changes for the next commit by
871 default: they do not actually rename or delete the files in your
872 check-out.
873
+4 -4
--- www/index.wiki
+++ www/index.wiki
@@ -83,16 +83,16 @@
8383
the repository are consistent prior to each commit.
8484
8585
8. <b>Free and Open-Source</b> - [../COPYRIGHT-BSD2.txt|2-clause BSD license].
8686
8787
<hr>
88
-<h3>Latest Release: 2.18 ([/timeline?c=version-2.18|2022-02-23])</h3>
88
+<h3>Latest Release: 2.19 ([/timeline?c=version-2.19|2022-07-21])</h3>
8989
9090
* [/uv/download.html|Download]
91
- * [./changes.wiki#v2_18|Change Summary]
92
- * [/timeline?p=version-2.18&bt=version-2.17&y=ci|Check-ins in version 2.18]
93
- * [/timeline?df=version-2.18&y=ci|Check-ins derived from the 2.18 release]
91
+ * [./changes.wiki#v2_19|Change Summary]
92
+ * [/timeline?p=version-2.19&bt=version-2.18&y=ci|Check-ins in version 2.19]
93
+ * [/timeline?df=version-2.19&y=ci|Check-ins derived from the 2.19 release]
9494
* [/timeline?t=release|Timeline of all past releases]
9595
9696
<hr>
9797
<h3>Quick Start</h3>
9898
9999
--- www/index.wiki
+++ www/index.wiki
@@ -83,16 +83,16 @@
83 the repository are consistent prior to each commit.
84
85 8. <b>Free and Open-Source</b> - [../COPYRIGHT-BSD2.txt|2-clause BSD license].
86
87 <hr>
88 <h3>Latest Release: 2.18 ([/timeline?c=version-2.18|2022-02-23])</h3>
89
90 * [/uv/download.html|Download]
91 * [./changes.wiki#v2_18|Change Summary]
92 * [/timeline?p=version-2.18&bt=version-2.17&y=ci|Check-ins in version 2.18]
93 * [/timeline?df=version-2.18&y=ci|Check-ins derived from the 2.18 release]
94 * [/timeline?t=release|Timeline of all past releases]
95
96 <hr>
97 <h3>Quick Start</h3>
98
99
--- www/index.wiki
+++ www/index.wiki
@@ -83,16 +83,16 @@
83 the repository are consistent prior to each commit.
84
85 8. <b>Free and Open-Source</b> - [../COPYRIGHT-BSD2.txt|2-clause BSD license].
86
87 <hr>
88 <h3>Latest Release: 2.19 ([/timeline?c=version-2.19|2022-07-21])</h3>
89
90 * [/uv/download.html|Download]
91 * [./changes.wiki#v2_19|Change Summary]
92 * [/timeline?p=version-2.19&bt=version-2.18&y=ci|Check-ins in version 2.19]
93 * [/timeline?df=version-2.19&y=ci|Check-ins derived from the 2.19 release]
94 * [/timeline?t=release|Timeline of all past releases]
95
96 <hr>
97 <h3>Quick Start</h3>
98
99
--- www/mkindex.tcl
+++ www/mkindex.tcl
@@ -167,10 +167,13 @@
167167
<li> <a href='history.md'>Purpose and History of Fossil</a>
168168
<li> <a href='build.wiki'>Compiling and installing Fossil</a>
169169
<li> <a href='../COPYRIGHT-BSD2.txt'>License</a>
170170
<li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a>
171171
<li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a>
172
+ <ul><li><a href='$ROOT/wiki?name=Release Build How-To'>Release Build How-To</a>, a.k.a.
173
+ how deliverables are built</li></ul>
174
+</li>
172175
<li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a>
173176
<li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a>
174177
</ul>
175178
<h2 id="pindex">Other Documents:</h2>
176179
<ul>}
177180
--- www/mkindex.tcl
+++ www/mkindex.tcl
@@ -167,10 +167,13 @@
167 <li> <a href='history.md'>Purpose and History of Fossil</a>
168 <li> <a href='build.wiki'>Compiling and installing Fossil</a>
169 <li> <a href='../COPYRIGHT-BSD2.txt'>License</a>
170 <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a>
171 <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a>
 
 
 
172 <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a>
173 <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a>
174 </ul>
175 <h2 id="pindex">Other Documents:</h2>
176 <ul>}
177
--- www/mkindex.tcl
+++ www/mkindex.tcl
@@ -167,10 +167,13 @@
167 <li> <a href='history.md'>Purpose and History of Fossil</a>
168 <li> <a href='build.wiki'>Compiling and installing Fossil</a>
169 <li> <a href='../COPYRIGHT-BSD2.txt'>License</a>
170 <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a>
171 <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a>
172 <ul><li><a href='$ROOT/wiki?name=Release Build How-To'>Release Build How-To</a>, a.k.a.
173 how deliverables are built</li></ul>
174 </li>
175 <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a>
176 <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a>
177 </ul>
178 <h2 id="pindex">Other Documents:</h2>
179 <ul>}
180
--- www/permutedindex.html
+++ www/permutedindex.html
@@ -13,10 +13,13 @@
1313
<li> <a href='history.md'>Purpose and History of Fossil</a>
1414
<li> <a href='build.wiki'>Compiling and installing Fossil</a>
1515
<li> <a href='../COPYRIGHT-BSD2.txt'>License</a>
1616
<li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a>
1717
<li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a>
18
+ <ul><li><a href='$ROOT/wiki?name=Release Build How-To'>Release Build How-To</a>, a.k.a.
19
+ how deliverables are built</li></ul>
20
+</li>
1821
<li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a>
1922
<li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a>
2023
</ul>
2124
<h2 id="pindex">Other Documents:</h2>
2225
<ul>
2326
--- www/permutedindex.html
+++ www/permutedindex.html
@@ -13,10 +13,13 @@
13 <li> <a href='history.md'>Purpose and History of Fossil</a>
14 <li> <a href='build.wiki'>Compiling and installing Fossil</a>
15 <li> <a href='../COPYRIGHT-BSD2.txt'>License</a>
16 <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a>
17 <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a>
 
 
 
18 <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a>
19 <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a>
20 </ul>
21 <h2 id="pindex">Other Documents:</h2>
22 <ul>
23
--- www/permutedindex.html
+++ www/permutedindex.html
@@ -13,10 +13,13 @@
13 <li> <a href='history.md'>Purpose and History of Fossil</a>
14 <li> <a href='build.wiki'>Compiling and installing Fossil</a>
15 <li> <a href='../COPYRIGHT-BSD2.txt'>License</a>
16 <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a>
17 <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a>
18 <ul><li><a href='$ROOT/wiki?name=Release Build How-To'>Release Build How-To</a>, a.k.a.
19 how deliverables are built</li></ul>
20 </li>
21 <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a>
22 <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a>
23 </ul>
24 <h2 id="pindex">Other Documents:</h2>
25 <ul>
26
--- www/quotes.wiki
+++ www/quotes.wiki
@@ -160,6 +160,12 @@
160160
<li>github is such a pale shadow of what fossil does.
161161
162162
<blockquote>
163163
<i>dkf on the Tcl chatroom, 2013-12-06</i>
164164
</blockquote>
165
+
166
+<li>&#91;With fossil&#93; I actually enjoy keeping track of source files again.
167
+
168
+<blockquote>
169
+<a href="https://wholesomedonut.prose.sh/using-fossil-not-git">https://wholesomedonut.prose.sh/using-fossil-not-git</a>
170
+</blockquote>
165171
</ol>
166172
--- www/quotes.wiki
+++ www/quotes.wiki
@@ -160,6 +160,12 @@
160 <li>github is such a pale shadow of what fossil does.
161
162 <blockquote>
163 <i>dkf on the Tcl chatroom, 2013-12-06</i>
164 </blockquote>
 
 
 
 
 
 
165 </ol>
166
--- www/quotes.wiki
+++ www/quotes.wiki
@@ -160,6 +160,12 @@
160 <li>github is such a pale shadow of what fossil does.
161
162 <blockquote>
163 <i>dkf on the Tcl chatroom, 2013-12-06</i>
164 </blockquote>
165
166 <li>&#91;With fossil&#93; I actually enjoy keeping track of source files again.
167
168 <blockquote>
169 <a href="https://wholesomedonut.prose.sh/using-fossil-not-git">https://wholesomedonut.prose.sh/using-fossil-not-git</a>
170 </blockquote>
171 </ol>
172
+1 -1
--- www/sync.wiki
+++ www/sync.wiki
@@ -1042,11 +1042,11 @@
10421042
<ul>
10431043
<li> <tt>http-request-</tt><i>N</i><tt>.txt</tt>
10441044
<li> <tt>http-reply-</tt><i>N</i><tt>.txt</tt>
10451045
</ul>
10461046
1047
-<p>In the above, <i>N</i> is a integer that increments with each
1047
+<p>In the above, <i>N</i> is an integer that increments with each
10481048
round-trip. If you are having trouble on the server side,
10491049
you can run the "[/help?cmd=test-http|fossil test-http]" command in a
10501050
debugger using one the "http-request-N.txt" files as input and
10511051
single step through the processing performed by the server.
10521052
10531053
--- www/sync.wiki
+++ www/sync.wiki
@@ -1042,11 +1042,11 @@
1042 <ul>
1043 <li> <tt>http-request-</tt><i>N</i><tt>.txt</tt>
1044 <li> <tt>http-reply-</tt><i>N</i><tt>.txt</tt>
1045 </ul>
1046
1047 <p>In the above, <i>N</i> is a integer that increments with each
1048 round-trip. If you are having trouble on the server side,
1049 you can run the "[/help?cmd=test-http|fossil test-http]" command in a
1050 debugger using one the "http-request-N.txt" files as input and
1051 single step through the processing performed by the server.
1052
1053
--- www/sync.wiki
+++ www/sync.wiki
@@ -1042,11 +1042,11 @@
1042 <ul>
1043 <li> <tt>http-request-</tt><i>N</i><tt>.txt</tt>
1044 <li> <tt>http-reply-</tt><i>N</i><tt>.txt</tt>
1045 </ul>
1046
1047 <p>In the above, <i>N</i> is an integer that increments with each
1048 round-trip. If you are having trouble on the server side,
1049 you can run the "[/help?cmd=test-http|fossil test-http]" command in a
1050 debugger using one the "http-request-N.txt" files as input and
1051 single step through the processing performed by the server.
1052
1053

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button