pax_global_header 0000666 0000000 0000000 00000000064 15004722224 0014510 g ustar 00root root 0000000 0000000 52 comment=5e679c9823a6e10c206356b97a2b31996d20e69a
tinyssh-20250501/ 0000775 0000000 0000000 00000000000 15004722224 0013451 5 ustar 00root root 0000000 0000000 tinyssh-20250501/.clang-format 0000664 0000000 0000000 00000011032 15004722224 0016021 0 ustar 00root root 0000000 0000000 # 20211227
# based on LLVM
# AllowShortBlocksOnASingleLine: Always
# AllowShortLoopsOnASingleLine: true
# AllowShortIfStatementsOnASingleLine: WithoutElse
# IndentWidth: 4
# TabWidth: 4
# SortIncludes: false
# BreakBeforeBraces: Custom
# BeforeElse: true
# ColumnLimit: 80
# SpaceAfterCStyleCast: true
# IndentCaseLabels: true
---
Language: Cpp
# BasedOnStyle: LLVM
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveMacros: false
AlignConsecutiveAssignments: false
AlignConsecutiveBitFields: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: Align
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: true
AllowAllConstructorInitializersOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortEnumsOnASingleLine: true
AllowShortBlocksOnASingleLine: Always
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortLambdasOnASingleLine: All
AllowShortIfStatementsOnASingleLine: WithoutElse
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: MultiLine
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterCaseLabel: false
AfterClass: false
AfterControlStatement: Never
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: true
BeforeLambdaBody: false
BeforeWhile: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Custom
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 80
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DeriveLineEnding: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
SortPriority: 0
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
SortPriority: 0
- Regex: '.*'
Priority: 1
SortPriority: 0
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
IndentCaseLabels: true
IndentCaseBlocks: false
IndentGotoLabels: true
IndentPPDirectives: None
IndentExternBlock: AfterExternBlock
IndentWidth: 4
IndentWrappedFunctionNames: false
InsertTrailingCommas: None
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2
ObjCBreakBeforeNestedBlockParam: true
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
ReflowComments: true
SortIncludes: false
SortUsingDeclarations: true
SpaceAfterCStyleCast: true
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInConditionalStatement: false
# XXX - should be false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
SpaceBeforeSquareBrackets: false
Standard: Latest
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 4
UseCRLF: false
UseTab: Never
WhitespaceSensitiveMacros:
- STRINGIZE
- PP_STRINGIZE
- BOOST_PP_STRINGIZE
...
tinyssh-20250501/.gitignore 0000664 0000000 0000000 00000000007 15004722224 0015436 0 ustar 00root root 0000000 0000000 /build
tinyssh-20250501/CHANGELOG.md 0000664 0000000 0000000 00000004554 15004722224 0015272 0 ustar 00root root 0000000 0000000 ### 20250501
- Fixed minor strict kex violation, thanks to Fabian Bäumer and Marcus Brinkmann for the bug report.
- Updated cryptoint to version 20250414
- Added support for external lib1305
### 20250201
- Relicensed under CC0-1.0 OR 0BSD OR MIT-0 OR MIT
- Final reformatting using clang-format
### 20250126 (pre-relase)
- Fixed more compiler warnings
- More used cryptoint
### 20241201 (pre-relase)
- Switched to [cryptoint](https://libntruprime.cr.yp.to/libntruprime-20241021/cryptoint.html) 20241003
- Switched to tests from [SUPERCOP](https://bench.cr.yp.to/supercop.html) for crypto primitives
- Fixed various compiler warnings
### 20241111 (pre-relase)
- Fixed implicit-function-declaration warning packet_put.c (tnx @lanodan)
- Modification of the build system to a simple Makefile (old build system still in directory 'old')
- Added support for external librandombytes, lib25519, libntruprime library
- Dropped support for other NaCl-compatible external libraries
- Temporary disabled unit tests.
### 20240101
- fixed channel_forkpty() race condition between close(slave) in parent process and login_tty(slave) in child process
- fixed behavior when using terminal mode and stdin redirected to /dev/null 'ssh -tt -n'
- added an 'strict-key' key exchange kex-strict-s-v00@openssh.com (Mitigates CVE-2023-48795 "Terrapin attack")
### 20230101
- LICENCE update from public-domain to CC0, public domain works differently depending on the country, to avoid it, set explicitly CC0
- fixed sysdep tests, tnx Johannes Nixdorf
### 20220801
- tinyssh/getln.c don't close fd in case of error
- use null fields in utmpx calls for logout
- do not reverse the argument order in LIBS
- fill utmp(x)'s ut_addr_v6 field when it exists
- updated crypto/crypto_onetimeauth_poly1305.c
### 20220311
- fixed build on big-endian platforms
### 20220305 (workaround release)
- use PACKET_LIMIT/2 as incoming maximum packet size, it's workaround for packets with miscalculated packet_length
### 20220222
- add tinysshnoneauthd
### 20220101
- add tinysshnoneauthd
- fixed return error message when second channel is requested
- man/tinysshd-{make,print}key.1 -> man/tinysshd-{make,print}key.8
### 20210601
- add tools/tinyssh-convert
- fix log error messages
- honor "max packet size" requested from the client
### 20210319
- removed sntrup4591761x25519-sha512@tinyssh.org
- added sntrup761x25519-sha512@openssh.com
tinyssh-20250501/LICENCE.md 0000664 0000000 0000000 00000001511 15004722224 0015033 0 ustar 00root root 0000000 0000000 TinySSH is hereby placed into the public domain.
SPDX-License-Identifier: CC0-1.0 OR 0BSD OR MIT-0 OR MIT
- [CC0-1.0](https://spdx.org/licenses/CC0-1.0.html)
- [0BSD](https://spdx.org/licenses/0BSD.html)
- [MIT-0](https://spdx.org/licenses/MIT-0.html)
- [MIT](https://spdx.org/licenses/MIT.html)
Comment:
"Public domain" works differently depending on the country, therefore LICENCE updated to CC0-1.0 OR 0BSD OR MIT-0 OR MIT.
History:
- initial release - public domain
- 20230101 - CC0
- 20250201 - CC0-1.0 OR 0BSD OR MIT-0 OR MIT.
Other:
_crypto-test_*.inc: derived from djb work from supercop/lib25519/libntruprime/lib1305, license: LicenseRef-PD-hp OR CC0-1.0 OR 0BSD OR MIT-0 OR MIT
cryptoint/*: copy of cryptoint library from D. J. Bernstein, see cryptoint/README.md, license: LicenseRef-PD-hp OR CC0-1.0 OR 0BSD OR MIT-0 OR MIT
tinyssh-20250501/Makefile 0000664 0000000 0000000 00000146560 15004722224 0015125 0 ustar 00root root 0000000 0000000 CC?=cc
CFLAGS+=-W -Wall -Os -fPIC -fwrapv -Icryptoint
LDFLAGS?=
CPPFLAGS?=
DESTDIR?=
PREFIX?=/usr/local
INSTALL?=install
LINKS=tinysshd-makekey tinysshd-printkey tinysshnoneauthd
BINARIES=tinysshd _tinysshd-printkex _tinysshd-speed _tinysshd-test-hello1 \
_tinysshd-test-hello2 _tinysshd-test-kex1 _tinysshd-test-kex2 \
_tinysshd-unauthenticated
TESTCRYPTOBINARIES=test-crypto
OBJLIB=blocking.o buf.o byte.o channel.o channel_drop.o channel_fork.o \
channel_forkpty.o channel_subsystem.o cleanup.o coe.o connectioninfo.o \
crypto_dh_x25519.o crypto_hash_sha256.o crypto_hash_sha512_lib25519.o \
crypto_hash_sha512_tinyssh.o crypto_kem_sntrup761_libntruprime.o \
crypto_kem_sntrup761_tinyssh.o crypto_kem_sntrup761x25519.o \
crypto_onetimeauth_poly1305_lib1305.o crypto_onetimeauth_poly1305_tinyssh.o \
crypto_scalarmult_curve25519.o crypto_sign_ed25519_lib25519.o \
crypto_sign_ed25519_tinyssh.o crypto_sort_uint32.o crypto_stream_chacha20.o \
crypto_verify_16.o crypto_verify_32.o die.o dropuidgid.o e.o env.o fe25519.o \
fe.o ge25519.o getln.o global.o int16_optblocker.o int32_optblocker.o \
int64_optblocker.o int8_optblocker.o iptostr.o load.o log.o loginshell.o \
logsys.o main_tinysshd.o main_tinysshd_makekey.o main_tinysshd_printkey.o \
newenv.o numtostr.o open.o packet_auth.o packet.o packet_channel_open.o \
packet_channel_recv.o packet_channel_request.o packet_channel_send.o \
packet_get.o packet_hello.o packet_kex.o packet_kexdh.o packetparser.o \
packet_put.o packet_recv.o packet_send.o packet_unimplemented.o porttostr.o \
randommod.o readall.o savesync.o sc25519.o ssh.o sshcrypto.o sshcrypto_cipher.o \
sshcrypto_cipher_chachapoly.o sshcrypto_kex.o sshcrypto_kex_curve25519.o \
sshcrypto_kex_sntrup761x25519.o sshcrypto_key.o sshcrypto_key_ed25519.o str.o \
stringparser.o subprocess_auth.o subprocess_sign.o trymlock.o \
uint16_optblocker.o uint32_optblocker.o uint64_optblocker.o uint8_optblocker.o \
writeall.o
OBJALL=blocking.o buf.o byte.o channel.o channel_drop.o channel_fork.o \
channel_forkpty.o channel_subsystem.o cleanup.o coe.o connectioninfo.o \
crypto_dh_x25519.o crypto_hash_sha256.o crypto_hash_sha512_lib25519.o \
crypto_hash_sha512_tinyssh.o crypto_kem_sntrup761_libntruprime.o \
crypto_kem_sntrup761_tinyssh.o crypto_kem_sntrup761x25519.o \
crypto_onetimeauth_poly1305_lib1305.o crypto_onetimeauth_poly1305_tinyssh.o \
crypto_scalarmult_curve25519.o crypto_sign_ed25519_lib25519.o \
crypto_sign_ed25519_tinyssh.o crypto_sort_uint32.o crypto_stream_chacha20.o \
crypto_verify_16.o crypto_verify_32.o die.o dropuidgid.o e.o env.o fe25519.o \
fe.o ge25519.o getln.o global.o int16_optblocker.o int32_optblocker.o \
int64_optblocker.o int8_optblocker.o iptostr.o load.o log.o loginshell.o \
logsys.o main_tinysshd.o main_tinysshd_makekey.o main_tinysshd_printkey.o \
newenv.o numtostr.o open.o packet_auth.o packet.o packet_channel_open.o \
packet_channel_recv.o packet_channel_request.o packet_channel_send.o \
packet_get.o packet_hello.o packet_kex.o packet_kexdh.o packetparser.o \
packet_put.o packet_recv.o packet_send.o packet_unimplemented.o porttostr.o \
randombytes.o randommod.o readall.o savesync.o sc25519.o ssh.o sshcrypto.o \
sshcrypto_cipher.o sshcrypto_cipher_chachapoly.o sshcrypto_kex.o \
sshcrypto_kex_curve25519.o sshcrypto_kex_sntrup761x25519.o sshcrypto_key.o \
sshcrypto_key_ed25519.o str.o stringparser.o subprocess_auth.o \
subprocess_sign.o test-crypto.o tinysshd.o _tinysshd-printkex.o \
_tinysshd-speed.o _tinysshd-test-hello1.o _tinysshd-test-hello2.o \
_tinysshd-test-kex1.o _tinysshd-test-kex2.o _tinysshd-unauthenticated.o \
trymlock.o uint16_optblocker.o uint32_optblocker.o uint64_optblocker.o \
uint8_optblocker.o writeall.o
AUTOHEADERS=haslib1305.h haslib25519.h haslibntruprime.h haslibrandombytes.h \
haslibutilh.h haslimits.h haslogintty.h hasmlock.h hasopenpty.h hasutilh.h \
hasutmpaddrv6.h hasutmp.h hasutmphost.h hasutmploginlogout.h hasutmplogwtmp.h \
hasutmpname.h hasutmppid.h hasutmptime.h hasutmptv.h hasutmptype.h \
hasutmpuser.h hasutmpxaddrv6.h hasutmpx.h hasutmpxsyslen.h hasutmpxupdwtmpx.h \
hasvalgrind.h
TESTOUT=test-crypto-dh.out test-crypto-hash.out test-crypto-kem.out \
test-crypto-onetimeauth.out test-crypto-sign.out test-crypto-sort.out \
test-crypto-verify.out test-tinysshd-makekey.out test-tinysshd-printkey.out \
test-tinysshd.out test-tinysshnoneauthd.out
all: $(AUTOHEADERS) $(BINARIES) $(LINKS)
blocking.o: blocking.c blocking.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c blocking.c
buf.o: buf.c byte.h str.h purge.h cleanup.h randombytes.h \
haslibrandombytes.h cryptoint/crypto_uint32.h bug.h global.h e.h log.h \
buf.h cryptoint/crypto_uint8.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c buf.c
byte.o: byte.c cryptoint/crypto_int16.h byte.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c byte.c
channel.o: channel.c byte.h bug.h global.h e.h log.h newenv.h purge.h \
cleanup.h connectioninfo.h iptostr.h porttostr.h buf.h \
cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h str.h logsys.h \
loginshell.h trymlock.h limit.h haslimits.h channel.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c channel.c
channel_drop.o: channel_drop.c dropuidgid.h newenv.h channel.h \
cryptoint/crypto_uint32.h iptostr.h porttostr.h limit.h haslimits.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c channel_drop.c
channel_fork.o: channel_fork.c blocking.h open.h channel.h \
cryptoint/crypto_uint32.h iptostr.h porttostr.h limit.h haslimits.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c channel_fork.c
channel_forkpty.o: channel_forkpty.c hasopenpty.h haslogintty.h e.h coe.h \
blocking.h global.h channel.h cryptoint/crypto_uint32.h iptostr.h \
porttostr.h limit.h haslimits.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c channel_forkpty.c
channel_subsystem.o: channel_subsystem.c str.h log.h e.h channel.h \
cryptoint/crypto_uint32.h iptostr.h porttostr.h limit.h haslimits.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c channel_subsystem.c
cleanup.o: cleanup.c cleanup.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c cleanup.c
coe.o: coe.c coe.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c coe.c
connectioninfo.o: connectioninfo.c e.h byte.h iptostr.h porttostr.h env.h \
str.h connectioninfo.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c connectioninfo.c
crypto_dh_x25519.o: crypto_dh_x25519.c crypto_dh_x25519.h haslib25519.h \
randombytes.h haslibrandombytes.h crypto_scalarmult_curve25519.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_dh_x25519.c
crypto_hash_sha256.o: crypto_hash_sha256.c cryptoint/crypto_uint32.h \
cryptoint/crypto_uint64.h crypto_hash_sha256.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_hash_sha256.c
crypto_hash_sha512_lib25519.o: crypto_hash_sha512_lib25519.c \
haslib25519.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_hash_sha512_lib25519.c
crypto_hash_sha512_tinyssh.o: crypto_hash_sha512_tinyssh.c \
crypto_hash_sha512.h haslib25519.h cryptoint/crypto_uint64.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_hash_sha512_tinyssh.c
crypto_kem_sntrup761_libntruprime.o: crypto_kem_sntrup761_libntruprime.c \
haslibntruprime.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_kem_sntrup761_libntruprime.c
crypto_kem_sntrup761_tinyssh.o: crypto_kem_sntrup761_tinyssh.c \
crypto_kem_sntrup761.h haslibntruprime.h cryptoint/crypto_uint64.h \
cryptoint/crypto_uint32.h cryptoint/crypto_uint16.h \
cryptoint/crypto_int32.h cryptoint/crypto_int16.h \
cryptoint/crypto_int8.h randombytes.h haslibrandombytes.h \
crypto_verify_32.h crypto_sort_uint32.h crypto_hash_sha512.h \
haslib25519.h crypto_declassify.h hasvalgrind.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_kem_sntrup761_tinyssh.c
crypto_kem_sntrup761x25519.o: crypto_kem_sntrup761x25519.c cleanup.h \
crypto_hash_sha512.h haslib25519.h crypto_dh_x25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_kem_sntrup761x25519.c
crypto_onetimeauth_poly1305_lib1305.o: \
crypto_onetimeauth_poly1305_lib1305.c haslib1305.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_onetimeauth_poly1305_lib1305.c
crypto_onetimeauth_poly1305_tinyssh.o: \
crypto_onetimeauth_poly1305_tinyssh.c crypto_onetimeauth_poly1305.h \
haslib1305.h cryptoint/crypto_int16.h cryptoint/crypto_uint32.h \
cryptoint/crypto_uint64.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_onetimeauth_poly1305_tinyssh.c
crypto_scalarmult_curve25519.o: crypto_scalarmult_curve25519.c cleanup.h \
fe25519.h fe.h cryptoint/crypto_uint32.h cryptoint/crypto_uint64.h \
cryptoint/crypto_uint8.h crypto_scalarmult_curve25519.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_scalarmult_curve25519.c
crypto_sign_ed25519_lib25519.o: crypto_sign_ed25519_lib25519.c \
haslib25519.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_sign_ed25519_lib25519.c
crypto_sign_ed25519_tinyssh.o: crypto_sign_ed25519_tinyssh.c \
crypto_sign_ed25519.h haslib25519.h randombytes.h haslibrandombytes.h \
cleanup.h crypto_hash_sha512.h crypto_verify_32.h ge25519.h fe.h \
cryptoint/crypto_uint32.h cryptoint/crypto_uint64.h sc25519.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_sign_ed25519_tinyssh.c
crypto_sort_uint32.o: crypto_sort_uint32.c cryptoint/crypto_uint32.h \
crypto_sort_uint32.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_sort_uint32.c
crypto_stream_chacha20.o: crypto_stream_chacha20.c \
crypto_stream_chacha20.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_stream_chacha20.c
crypto_verify_16.o: crypto_verify_16.c cryptoint/crypto_int16.h \
crypto_verify_16.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_verify_16.c
crypto_verify_32.o: crypto_verify_32.c cryptoint/crypto_int16.h \
crypto_verify_32.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c crypto_verify_32.c
die.o: die.c global.h log.h die.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c die.c
dropuidgid.o: dropuidgid.c e.h dropuidgid.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c dropuidgid.c
e.o: e.c e.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c e.c
env.o: env.c str.h env.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c env.c
fe25519.o: fe25519.c crypto_verify_32.h cleanup.h fe.h \
cryptoint/crypto_uint32.h cryptoint/crypto_uint64.h fe25519.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c fe25519.c
fe.o: fe.c fe.h cryptoint/crypto_uint32.h cryptoint/crypto_uint64.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c fe.c
ge25519.o: ge25519.c fe25519.h fe.h cryptoint/crypto_uint32.h \
cryptoint/crypto_uint64.h cleanup.h ge25519.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c ge25519.c
getln.o: getln.c e.h getln.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c getln.c
global.o: global.c newenv.h channel.h cryptoint/crypto_uint32.h iptostr.h \
porttostr.h limit.h haslimits.h packet.h buf.h cryptoint/crypto_uint8.h \
sshcrypto.h crypto.h cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h purge.h cleanup.h \
trymlock.h global.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c global.c
int16_optblocker.o: int16_optblocker.c cryptoint/crypto_int16.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c int16_optblocker.c
int32_optblocker.o: int32_optblocker.c cryptoint/crypto_int32.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c int32_optblocker.c
int64_optblocker.o: int64_optblocker.c cryptoint/crypto_int64.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c int64_optblocker.c
int8_optblocker.o: int8_optblocker.c cryptoint/crypto_int8.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c int8_optblocker.c
iptostr.o: iptostr.c byte.h iptostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c iptostr.c
load.o: load.c readall.h open.h e.h load.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c load.c
log.o: log.c writeall.h randommod.h purge.h cleanup.h numtostr.h e.h \
log.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c log.c
loginshell.o: loginshell.c e.h loginshell.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c loginshell.c
logsys.o: logsys.c hasutilh.h hasutmpx.h hasutmpxupdwtmpx.h \
hasutmpxsyslen.h hasutmpxaddrv6.h hasutmp.h hasutmpname.h hasutmppid.h \
hasutmptime.h hasutmptv.h hasutmptype.h hasutmphost.h hasutmpuser.h \
hasutmplogwtmp.h hasutmploginlogout.h hasutmpaddrv6.h str.h byte.h \
logsys.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c logsys.c
main_tinysshd.o: main_tinysshd.c blocking.h ssh.h purge.h cleanup.h \
open.h load.h e.h byte.h buf.h cryptoint/crypto_uint8.h \
cryptoint/crypto_uint32.h packet.h sshcrypto.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h limit.h haslimits.h \
channel.h iptostr.h porttostr.h log.h subprocess.h global.h \
connectioninfo.h die.h str.h main.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c main_tinysshd.c
main_tinysshd_makekey.o: main_tinysshd_makekey.c savesync.h log.h \
sshcrypto.h buf.h cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h \
crypto.h cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h global.h die.h main.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c main_tinysshd_makekey.c
main_tinysshd_printkey.o: main_tinysshd_printkey.c e.h load.h sshcrypto.h \
buf.h cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h global.h log.h writeall.h \
die.h main.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c main_tinysshd_printkey.c
newenv.o: newenv.c e.h byte.h str.h purge.h cleanup.h bug.h global.h \
log.h env.h trymlock.h newenv.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c newenv.c
numtostr.o: numtostr.c numtostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c numtostr.c
open.o: open.c blocking.h open.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c open.c
packet_auth.o: packet_auth.c buf.h cryptoint/crypto_uint8.h \
cryptoint/crypto_uint32.h ssh.h e.h str.h packetparser.h subprocess.h \
sshcrypto.h crypto.h cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h bug.h global.h log.h \
purge.h cleanup.h packet.h limit.h haslimits.h channel.h iptostr.h \
porttostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c packet_auth.c
packet.o: packet.c purge.h cleanup.h trymlock.h packet.h buf.h \
cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h sshcrypto.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h limit.h haslimits.h \
channel.h iptostr.h porttostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c packet.c
packet_channel_open.o: packet_channel_open.c buf.h \
cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h ssh.h e.h bug.h \
global.h log.h packetparser.h str.h packet.h sshcrypto.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h limit.h haslimits.h \
channel.h iptostr.h porttostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c packet_channel_open.c
packet_channel_recv.o: packet_channel_recv.c bug.h global.h e.h log.h \
buf.h cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h channel.h \
iptostr.h porttostr.h limit.h haslimits.h ssh.h packetparser.h packet.h \
sshcrypto.h crypto.h cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c packet_channel_recv.c
packet_channel_request.o: packet_channel_request.c buf.h \
cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h ssh.h e.h bug.h \
global.h log.h str.h packetparser.h packet.h sshcrypto.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h limit.h haslimits.h \
channel.h iptostr.h porttostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c packet_channel_request.c
packet_channel_send.o: packet_channel_send.c bug.h global.h e.h log.h \
buf.h cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h channel.h \
iptostr.h porttostr.h limit.h haslimits.h ssh.h packet.h sshcrypto.h \
crypto.h cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c packet_channel_send.c
packet_get.o: packet_get.c byte.h e.h bug.h global.h log.h \
cryptoint/crypto_uint32.h purge.h cleanup.h ssh.h sshcrypto.h buf.h \
cryptoint/crypto_uint8.h crypto.h cryptoint/crypto_int16.h \
cryptoint/crypto_int32.h cryptoint/crypto_int64.h \
cryptoint/crypto_int8.h cryptoint/crypto_uint16.h \
cryptoint/crypto_uint64.h crypto_verify_16.h crypto_verify_32.h \
haslibrandombytes.h randombytes.h crypto_hash_sha256.h \
crypto_hash_sha512.h haslib25519.h crypto_kem_sntrup761.h \
haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h numtostr.h packet.h \
limit.h haslimits.h channel.h iptostr.h porttostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c packet_get.c
packet_hello.o: packet_hello.c buf.h cryptoint/crypto_uint8.h \
cryptoint/crypto_uint32.h byte.h writeall.h purge.h cleanup.h log.h \
str.h getln.h e.h packet.h sshcrypto.h crypto.h cryptoint/crypto_int16.h \
cryptoint/crypto_int32.h cryptoint/crypto_int64.h \
cryptoint/crypto_int8.h cryptoint/crypto_uint16.h \
cryptoint/crypto_uint64.h crypto_verify_16.h crypto_verify_32.h \
haslibrandombytes.h randombytes.h crypto_hash_sha256.h \
crypto_hash_sha512.h haslib25519.h crypto_kem_sntrup761.h \
haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h limit.h haslimits.h \
channel.h iptostr.h porttostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c packet_hello.c
packet_kex.o: packet_kex.c buf.h cryptoint/crypto_uint8.h \
cryptoint/crypto_uint32.h ssh.h sshcrypto.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h packetparser.h bug.h \
global.h e.h log.h packet.h limit.h haslimits.h channel.h iptostr.h \
porttostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c packet_kex.c
packet_kexdh.o: packet_kexdh.c buf.h cryptoint/crypto_uint8.h \
cryptoint/crypto_uint32.h ssh.h e.h byte.h sshcrypto.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h packetparser.h bug.h \
global.h log.h purge.h cleanup.h subprocess.h packet.h limit.h \
haslimits.h channel.h iptostr.h porttostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c packet_kexdh.c
packetparser.o: packetparser.c e.h cryptoint/crypto_uint32.h bug.h \
global.h log.h byte.h packetparser.h cryptoint/crypto_uint8.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c packetparser.c
packet_put.o: packet_put.c cryptoint/crypto_uint32.h buf.h \
cryptoint/crypto_uint8.h bug.h global.h e.h log.h sshcrypto.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h ssh.h packet.h limit.h \
haslimits.h channel.h iptostr.h porttostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c packet_put.c
packet_recv.o: packet_recv.c e.h buf.h cryptoint/crypto_uint8.h \
cryptoint/crypto_uint32.h purge.h cleanup.h packet.h sshcrypto.h \
crypto.h cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h limit.h haslimits.h \
channel.h iptostr.h porttostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c packet_recv.c
packet_send.o: packet_send.c writeall.h e.h byte.h purge.h cleanup.h \
packet.h buf.h cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h \
sshcrypto.h crypto.h cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h limit.h haslimits.h \
channel.h iptostr.h porttostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c packet_send.c
packet_unimplemented.o: packet_unimplemented.c buf.h \
cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h ssh.h log.h \
numtostr.h packet.h sshcrypto.h crypto.h cryptoint/crypto_int16.h \
cryptoint/crypto_int32.h cryptoint/crypto_int64.h \
cryptoint/crypto_int8.h cryptoint/crypto_uint16.h \
cryptoint/crypto_uint64.h crypto_verify_16.h crypto_verify_32.h \
haslibrandombytes.h randombytes.h crypto_hash_sha256.h \
crypto_hash_sha512.h haslib25519.h crypto_kem_sntrup761.h \
haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h limit.h haslimits.h \
channel.h iptostr.h porttostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c packet_unimplemented.c
porttostr.o: porttostr.c cryptoint/crypto_uint16.h porttostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c porttostr.c
randombytes.o: randombytes.c randombytes.h haslibrandombytes.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c randombytes.c
randommod.o: randommod.c randombytes.h haslibrandombytes.h randommod.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c randommod.c
readall.o: readall.c e.h readall.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c readall.c
savesync.o: savesync.c open.h savesync.h writeall.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c savesync.c
sc25519.o: sc25519.c cryptoint/crypto_int64.h cryptoint/crypto_uint32.h \
cryptoint/crypto_uint64.h cleanup.h sc25519.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c sc25519.c
ssh.o: ssh.c ssh.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c ssh.c
sshcrypto.o: sshcrypto.c purge.h cleanup.h bug.h global.h e.h log.h str.h \
sshcrypto.h buf.h cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h \
crypto.h cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c sshcrypto.c
sshcrypto_cipher.o: sshcrypto_cipher.c crypto.h cryptoint/crypto_int16.h \
cryptoint/crypto_int32.h cryptoint/crypto_int64.h \
cryptoint/crypto_int8.h cryptoint/crypto_uint16.h \
cryptoint/crypto_uint32.h cryptoint/crypto_uint64.h \
cryptoint/crypto_uint8.h crypto_verify_16.h crypto_verify_32.h \
haslibrandombytes.h randombytes.h crypto_hash_sha256.h \
crypto_hash_sha512.h haslib25519.h crypto_kem_sntrup761.h \
haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h stringparser.h e.h log.h \
bug.h global.h str.h byte.h packet.h buf.h sshcrypto.h limit.h \
haslimits.h channel.h iptostr.h porttostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c sshcrypto_cipher.c
sshcrypto_cipher_chachapoly.o: sshcrypto_cipher_chachapoly.c \
cryptoint/crypto_uint32.h crypto_verify_16.h randommod.h e.h byte.h \
purge.h cleanup.h sshcrypto.h buf.h cryptoint/crypto_uint8.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_32.h \
haslibrandombytes.h randombytes.h crypto_hash_sha256.h \
crypto_hash_sha512.h haslib25519.h crypto_kem_sntrup761.h \
haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h bug.h global.h log.h \
packet.h limit.h haslimits.h channel.h iptostr.h porttostr.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c sshcrypto_cipher_chachapoly.c
sshcrypto_kex.o: sshcrypto_kex.c crypto.h cryptoint/crypto_int16.h \
cryptoint/crypto_int32.h cryptoint/crypto_int64.h \
cryptoint/crypto_int8.h cryptoint/crypto_uint16.h \
cryptoint/crypto_uint32.h cryptoint/crypto_uint64.h \
cryptoint/crypto_uint8.h crypto_verify_16.h crypto_verify_32.h \
haslibrandombytes.h randombytes.h crypto_hash_sha256.h \
crypto_hash_sha512.h haslib25519.h crypto_kem_sntrup761.h \
haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h stringparser.h str.h \
byte.h e.h log.h bug.h global.h sshcrypto.h buf.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c sshcrypto_kex.c
sshcrypto_kex_curve25519.o: sshcrypto_kex_curve25519.c buf.h \
cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h purge.h cleanup.h \
sshcrypto.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c sshcrypto_kex_curve25519.c
sshcrypto_kex_sntrup761x25519.o: sshcrypto_kex_sntrup761x25519.c buf.h \
cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h sshcrypto.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c sshcrypto_kex_sntrup761x25519.c
sshcrypto_key.o: sshcrypto_key.c crypto.h cryptoint/crypto_int16.h \
cryptoint/crypto_int32.h cryptoint/crypto_int64.h \
cryptoint/crypto_int8.h cryptoint/crypto_uint16.h \
cryptoint/crypto_uint32.h cryptoint/crypto_uint64.h \
cryptoint/crypto_uint8.h crypto_verify_16.h crypto_verify_32.h \
haslibrandombytes.h randombytes.h crypto_hash_sha256.h \
crypto_hash_sha512.h haslib25519.h crypto_kem_sntrup761.h \
haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h packetparser.h \
stringparser.h str.h byte.h e.h log.h bug.h global.h purge.h cleanup.h \
sshcrypto.h buf.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c sshcrypto_key.c
sshcrypto_key_ed25519.o: sshcrypto_key_ed25519.c crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint32.h \
cryptoint/crypto_uint64.h cryptoint/crypto_uint8.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h packetparser.h buf.h \
byte.h str.h purge.h cleanup.h sshcrypto.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c sshcrypto_key_ed25519.c
str.o: str.c str.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c str.c
stringparser.o: stringparser.c byte.h e.h bug.h global.h log.h \
stringparser.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c stringparser.c
subprocess_auth.o: subprocess_auth.c str.h open.h dropuidgid.h global.h \
e.h log.h sshcrypto.h buf.h cryptoint/crypto_uint8.h \
cryptoint/crypto_uint32.h crypto.h cryptoint/crypto_int16.h \
cryptoint/crypto_int32.h cryptoint/crypto_int64.h \
cryptoint/crypto_int8.h cryptoint/crypto_uint16.h \
cryptoint/crypto_uint64.h crypto_verify_16.h crypto_verify_32.h \
haslibrandombytes.h randombytes.h crypto_hash_sha256.h \
crypto_hash_sha512.h haslib25519.h crypto_kem_sntrup761.h \
haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h getln.h bug.h limit.h \
haslimits.h subprocess.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c subprocess_auth.c
subprocess_sign.o: subprocess_sign.c load.h log.h open.h writeall.h \
purge.h cleanup.h global.h bug.h e.h readall.h blocking.h sshcrypto.h \
buf.h cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h subprocess.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c subprocess_sign.c
test-crypto.o: test-crypto.c cryptoint/crypto_uint8.h \
cryptoint/crypto_uint32.h cryptoint/crypto_uint64.h crypto_declassify.h \
hasvalgrind.h crypto.h cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h crypto_verify_16.h crypto_verify_32.h \
haslibrandombytes.h randombytes.h crypto_hash_sha256.h \
crypto_hash_sha512.h haslib25519.h crypto_kem_sntrup761.h \
haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h _crypto-test_verify_16.inc \
_crypto-test_verify_32.inc _crypto-test_sort_uint32.inc \
_crypto-test_hash_sha256.inc _crypto-test_hash_sha512.inc \
_crypto-test_sign_ed25519.inc _crypto-test_kem_sntrup761.inc \
_crypto-test_dh_x25519.inc _crypto-test_onetimeauth_poly1305.inc
$(CC) $(CFLAGS) $(CPPFLAGS) -c test-crypto.c
tinysshd.o: tinysshd.c str.h main.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c tinysshd.c
_tinysshd-printkex.o: _tinysshd-printkex.c log.h packet.h buf.h \
cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h sshcrypto.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h limit.h haslimits.h \
channel.h iptostr.h porttostr.h ssh.h bug.h global.h e.h packetparser.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c _tinysshd-printkex.c
_tinysshd-speed.o: _tinysshd-speed.c crypto.h cryptoint/crypto_int16.h \
cryptoint/crypto_int32.h cryptoint/crypto_int64.h \
cryptoint/crypto_int8.h cryptoint/crypto_uint16.h \
cryptoint/crypto_uint32.h cryptoint/crypto_uint64.h \
cryptoint/crypto_uint8.h crypto_verify_16.h crypto_verify_32.h \
haslibrandombytes.h randombytes.h crypto_hash_sha256.h \
crypto_hash_sha512.h haslib25519.h crypto_kem_sntrup761.h \
haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c _tinysshd-speed.c
_tinysshd-test-hello1.o: _tinysshd-test-hello1.c
$(CC) $(CFLAGS) $(CPPFLAGS) -c _tinysshd-test-hello1.c
_tinysshd-test-hello2.o: _tinysshd-test-hello2.c log.h packet.h buf.h \
cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h sshcrypto.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h limit.h haslimits.h \
channel.h iptostr.h porttostr.h global.h str.h writeall.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c _tinysshd-test-hello2.c
_tinysshd-test-kex1.o: _tinysshd-test-kex1.c log.h packet.h buf.h \
cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h sshcrypto.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h limit.h haslimits.h \
channel.h iptostr.h porttostr.h ssh.h bug.h global.h e.h packetparser.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c _tinysshd-test-kex1.c
_tinysshd-test-kex2.o: _tinysshd-test-kex2.c log.h packet.h buf.h \
cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h sshcrypto.h crypto.h \
cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h limit.h haslimits.h \
channel.h iptostr.h porttostr.h ssh.h bug.h global.h e.h packetparser.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c _tinysshd-test-kex2.c
_tinysshd-unauthenticated.o: _tinysshd-unauthenticated.c log.h packet.h \
buf.h cryptoint/crypto_uint8.h cryptoint/crypto_uint32.h sshcrypto.h \
crypto.h cryptoint/crypto_int16.h cryptoint/crypto_int32.h \
cryptoint/crypto_int64.h cryptoint/crypto_int8.h \
cryptoint/crypto_uint16.h cryptoint/crypto_uint64.h crypto_verify_16.h \
crypto_verify_32.h haslibrandombytes.h randombytes.h \
crypto_hash_sha256.h crypto_hash_sha512.h haslib25519.h \
crypto_kem_sntrup761.h haslibntruprime.h crypto_kem_sntrup761x25519.h \
crypto_onetimeauth_poly1305.h haslib1305.h \
crypto_scalarmult_curve25519.h crypto_dh_x25519.h crypto_sign_ed25519.h \
crypto_sort_uint32.h crypto_stream_chacha20.h limit.h haslimits.h \
channel.h iptostr.h porttostr.h ssh.h bug.h global.h e.h packetparser.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c _tinysshd-unauthenticated.c
trymlock.o: trymlock.c hasmlock.h trymlock.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c trymlock.c
uint16_optblocker.o: uint16_optblocker.c cryptoint/crypto_uint16.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c uint16_optblocker.c
uint32_optblocker.o: uint32_optblocker.c cryptoint/crypto_uint32.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c uint32_optblocker.c
uint64_optblocker.o: uint64_optblocker.c cryptoint/crypto_uint64.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c uint64_optblocker.c
uint8_optblocker.o: uint8_optblocker.c cryptoint/crypto_uint8.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c uint8_optblocker.c
writeall.o: writeall.c e.h writeall.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c writeall.c
tinysshd: tinysshd.o $(OBJLIB) randombytes.o libs
$(CC) $(CFLAGS) $(CPPFLAGS) -o tinysshd tinysshd.o \
$(OBJLIB) $(LDFLAGS) `cat libs` randombytes.o
_tinysshd-printkex: _tinysshd-printkex.o $(OBJLIB) randombytes.o libs
$(CC) $(CFLAGS) $(CPPFLAGS) -o _tinysshd-printkex _tinysshd-printkex.o \
$(OBJLIB) $(LDFLAGS) `cat libs` randombytes.o
_tinysshd-speed: _tinysshd-speed.o $(OBJLIB) randombytes.o libs
$(CC) $(CFLAGS) $(CPPFLAGS) -o _tinysshd-speed _tinysshd-speed.o \
$(OBJLIB) $(LDFLAGS) `cat libs` randombytes.o
_tinysshd-test-hello1: _tinysshd-test-hello1.o $(OBJLIB) randombytes.o libs
$(CC) $(CFLAGS) $(CPPFLAGS) -o _tinysshd-test-hello1 _tinysshd-test-hello1.o \
$(OBJLIB) $(LDFLAGS) `cat libs` randombytes.o
_tinysshd-test-hello2: _tinysshd-test-hello2.o $(OBJLIB) randombytes.o libs
$(CC) $(CFLAGS) $(CPPFLAGS) -o _tinysshd-test-hello2 _tinysshd-test-hello2.o \
$(OBJLIB) $(LDFLAGS) `cat libs` randombytes.o
_tinysshd-test-kex1: _tinysshd-test-kex1.o $(OBJLIB) randombytes.o libs
$(CC) $(CFLAGS) $(CPPFLAGS) -o _tinysshd-test-kex1 _tinysshd-test-kex1.o \
$(OBJLIB) $(LDFLAGS) `cat libs` randombytes.o
_tinysshd-test-kex2: _tinysshd-test-kex2.o $(OBJLIB) randombytes.o libs
$(CC) $(CFLAGS) $(CPPFLAGS) -o _tinysshd-test-kex2 _tinysshd-test-kex2.o \
$(OBJLIB) $(LDFLAGS) `cat libs` randombytes.o
_tinysshd-unauthenticated: _tinysshd-unauthenticated.o $(OBJLIB) randombytes.o libs
$(CC) $(CFLAGS) $(CPPFLAGS) -o _tinysshd-unauthenticated _tinysshd-unauthenticated.o \
$(OBJLIB) $(LDFLAGS) `cat libs` randombytes.o
test-crypto: test-crypto.o $(OBJLIB) libs
$(CC) $(CFLAGS) $(CPPFLAGS) -o test-crypto test-crypto.o \
$(OBJLIB) $(LDFLAGS) `cat libs`
haslib1305.h: tryfeature.sh haslib1305.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh haslib1305.c >haslib1305.h 2>haslib1305.log
cat haslib1305.h
haslib25519.h: tryfeature.sh haslib25519.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh haslib25519.c >haslib25519.h 2>haslib25519.log
cat haslib25519.h
haslibntruprime.h: tryfeature.sh haslibntruprime.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh haslibntruprime.c >haslibntruprime.h 2>haslibntruprime.log
cat haslibntruprime.h
haslibrandombytes.h: tryfeature.sh haslibrandombytes.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh haslibrandombytes.c >haslibrandombytes.h 2>haslibrandombytes.log
cat haslibrandombytes.h
haslibutilh.h: tryfeature.sh haslibutilh.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh haslibutilh.c >haslibutilh.h 2>haslibutilh.log
cat haslibutilh.h
haslimits.h: tryfeature.sh haslimits.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh haslimits.c >haslimits.h 2>haslimits.log
cat haslimits.h
haslogintty.h: tryfeature.sh haslogintty.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh haslogintty.c >haslogintty.h 2>haslogintty.log
cat haslogintty.h
hasmlock.h: tryfeature.sh hasmlock.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasmlock.c >hasmlock.h 2>hasmlock.log
cat hasmlock.h
hasopenpty.h: tryfeature.sh hasopenpty.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasopenpty.c >hasopenpty.h 2>hasopenpty.log
cat hasopenpty.h
hasutilh.h: tryfeature.sh hasutilh.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutilh.c >hasutilh.h 2>hasutilh.log
cat hasutilh.h
hasutmpaddrv6.h: tryfeature.sh hasutmpaddrv6.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutmpaddrv6.c >hasutmpaddrv6.h 2>hasutmpaddrv6.log
cat hasutmpaddrv6.h
hasutmp.h: tryfeature.sh hasutmp.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutmp.c >hasutmp.h 2>hasutmp.log
cat hasutmp.h
hasutmphost.h: tryfeature.sh hasutmphost.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutmphost.c >hasutmphost.h 2>hasutmphost.log
cat hasutmphost.h
hasutmploginlogout.h: tryfeature.sh hasutmploginlogout.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutmploginlogout.c >hasutmploginlogout.h 2>hasutmploginlogout.log
cat hasutmploginlogout.h
hasutmplogwtmp.h: tryfeature.sh hasutmplogwtmp.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutmplogwtmp.c >hasutmplogwtmp.h 2>hasutmplogwtmp.log
cat hasutmplogwtmp.h
hasutmpname.h: tryfeature.sh hasutmpname.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutmpname.c >hasutmpname.h 2>hasutmpname.log
cat hasutmpname.h
hasutmppid.h: tryfeature.sh hasutmppid.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutmppid.c >hasutmppid.h 2>hasutmppid.log
cat hasutmppid.h
hasutmptime.h: tryfeature.sh hasutmptime.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutmptime.c >hasutmptime.h 2>hasutmptime.log
cat hasutmptime.h
hasutmptv.h: tryfeature.sh hasutmptv.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutmptv.c >hasutmptv.h 2>hasutmptv.log
cat hasutmptv.h
hasutmptype.h: tryfeature.sh hasutmptype.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutmptype.c >hasutmptype.h 2>hasutmptype.log
cat hasutmptype.h
hasutmpuser.h: tryfeature.sh hasutmpuser.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutmpuser.c >hasutmpuser.h 2>hasutmpuser.log
cat hasutmpuser.h
hasutmpxaddrv6.h: tryfeature.sh hasutmpxaddrv6.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutmpxaddrv6.c >hasutmpxaddrv6.h 2>hasutmpxaddrv6.log
cat hasutmpxaddrv6.h
hasutmpx.h: tryfeature.sh hasutmpx.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutmpx.c >hasutmpx.h 2>hasutmpx.log
cat hasutmpx.h
hasutmpxsyslen.h: tryfeature.sh hasutmpxsyslen.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutmpxsyslen.c >hasutmpxsyslen.h 2>hasutmpxsyslen.log
cat hasutmpxsyslen.h
hasutmpxupdwtmpx.h: tryfeature.sh hasutmpxupdwtmpx.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasutmpxupdwtmpx.c >hasutmpxupdwtmpx.h 2>hasutmpxupdwtmpx.log
cat hasutmpxupdwtmpx.h
hasvalgrind.h: tryfeature.sh hasvalgrind.c libs
env CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS) `cat libs`" \
./tryfeature.sh hasvalgrind.c >hasvalgrind.h 2>hasvalgrind.log
cat hasvalgrind.h
test-crypto-dh.out: $(BINARIES) $(TESTCRYPTOBINARIES) $(LINKS) runtest.sh test-crypto-dh.sh test-crypto-dh.exp
sh runtest.sh test-crypto-dh.sh test-crypto-dh.out test-crypto-dh.exp
test-crypto-hash.out: $(BINARIES) $(TESTCRYPTOBINARIES) $(LINKS) runtest.sh test-crypto-hash.sh test-crypto-hash.exp
sh runtest.sh test-crypto-hash.sh test-crypto-hash.out test-crypto-hash.exp
test-crypto-kem.out: $(BINARIES) $(TESTCRYPTOBINARIES) $(LINKS) runtest.sh test-crypto-kem.sh test-crypto-kem.exp
sh runtest.sh test-crypto-kem.sh test-crypto-kem.out test-crypto-kem.exp
test-crypto-onetimeauth.out: $(BINARIES) $(TESTCRYPTOBINARIES) $(LINKS) runtest.sh test-crypto-onetimeauth.sh test-crypto-onetimeauth.exp
sh runtest.sh test-crypto-onetimeauth.sh test-crypto-onetimeauth.out test-crypto-onetimeauth.exp
test-crypto-sign.out: $(BINARIES) $(TESTCRYPTOBINARIES) $(LINKS) runtest.sh test-crypto-sign.sh test-crypto-sign.exp
sh runtest.sh test-crypto-sign.sh test-crypto-sign.out test-crypto-sign.exp
test-crypto-sort.out: $(BINARIES) $(TESTCRYPTOBINARIES) $(LINKS) runtest.sh test-crypto-sort.sh test-crypto-sort.exp
sh runtest.sh test-crypto-sort.sh test-crypto-sort.out test-crypto-sort.exp
test-crypto-verify.out: $(BINARIES) $(TESTCRYPTOBINARIES) $(LINKS) runtest.sh test-crypto-verify.sh test-crypto-verify.exp
sh runtest.sh test-crypto-verify.sh test-crypto-verify.out test-crypto-verify.exp
test-tinysshd-makekey.out: $(BINARIES) $(TESTCRYPTOBINARIES) $(LINKS) runtest.sh test-tinysshd-makekey.sh test-tinysshd-makekey.exp
sh runtest.sh test-tinysshd-makekey.sh test-tinysshd-makekey.out test-tinysshd-makekey.exp
test-tinysshd-printkey.out: $(BINARIES) $(TESTCRYPTOBINARIES) $(LINKS) runtest.sh test-tinysshd-printkey.sh test-tinysshd-printkey.exp
sh runtest.sh test-tinysshd-printkey.sh test-tinysshd-printkey.out test-tinysshd-printkey.exp
test-tinysshd.out: $(BINARIES) $(TESTCRYPTOBINARIES) $(LINKS) runtest.sh test-tinysshd.sh test-tinysshd.exp
sh runtest.sh test-tinysshd.sh test-tinysshd.out test-tinysshd.exp
test-tinysshnoneauthd.out: $(BINARIES) $(TESTCRYPTOBINARIES) $(LINKS) runtest.sh test-tinysshnoneauthd.sh test-tinysshnoneauthd.exp
sh runtest.sh test-tinysshnoneauthd.sh test-tinysshnoneauthd.out test-tinysshnoneauthd.exp
test: $(TESTOUT)
libs: trylibs.sh
env CC="$(CC)" ./trylibs.sh -lsocket -lnsl -lutil -lrandombytes -l25519 -l1305 -lntruprime >libs 2>libs.log
cat libs
tinysshd-makekey: tinysshd
rm -f tinysshd-makekey
ln -s tinysshd tinysshd-makekey
tinysshd-printkey: tinysshd
rm -f tinysshd-printkey
ln -s tinysshd tinysshd-printkey
tinysshnoneauthd: tinysshd
rm -f tinysshnoneauthd
ln -s tinysshd tinysshnoneauthd
install: $(BINARIES) $(LINKS)
mkdir -p $(DESTDIR)$(PREFIX)/sbin
mkdir -p $(DESTDIR)$(PREFIX)/share/man/man8
$(INSTALL) -m 0755 tinysshd $(DESTDIR)$(PREFIX)/sbin/tinysshd
$(INSTALL) -m 0755 tinysshd-makekey $(DESTDIR)$(PREFIX)/sbin/tinysshd-makekey
$(INSTALL) -m 0755 tinysshd-printkey $(DESTDIR)$(PREFIX)/sbin/tinysshd-printkey
$(INSTALL) -m 0755 tinysshnoneauthd $(DESTDIR)$(PREFIX)/sbin/tinysshnoneauthd
$(INSTALL) -m 0644 man/tinysshd.8 $(DESTDIR)$(PREFIX)/share/man/man8/tinysshd.8
$(INSTALL) -m 0644 man/tinysshd-makekey.8 $(DESTDIR)$(PREFIX)/share/man/man8/tinysshd-makekey.8
$(INSTALL) -m 0644 man/tinysshd-printkey.8 $(DESTDIR)$(PREFIX)/share/man/man8/tinysshd-printkey.8
$(INSTALL) -m 0644 man/tinysshnoneauthd.8 $(DESTDIR)$(PREFIX)/share/man/man8/tinysshnoneauthd.8
clean:
rm -f *.log libs $(OBJLIB) $(OBJALL) $(BINARIES) $(TESTCRYPTOBINARIES) $(LINKS) $(AUTOHEADERS) $(TESTOUT)
tinyssh-20250501/README.md 0000664 0000000 0000000 00000005430 15004722224 0014732 0 ustar 00root root 0000000 0000000 ### Introduction ###
* tinysshd is a minimalistic SSH server which implements only a subset of SSHv2 features.
* tinysshd supports only secure cryptography (minimum 128-bit security, protected against cache-timing attacks)
* tinysshd doesn't implement older crypto (such as RSA, DSA, HMAC-MD5, HMAC-SHA1, 3DES, RC4, ...)
* tinysshd doesn't implement unsafe features (such as password or hostbased authentication)
* tinysshd doesn't have features such: SSH1 protocol, compression, port forwarding, agent forwarding, X11 forwarding ...
* tinysshd doesn't use dynamic memory allocation (no allocation failures, etc.)
### Crypto primitives ###
* State-of-the-art crypto: ssh-ed25519, curve25519-sha256, chacha20-poly1305@openssh.com
* Older standard: ecdsa-sha2-nistp256, ecdh-sha2-nistp256, aes256-ctr, hmac-sha2-256 removed in version 20190101
* Postquantum crypto: sntrup761x25519-sha512@openssh.com, chacha20-poly1305@openssh.com
### Project timelime ###
* experimental: 2014.01.01 - 2014.12.31 (experimentation)
* alpha(updated): 2015.01.01 - 2017.12.31 (not ready for production use, ready for testing)
* beta(updated): 2018.01.01 - ????.??.?? (ready for production use)
* stable: expected ????.??.?? - (ready for production use - including post-quantum crypto)
### Current release (20250501) ###
* has 74260 words of code
* beta release
### How-to compile and install ###
~~~
make
sudo make install
~~~
### How-to run ###
~~~
mkdir -p /etc/tinyssh
tinysshd-makekey /etc/tinyssh/sshkeydir
~~~
~~~
TCPSERVER
tcpserver -HRDl0 0.0.0.0 22 /usr/sbin/tinysshd -v /etc/tinyssh/sshkeydir &
BUSYBOX
busybox tcpsvd 0 22 tinysshd -v /etc/tinyssh/sshkeydir &
INETD
/etc/inetd.conf:
ssh stream tcp nowait root /usr/sbin/tinysshd tinysshd -l -v /etc/tinyssh/sshkeydir
SYSTEMD
tinysshd.socket:
[Unit]
Description=TinySSH server socket
ConditionPathExists=!/etc/tinyssh/disable_tinysshd
[Socket]
ListenStream=22
Accept=yes
[Install]
WantedBy=sockets.target
tinysshd@.service:
[Unit]
Description=Tiny SSH server
After=network.target auditd.service
[Service]
ExecStartPre=-/usr/sbin/tinysshd-makekey -q /etc/tinyssh/sshkeydir
EnvironmentFile=-/etc/default/tinysshd
ExecStart=/usr/sbin/tinysshd ${TINYSSHDOPTS} -- /etc/tinyssh/sshkeydir
KillMode=process
SuccessExitStatus=111
StandardInput=socket
StandardError=journal
[Install]
WantedBy=multi-user.target
~~~
tinyssh-20250501/_crypto-test_dh_x25519.inc 0000664 0000000 0000000 00000031557 15004722224 0020223 0 ustar 00root root 0000000 0000000 /* ----- dh/x25519, derived from supercop/crypto_dh/try.c */
/*
derived from djb work from lib25519/libntruprime
mj modifications:
- rename files to test-crypto.c and _crypto_<>.<>.inc
- fix compiler warnings
- include crypto.h
- use less rounds for valgrind test
- reformat using clang-format
*/
#include
#include
#include
#include
#include "crypto_dh_x25519.h"
#define fail ((ok = 0), printf)
static const char *dh_x25519_checksums[] = {
"2c8a73ec86d5d4c4bc838f49cfd78c87b60b534ae6fff59ce3bea0c32cdc1450",
"b09016b3a1371786b46a183085133338159e623c5eb9cbc5eaa4f8b62d6c5aea",
};
static int (*crypto_dh_keypair)(unsigned char *, unsigned char *);
static int (*crypto_dh)(unsigned char *, const unsigned char *,
const unsigned char *);
#define crypto_dh_SECRETKEYBYTES crypto_dh_x25519_SECRETKEYBYTES
#define crypto_dh_PUBLICKEYBYTES crypto_dh_x25519_PUBLICKEYBYTES
#define crypto_dh_BYTES crypto_dh_x25519_BYTES
static void *storage_dh_x25519_a;
static unsigned char *test_dh_x25519_a;
static void *storage_dh_x25519_b;
static unsigned char *test_dh_x25519_b;
static void *storage_dh_x25519_c;
static unsigned char *test_dh_x25519_c;
static void *storage_dh_x25519_d;
static unsigned char *test_dh_x25519_d;
static void *storage_dh_x25519_e;
static unsigned char *test_dh_x25519_e;
static void *storage_dh_x25519_f;
static unsigned char *test_dh_x25519_f;
static void *storage_dh_x25519_a2;
static unsigned char *test_dh_x25519_a2;
static void *storage_dh_x25519_b2;
static unsigned char *test_dh_x25519_b2;
static void *storage_dh_x25519_c2;
static unsigned char *test_dh_x25519_c2;
static void *storage_dh_x25519_d2;
static unsigned char *test_dh_x25519_d2;
static void *storage_dh_x25519_e2;
static unsigned char *test_dh_x25519_e2;
static void *storage_dh_x25519_f2;
static unsigned char *test_dh_x25519_f2;
static void test_dh_x25519_impl(long long impl) {
unsigned char *a = test_dh_x25519_a;
unsigned char *b = test_dh_x25519_b;
unsigned char *c = test_dh_x25519_c;
unsigned char *d = test_dh_x25519_d;
unsigned char *e = test_dh_x25519_e;
unsigned char *f = test_dh_x25519_f;
unsigned char *a2 = test_dh_x25519_a2;
unsigned char *b2 = test_dh_x25519_b2;
unsigned char *c2 = test_dh_x25519_c2;
unsigned char *d2 = test_dh_x25519_d2;
unsigned char *e2 = test_dh_x25519_e2;
unsigned char *f2 = test_dh_x25519_f2;
long long alen = crypto_dh_SECRETKEYBYTES;
long long blen = crypto_dh_SECRETKEYBYTES;
long long clen = crypto_dh_PUBLICKEYBYTES;
long long dlen = crypto_dh_PUBLICKEYBYTES;
long long elen = crypto_dh_BYTES;
long long flen = crypto_dh_BYTES;
if (targetn && atol(targetn) != impl) return;
crypto_dh_keypair = crypto_dh_x25519_keypair;
crypto_dh = crypto_dh_x25519;
for (long long checksumbig = 0; checksumbig < 2; ++checksumbig) {
long long loops = checksumbig ? 512 : 64;
if (checksumbig && valgrind) break;
checksum_clear();
for (long long loop = 0; loop < loops; ++loop) {
output_prepare(c2, c, clen);
output_prepare(a2, a, alen);
crypto_dh_keypair(c, a);
public(c, clen);
public(a, alen);
checksum(c, clen);
checksum(a, alen);
output_compare(c2, c, clen, "crypto_dh_keypair");
output_compare(a2, a, alen, "crypto_dh_keypair");
output_prepare(d2, d, dlen);
output_prepare(b2, b, blen);
crypto_dh_keypair(d, b);
public(d, dlen);
public(b, blen);
checksum(d, dlen);
checksum(b, blen);
output_compare(d2, d, dlen, "crypto_dh_keypair");
output_compare(b2, b, blen, "crypto_dh_keypair");
output_prepare(e2, e, elen);
memcpy(d2, d, dlen);
double_canary(d2, d, dlen);
memcpy(a2, a, alen);
double_canary(a2, a, alen);
secret(d, dlen);
secret(a, alen);
crypto_dh(e, d, a);
public(d, dlen);
public(a, alen);
public(e, elen);
checksum(e, elen);
output_compare(e2, e, elen, "crypto_dh");
input_compare(d2, d, dlen, "crypto_dh");
input_compare(a2, a, alen, "crypto_dh");
double_canary(e2, e, elen);
double_canary(d2, d, dlen);
double_canary(a2, a, alen);
secret(d2, dlen);
secret(a2, alen);
crypto_dh(e2, d2, a2);
public(d2, dlen);
public(a2, alen);
public(e2, elen);
if (memcmp(e2, e, elen) != 0)
fail("failure: crypto_dh is nondeterministic\n");
double_canary(e2, e, elen);
double_canary(d2, d, dlen);
double_canary(a2, a, alen);
secret(d2, dlen);
secret(a, alen);
crypto_dh(d2, d2, a);
public(d2, elen);
public(a, alen);
if (memcmp(d2, e, elen) != 0)
fail("failure: crypto_dh does not handle d=e overlap\n");
memcpy(d2, d, dlen);
secret(d, dlen);
secret(a2, alen);
crypto_dh(a2, d, a2);
public(a2, elen);
public(d, dlen);
if (memcmp(a2, e, elen) != 0)
fail("failure: crypto_dh does not handle a=e overlap\n");
memcpy(a2, a, alen);
output_prepare(f2, f, flen);
memcpy(c2, c, clen);
double_canary(c2, c, clen);
memcpy(b2, b, blen);
double_canary(b2, b, blen);
secret(c, clen);
secret(b, blen);
crypto_dh(f, c, b);
public(c, clen);
public(b, blen);
public(f, flen);
checksum(f, flen);
output_compare(f2, f, flen, "crypto_dh");
input_compare(c2, c, clen, "crypto_dh");
input_compare(b2, b, blen, "crypto_dh");
double_canary(f2, f, flen);
double_canary(c2, c, clen);
double_canary(b2, b, blen);
secret(c2, clen);
secret(b2, blen);
crypto_dh(f2, c2, b2);
public(c2, clen);
public(b2, blen);
public(f2, flen);
if (memcmp(f2, f, flen) != 0)
fail("failure: crypto_dh is nondeterministic\n");
double_canary(f2, f, flen);
double_canary(c2, c, clen);
double_canary(b2, b, blen);
secret(c2, clen);
secret(b, blen);
crypto_dh(c2, c2, b);
public(c2, flen);
public(b, blen);
if (memcmp(c2, f, flen) != 0)
fail("failure: crypto_dh does not handle c=f overlap\n");
memcpy(c2, c, clen);
secret(c, clen);
secret(b2, blen);
crypto_dh(b2, c, b2);
public(b2, flen);
public(c, clen);
if (memcmp(b2, f, flen) != 0)
fail("failure: crypto_dh does not handle b=f overlap\n");
memcpy(b2, b, blen);
if (memcmp(f, e, elen) != 0)
fail("failure: crypto_dh not associative\n");
}
checksum_expected(dh_x25519_checksums[checksumbig]);
}
}
void test_dh_x25519(void) {
long long maxalloc = 0;
if (targeto && strcmp(targeto, "dh")) return;
if (targetp && strcmp(targetp, "x25519")) return;
storage_dh_x25519_a = callocplus(
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES + crypto_dh_SECRETKEYBYTES);
test_dh_x25519_a = aligned(storage_dh_x25519_a,
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES);
if (crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES + crypto_dh_SECRETKEYBYTES >
maxalloc)
maxalloc = crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES;
storage_dh_x25519_b = callocplus(
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES + crypto_dh_SECRETKEYBYTES);
test_dh_x25519_b = aligned(storage_dh_x25519_b,
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES);
if (crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES + crypto_dh_SECRETKEYBYTES >
maxalloc)
maxalloc = crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES;
storage_dh_x25519_c = callocplus(
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES + crypto_dh_SECRETKEYBYTES);
test_dh_x25519_c = aligned(storage_dh_x25519_c,
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES);
if (crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES + crypto_dh_SECRETKEYBYTES >
maxalloc)
maxalloc = crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES;
storage_dh_x25519_d = callocplus(
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES + crypto_dh_SECRETKEYBYTES);
test_dh_x25519_d = aligned(storage_dh_x25519_d,
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES);
if (crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES + crypto_dh_SECRETKEYBYTES >
maxalloc)
maxalloc = crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES;
storage_dh_x25519_e = callocplus(
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES + crypto_dh_SECRETKEYBYTES);
test_dh_x25519_e = aligned(storage_dh_x25519_e,
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES);
if (crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES + crypto_dh_SECRETKEYBYTES >
maxalloc)
maxalloc = crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES;
storage_dh_x25519_f = callocplus(
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES + crypto_dh_SECRETKEYBYTES);
test_dh_x25519_f = aligned(storage_dh_x25519_f,
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES);
if (crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES + crypto_dh_SECRETKEYBYTES >
maxalloc)
maxalloc = crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES;
storage_dh_x25519_a2 = callocplus(maxalloc);
test_dh_x25519_a2 = aligned(storage_dh_x25519_a2,
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES);
storage_dh_x25519_b2 = callocplus(maxalloc);
test_dh_x25519_b2 = aligned(storage_dh_x25519_b2,
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES);
storage_dh_x25519_c2 = callocplus(maxalloc);
test_dh_x25519_c2 = aligned(storage_dh_x25519_c2,
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES);
storage_dh_x25519_d2 = callocplus(maxalloc);
test_dh_x25519_d2 = aligned(storage_dh_x25519_d2,
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES);
storage_dh_x25519_e2 = callocplus(maxalloc);
test_dh_x25519_e2 = aligned(storage_dh_x25519_e2,
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES);
storage_dh_x25519_f2 = callocplus(maxalloc);
test_dh_x25519_f2 = aligned(storage_dh_x25519_f2,
crypto_dh_BYTES + crypto_dh_PUBLICKEYBYTES +
crypto_dh_SECRETKEYBYTES);
for (long long offset = 0; offset < 2; ++offset) {
if (targetoffset && atol(targetoffset) != offset) continue;
if (offset && valgrind) break;
printf("dh_x25519 offset %lld\n", offset);
forked(test_dh_x25519_impl, -1);
++test_dh_x25519_a;
++test_dh_x25519_b;
++test_dh_x25519_c;
++test_dh_x25519_d;
++test_dh_x25519_e;
++test_dh_x25519_f;
++test_dh_x25519_a2;
++test_dh_x25519_b2;
++test_dh_x25519_c2;
++test_dh_x25519_d2;
++test_dh_x25519_e2;
++test_dh_x25519_f2;
}
free(storage_dh_x25519_f2);
free(storage_dh_x25519_e2);
free(storage_dh_x25519_d2);
free(storage_dh_x25519_c2);
free(storage_dh_x25519_b2);
free(storage_dh_x25519_a2);
free(storage_dh_x25519_f);
free(storage_dh_x25519_e);
free(storage_dh_x25519_d);
free(storage_dh_x25519_c);
free(storage_dh_x25519_b);
free(storage_dh_x25519_a);
}
#undef crypto_dh_SECRETKEYBYTES
#undef crypto_dh_PUBLICKEYBYTES
#undef crypto_dh_BYTES
tinyssh-20250501/_crypto-test_hash_sha256.inc 0000664 0000000 0000000 00000010404 15004722224 0020672 0 ustar 00root root 0000000 0000000 /* ----- hash/sha256, derived from supercop/crypto_hash/try.c */
/*
derived from djb work from lib25519/libntruprime
mj modifications:
- rename files to test-crypto.c and _crypto_<>.<>.inc
- fix compiler warnings
- include crypto.h
- use less rounds for valgrind test
- reformat using clang-format
*/
#include
#include
#include
#include
#include "crypto.h"
#define fail ((ok = 0), printf)
static const char *hash_sha256_checksums[] = {
"0fb5122d471d9310c4ff212c64a73cc985f0826484c24f34b56cb1d39534ba24",
"55ff5e29282c4d7d192a20b427c000ec121fcda33dd96d53aa8857e3f2dd1469",
};
static int (*crypto_hash)(unsigned char *, const unsigned char *,
unsigned long long);
#define crypto_hash_BYTES crypto_hash_sha256_BYTES
static void *storage_hash_sha256_h;
static unsigned char *test_hash_sha256_h;
static void *storage_hash_sha256_m;
static unsigned char *test_hash_sha256_m;
static void *storage_hash_sha256_h2;
static unsigned char *test_hash_sha256_h2;
static void *storage_hash_sha256_m2;
static unsigned char *test_hash_sha256_m2;
static void test_hash_sha256_impl(long long impl) {
unsigned char *h = test_hash_sha256_h;
unsigned char *m = test_hash_sha256_m;
unsigned char *h2 = test_hash_sha256_h2;
unsigned char *m2 = test_hash_sha256_m2;
long long hlen = crypto_hash_BYTES;
long long mlen;
if (targetn && atol(targetn) != impl) return;
crypto_hash = crypto_hash_sha256;
for (long long checksumbig = 0; checksumbig < 2; ++checksumbig) {
long long loops = checksumbig ? 512 : 64;
long long maxtest = checksumbig ? 4096 : 128;
if (checksumbig && valgrind) break;
checksum_clear();
for (long long loop = 0; loop < loops; ++loop) {
mlen = myrandom() % (maxtest + 1);
output_prepare(h2, h, hlen);
input_prepare(m2, m, mlen);
secret(m, mlen);
crypto_hash(h, m, mlen);
public(m, mlen);
public(h, hlen);
checksum(h, hlen);
output_compare(h2, h, hlen, "crypto_hash");
input_compare(m2, m, mlen, "crypto_hash");
double_canary(h2, h, hlen);
double_canary(m2, m, mlen);
secret(m2, mlen);
crypto_hash(h2, m2, mlen);
public(m2, mlen);
public(h2, hlen);
if (memcmp(h2, h, hlen) != 0)
fail("failure: crypto_hash is nondeterministic\n");
double_canary(h2, h, hlen);
double_canary(m2, m, mlen);
secret(m2, mlen);
crypto_hash(m2, m2, mlen);
public(m2, hlen);
if (memcmp(m2, h, hlen) != 0)
fail("failure: crypto_hash does not handle m=h overlap\n");
memcpy(m2, m, mlen);
}
checksum_expected(hash_sha256_checksums[checksumbig]);
}
}
void test_hash_sha256(void) {
long long maxalloc = 0;
if (targeto && strcmp(targeto, "hash")) return;
if (targetp && strcmp(targetp, "sha256")) return;
storage_hash_sha256_h = callocplus(crypto_hash_BYTES);
test_hash_sha256_h = aligned(storage_hash_sha256_h, crypto_hash_BYTES);
if (crypto_hash_BYTES > maxalloc) maxalloc = crypto_hash_BYTES;
storage_hash_sha256_m = callocplus(4096 + crypto_hash_BYTES);
test_hash_sha256_m =
aligned(storage_hash_sha256_m, 4096 + crypto_hash_BYTES);
if (4096 + crypto_hash_BYTES > maxalloc)
maxalloc = 4096 + crypto_hash_BYTES;
storage_hash_sha256_h2 = callocplus(maxalloc);
test_hash_sha256_h2 = aligned(storage_hash_sha256_h2, crypto_hash_BYTES);
storage_hash_sha256_m2 = callocplus(maxalloc);
test_hash_sha256_m2 =
aligned(storage_hash_sha256_m2, 4096 + crypto_hash_BYTES);
for (long long offset = 0; offset < 2; ++offset) {
if (targetoffset && atol(targetoffset) != offset) continue;
if (offset && valgrind) break;
printf("hash_sha256 offset %lld\n", offset);
forked(test_hash_sha256_impl, -1);
++test_hash_sha256_h;
++test_hash_sha256_m;
++test_hash_sha256_h2;
++test_hash_sha256_m2;
}
free(storage_hash_sha256_m2);
free(storage_hash_sha256_h2);
free(storage_hash_sha256_m);
free(storage_hash_sha256_h);
}
#undef crypto_hash_BYTES
tinyssh-20250501/_crypto-test_hash_sha512.inc 0000664 0000000 0000000 00000010404 15004722224 0020665 0 ustar 00root root 0000000 0000000 /* ----- hash/sha512, derived from supercop/crypto_hash/try.c */
/*
derived from djb work from lib25519/libntruprime
mj modifications:
- rename files to test-crypto.c and _crypto_<>.<>.inc
- fix compiler warnings
- include crypto.h
- use less rounds for valgrind test
- reformat using clang-format
*/
#include
#include
#include
#include
#include "crypto.h"
#define fail ((ok = 0), printf)
static const char *hash_sha512_checksums[] = {
"8220572f58bd4730be165c9739d8d4b0fd2e0229dbe01e25b4aed23f00f23b70",
"c1e322b7cbfc941260c5508967ba05bce22eeee94d425e708b7c3301ea1d5e2e",
};
static int (*crypto_hash)(unsigned char *, const unsigned char *,
unsigned long long);
#define crypto_hash_BYTES crypto_hash_sha512_BYTES
static void *storage_hash_sha512_h;
static unsigned char *test_hash_sha512_h;
static void *storage_hash_sha512_m;
static unsigned char *test_hash_sha512_m;
static void *storage_hash_sha512_h2;
static unsigned char *test_hash_sha512_h2;
static void *storage_hash_sha512_m2;
static unsigned char *test_hash_sha512_m2;
static void test_hash_sha512_impl(long long impl) {
unsigned char *h = test_hash_sha512_h;
unsigned char *m = test_hash_sha512_m;
unsigned char *h2 = test_hash_sha512_h2;
unsigned char *m2 = test_hash_sha512_m2;
long long hlen = crypto_hash_BYTES;
long long mlen;
if (targetn && atol(targetn) != impl) return;
crypto_hash = crypto_hash_sha512;
for (long long checksumbig = 0; checksumbig < 2; ++checksumbig) {
long long loops = checksumbig ? 512 : 64;
long long maxtest = checksumbig ? 4096 : 128;
if (checksumbig && valgrind) break;
checksum_clear();
for (long long loop = 0; loop < loops; ++loop) {
mlen = myrandom() % (maxtest + 1);
output_prepare(h2, h, hlen);
input_prepare(m2, m, mlen);
secret(m, mlen);
crypto_hash(h, m, mlen);
public(m, mlen);
public(h, hlen);
checksum(h, hlen);
output_compare(h2, h, hlen, "crypto_hash");
input_compare(m2, m, mlen, "crypto_hash");
double_canary(h2, h, hlen);
double_canary(m2, m, mlen);
secret(m2, mlen);
crypto_hash(h2, m2, mlen);
public(m2, mlen);
public(h2, hlen);
if (memcmp(h2, h, hlen) != 0)
fail("failure: crypto_hash is nondeterministic\n");
double_canary(h2, h, hlen);
double_canary(m2, m, mlen);
secret(m2, mlen);
crypto_hash(m2, m2, mlen);
public(m2, hlen);
if (memcmp(m2, h, hlen) != 0)
fail("failure: crypto_hash does not handle m=h overlap\n");
memcpy(m2, m, mlen);
}
checksum_expected(hash_sha512_checksums[checksumbig]);
}
}
void test_hash_sha512(void) {
long long maxalloc = 0;
if (targeto && strcmp(targeto, "hash")) return;
if (targetp && strcmp(targetp, "sha512")) return;
storage_hash_sha512_h = callocplus(crypto_hash_BYTES);
test_hash_sha512_h = aligned(storage_hash_sha512_h, crypto_hash_BYTES);
if (crypto_hash_BYTES > maxalloc) maxalloc = crypto_hash_BYTES;
storage_hash_sha512_m = callocplus(4096 + crypto_hash_BYTES);
test_hash_sha512_m =
aligned(storage_hash_sha512_m, 4096 + crypto_hash_BYTES);
if (4096 + crypto_hash_BYTES > maxalloc)
maxalloc = 4096 + crypto_hash_BYTES;
storage_hash_sha512_h2 = callocplus(maxalloc);
test_hash_sha512_h2 = aligned(storage_hash_sha512_h2, crypto_hash_BYTES);
storage_hash_sha512_m2 = callocplus(maxalloc);
test_hash_sha512_m2 =
aligned(storage_hash_sha512_m2, 4096 + crypto_hash_BYTES);
for (long long offset = 0; offset < 2; ++offset) {
if (targetoffset && atol(targetoffset) != offset) continue;
if (offset && valgrind) break;
printf("hash_sha512 offset %lld\n", offset);
forked(test_hash_sha512_impl, -1);
++test_hash_sha512_h;
++test_hash_sha512_m;
++test_hash_sha512_h2;
++test_hash_sha512_m2;
}
free(storage_hash_sha512_m2);
free(storage_hash_sha512_h2);
free(storage_hash_sha512_m);
free(storage_hash_sha512_h);
}
#undef crypto_hash_BYTES
tinyssh-20250501/_crypto-test_kem_sntrup761.inc 0000664 0000000 0000000 00000022602 15004722224 0021307 0 ustar 00root root 0000000 0000000 /* ----- kem/sntrup761, derived from supercop/crypto_kem/try.c */
/*
derived from djb work from lib25519/libntruprime
mj modifications:
- rename files to test-crypto.c and _crypto_<>.<>.inc
- fix compiler warnings
- include crypto.h
- use less rounds for valgrind test
- reformat using clang-format
*/
#include
#include
#include
#include
#include "crypto.h"
#define fail ((ok = 0), printf)
static const char *kem_sntrup761_checksums[] = {
"4081ab3f61bac9aae91bff7f9b212855177591ec4427dff2a501be124c5bb97d",
"730a572b64fa05a42bce7b1573edc04b70ef75909db309c012aa27f53f1f2f41",
};
static int (*crypto_kem_keypair)(unsigned char *, unsigned char *);
static int (*crypto_kem_enc)(unsigned char *, unsigned char *,
const unsigned char *);
static int (*crypto_kem_dec)(unsigned char *, const unsigned char *,
const unsigned char *);
#define crypto_kem_SECRETKEYBYTES crypto_kem_sntrup761_SECRETKEYBYTES
#define crypto_kem_PUBLICKEYBYTES crypto_kem_sntrup761_PUBLICKEYBYTES
#define crypto_kem_CIPHERTEXTBYTES crypto_kem_sntrup761_CIPHERTEXTBYTES
#define crypto_kem_BYTES crypto_kem_sntrup761_BYTES
static void *storage_kem_sntrup761_p;
static unsigned char *test_kem_sntrup761_p;
static void *storage_kem_sntrup761_s;
static unsigned char *test_kem_sntrup761_s;
static void *storage_kem_sntrup761_k;
static unsigned char *test_kem_sntrup761_k;
static void *storage_kem_sntrup761_c;
static unsigned char *test_kem_sntrup761_c;
static void *storage_kem_sntrup761_t;
static unsigned char *test_kem_sntrup761_t;
static void *storage_kem_sntrup761_p2;
static unsigned char *test_kem_sntrup761_p2;
static void *storage_kem_sntrup761_s2;
static unsigned char *test_kem_sntrup761_s2;
static void *storage_kem_sntrup761_k2;
static unsigned char *test_kem_sntrup761_k2;
static void *storage_kem_sntrup761_c2;
static unsigned char *test_kem_sntrup761_c2;
static void *storage_kem_sntrup761_t2;
static unsigned char *test_kem_sntrup761_t2;
static void test_kem_sntrup761_impl(long long impl) {
unsigned char *p = test_kem_sntrup761_p;
unsigned char *s = test_kem_sntrup761_s;
unsigned char *k = test_kem_sntrup761_k;
unsigned char *c = test_kem_sntrup761_c;
unsigned char *t = test_kem_sntrup761_t;
unsigned char *p2 = test_kem_sntrup761_p2;
unsigned char *s2 = test_kem_sntrup761_s2;
unsigned char *k2 = test_kem_sntrup761_k2;
unsigned char *c2 = test_kem_sntrup761_c2;
unsigned char *t2 = test_kem_sntrup761_t2;
long long plen = crypto_kem_PUBLICKEYBYTES;
long long slen = crypto_kem_SECRETKEYBYTES;
long long klen = crypto_kem_BYTES;
long long clen = crypto_kem_CIPHERTEXTBYTES;
long long tlen = crypto_kem_BYTES;
if (targetn && atol(targetn) != impl) return;
crypto_kem_keypair = crypto_kem_sntrup761_keypair;
crypto_kem_enc = crypto_kem_sntrup761_enc;
crypto_kem_dec = crypto_kem_sntrup761_dec;
for (long long checksumbig = 0; checksumbig < 2; ++checksumbig) {
long long loops = checksumbig ? 64 : 8;
if (checksumbig && valgrind) break;
checksum_clear();
for (long long loop = 0; loop < loops; ++loop) {
output_prepare(p2, p, plen);
output_prepare(s2, s, slen);
crypto_kem_keypair(p, s);
public(p, plen);
public(s, slen);
checksum(p, plen);
checksum(s, slen);
output_compare(p2, p, plen, "crypto_kem_keypair");
output_compare(s2, s, slen, "crypto_kem_keypair");
output_prepare(c2, c, clen);
output_prepare(k2, k, klen);
memcpy(p2, p, plen);
double_canary(p2, p, plen);
secret(p, plen);
crypto_kem_enc(c, k, p);
public(p, plen);
public(c, clen);
public(k, klen);
checksum(c, clen);
checksum(k, klen);
output_compare(c2, c, clen, "crypto_kem_enc");
output_compare(k2, k, klen, "crypto_kem_enc");
input_compare(p2, p, plen, "crypto_kem_enc");
output_prepare(t2, t, tlen);
memcpy(c2, c, clen);
double_canary(c2, c, clen);
memcpy(s2, s, slen);
double_canary(s2, s, slen);
secret(c, clen);
secret(s, slen);
crypto_kem_dec(t, c, s);
public(c, clen);
public(s, slen);
public(t, tlen);
if (memcmp(t, k, klen) != 0)
fail("failure: crypto_kem_dec does not match k\n");
checksum(t, tlen);
output_compare(t2, t, tlen, "crypto_kem_dec");
input_compare(c2, c, clen, "crypto_kem_dec");
input_compare(s2, s, slen, "crypto_kem_dec");
double_canary(t2, t, tlen);
double_canary(c2, c, clen);
double_canary(s2, s, slen);
secret(c2, clen);
secret(s2, slen);
crypto_kem_dec(t2, c2, s2);
public(c2, clen);
public(s2, slen);
public(t2, tlen);
if (memcmp(t2, t, tlen) != 0)
fail("failure: crypto_kem_dec is nondeterministic\n");
double_canary(t2, t, tlen);
double_canary(c2, c, clen);
double_canary(s2, s, slen);
secret(c2, clen);
secret(s, slen);
crypto_kem_dec(c2, c2, s);
public(c2, tlen);
public(s, slen);
if (memcmp(c2, t, tlen) != 0)
fail("failure: crypto_kem_dec does not handle c=t overlap\n");
memcpy(c2, c, clen);
secret(c, clen);
secret(s2, slen);
crypto_kem_dec(s2, c, s2);
public(s2, tlen);
public(c, clen);
if (memcmp(s2, t, tlen) != 0)
fail("failure: crypto_kem_dec does not handle s=t overlap\n");
memcpy(s2, s, slen);
c[myrandom() % clen] += 1 + (myrandom() % 255);
crypto_kem_dec(t, c, s);
checksum(t, tlen);
c[myrandom() % clen] += 1 + (myrandom() % 255);
crypto_kem_dec(t, c, s);
checksum(t, tlen);
c[myrandom() % clen] += 1 + (myrandom() % 255);
crypto_kem_dec(t, c, s);
checksum(t, tlen);
}
checksum_expected(kem_sntrup761_checksums[checksumbig]);
}
}
void test_kem_sntrup761(void) {
long long maxalloc = 0;
if (targeto && strcmp(targeto, "kem")) return;
if (targetp && strcmp(targetp, "sntrup761")) return;
storage_kem_sntrup761_p = callocplus(crypto_kem_PUBLICKEYBYTES);
test_kem_sntrup761_p =
aligned(storage_kem_sntrup761_p, crypto_kem_PUBLICKEYBYTES);
if (crypto_kem_PUBLICKEYBYTES > maxalloc)
maxalloc = crypto_kem_PUBLICKEYBYTES;
storage_kem_sntrup761_s = callocplus(crypto_kem_SECRETKEYBYTES);
test_kem_sntrup761_s =
aligned(storage_kem_sntrup761_s, crypto_kem_SECRETKEYBYTES);
if (crypto_kem_SECRETKEYBYTES > maxalloc)
maxalloc = crypto_kem_SECRETKEYBYTES;
storage_kem_sntrup761_k = callocplus(crypto_kem_BYTES);
test_kem_sntrup761_k = aligned(storage_kem_sntrup761_k, crypto_kem_BYTES);
if (crypto_kem_BYTES > maxalloc) maxalloc = crypto_kem_BYTES;
storage_kem_sntrup761_c = callocplus(crypto_kem_CIPHERTEXTBYTES);
test_kem_sntrup761_c =
aligned(storage_kem_sntrup761_c, crypto_kem_CIPHERTEXTBYTES);
if (crypto_kem_CIPHERTEXTBYTES > maxalloc)
maxalloc = crypto_kem_CIPHERTEXTBYTES;
storage_kem_sntrup761_t = callocplus(crypto_kem_BYTES);
test_kem_sntrup761_t = aligned(storage_kem_sntrup761_t, crypto_kem_BYTES);
if (crypto_kem_BYTES > maxalloc) maxalloc = crypto_kem_BYTES;
storage_kem_sntrup761_p2 = callocplus(maxalloc);
test_kem_sntrup761_p2 =
aligned(storage_kem_sntrup761_p2, crypto_kem_PUBLICKEYBYTES);
storage_kem_sntrup761_s2 = callocplus(maxalloc);
test_kem_sntrup761_s2 =
aligned(storage_kem_sntrup761_s2, crypto_kem_SECRETKEYBYTES);
storage_kem_sntrup761_k2 = callocplus(maxalloc);
test_kem_sntrup761_k2 = aligned(storage_kem_sntrup761_k2, crypto_kem_BYTES);
storage_kem_sntrup761_c2 = callocplus(maxalloc);
test_kem_sntrup761_c2 =
aligned(storage_kem_sntrup761_c2, crypto_kem_CIPHERTEXTBYTES);
storage_kem_sntrup761_t2 = callocplus(maxalloc);
test_kem_sntrup761_t2 = aligned(storage_kem_sntrup761_t2, crypto_kem_BYTES);
for (long long offset = 0; offset < 2; ++offset) {
if (targetoffset && atol(targetoffset) != offset) continue;
if (offset && valgrind) break;
printf("kem_sntrup761 offset %lld\n", offset);
forked(test_kem_sntrup761_impl, -1);
++test_kem_sntrup761_p;
++test_kem_sntrup761_s;
++test_kem_sntrup761_k;
++test_kem_sntrup761_c;
++test_kem_sntrup761_t;
++test_kem_sntrup761_p2;
++test_kem_sntrup761_s2;
++test_kem_sntrup761_k2;
++test_kem_sntrup761_c2;
++test_kem_sntrup761_t2;
}
free(storage_kem_sntrup761_t2);
free(storage_kem_sntrup761_c2);
free(storage_kem_sntrup761_k2);
free(storage_kem_sntrup761_s2);
free(storage_kem_sntrup761_p2);
free(storage_kem_sntrup761_t);
free(storage_kem_sntrup761_c);
free(storage_kem_sntrup761_k);
free(storage_kem_sntrup761_s);
free(storage_kem_sntrup761_p);
}
#undef crypto_kem_SECRETKEYBYTES
#undef crypto_kem_PUBLICKEYBYTES
#undef crypto_kem_CIPHERTEXTBYTES
#undef crypto_kem_BYTES
tinyssh-20250501/_crypto-test_onetimeauth_poly1305.inc 0000664 0000000 0000000 00001274614 15004722224 0022575 0 ustar 00root root 0000000 0000000 /* ----- onetimeauth/poly1305, derived from supercop/crypto_onetimeauth/try.c */
/*
derived from djb work from lib25519/lib1305
mj modifications:
- rename files to test-crypto.c and _crypto_<>.<>.inc
- fix compiler warnings
- include crypto.h
- reformat using clang-format
*/
#include
#include
#include
#include
#include "crypto.h"
#define fail ((ok = 0), printf)
static const char *onetimeauth_poly1305_checksums[] = {
"6e0b9cab26afe89025afa79802234668b378ae2a0f8415b062ece0174f8bdcef",
"d31323d65ade3ad4f87a77aef4c31e87c3aecf32087f2706cf43f81b3b0868b9",
};
static int (*crypto_onetimeauth)(unsigned char *, const unsigned char *,
unsigned long long, const unsigned char *);
static int (*crypto_onetimeauth_verify)(const unsigned char *,
const unsigned char *,
unsigned long long,
const unsigned char *);
#define crypto_onetimeauth_BYTES crypto_onetimeauth_poly1305_BYTES
#define crypto_onetimeauth_KEYBYTES crypto_onetimeauth_poly1305_KEYBYTES
static void *storage_onetimeauth_poly1305_a;
static unsigned char *test_onetimeauth_poly1305_a;
static void *storage_onetimeauth_poly1305_m;
static unsigned char *test_onetimeauth_poly1305_m;
static void *storage_onetimeauth_poly1305_k;
static unsigned char *test_onetimeauth_poly1305_k;
static void *storage_onetimeauth_poly1305_a2;
static unsigned char *test_onetimeauth_poly1305_a2;
static void *storage_onetimeauth_poly1305_m2;
static unsigned char *test_onetimeauth_poly1305_m2;
static void *storage_onetimeauth_poly1305_k2;
static unsigned char *test_onetimeauth_poly1305_k2;
#define precomputed_onetimeauth_poly1305_NUM 132
static const unsigned char precomputed_onetimeauth_poly1305[62157] = {
240, 69, 235, 32, 108, 34, 151, 76, 232, 193, 111, 66, 140, 216, 234,
96, 187, 71, 129, 10, 202, 48, 41, 121, 29, 132, 65, 170, 197, 121,
57, 170, 56, 158, 155, 151, 12, 157, 231, 95, 66, 183, 77, 112, 185,
170, 243, 152, 98, 32, 55, 186, 226, 246, 76, 216, 71, 9, 173, 178,
47, 23, 11, 112, 234, 148, 133, 192, 216, 86, 112, 85, 197, 250, 89,
178, 110, 145, 209, 15, 93, 205, 82, 133, 13, 231, 80, 227, 137, 5,
68, 158, 132, 168, 71, 242, 233, 239, 141, 233, 203, 97, 27, 253, 200,
172, 177, 123, 252, 197, 90, 85, 86, 74, 215, 197, 214, 195, 199, 35,
254, 108, 212, 244, 180, 245, 181, 105, 128, 128, 171, 186, 0, 31, 6,
66, 215, 178, 224, 175, 50, 34, 185, 186, 109, 100, 120, 15, 177, 108,
75, 245, 28, 136, 165, 39, 123, 249, 35, 213, 25, 215, 191, 52, 186,
86, 202, 29, 143, 188, 104, 177, 116, 37, 164, 225, 65, 231, 34, 164,
193, 226, 24, 136, 9, 253, 191, 115, 43, 240, 159, 119, 245, 182, 114,
222, 4, 144, 242, 88, 46, 43, 29, 152, 185, 81, 24, 3, 137, 90,
53, 222, 137, 156, 158, 70, 133, 134, 247, 43, 70, 54, 111, 208, 243,
230, 176, 29, 5, 24, 180, 178, 205, 227, 246, 134, 254, 241, 103, 226,
20, 192, 152, 26, 134, 253, 38, 117, 119, 240, 124, 215, 255, 227, 241,
235, 120, 136, 11, 91, 206, 145, 229, 75, 34, 67, 115, 104, 142, 224,
146, 95, 158, 6, 62, 168, 231, 217, 232, 246, 52, 228, 68, 56, 168,
144, 250, 16, 131, 144, 52, 26, 134, 169, 15, 120, 157, 168, 226, 100,
232, 221, 196, 38, 71, 153, 32, 204, 15, 130, 161, 8, 219, 227, 177,
23, 27, 28, 122, 204, 131, 14, 133, 6, 184, 140, 223, 98, 10, 251,
14, 72, 161, 120, 2, 229, 76, 200, 176, 65, 60, 180, 96, 163, 18,
241, 104, 236, 23, 19, 233, 69, 68, 13, 188, 206, 127, 206, 154, 127,
91, 14, 18, 197, 237, 104, 90, 15, 219, 79, 90, 14, 20, 67, 230,
106, 216, 95, 60, 20, 189, 246, 244, 127, 170, 49, 235, 172, 171, 209,
115, 112, 84, 103, 24, 231, 38, 178, 97, 107, 172, 82, 130, 246, 240,
134, 251, 9, 231, 127, 26, 174, 236, 199, 76, 70, 87, 169, 191, 239,
229, 65, 212, 252, 104, 193, 200, 9, 61, 75, 92, 5, 192, 172, 46,
176, 161, 22, 113, 197, 116, 176, 161, 104, 71, 112, 97, 158, 12, 160,
198, 248, 79, 9, 243, 132, 131, 23, 26, 162, 79, 1, 25, 198, 164,
89, 216, 138, 151, 120, 237, 245, 95, 77, 204, 84, 36, 207, 177, 51,
192, 189, 220, 167, 159, 29, 115, 55, 246, 128, 110, 65, 146, 19, 240,
127, 167, 214, 83, 63, 218, 56, 140, 254, 135, 151, 177, 61, 139, 200,
82, 205, 132, 39, 47, 116, 198, 53, 172, 137, 21, 135, 121, 203, 101,
112, 221, 219, 255, 50, 191, 165, 80, 2, 37, 62, 50, 93, 101, 176,
251, 189, 237, 243, 17, 227, 96, 104, 179, 58, 159, 105, 54, 47, 221,
214, 47, 95, 242, 210, 201, 213, 170, 25, 59, 46, 19, 35, 175, 232,
123, 125, 29, 110, 242, 103, 94, 148, 21, 32, 172, 246, 32, 27, 16,
121, 68, 171, 204, 231, 97, 95, 43, 100, 247, 127, 73, 247, 124, 121,
91, 82, 212, 121, 151, 222, 195, 60, 80, 67, 101, 59, 46, 130, 152,
207, 193, 106, 164, 202, 15, 237, 49, 210, 178, 72, 126, 54, 157, 17,
86, 85, 81, 114, 50, 21, 228, 25, 203, 79, 60, 55, 98, 37, 156,
86, 57, 99, 53, 255, 77, 253, 139, 129, 3, 10, 178, 220, 30, 62,
173, 33, 175, 231, 138, 239, 126, 241, 48, 28, 96, 222, 247, 44, 160,
75, 102, 137, 101, 232, 102, 235, 182, 124, 133, 13, 121, 241, 56, 191,
18, 97, 247, 174, 14, 240, 161, 192, 247, 127, 159, 227, 107, 247, 32,
172, 178, 57, 56, 169, 249, 79, 86, 136, 95, 190, 109, 2, 115, 252,
107, 109, 87, 42, 105, 77, 148, 217, 125, 158, 85, 87, 12, 148, 217,
158, 146, 237, 83, 220, 230, 110, 103, 72, 193, 223, 74, 72, 54, 103,
98, 254, 253, 74, 136, 247, 131, 161, 62, 140, 79, 246, 51, 102, 175,
42, 110, 10, 186, 234, 157, 213, 221, 170, 149, 126, 179, 244, 89, 191,
245, 248, 37, 136, 254, 17, 229, 212, 221, 96, 73, 41, 111, 195, 194,
11, 98, 47, 208, 188, 206, 189, 250, 45, 100, 52, 97, 17, 43, 159,
166, 64, 13, 0, 104, 189, 194, 117, 150, 7, 62, 42, 73, 10, 97,
2, 82, 160, 124, 209, 211, 141, 253, 214, 244, 85, 25, 188, 78, 8,
52, 126, 143, 152, 106, 43, 131, 44, 10, 59, 68, 111, 216, 176, 193,
118, 181, 127, 213, 239, 245, 35, 80, 195, 193, 163, 210, 34, 70, 94,
168, 221, 18, 145, 27, 83, 224, 165, 83, 62, 220, 53, 164, 94, 206,
196, 35, 247, 15, 143, 35, 33, 104, 197, 222, 122, 145, 246, 56, 32,
77, 115, 108, 45, 143, 170, 85, 130, 31, 90, 52, 26, 52, 83, 63,
111, 102, 88, 48, 157, 250, 187, 15, 161, 231, 39, 228, 163, 204, 92,
105, 17, 79, 136, 154, 105, 58, 79, 135, 170, 144, 203, 182, 88, 189,
27, 64, 0, 91, 148, 21, 13, 39, 28, 197, 197, 99, 196, 7, 49,
84, 46, 241, 231, 168, 122, 214, 30, 92, 80, 10, 230, 246, 196, 86,
70, 159, 129, 239, 0, 68, 15, 224, 48, 253, 148, 95, 236, 172, 55,
94, 187, 147, 190, 12, 174, 118, 101, 158, 72, 87, 70, 43, 63, 89,
230, 24, 41, 255, 168, 153, 167, 37, 217, 168, 104, 202, 19, 16, 125,
11, 60, 63, 42, 216, 152, 211, 203, 246, 102, 189, 68, 164, 255, 198,
249, 183, 252, 172, 243, 100, 250, 77, 143, 231, 251, 81, 12, 153, 129,
236, 105, 34, 184, 169, 224, 89, 99, 153, 3, 65, 137, 125, 168, 247,
231, 34, 185, 114, 210, 20, 239, 168, 130, 92, 67, 112, 54, 245, 196,
117, 122, 139, 204, 207, 240, 159, 245, 160, 175, 2, 19, 49, 133, 119,
128, 8, 179, 144, 246, 135, 129, 27, 53, 75, 210, 27, 217, 201, 232,
138, 209, 179, 205, 229, 184, 4, 200, 151, 230, 81, 46, 179, 15, 101,
13, 199, 32, 137, 105, 83, 232, 47, 95, 199, 240, 140, 6, 231, 32,
43, 238, 146, 15, 94, 46, 166, 99, 247, 186, 33, 156, 197, 122, 223,
195, 153, 58, 36, 250, 21, 244, 67, 228, 116, 158, 19, 193, 27, 196,
193, 114, 11, 109, 183, 112, 21, 213, 201, 178, 197, 98, 77, 130, 190,
26, 118, 157, 15, 25, 247, 170, 162, 27, 201, 90, 115, 89, 74, 171,
84, 175, 11, 59, 49, 95, 166, 99, 234, 247, 248, 33, 40, 131, 127,
27, 15, 142, 144, 252, 226, 241, 41, 54, 162, 211, 150, 170, 116, 216,
34, 208, 172, 163, 115, 151, 102, 154, 54, 31, 11, 18, 164, 234, 90,
47, 158, 13, 70, 211, 35, 235, 137, 89, 195, 233, 181, 184, 17, 148,
228, 78, 242, 179, 11, 194, 180, 242, 137, 209, 116, 28, 198, 97, 96,
21, 193, 214, 147, 67, 236, 43, 26, 211, 112, 97, 229, 24, 119, 180,
162, 91, 112, 142, 241, 160, 132, 20, 54, 50, 239, 180, 38, 33, 94,
205, 240, 94, 63, 140, 17, 235, 253, 220, 86, 161, 174, 20, 161, 191,
234, 106, 63, 54, 149, 73, 175, 149, 117, 77, 134, 26, 12, 242, 32,
85, 47, 14, 85, 250, 194, 23, 208, 7, 100, 202, 84, 57, 128, 5,
106, 44, 84, 124, 24, 136, 28, 184, 173, 98, 15, 87, 85, 233, 46,
239, 158, 79, 139, 153, 227, 52, 157, 0, 206, 9, 161, 189, 5, 217,
140, 115, 242, 158, 244, 103, 100, 173, 194, 147, 25, 76, 223, 51, 156,
7, 117, 198, 51, 109, 10, 158, 20, 119, 170, 97, 171, 223, 145, 160,
221, 192, 60, 79, 141, 221, 248, 132, 175, 162, 20, 30, 120, 102, 53,
1, 192, 200, 22, 84, 47, 11, 34, 148, 39, 149, 8, 84, 203, 219,
238, 237, 29, 86, 46, 88, 6, 218, 215, 172, 226, 166, 48, 149, 109,
105, 221, 235, 88, 168, 205, 38, 74, 87, 119, 50, 132, 133, 145, 164,
52, 219, 134, 155, 206, 171, 213, 86, 173, 106, 62, 175, 20, 56, 253,
169, 80, 104, 227, 254, 223, 223, 156, 125, 31, 202, 118, 63, 183, 249,
37, 204, 35, 155, 55, 158, 255, 142, 111, 80, 178, 227, 118, 37, 39,
67, 111, 115, 147, 232, 94, 245, 146, 16, 37, 241, 199, 38, 8, 170,
152, 135, 221, 186, 85, 146, 143, 21, 110, 163, 210, 173, 16, 219, 43,
145, 73, 213, 89, 103, 160, 103, 73, 134, 210, 140, 24, 228, 206, 24,
218, 216, 162, 115, 179, 13, 189, 242, 23, 106, 233, 171, 181, 215, 216,
252, 63, 154, 52, 241, 75, 129, 118, 217, 5, 128, 98, 34, 110, 135,
106, 13, 224, 13, 193, 18, 219, 23, 75, 103, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 3, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 255, 255, 23,
250, 255, 255, 23, 250, 255, 255, 23, 250, 255, 255, 23, 253, 255, 255,
23, 250, 255, 255, 23, 250, 255, 255, 23, 250, 255, 255, 23, 249, 255,
255, 23, 250, 255, 255, 23, 250, 255, 255, 23, 250, 255, 255, 23, 250,
255, 255, 23, 250, 255, 255, 23, 250, 255, 255, 23, 250, 255, 255, 23,
246, 255, 255, 23, 250, 255, 255, 23, 250, 255, 255, 23, 250, 255, 255,
23, 247, 255, 255, 23, 250, 255, 255, 23, 250, 255, 255, 23, 250, 255,
255, 23, 243, 255, 255, 23, 250, 255, 255, 23, 250, 255, 255, 23, 250,
255, 255, 23, 244, 255, 255, 23, 250, 255, 255, 23, 250, 255, 255, 23,
250, 255, 255, 23, 240, 255, 255, 23, 250, 255, 255, 23, 250, 255, 255,
23, 250, 255, 255, 23, 241, 255, 255, 23, 250, 255, 255, 23, 250, 255,
255, 23, 250, 255, 255, 23, 237, 255, 255, 23, 250, 255, 255, 23, 250,
255, 255, 23, 250, 255, 255, 23, 238, 255, 255, 23, 250, 255, 255, 23,
250, 255, 255, 23, 250, 255, 255, 23, 234, 255, 255, 23, 250, 255, 255,
23, 250, 255, 255, 23, 250, 255, 255, 23, 235, 255, 255, 23, 250, 255,
255, 23, 250, 255, 255, 23, 250, 255, 255, 23, 231, 255, 255, 23, 250,
255, 255, 23, 250, 255, 255, 23, 250, 255, 255, 23, 232, 255, 255, 23,
250, 255, 255, 23, 250, 255, 255, 23, 250, 255, 255, 23, 187, 20, 186,
106, 150, 129, 231, 55, 25, 111, 40, 7, 29, 120, 219, 48, 214, 198,
218, 161, 195, 149, 80, 68, 74, 35, 110, 110, 64, 78, 210, 1, 1,
116, 161, 40, 210, 173, 16, 205, 125, 130, 246, 59, 236, 213, 201, 97,
241, 246, 235, 108, 129, 39, 21, 156, 229, 73, 43, 210, 92, 63, 98,
188, 148, 2, 189, 9, 93, 196, 15, 19, 58, 61, 168, 39, 123, 31,
164, 52, 125, 186, 176, 70, 166, 238, 95, 246, 49, 115, 23, 125, 142,
251, 13, 147, 209, 1, 213, 75, 226, 180, 243, 57, 55, 29, 15, 79,
172, 45, 229, 8, 108, 58, 28, 42, 166, 23, 113, 186, 198, 123, 83,
207, 83, 110, 150, 196, 169, 90, 208, 124, 90, 221, 144, 106, 143, 234,
170, 91, 41, 129, 12, 45, 104, 222, 224, 173, 86, 173, 166, 89, 69,
108, 2, 97, 0, 117, 206, 191, 176, 22, 217, 49, 137, 8, 45, 85,
18, 128, 221, 121, 251, 177, 17, 120, 231, 73, 235, 247, 116, 139, 48,
76, 71, 177, 108, 142, 39, 28, 27, 2, 45, 139, 46, 103, 228, 187,
94, 113, 204, 224, 243, 213, 238, 65, 146, 113, 119, 84, 14, 123, 32,
125, 26, 197, 248, 67, 29, 251, 52, 102, 236, 229, 203, 83, 210, 112,
15, 105, 183, 39, 171, 6, 59, 138, 30, 13, 250, 190, 30, 216, 86,
36, 101, 91, 124, 7, 66, 185, 132, 49, 189, 174, 243, 105, 205, 151,
230, 96, 134, 251, 235, 75, 84, 4, 201, 116, 33, 221, 164, 16, 148,
21, 75, 57, 169, 99, 178, 157, 240, 115, 61, 237, 147, 24, 115, 143,
24, 97, 255, 7, 211, 52, 57, 79, 47, 155, 2, 223, 209, 106, 26,
167, 35, 211, 248, 211, 178, 92, 128, 100, 50, 117, 69, 150, 157, 228,
144, 60, 23, 203, 137, 97, 34, 13, 192, 236, 52, 136, 169, 215, 10,
146, 18, 214, 91, 127, 69, 177, 222, 111, 2, 38, 119, 188, 112, 161,
254, 157, 19, 237, 162, 77, 78, 175, 238, 35, 192, 154, 179, 70, 242,
92, 193, 3, 26, 203, 187, 244, 67, 132, 187, 69, 135, 224, 108, 59,
135, 244, 214, 211, 165, 158, 91, 54, 46, 200, 189, 157, 142, 212, 187,
238, 6, 198, 166, 220, 205, 14, 16, 129, 49, 195, 184, 155, 72, 245,
55, 37, 52, 0, 241, 100, 89, 224, 171, 139, 29, 118, 80, 174, 10,
36, 166, 179, 74, 203, 79, 245, 144, 190, 219, 159, 235, 62, 248, 92,
65, 182, 168, 213, 242, 207, 181, 154, 161, 132, 57, 15, 11, 244, 150,
195, 31, 52, 209, 35, 109, 137, 35, 206, 166, 84, 128, 113, 52, 235,
21, 227, 145, 33, 213, 66, 43, 149, 125, 237, 219, 167, 145, 24, 166,
70, 230, 115, 73, 140, 224, 135, 16, 156, 73, 60, 20, 169, 221, 196,
18, 221, 195, 93, 227, 250, 94, 244, 187, 27, 211, 22, 39, 136, 171,
192, 175, 96, 191, 100, 223, 54, 244, 124, 216, 0, 191, 120, 217, 185,
39, 128, 66, 9, 29, 54, 159, 19, 22, 87, 41, 108, 150, 16, 204,
144, 205, 170, 207, 51, 127, 61, 228, 128, 46, 7, 150, 121, 191, 7,
31, 152, 154, 140, 230, 237, 219, 114, 131, 77, 87, 143, 111, 67, 1,
194, 19, 209, 104, 155, 79, 118, 145, 212, 144, 250, 137, 211, 70, 93,
36, 168, 238, 12, 137, 193, 123, 57, 222, 136, 11, 191, 154, 43, 205,
218, 152, 235, 132, 19, 185, 147, 199, 247, 169, 35, 25, 203, 220, 125,
79, 138, 187, 217, 196, 57, 121, 24, 148, 94, 217, 41, 217, 113, 208,
155, 13, 49, 105, 52, 43, 35, 26, 190, 173, 182, 208, 118, 106, 17,
59, 67, 163, 115, 15, 191, 77, 128, 15, 241, 23, 49, 52, 250, 131,
221, 35, 96, 35, 105, 115, 219, 102, 243, 89, 137, 32, 119, 130, 36,
244, 79, 197, 250, 184, 224, 142, 194, 190, 84, 48, 85, 186, 244, 80,
250, 212, 253, 44, 80, 176, 226, 33, 210, 1, 59, 158, 244, 209, 22,
10, 235, 199, 187, 209, 3, 162, 216, 117, 4, 66, 34, 153, 162, 185,
76, 180, 61, 90, 63, 163, 93, 146, 28, 243, 205, 70, 252, 114, 227,
160, 130, 50, 4, 92, 5, 75, 194, 89, 71, 173, 127, 60, 218, 45,
82, 191, 31, 71, 241, 146, 141, 31, 212, 227, 48, 58, 148, 183, 156,
91, 114, 227, 39, 80, 54, 114, 16, 141, 86, 69, 14, 16, 234, 133,
93, 158, 158, 147, 245, 226, 61, 117, 82, 165, 171, 14, 182, 135, 253,
221, 221, 122, 112, 194, 138, 28, 29, 153, 113, 152, 166, 246, 124, 90,
171, 20, 150, 99, 117, 198, 62, 118, 65, 112, 150, 18, 248, 204, 195,
77, 142, 19, 168, 71, 138, 98, 235, 170, 194, 67, 188, 219, 46, 107,
164, 88, 25, 40, 104, 8, 249, 177, 27, 15, 245, 134, 213, 207, 229,
189, 138, 116, 73, 198, 37, 238, 252, 103, 54, 248, 188, 55, 191, 96,
172, 43, 89, 159, 60, 42, 148, 238, 35, 94, 15, 173, 217, 176, 238,
165, 118, 147, 92, 216, 53, 132, 111, 198, 175, 219, 39, 118, 135, 12,
74, 247, 13, 32, 228, 219, 49, 0, 241, 46, 119, 120, 203, 214, 200,
80, 45, 236, 185, 146, 244, 76, 189, 28, 162, 197, 121, 196, 60, 137,
177, 77, 113, 61, 23, 195, 57, 45, 226, 96, 134, 72, 50, 59, 173,
131, 168, 75, 149, 103, 133, 222, 219, 7, 199, 72, 124, 110, 66, 138,
210, 116, 66, 140, 115, 47, 235, 74, 126, 35, 247, 75, 220, 107, 88,
56, 92, 116, 209, 200, 139, 147, 178, 163, 84, 232, 87, 169, 236, 227,
108, 44, 28, 41, 197, 252, 104, 41, 146, 13, 80, 254, 32, 196, 133,
74, 90, 100, 133, 193, 32, 101, 99, 68, 166, 234, 38, 185, 220, 196,
135, 183, 236, 74, 243, 146, 6, 207, 19, 42, 128, 41, 61, 225, 83,
229, 126, 109, 162, 63, 242, 203, 141, 134, 143, 108, 151, 105, 98, 248,
67, 109, 61, 129, 8, 238, 58, 241, 175, 1, 131, 13, 216, 242, 189,
110, 12, 207, 99, 180, 88, 6, 205, 94, 2, 161, 44, 172, 203, 211,
172, 190, 104, 43, 28, 161, 176, 234, 194, 163, 43, 208, 215, 63, 12,
84, 125, 138, 148, 228, 174, 51, 107, 7, 77, 196, 131, 21, 239, 15,
206, 197, 10, 197, 156, 123, 115, 99, 90, 22, 175, 118, 247, 178, 237,
60, 196, 86, 23, 134, 17, 242, 177, 163, 71, 113, 198, 9, 82, 225,
182, 119, 130, 88, 150, 151, 155, 3, 124, 96, 172, 64, 24, 95, 92,
39, 57, 147, 14, 214, 121, 186, 99, 62, 41, 191, 207, 168, 66, 187,
173, 102, 108, 232, 158, 214, 38, 110, 137, 240, 201, 230, 13, 186, 174,
53, 47, 181, 80, 84, 87, 101, 125, 112, 237, 129, 118, 107, 37, 191,
74, 240, 116, 2, 111, 138, 57, 224, 0, 148, 148, 112, 112, 100, 108,
185, 173, 96, 200, 66, 150, 152, 246, 106, 212, 110, 161, 142, 147, 253,
185, 249, 248, 12, 235, 122, 32, 64, 244, 141, 87, 110, 253, 96, 232,
9, 4, 217, 70, 83, 237, 251, 131, 61, 199, 70, 176, 224, 222, 103,
157, 77, 224, 177, 110, 24, 103, 207, 34, 10, 161, 242, 172, 225, 68,
72, 209, 147, 6, 96, 162, 25, 249, 70, 170, 1, 10, 250, 121, 28,
52, 134, 149, 33, 0, 27, 188, 133, 133, 93, 5, 139, 73, 141, 60,
148, 62, 46, 94, 205, 2, 97, 115, 127, 45, 172, 182, 89, 68, 193,
222, 122, 134, 151, 179, 20, 13, 222, 137, 118, 179, 14, 40, 202, 230,
1, 11, 210, 143, 191, 167, 3, 239, 15, 166, 148, 143, 105, 3, 22,
105, 123, 8, 90, 177, 244, 82, 89, 226, 35, 10, 178, 31, 121, 160,
231, 1, 228, 207, 52, 4, 115, 135, 219, 108, 182, 31, 71, 51, 205,
81, 36, 70, 38, 243, 95, 59, 84, 76, 164, 117, 119, 251, 1, 149,
43, 224, 137, 217, 154, 143, 67, 222, 101, 236, 205, 92, 162, 28, 101,
255, 206, 208, 99, 55, 98, 114, 22, 239, 22, 146, 166, 176, 12, 117,
212, 202, 106, 215, 216, 212, 114, 26, 230, 255, 39, 117, 153, 75, 220,
237, 195, 36, 121, 214, 88, 222, 21, 244, 23, 213, 119, 216, 209, 211,
8, 190, 132, 142, 24, 138, 219, 195, 237, 185, 149, 228, 37, 186, 100,
35, 99, 145, 50, 167, 54, 91, 201, 136, 38, 120, 213, 135, 194, 172,
93, 16, 63, 71, 225, 205, 120, 79, 46, 83, 28, 248, 239, 185, 193,
192, 118, 129, 178, 78, 109, 100, 242, 164, 112, 218, 75, 41, 63, 186,
131, 48, 149, 249, 89, 248, 34, 216, 232, 200, 170, 48, 84, 155, 60,
5, 115, 220, 1, 27, 202, 142, 175, 79, 222, 122, 74, 182, 55, 148,
123, 150, 105, 51, 118, 251, 36, 146, 72, 241, 179, 48, 255, 78, 160,
12, 244, 66, 116, 64, 152, 244, 49, 125, 200, 198, 144, 178, 151, 132,
174, 53, 90, 82, 65, 131, 220, 93, 84, 99, 241, 145, 245, 19, 232,
176, 159, 113, 128, 248, 77, 94, 136, 122, 43, 179, 210, 242, 246, 201,
50, 230, 37, 175, 160, 189, 50, 238, 215, 173, 209, 238, 124, 181, 70,
67, 65, 68, 253, 122, 198, 235, 93, 202, 27, 65, 39, 110, 95, 4,
21, 29, 28, 196, 142, 28, 245, 225, 186, 27, 71, 174, 209, 107, 70,
21, 23, 246, 136, 26, 109, 83, 22, 216, 185, 247, 225, 178, 27, 255,
126, 33, 187, 4, 104, 249, 218, 223, 211, 233, 112, 250, 165, 235, 235,
55, 45, 172, 216, 141, 244, 90, 16, 95, 216, 50, 73, 34, 229, 252,
76, 110, 160, 158, 60, 25, 239, 161, 155, 249, 226, 30, 233, 74, 126,
13, 21, 41, 238, 72, 36, 69, 217, 214, 62, 167, 14, 73, 91, 152,
240, 136, 245, 244, 205, 9, 94, 200, 23, 144, 44, 208, 151, 111, 100,
36, 13, 187, 104, 113, 152, 205, 110, 90, 152, 156, 76, 140, 143, 192,
36, 76, 51, 8, 73, 50, 117, 64, 46, 26, 107, 14, 112, 206, 104,
226, 251, 254, 104, 231, 111, 32, 48, 90, 114, 210, 88, 51, 95, 33,
99, 63, 138, 7, 249, 212, 168, 2, 228, 116, 240, 184, 73, 240, 189,
238, 21, 242, 88, 226, 76, 178, 25, 218, 117, 168, 125, 191, 180, 83,
51, 83, 184, 192, 99, 172, 36, 197, 199, 184, 148, 79, 82, 235, 121,
10, 22, 53, 214, 20, 97, 248, 176, 117, 31, 151, 78, 22, 108, 130,
253, 0, 46, 46, 16, 49, 229, 32, 97, 142, 233, 29, 242, 81, 166,
86, 142, 198, 249, 91, 222, 38, 118, 44, 97, 78, 169, 1, 139, 124,
150, 233, 66, 187, 21, 251, 192, 43, 233, 85, 77, 50, 40, 167, 213,
159, 151, 37, 20, 3, 255, 252, 5, 121, 182, 191, 111, 96, 65, 139,
158, 202, 92, 113, 96, 42, 171, 92, 132, 47, 37, 188, 55, 70, 89,
49, 3, 26, 112, 183, 3, 95, 26, 221, 63, 68, 73, 106, 180, 50,
134, 58, 40, 77, 89, 14, 62, 232, 201, 210, 5, 64, 210, 152, 35,
111, 128, 60, 213, 104, 159, 134, 185, 4, 87, 9, 10, 140, 215, 195,
110, 222, 97, 90, 188, 82, 220, 36, 111, 128, 76, 237, 50, 210, 56,
153, 170, 116, 147, 58, 220, 77, 59, 242, 42, 66, 222, 52, 226, 102,
86, 171, 250, 244, 246, 105, 57, 38, 251, 236, 63, 238, 21, 15, 125,
224, 75, 93, 102, 72, 160, 174, 138, 238, 43, 49, 121, 237, 57, 108,
42, 197, 0, 47, 154, 168, 167, 50, 35, 104, 132, 128, 167, 188, 50,
227, 171, 74, 18, 206, 20, 112, 43, 11, 82, 20, 127, 94, 180, 219,
53, 93, 37, 0, 65, 211, 17, 26, 159, 12, 75, 189, 103, 27, 58,
92, 180, 238, 23, 214, 179, 81, 34, 209, 148, 141, 31, 212, 153, 70,
215, 204, 141, 101, 108, 101, 31, 69, 171, 97, 190, 219, 4, 232, 65,
226, 220, 132, 112, 166, 86, 96, 197, 153, 225, 186, 34, 141, 28, 26,
33, 3, 207, 47, 132, 16, 206, 92, 89, 118, 237, 235, 113, 139, 204,
143, 247, 44, 143, 250, 222, 5, 226, 78, 13, 169, 114, 245, 117, 63,
113, 72, 111, 2, 230, 233, 235, 119, 217, 98, 200, 87, 233, 178, 196,
157, 181, 39, 141, 244, 95, 113, 194, 124, 180, 88, 143, 169, 4, 168,
129, 118, 126, 248, 22, 159, 140, 46, 93, 123, 230, 236, 30, 237, 116,
193, 69, 50, 153, 2, 129, 44, 104, 21, 21, 70, 249, 164, 33, 67,
96, 71, 153, 72, 102, 15, 49, 44, 171, 82, 185, 109, 123, 97, 95,
209, 167, 98, 6, 11, 28, 218, 181, 23, 47, 133, 28, 73, 43, 20,
31, 86, 32, 123, 251, 39, 222, 6, 9, 124, 6, 209, 158, 18, 59,
66, 243, 255, 233, 92, 218, 114, 140, 80, 254, 198, 36, 182, 210, 254,
106, 28, 192, 251, 49, 127, 145, 56, 35, 86, 1, 11, 46, 62, 190,
231, 130, 234, 182, 12, 167, 168, 232, 225, 175, 204, 179, 83, 70, 103,
154, 99, 211, 143, 16, 123, 202, 149, 47, 143, 159, 33, 126, 218, 127,
90, 75, 129, 171, 230, 78, 91, 139, 240, 254, 124, 222, 160, 180, 250,
203, 217, 11, 62, 192, 64, 213, 79, 156, 235, 236, 204, 222, 97, 157,
66, 205, 0, 179, 147, 196, 136, 31, 154, 105, 225, 196, 151, 120, 236,
1, 159, 231, 36, 23, 197, 124, 95, 75, 7, 240, 70, 70, 114, 230,
195, 154, 138, 106, 87, 65, 141, 51, 67, 182, 12, 105, 38, 124, 215,
39, 125, 34, 143, 64, 111, 161, 189, 43, 248, 85, 78, 94, 52, 17,
228, 215, 45, 47, 194, 177, 140, 170, 110, 18, 234, 116, 90, 94, 15,
159, 15, 248, 143, 151, 103, 220, 187, 143, 246, 75, 40, 193, 157, 32,
238, 144, 11, 140, 115, 18, 42, 157, 72, 206, 68, 231, 81, 241, 96,
177, 163, 212, 235, 218, 28, 13, 32, 57, 45, 95, 101, 224, 129, 142,
71, 254, 165, 228, 169, 146, 32, 86, 37, 65, 124, 124, 204, 121, 83,
70, 162, 101, 101, 17, 193, 45, 160, 211, 149, 241, 18, 14, 132, 205,
28, 49, 59, 151, 148, 15, 104, 135, 219, 139, 4, 209, 173, 73, 176,
153, 214, 251, 216, 147, 193, 183, 230, 95, 226, 7, 239, 190, 60, 237,
143, 151, 230, 128, 182, 152, 97, 80, 219, 56, 71, 44, 194, 39, 212,
247, 220, 89, 138, 187, 175, 11, 80, 165, 119, 31, 146, 26, 128, 185,
133, 63, 33, 79, 101, 126, 248, 205, 163, 136, 252, 6, 105, 126, 22,
139, 235, 93, 166, 71, 135, 45, 194, 86, 99, 225, 77, 86, 85, 127,
85, 132, 236, 111, 182, 59, 118, 107, 183, 2, 169, 215, 208, 63, 241,
62, 232, 221, 110, 62, 97, 1, 18, 218, 56, 228, 44, 219, 65, 66,
27, 246, 163, 149, 79, 196, 246, 163, 97, 74, 114, 242, 106, 95, 226,
71, 211, 223, 89, 155, 99, 12, 149, 233, 198, 20, 151, 245, 255, 99,
48, 69, 238, 1, 14, 140, 107, 65, 39, 138, 75, 116, 30, 163, 58,
220, 55, 90, 227, 193, 247, 42, 189, 168, 40, 104, 128, 239, 6, 251,
114, 3, 124, 38, 166, 76, 47, 68, 160, 245, 46, 151, 252, 95, 199,
78, 234, 2, 19, 138, 189, 235, 208, 244, 39, 210, 195, 21, 190, 207,
30, 234, 197, 0, 158, 113, 252, 82, 244, 0, 38, 116, 177, 117, 144,
95, 200, 236, 56, 146, 75, 88, 45, 58, 84, 246, 213, 170, 188, 242,
185, 60, 146, 238, 34, 225, 44, 59, 52, 222, 75, 111, 56, 36, 149,
86, 226, 134, 74, 173, 61, 58, 147, 146, 68, 27, 36, 213, 195, 228,
252, 169, 221, 64, 190, 137, 203, 38, 76, 14, 160, 60, 57, 120, 221,
155, 8, 130, 95, 173, 76, 56, 162, 104, 191, 42, 108, 28, 60, 130,
72, 28, 3, 23, 16, 158, 43, 112, 224, 7, 197, 179, 24, 220, 85,
2, 104, 47, 167, 227, 92, 250, 147, 99, 21, 228, 181, 133, 57, 91,
195, 157, 252, 233, 146, 52, 0, 18, 140, 211, 37, 127, 236, 128, 237,
6, 110, 193, 106, 98, 83, 73, 11, 35, 225, 243, 115, 12, 19, 98,
216, 54, 189, 95, 255, 185, 135, 19, 45, 228, 75, 253, 227, 206, 88,
17, 145, 27, 192, 219, 124, 206, 81, 63, 238, 9, 35, 143, 126, 224,
122, 223, 164, 47, 108, 194, 157, 7, 161, 41, 180, 204, 141, 186, 4,
30, 44, 71, 250, 16, 65, 122, 117, 255, 43, 226, 229, 17, 212, 81,
241, 118, 182, 185, 173, 184, 205, 217, 58, 161, 10, 166, 23, 236, 120,
221, 86, 104, 142, 138, 155, 118, 14, 80, 224, 144, 211, 129, 250, 141,
96, 193, 215, 111, 134, 98, 4, 197, 31, 222, 5, 103, 209, 94, 24,
9, 218, 8, 120, 48, 56, 205, 246, 27, 100, 218, 245, 87, 218, 213,
165, 111, 223, 68, 230, 231, 87, 65, 221, 96, 128, 52, 182, 242, 161,
105, 180, 78, 90, 99, 9, 155, 130, 30, 168, 221, 132, 127, 123, 219,
46, 94, 217, 105, 24, 77, 184, 74, 254, 249, 68, 149, 255, 78, 124,
40, 69, 210, 231, 223, 90, 41, 19, 131, 168, 89, 88, 156, 103, 66,
118, 115, 60, 47, 90, 114, 193, 23, 18, 88, 236, 248, 206, 100, 51,
160, 12, 1, 58, 106, 240, 69, 182, 101, 236, 208, 200, 202, 155, 167,
158, 75, 136, 54, 88, 180, 70, 102, 181, 82, 200, 82, 34, 18, 175,
145, 157, 155, 132, 67, 178, 220, 56, 167, 8, 190, 6, 176, 220, 140,
75, 62, 202, 56, 1, 70, 87, 247, 111, 98, 215, 112, 131, 64, 74,
118, 110, 169, 229, 192, 169, 169, 35, 209, 66, 192, 25, 226, 228, 57,
224, 42, 145, 229, 171, 77, 111, 215, 141, 111, 116, 8, 210, 65, 109,
25, 38, 253, 69, 23, 80, 100, 94, 85, 209, 6, 84, 117, 237, 137,
4, 56, 176, 222, 242, 57, 170, 56, 119, 113, 76, 154, 74, 153, 196,
247, 13, 246, 176, 55, 96, 130, 23, 159, 64, 252, 90, 249, 45, 177,
53, 201, 75, 236, 156, 128, 162, 157, 114, 21, 41, 94, 42, 180, 3,
221, 86, 31, 175, 63, 67, 203, 24, 216, 228, 129, 220, 16, 58, 98,
254, 173, 137, 54, 151, 113, 172, 103, 159, 215, 208, 129, 212, 227, 176,
180, 34, 230, 215, 215, 192, 100, 197, 6, 226, 240, 238, 188, 232, 29,
197, 132, 62, 119, 38, 207, 158, 123, 108, 144, 173, 194, 67, 146, 54,
6, 229, 149, 244, 156, 23, 118, 3, 145, 0, 44, 29, 84, 46, 168,
162, 245, 184, 89, 5, 58, 137, 80, 116, 103, 62, 119, 49, 216, 186,
26, 195, 45, 152, 8, 105, 67, 52, 135, 82, 217, 8, 10, 176, 104,
10, 49, 197, 105, 23, 213, 216, 167, 172, 185, 74, 165, 66, 70, 182,
63, 205, 177, 22, 56, 238, 7, 217, 128, 246, 230, 210, 41, 24, 118,
8, 233, 193, 161, 175, 247, 18, 249, 24, 74, 237, 187, 67, 131, 234,
245, 238, 11, 99, 173, 98, 49, 136, 187, 160, 119, 98, 193, 52, 84,
92, 56, 248, 199, 143, 224, 136, 232, 22, 55, 183, 63, 7, 147, 126,
252, 145, 71, 125, 205, 254, 13, 13, 209, 136, 44, 90, 213, 111, 207,
74, 38, 230, 113, 249, 134, 57, 50, 233, 4, 164, 151, 114, 179, 28,
141, 180, 138, 54, 16, 72, 225, 63, 212, 74, 55, 137, 242, 7, 92,
129, 167, 154, 105, 215, 167, 24, 222, 13, 219, 57, 169, 191, 60, 177,
27, 22, 245, 208, 10, 6, 40, 198, 38, 116, 0, 70, 126, 172, 157,
99, 87, 206, 246, 229, 149, 37, 124, 223, 15, 173, 218, 59, 226, 0,
156, 179, 241, 4, 240, 28, 221, 11, 19, 15, 149, 117, 170, 79, 238,
97, 56, 24, 148, 234, 72, 219, 235, 29, 62, 35, 193, 67, 9, 169,
72, 16, 165, 45, 8, 46, 178, 146, 160, 112, 90, 206, 216, 12, 203,
32, 69, 101, 171, 30, 11, 182, 141, 41, 215, 141, 118, 199, 1, 64,
137, 214, 15, 90, 142, 97, 158, 30, 227, 207, 187, 85, 135, 223, 165,
145, 244, 48, 204, 67, 229, 240, 91, 119, 91, 16, 189, 197, 197, 5,
75, 45, 103, 239, 175, 102, 240, 253, 200, 118, 57, 136, 20, 93, 143,
70, 173, 221, 58, 77, 213, 235, 56, 73, 2, 69, 65, 20, 85, 232,
166, 41, 52, 132, 203, 8, 146, 138, 52, 37, 138, 153, 4, 195, 6,
239, 107, 175, 146, 127, 204, 59, 170, 134, 248, 87, 100, 71, 122, 209,
126, 101, 32, 46, 84, 116, 14, 20, 132, 234, 216, 135, 195, 134, 213,
72, 24, 47, 93, 219, 76, 240, 193, 228, 198, 4, 82, 172, 33, 54,
216, 15, 166, 7, 234, 254, 29, 255, 132, 0, 47, 72, 33, 8, 88,
227, 137, 163, 167, 203, 105, 71, 72, 242, 52, 85, 124, 28, 18, 61,
44, 189, 252, 176, 79, 121, 189, 167, 118, 99, 7, 90, 202, 181, 241,
4, 176, 168, 24, 110, 186, 85, 116, 45, 0, 179, 92, 201, 24, 135,
17, 76, 63, 80, 2, 25, 69, 138, 65, 205, 206, 154, 9, 167, 81,
60, 65, 140, 162, 1, 249, 19, 23, 242, 106, 148, 33, 210, 106, 169,
66, 212, 148, 212, 103, 75, 138, 94, 26, 95, 171, 110, 166, 30, 34,
2, 31, 86, 125, 126, 76, 181, 29, 144, 5, 135, 74, 103, 132, 5,
228, 91, 130, 158, 102, 205, 187, 100, 60, 221, 95, 234, 252, 255, 21,
156, 217, 109, 82, 111, 125, 180, 83, 2, 249, 197, 233, 168, 239, 226,
139, 81, 73, 24, 136, 196, 182, 41, 16, 108, 85, 211, 229, 77, 44,
248, 34, 119, 24, 60, 139, 195, 125, 147, 179, 215, 182, 159, 73, 73,
166, 168, 12, 233, 43, 79, 225, 26, 95, 42, 107, 79, 251, 104, 181,
1, 254, 157, 252, 155, 112, 6, 97, 240, 163, 220, 252, 170, 67, 234,
62, 236, 171, 97, 212, 232, 109, 215, 93, 45, 62, 170, 116, 239, 93,
110, 65, 108, 104, 12, 41, 204, 66, 208, 108, 98, 252, 182, 222, 130,
48, 133, 10, 113, 102, 45, 160, 119, 54, 198, 92, 255, 123, 103, 9,
36, 249, 200, 195, 210, 121, 137, 130, 221, 158, 225, 33, 108, 62, 22,
243, 179, 94, 119, 71, 129, 232, 104, 141, 111, 82, 142, 77, 208, 139,
142, 254, 62, 151, 19, 245, 190, 51, 119, 115, 145, 135, 189, 179, 144,
114, 52, 151, 228, 46, 80, 73, 94, 54, 174, 131, 85, 54, 100, 111,
230, 200, 196, 162, 149, 132, 148, 222, 227, 134, 28, 111, 95, 135, 112,
59, 145, 110, 46, 225, 25, 54, 102, 45, 211, 210, 218, 244, 175, 238,
246, 113, 221, 105, 35, 20, 217, 193, 239, 151, 30, 185, 13, 246, 49,
199, 31, 10, 200, 4, 147, 13, 198, 31, 154, 106, 194, 86, 219, 184,
226, 69, 203, 166, 110, 235, 47, 83, 199, 114, 156, 140, 88, 20, 208,
160, 58, 193, 224, 227, 237, 231, 218, 85, 209, 12, 10, 51, 54, 1,
209, 216, 57, 210, 245, 91, 157, 243, 132, 250, 207, 209, 145, 207, 57,
186, 208, 168, 252, 181, 100, 180, 108, 33, 64, 5, 209, 72, 27, 169,
207, 169, 15, 45, 207, 106, 173, 187, 196, 67, 56, 184, 20, 127, 28,
213, 254, 98, 131, 143, 90, 160, 112, 29, 224, 121, 249, 94, 210, 242,
45, 77, 7, 60, 191, 224, 91, 136, 108, 118, 163, 16, 80, 204, 121,
46, 156, 138, 145, 92, 69, 246, 105, 20, 188, 228, 166, 239, 79, 218,
26, 134, 13, 103, 47, 102, 73, 187, 54, 91, 198, 84, 154, 143, 224,
191, 103, 204, 43, 107, 121, 47, 127, 87, 26, 221, 193, 82, 105, 144,
126, 50, 205, 170, 113, 162, 44, 111, 248, 88, 189, 17, 150, 11, 226,
249, 113, 169, 199, 42, 241, 25, 67, 121, 117, 131, 159, 255, 77, 184,
70, 7, 187, 0, 132, 224, 162, 154, 186, 212, 60, 193, 46, 83, 103,
189, 128, 252, 135, 55, 156, 150, 190, 211, 122, 54, 107, 215, 156, 185,
127, 119, 244, 67, 29, 56, 85, 62, 165, 136, 4, 99, 24, 6, 201,
34, 189, 210, 178, 98, 9, 193, 211, 64, 83, 133, 38, 160, 151, 242,
197, 64, 242, 163, 85, 44, 167, 100, 255, 26, 137, 194, 47, 126, 213,
22, 115, 55, 224, 244, 49, 94, 160, 238, 115, 210, 255, 3, 204, 14,
149, 210, 172, 210, 54, 123, 138, 172, 61, 34, 215, 210, 19, 17, 97,
47, 151, 204, 157, 65, 195, 90, 239, 19, 11, 51, 91, 110, 240, 114,
9, 60, 232, 77, 136, 230, 107, 9, 33, 44, 180, 96, 79, 210, 22,
82, 28, 38, 46, 86, 197, 244, 115, 137, 75, 24, 33, 137, 169, 122,
101, 61, 183, 169, 93, 219, 133, 236, 232, 153, 243, 20, 187, 187, 254,
93, 167, 216, 118, 144, 224, 143, 178, 219, 137, 51, 8, 195, 249, 222,
100, 72, 22, 98, 165, 107, 144, 208, 112, 124, 71, 62, 31, 59, 129,
81, 69, 136, 100, 26, 251, 40, 203, 228, 244, 100, 250, 46, 187, 156,
111, 19, 99, 158, 2, 65, 132, 208, 218, 162, 74, 139, 38, 221, 115,
141, 164, 37, 203, 198, 220, 59, 153, 7, 163, 215, 250, 185, 73, 17,
29, 125, 1, 241, 162, 92, 94, 9, 191, 149, 98, 78, 134, 100, 152,
115, 41, 189, 212, 186, 82, 230, 133, 37, 119, 63, 84, 46, 99, 221,
20, 151, 159, 104, 117, 203, 11, 18, 41, 180, 149, 82, 142, 90, 95,
21, 39, 26, 255, 165, 28, 166, 136, 194, 180, 49, 62, 168, 207, 160,
8, 65, 62, 181, 3, 9, 202, 157, 22, 40, 53, 231, 18, 161, 224,
229, 230, 73, 12, 20, 95, 35, 6, 53, 132, 115, 210, 193, 164, 101,
60, 83, 215, 73, 95, 158, 247, 68, 248, 173, 177, 113, 151, 208, 166,
128, 162, 86, 187, 8, 106, 77, 144, 117, 32, 58, 99, 93, 98, 141,
73, 5, 72, 175, 116, 101, 251, 165, 117, 10, 39, 60, 165, 109, 193,
154, 242, 202, 180, 13, 35, 49, 13, 18, 209, 26, 90, 65, 163, 54,
119, 170, 74, 38, 176, 238, 245, 12, 168, 177, 100, 104, 199, 143, 106,
153, 183, 153, 85, 14, 22, 250, 162, 77, 5, 14, 36, 38, 178, 142,
4, 255, 1, 238, 63, 132, 27, 219, 195, 177, 98, 191, 13, 73, 235,
182, 172, 154, 152, 51, 142, 209, 105, 221, 34, 186, 50, 150, 30, 121,
153, 248, 82, 122, 54, 179, 132, 190, 126, 252, 21, 129, 106, 199, 65,
6, 84, 202, 205, 9, 110, 114, 4, 212, 66, 201, 55, 44, 186, 158,
59, 19, 154, 97, 94, 145, 142, 228, 25, 50, 35, 160, 117, 133, 231,
213, 143, 179, 245, 182, 67, 228, 85, 165, 129, 129, 147, 24, 164, 80,
152, 140, 254, 201, 231, 137, 172, 52, 132, 162, 40, 87, 177, 180, 77,
17, 172, 130, 122, 133, 69, 183, 187, 233, 84, 12, 160, 102, 164, 170,
160, 26, 83, 4, 3, 66, 172, 181, 63, 31, 43, 153, 236, 225, 147,
235, 36, 47, 208, 53, 77, 238, 163, 16, 4, 113, 100, 167, 104, 234,
115, 205, 116, 153, 247, 98, 220, 51, 213, 121, 74, 215, 21, 252, 180,
177, 101, 104, 54, 2, 93, 22, 69, 87, 126, 249, 150, 141, 65, 155,
133, 133, 184, 229, 185, 170, 62, 128, 243, 73, 229, 31, 201, 120, 44,
150, 146, 42, 67, 215, 220, 64, 245, 151, 179, 156, 178, 33, 224, 187,
191, 163, 99, 11, 81, 72, 88, 169, 140, 123, 135, 183, 175, 125, 100,
60, 157, 33, 84, 87, 211, 11, 62, 249, 213, 162, 100, 153, 52, 187,
86, 57, 52, 220, 27, 13, 199, 193, 123, 73, 156, 206, 146, 180, 137,
141, 25, 24, 181, 53, 41, 76, 39, 10, 141, 236, 236, 37, 152, 239,
61, 201, 106, 86, 196, 176, 145, 133, 84, 77, 29, 151, 127, 48, 191,
211, 83, 16, 66, 23, 85, 180, 164, 7, 26, 55, 174, 192, 46, 112,
208, 205, 46, 17, 14, 186, 157, 145, 136, 152, 190, 232, 121, 174, 19,
85, 150, 128, 242, 236, 243, 194, 123, 168, 138, 254, 154, 235, 3, 3,
217, 192, 181, 33, 148, 58, 85, 90, 234, 216, 180, 209, 37, 39, 211,
189, 147, 105, 199, 183, 93, 153, 195, 8, 235, 14, 31, 215, 3, 243,
213, 171, 212, 118, 180, 216, 142, 182, 233, 167, 93, 179, 144, 42, 6,
218, 241, 5, 113, 125, 90, 229, 22, 157, 43, 226, 8, 68, 145, 120,
58, 230, 87, 96, 108, 209, 98, 234, 86, 226, 190, 177, 227, 174, 146,
252, 17, 66, 23, 228, 6, 17, 185, 163, 144, 177, 115, 132, 86, 144,
205, 222, 192, 55, 100, 177, 2, 50, 52, 12, 241, 241, 136, 92, 249,
189, 231, 58, 90, 42, 132, 137, 184, 22, 206, 187, 250, 205, 15, 43,
217, 123, 57, 9, 69, 34, 163, 46, 70, 239, 145, 94, 255, 26, 3,
246, 150, 136, 181, 12, 211, 45, 115, 163, 221, 62, 64, 181, 112, 54,
78, 131, 143, 233, 55, 252, 233, 58, 191, 40, 213, 218, 121, 252, 58,
84, 92, 245, 19, 118, 99, 192, 213, 197, 159, 224, 184, 117, 237, 155,
216, 106, 61, 147, 19, 122, 233, 114, 219, 227, 29, 104, 188, 41, 89,
167, 40, 171, 64, 42, 174, 17, 61, 12, 143, 231, 82, 39, 53, 247,
63, 31, 153, 4, 112, 114, 140, 237, 154, 101, 96, 252, 187, 40, 226,
53, 39, 132, 224, 9, 225, 240, 30, 237, 202, 86, 238, 90, 142, 76,
192, 179, 248, 212, 104, 181, 20, 181, 218, 62, 71, 120, 54, 54, 30,
138, 73, 181, 92, 201, 194, 159, 213, 193, 195, 111, 236, 192, 168, 49,
3, 181, 115, 161, 145, 49, 115, 162, 6, 26, 228, 208, 12, 178, 241,
222, 97, 48, 135, 52, 78, 44, 13, 181, 119, 137, 140, 101, 164, 34,
205, 124, 85, 160, 59, 231, 7, 219, 164, 27, 172, 237, 139, 40, 124,
231, 108, 251, 165, 148, 17, 134, 1, 110, 127, 84, 73, 242, 79, 31,
140, 201, 213, 233, 126, 136, 60, 78, 122, 207, 89, 187, 1, 105, 137,
3, 128, 43, 213, 212, 201, 176, 101, 135, 228, 99, 118, 172, 151, 67,
5, 40, 56, 170, 3, 67, 104, 41, 220, 229, 206, 200, 13, 253, 19,
33, 225, 0, 99, 92, 212, 50, 121, 182, 57, 155, 115, 73, 100, 227,
213, 4, 115, 84, 223, 99, 138, 118, 105, 102, 10, 193, 236, 179, 64,
201, 199, 112, 241, 19, 86, 3, 181, 173, 99, 139, 188, 60, 22, 90,
69, 78, 223, 155, 216, 170, 27, 255, 254, 242, 6, 117, 167, 7, 48,
146, 59, 156, 1, 121, 240, 53, 8, 68, 43, 248, 120, 74, 244, 67,
249, 164, 37, 45, 30, 158, 184, 50, 173, 185, 98, 174, 246, 6, 243,
99, 171, 92, 152, 24, 164, 131, 171, 95, 102, 32, 81, 87, 76, 22,
42, 3, 134, 224, 137, 78, 73, 37, 34, 185, 244, 162, 20, 186, 210,
214, 245, 169, 77, 77, 40, 96, 103, 205, 133, 25, 181, 168, 68, 114,
32, 51, 214, 229, 167, 0, 82, 242, 104, 170, 29, 182, 124, 135, 229,
95, 125, 31, 245, 11, 105, 231, 220, 71, 155, 182, 151, 156, 51, 84,
165, 41, 138, 7, 154, 159, 94, 20, 118, 44, 239, 210, 167, 255, 176,
33, 224, 89, 135, 64, 62, 206, 94, 243, 175, 152, 123, 87, 46, 118,
106, 90, 50, 165, 74, 54, 189, 187, 206, 192, 240, 15, 52, 56, 92,
230, 66, 254, 233, 173, 135, 149, 147, 39, 137, 253, 17, 202, 117, 97,
43, 20, 253, 229, 241, 197, 61, 190, 239, 0, 5, 198, 140, 96, 203,
144, 25, 4, 140, 95, 21, 145, 148, 248, 155, 179, 42, 207, 122, 14,
233, 76, 222, 46, 147, 157, 216, 141, 137, 149, 168, 20, 44, 206, 93,
155, 152, 32, 242, 220, 191, 30, 24, 99, 28, 146, 11, 100, 76, 59,
212, 253, 115, 45, 1, 210, 230, 13, 166, 157, 21, 127, 131, 39, 85,
208, 146, 164, 199, 126, 90, 138, 40, 167, 207, 146, 252, 151, 139, 199,
69, 3, 249, 104, 2, 183, 45, 135, 43, 185, 231, 76, 154, 162, 50,
51, 84, 21, 146, 10, 120, 163, 20, 198, 92, 63, 186, 133, 112, 6,
123, 242, 50, 7, 192, 132, 72, 82, 233, 146, 186, 179, 209, 147, 5,
172, 157, 115, 158, 118, 62, 53, 15, 220, 140, 249, 125, 139, 90, 33,
236, 88, 54, 231, 225, 174, 211, 98, 224, 110, 169, 230, 217, 1, 232,
67, 144, 178, 225, 79, 48, 134, 101, 68, 29, 113, 0, 212, 175, 39,
102, 30, 54, 158, 250, 248, 193, 0, 18, 108, 3, 245, 226, 181, 156,
180, 96, 7, 14, 21, 86, 110, 213, 169, 179, 105, 76, 45, 90, 38,
53, 105, 173, 112, 252, 167, 179, 180, 38, 228, 172, 80, 103, 49, 84,
228, 26, 155, 127, 54, 134, 114, 132, 69, 69, 14, 12, 31, 112, 11,
217, 6, 181, 123, 80, 173, 224, 180, 69, 157, 224, 60, 92, 249, 139,
72, 76, 53, 118, 98, 21, 117, 210, 49, 96, 199, 81, 83, 13, 153,
40, 127, 210, 14, 114, 239, 33, 130, 137, 228, 215, 112, 30, 92, 201,
2, 178, 149, 27, 237, 40, 170, 225, 160, 253, 84, 55, 10, 32, 6,
58, 237, 144, 83, 4, 38, 222, 240, 117, 246, 130, 28, 129, 22, 153,
46, 41, 136, 173, 100, 37, 60, 254, 140, 218, 74, 43, 236, 64, 238,
190, 53, 20, 31, 92, 158, 184, 90, 205, 62, 34, 239, 125, 142, 76,
211, 88, 222, 90, 208, 22, 54, 103, 73, 87, 234, 11, 181, 6, 11,
209, 189, 143, 135, 154, 28, 154, 230, 185, 97, 108, 6, 84, 230, 208,
119, 84, 219, 32, 22, 148, 98, 69, 219, 172, 235, 58, 135, 151, 137,
123, 135, 219, 31, 89, 111, 224, 47, 86, 192, 185, 97, 155, 94, 160,
243, 85, 25, 213, 220, 19, 169, 220, 229, 88, 42, 101, 215, 139, 50,
119, 238, 129, 218, 158, 126, 126, 32, 232, 225, 214, 139, 74, 108, 128,
129, 196, 111, 120, 62, 213, 140, 186, 117, 25, 237, 196, 105, 28, 192,
165, 210, 28, 170, 60, 166, 180, 28, 115, 96, 92, 53, 199, 226, 153,
153, 58, 106, 215, 164, 79, 228, 221, 27, 64, 74, 131, 24, 32, 168,
72, 155, 141, 146, 140, 220, 10, 186, 210, 201, 39, 130, 103, 161, 51,
39, 217, 96, 104, 2, 152, 135, 88, 105, 103, 239, 169, 104, 13, 99,
83, 74, 11, 86, 158, 43, 34, 71, 95, 36, 155, 19, 222, 15, 38,
105, 190, 246, 185, 234, 74, 82, 16, 199, 48, 106, 248, 32, 233, 40,
186, 86, 126, 201, 151, 178, 1, 235, 226, 102, 225, 211, 85, 173, 133,
148, 253, 35, 207, 163, 250, 170, 152, 120, 73, 159, 231, 251, 248, 36,
66, 105, 110, 242, 202, 145, 74, 39, 239, 97, 85, 223, 7, 39, 242,
120, 71, 87, 16, 197, 113, 231, 191, 84, 240, 237, 15, 82, 194, 138,
186, 36, 171, 45, 176, 42, 255, 17, 226, 158, 91, 34, 120, 107, 19,
121, 28, 182, 246, 13, 198, 125, 47, 42, 111, 247, 195, 89, 169, 107,
162, 255, 57, 127, 126, 34, 149, 132, 94, 150, 152, 242, 178, 92, 20,
194, 117, 168, 133, 127, 84, 164, 176, 9, 39, 216, 174, 203, 192, 20,
219, 55, 190, 243, 44, 59, 143, 132, 137, 221, 170, 232, 228, 75, 96,
137, 91, 75, 208, 164, 132, 170, 228, 92, 142, 230, 136, 11, 173, 146,
155, 51, 224, 5, 144, 152, 47, 162, 58, 183, 18, 250, 148, 52, 227,
9, 3, 213, 176, 167, 222, 180, 68, 224, 156, 147, 97, 25, 93, 204,
169, 183, 233, 163, 163, 87, 70, 58, 62, 197, 103, 59, 34, 116, 5,
137, 131, 142, 77, 162, 155, 86, 179, 167, 145, 134, 106, 115, 10, 189,
105, 216, 100, 84, 204, 136, 47, 159, 196, 135, 172, 230, 101, 42, 144,
3, 255, 18, 133, 144, 63, 70, 65, 56, 234, 82, 79, 104, 69, 145,
99, 236, 131, 95, 161, 108, 66, 130, 101, 208, 40, 182, 179, 80, 252,
46, 239, 179, 136, 98, 229, 162, 138, 55, 141, 143, 247, 111, 111, 199,
113, 13, 251, 160, 179, 9, 134, 219, 165, 90, 73, 194, 125, 62, 65,
210, 219, 249, 141, 221, 129, 88, 193, 200, 152, 9, 146, 99, 238, 222,
54, 219, 125, 196, 150, 56, 225, 98, 244, 119, 65, 84, 237, 208, 133,
28, 20, 132, 129, 32, 215, 151, 143, 91, 191, 150, 236, 81, 71, 251,
172, 228, 17, 86, 228, 18, 73, 6, 49, 194, 29, 94, 137, 190, 149,
12, 166, 189, 138, 36, 225, 123, 165, 109, 180, 185, 210, 218, 59, 10,
35, 58, 63, 58, 151, 147, 217, 170, 51, 109, 106, 61, 110, 186, 154,
29, 181, 153, 160, 25, 205, 183, 96, 47, 30, 127, 188, 3, 19, 171,
241, 64, 238, 96, 161, 159, 105, 103, 184, 176, 164, 47, 224, 182, 161,
48, 78, 133, 228, 174, 125, 4, 209, 69, 199, 127, 131, 222, 112, 73,
7, 82, 54, 41, 76, 137, 61, 64, 66, 174, 165, 43, 15, 0, 38,
244, 82, 115, 17, 1, 214, 252, 99, 171, 94, 66, 23, 200, 145, 183,
87, 192, 125, 192, 36, 170, 239, 116, 180, 203, 29, 127, 165, 235, 163,
111, 161, 36, 17, 211, 175, 44, 131, 102, 231, 53, 9, 110, 214, 242,
224, 25, 2, 206, 33, 206, 173, 93, 49, 184, 131, 112, 153, 67, 91,
150, 50, 186, 100, 250, 19, 7, 186, 92, 60, 147, 70, 219, 109, 125,
109, 136, 145, 96, 249, 68, 206, 3, 170, 231, 100, 69, 60, 53, 97,
220, 62, 43, 60, 190, 51, 140, 214, 206, 118, 148, 217, 19, 52, 239,
240, 238, 129, 93, 31, 231, 237, 12, 251, 113, 31, 100, 23, 223, 58,
194, 149, 219, 141, 201, 207, 33, 199, 6, 192, 232, 16, 26, 112, 25,
141, 112, 254, 106, 119, 176, 82, 113, 242, 131, 132, 196, 146, 18, 182,
112, 147, 8, 194, 157, 143, 46, 105, 124, 189, 225, 58, 36, 193, 202,
87, 120, 216, 230, 190, 37, 18, 248, 26, 196, 52, 218, 176, 14, 215,
12, 228, 117, 252, 251, 99, 53, 36, 141, 221, 159, 185, 194, 87, 126,
224, 174, 189, 122, 15, 242, 79, 87, 164, 173, 84, 30, 210, 115, 42,
135, 137, 187, 247, 245, 161, 150, 166, 159, 223, 10, 255, 27, 17, 29,
226, 151, 116, 210, 196, 96, 7, 242, 137, 44, 182, 170, 69, 251, 144,
120, 49, 180, 194, 241, 29, 106, 33, 41, 126, 199, 121, 113, 175, 216,
162, 120, 59, 210, 70, 72, 174, 198, 87, 63, 70, 24, 91, 124, 54,
207, 166, 254, 56, 199, 35, 108, 238, 160, 10, 46, 76, 40, 77, 63,
66, 179, 77, 137, 10, 119, 65, 44, 252, 33, 72, 80, 119, 133, 53,
154, 64, 13, 14, 48, 235, 94, 222, 39, 192, 188, 203, 188, 132, 92,
40, 187, 201, 71, 101, 185, 125, 105, 104, 155, 155, 144, 64, 167, 97,
176, 56, 2, 139, 55, 200, 104, 129, 31, 129, 93, 13, 104, 80, 150,
39, 164, 211, 179, 18, 245, 175, 253, 131, 76, 66, 195, 0, 218, 183,
56, 71, 190, 163, 232, 74, 126, 116, 171, 61, 118, 245, 114, 28, 27,
115, 166, 191, 151, 117, 66, 26, 111, 100, 218, 209, 24, 245, 86, 154,
148, 36, 190, 212, 72, 134, 204, 187, 135, 72, 108, 188, 16, 98, 117,
64, 24, 195, 23, 135, 155, 7, 169, 54, 174, 236, 48, 156, 162, 62,
50, 243, 143, 26, 167, 212, 209, 195, 184, 39, 30, 172, 194, 156, 31,
1, 92, 87, 3, 91, 95, 22, 197, 8, 1, 134, 86, 137, 211, 21,
253, 220, 204, 109, 43, 15, 94, 56, 93, 165, 30, 41, 125, 148, 6,
101, 242, 242, 143, 195, 190, 52, 28, 134, 249, 221, 97, 90, 103, 66,
68, 70, 15, 243, 234, 54, 86, 73, 171, 151, 118, 220, 46, 176, 177,
60, 72, 131, 35, 232, 227, 19, 181, 255, 195, 179, 141, 226, 89, 65,
91, 80, 35, 163, 249, 216, 40, 14, 138, 146, 214, 223, 207, 162, 92,
106, 160, 193, 154, 180, 18, 61, 55, 163, 180, 95, 236, 66, 156, 121,
69, 172, 152, 41, 69, 15, 42, 133, 254, 192, 203, 208, 139, 57, 233,
68, 105, 164, 250, 193, 3, 230, 200, 124, 59, 147, 145, 21, 6, 227,
113, 229, 5, 253, 68, 156, 250, 241, 221, 253, 173, 16, 72, 174, 85,
5, 212, 145, 186, 60, 161, 3, 178, 195, 53, 104, 186, 157, 205, 158,
119, 100, 30, 212, 35, 158, 18, 76, 107, 159, 38, 113, 54, 105, 220,
222, 105, 138, 59, 59, 103, 60, 202, 155, 25, 18, 120, 176, 249, 142,
247, 244, 244, 85, 149, 9, 18, 240, 14, 82, 232, 190, 96, 128, 85,
51, 183, 60, 17, 167, 240, 212, 123, 15, 89, 148, 102, 40, 7, 178,
87, 100, 18, 246, 53, 249, 167, 115, 108, 205, 240, 223, 164, 67, 106,
26, 3, 122, 255, 178, 96, 64, 159, 2, 149, 49, 118, 68, 107, 146,
212, 131, 247, 233, 79, 66, 111, 240, 154, 114, 111, 202, 95, 136, 156,
211, 44, 146, 56, 190, 20, 70, 29, 8, 112, 140, 187, 118, 134, 16,
222, 9, 12, 145, 209, 195, 95, 158, 223, 132, 8, 122, 158, 31, 94,
195, 2, 226, 157, 186, 152, 218, 179, 190, 13, 129, 99, 3, 161, 246,
64, 199, 117, 86, 134, 201, 35, 116, 110, 150, 111, 21, 186, 3, 6,
219, 122, 179, 184, 111, 171, 52, 14, 227, 29, 166, 245, 37, 22, 178,
77, 52, 91, 200, 18, 167, 172, 203, 28, 104, 140, 163, 190, 27, 63,
227, 246, 254, 171, 14, 195, 149, 218, 90, 18, 120, 137, 91, 112, 82,
135, 234, 8, 106, 169, 78, 130, 241, 50, 4, 133, 119, 27, 19, 199,
125, 243, 175, 231, 129, 89, 93, 205, 91, 215, 27, 28, 224, 74, 203,
98, 38, 150, 139, 46, 97, 158, 190, 15, 65, 26, 56, 7, 219, 146,
65, 187, 88, 80, 235, 110, 115, 121, 67, 165, 182, 123, 10, 69, 94,
2, 29, 82, 233, 241, 133, 149, 168, 94, 154, 20, 176, 205, 103, 140,
176, 73, 185, 2, 206, 246, 223, 25, 7, 43, 194, 154, 102, 158, 183,
23, 51, 205, 44, 244, 102, 251, 224, 215, 63, 158, 17, 173, 84, 41,
137, 250, 106, 248, 212, 189, 101, 27, 53, 242, 26, 175, 203, 30, 197,
105, 67, 4, 194, 49, 201, 16, 9, 77, 41, 0, 70, 17, 228, 154,
98, 35, 10, 69, 155, 132, 250, 26, 250, 81, 58, 207, 106, 131, 96,
167, 155, 143, 189, 12, 144, 206, 182, 12, 52, 166, 150, 214, 247, 195,
26, 18, 162, 126, 140, 21, 244, 231, 241, 195, 248, 9, 162, 99, 17,
94, 147, 59, 152, 67, 137, 253, 188, 251, 104, 136, 171, 86, 141, 175,
163, 178, 108, 249, 109, 175, 254, 141, 211, 236, 196, 163, 248, 253, 38,
138, 148, 112, 18, 200, 211, 129, 62, 152, 75, 231, 35, 48, 156, 163,
127, 65, 164, 142, 22, 220, 153, 67, 225, 102, 157, 236, 249, 30, 242,
242, 174, 145, 185, 252, 99, 213, 173, 31, 172, 85, 216, 35, 7, 208,
44, 58, 88, 169, 164, 208, 147, 156, 247, 211, 166, 151, 231, 67, 134,
3, 68, 204, 233, 91, 87, 143, 142, 154, 144, 55, 22, 243, 149, 241,
158, 210, 1, 35, 226, 223, 234, 10, 85, 204, 46, 42, 170, 72, 188,
179, 166, 166, 188, 72, 196, 38, 15, 140, 227, 11, 255, 31, 0, 220,
113, 98, 38, 165, 243, 15, 59, 240, 57, 40, 195, 176, 89, 174, 207,
99, 236, 172, 9, 139, 10, 28, 157, 55, 60, 56, 154, 61, 230, 18,
219, 186, 212, 200, 209, 107, 8, 247, 173, 124, 43, 211, 183, 60, 178,
60, 249, 14, 155, 192, 72, 117, 2, 75, 164, 214, 100, 228, 236, 90,
243, 150, 124, 37, 149, 86, 243, 227, 184, 140, 121, 127, 94, 0, 88,
206, 17, 23, 147, 72, 185, 213, 112, 12, 68, 251, 55, 152, 96, 87,
32, 213, 48, 168, 80, 85, 193, 104, 240, 154, 118, 79, 230, 19, 221,
22, 218, 49, 99, 153, 11, 223, 210, 134, 52, 254, 59, 58, 62, 33,
73, 26, 244, 254, 63, 219, 152, 65, 6, 149, 222, 175, 116, 101, 19,
201, 40, 34, 114, 41, 142, 173, 149, 60, 92, 148, 90, 1, 124, 35,
24, 232, 238, 136, 8, 52, 60, 173, 5, 206, 102, 149, 208, 127, 58,
165, 114, 93, 127, 135, 5, 98, 236, 234, 47, 42, 176, 206, 12, 209,
240, 244, 204, 228, 26, 120, 40, 157, 152, 240, 93, 127, 103, 46, 106,
251, 250, 12, 144, 35, 223, 164, 187, 250, 171, 246, 86, 88, 180, 169,
71, 196, 105, 53, 98, 83, 101, 152, 169, 12, 183, 128, 98, 63, 39,
97, 201, 191, 65, 56, 18, 86, 159, 93, 230, 78, 73, 246, 239, 168,
65, 102, 21, 149, 74, 10, 243, 71, 184, 213, 101, 17, 169, 216, 57,
224, 12, 129, 169, 15, 137, 91, 115, 207, 38, 231, 49, 138, 55, 224,
1, 188, 53, 134, 73, 9, 126, 82, 64, 127, 189, 222, 209, 45, 41,
87, 10, 204, 25, 2, 52, 105, 117, 57, 39, 167, 98, 251, 164, 241,
245, 237, 27, 100, 245, 131, 61, 14, 159, 139, 91, 94, 232, 82, 101,
143, 14, 8, 31, 68, 199, 8, 176, 98, 22, 4, 29, 85, 22, 35,
169, 105, 17, 154, 199, 110, 116, 156, 195, 65, 251, 107, 250, 82, 199,
215, 168, 254, 107, 92, 124, 135, 140, 154, 56, 159, 124, 91, 157, 95,
158, 29, 203, 248, 230, 60, 226, 47, 84, 13, 82, 19, 188, 73, 131,
118, 165, 132, 104, 109, 8, 104, 252, 206, 3, 218, 245, 186, 139, 21,
34, 71, 185, 100, 172, 208, 171, 72, 165, 176, 219, 193, 160, 133, 155,
239, 220, 93, 91, 49, 149, 98, 28, 135, 247, 94, 55, 221, 76, 10,
50, 17, 77, 18, 50, 209, 206, 161, 110, 55, 243, 206, 191, 53, 240,
60, 80, 98, 230, 40, 158, 40, 245, 104, 13, 171, 125, 55, 251, 218,
33, 34, 33, 39, 136, 250, 199, 23, 125, 38, 173, 139, 218, 245, 170,
101, 254, 71, 215, 153, 198, 43, 97, 204, 155, 243, 64, 126, 50, 66,
235, 138, 123, 174, 170, 187, 185, 223, 94, 116, 234, 181, 70, 80, 222,
172, 235, 90, 8, 148, 168, 216, 203, 104, 150, 141, 242, 240, 158, 197,
255, 178, 147, 57, 103, 15, 116, 188, 229, 80, 88, 223, 141, 88, 84,
221, 130, 30, 41, 232, 158, 175, 36, 107, 206, 71, 188, 120, 247, 64,
220, 123, 215, 242, 97, 190, 8, 199, 211, 16, 70, 238, 199, 94, 96,
247, 67, 72, 189, 170, 129, 93, 164, 133, 168, 97, 73, 119, 76, 145,
181, 216, 11, 243, 88, 100, 46, 71, 8, 96, 174, 155, 129, 169, 161,
29, 242, 142, 116, 235, 83, 101, 26, 11, 166, 135, 194, 93, 42, 30,
79, 215, 100, 70, 32, 68, 63, 255, 201, 155, 164, 111, 95, 223, 10,
109, 166, 2, 196, 220, 235, 122, 58, 230, 96, 51, 146, 98, 32, 42,
52, 99, 76, 162, 98, 212, 86, 142, 56, 60, 84, 20, 207, 116, 186,
229, 45, 0, 174, 52, 89, 130, 36, 56, 26, 174, 86, 43, 149, 110,
122, 33, 60, 213, 222, 181, 128, 37, 97, 11, 178, 208, 217, 72, 146,
201, 59, 250, 194, 98, 14, 121, 213, 47, 61, 70, 48, 110, 102, 212,
63, 64, 131, 65, 49, 21, 83, 103, 14, 4, 65, 164, 36, 224, 166,
5, 216, 72, 14, 75, 89, 241, 99, 166, 25, 176, 44, 112, 138, 237,
76, 48, 240, 103, 179, 164, 132, 199, 89, 75, 7, 227, 188, 0, 125,
165, 157, 104, 56, 57, 134, 204, 149, 69, 123, 162, 236, 93, 131, 32,
45, 167, 188, 22, 152, 200, 217, 45, 41, 37, 17, 117, 39, 233, 94,
123, 38, 188, 226, 202, 194, 25, 214, 47, 159, 114, 229, 46, 57, 225,
59, 230, 43, 17, 205, 17, 135, 44, 62, 209, 10, 50, 219, 81, 17,
51, 179, 29, 175, 152, 253, 58, 227, 207, 178, 233, 37, 171, 49, 232,
252, 166, 124, 145, 128, 112, 155, 88, 166, 87, 238, 55, 44, 82, 229,
248, 216, 56, 172, 208, 206, 12, 107, 66, 189, 80, 231, 230, 170, 241,
251, 115, 41, 54, 229, 34, 75, 71, 54, 11, 48, 187, 203, 243, 45,
242, 79, 142, 106, 112, 218, 17, 134, 42, 231, 50, 133, 57, 8, 123,
207, 2, 181, 86, 52, 238, 59, 138, 88, 124, 70, 12, 249, 203, 41,
242, 68, 94, 8, 78, 252, 35, 7, 148, 212, 138, 193, 98, 43, 47,
252, 170, 247, 176, 0, 51, 54, 207, 124, 61, 60, 38, 254, 242, 116,
51, 10, 206, 184, 99, 5, 40, 38, 77, 227, 186, 112, 187, 187, 117,
109, 193, 75, 220, 39, 125, 65, 73, 158, 53, 62, 236, 166, 129, 91,
99, 103, 100, 180, 112, 115, 65, 17, 159, 99, 19, 178, 81, 100, 76,
7, 17, 90, 166, 149, 232, 239, 47, 175, 206, 3, 87, 220, 177, 64,
229, 72, 30, 51, 168, 96, 170, 178, 240, 126, 85, 23, 173, 153, 243,
61, 13, 10, 158, 150, 71, 15, 197, 51, 230, 28, 21, 178, 53, 231,
155, 82, 154, 157, 140, 185, 143, 236, 106, 43, 250, 253, 162, 59, 78,
52, 182, 195, 192, 205, 101, 0, 140, 167, 141, 84, 93, 181, 156, 163,
42, 22, 115, 38, 144, 98, 82, 255, 18, 162, 23, 187, 81, 29, 121,
28, 248, 4, 86, 32, 12, 170, 232, 21, 27, 75, 99, 246, 140, 178,
228, 181, 205, 112, 65, 116, 82, 90, 245, 179, 101, 112, 31, 111, 231,
1, 222, 137, 34, 103, 75, 23, 26, 39, 17, 126, 109, 20, 223, 250,
205, 110, 226, 246, 221, 162, 190, 231, 27, 215, 57, 162, 78, 201, 175,
8, 224, 100, 146, 54, 194, 59, 182, 191, 174, 134, 142, 167, 78, 34,
184, 61, 98, 21, 57, 190, 51, 121, 199, 26, 233, 110, 152, 27, 8,
36, 150, 239, 231, 44, 78, 87, 234, 154, 6, 50, 217, 41, 34, 133,
94, 50, 211, 145, 67, 137, 29, 17, 15, 3, 41, 68, 131, 47, 131,
242, 210, 171, 83, 62, 186, 43, 248, 34, 42, 19, 216, 198, 232, 164,
26, 89, 34, 17, 128, 71, 129, 192, 27, 94, 136, 10, 234, 217, 151,
101, 25, 171, 156, 130, 18, 160, 77, 125, 182, 45, 234, 114, 106, 213,
249, 144, 219, 32, 206, 136, 121, 199, 158, 235, 62, 67, 22, 240, 81,
68, 151, 142, 37, 122, 62, 45, 68, 147, 43, 70, 109, 13, 102, 173,
140, 211, 47, 124, 132, 117, 255, 122, 179, 24, 148, 183, 241, 134, 123,
133, 45, 39, 52, 38, 12, 146, 119, 48, 176, 35, 134, 121, 90, 152,
89, 202, 229, 55, 213, 47, 194, 3, 1, 120, 39, 3, 132, 77, 47,
130, 224, 238, 21, 117, 238, 254, 218, 151, 182, 87, 81, 43, 178, 203,
39, 234, 66, 164, 111, 255, 242, 159, 8, 119, 182, 32, 67, 66, 145,
145, 131, 139, 176, 12, 197, 203, 67, 23, 87, 204, 113, 247, 122, 51,
28, 183, 166, 233, 140, 201, 103, 9, 181, 37, 182, 114, 4, 228, 205,
242, 175, 118, 134, 123, 63, 31, 17, 45, 112, 43, 71, 181, 35, 54,
102, 72, 107, 192, 172, 64, 175, 88, 239, 41, 207, 169, 156, 156, 130,
203, 17, 247, 153, 215, 60, 149, 200, 109, 166, 235, 83, 248, 221, 201,
86, 105, 113, 34, 3, 144, 26, 165, 58, 53, 60, 109, 142, 74, 212,
22, 53, 27, 189, 136, 211, 248, 47, 214, 58, 82, 132, 185, 244, 109,
71, 145, 164, 54, 183, 243, 244, 243, 22, 106, 65, 236, 24, 96, 7,
47, 52, 65, 254, 92, 182, 20, 210, 60, 254, 251, 196, 56, 82, 232,
21, 82, 11, 34, 197, 140, 106, 64, 54, 129, 45, 190, 8, 71, 100,
85, 128, 173, 143, 128, 230, 8, 141, 243, 114, 247, 127, 242, 207, 47,
7, 125, 206, 166, 23, 132, 42, 148, 114, 168, 204, 77, 197, 180, 221,
20, 37, 24, 147, 210, 120, 220, 95, 203, 77, 217, 160, 78, 156, 90,
236, 119, 254, 42, 248, 60, 192, 118, 247, 122, 161, 56, 226, 186, 148,
175, 103, 44, 220, 217, 189, 45, 169, 23, 131, 103, 82, 109, 74, 83,
32, 195, 110, 175, 224, 84, 26, 60, 90, 96, 189, 172, 229, 118, 228,
96, 99, 65, 212, 252, 104, 23, 79, 249, 123, 26, 34, 158, 231, 125,
122, 18, 34, 162, 151, 118, 239, 148, 220, 243, 103, 100, 1, 205, 185,
41, 20, 77, 235, 54, 41, 214, 180, 237, 24, 225, 147, 27, 25, 14,
110, 93, 86, 214, 3, 183, 162, 32, 3, 174, 146, 19, 236, 75, 243,
203, 107, 102, 1, 79, 221, 4, 146, 153, 91, 163, 195, 17, 26, 248,
214, 172, 78, 29, 104, 228, 32, 242, 104, 251, 14, 7, 234, 224, 202,
185, 126, 252, 217, 108, 167, 102, 78, 116, 145, 173, 141, 183, 151, 19,
116, 195, 206, 70, 161, 227, 225, 107, 239, 60, 81, 212, 7, 220, 129,
83, 146, 39, 172, 105, 53, 149, 216, 88, 240, 147, 96, 86, 78, 233,
205, 209, 144, 96, 195, 137, 72, 22, 93, 245, 133, 179, 147, 166, 166,
216, 247, 78, 171, 178, 93, 219, 235, 34, 115, 252, 173, 69, 19, 80,
25, 91, 46, 176, 209, 207, 116, 249, 187, 44, 133, 141, 0, 234, 112,
85, 74, 164, 83, 216, 214, 95, 162, 67, 162, 86, 89, 99, 85, 18,
183, 114, 41, 222, 20, 49, 191, 33, 199, 108, 50, 71, 211, 108, 25,
70, 208, 192, 128, 59, 207, 60, 94, 148, 112, 211, 138, 58, 146, 27,
116, 78, 247, 23, 36, 51, 143, 43, 60, 126, 24, 178, 16, 151, 217,
132, 29, 230, 140, 185, 121, 74, 65, 212, 102, 112, 252, 208, 183, 202,
132, 98, 4, 37, 214, 188, 15, 17, 201, 55, 201, 133, 65, 69, 47,
178, 106, 167, 205, 218, 2, 97, 195, 126, 193, 228, 0, 232, 237, 249,
197, 196, 177, 238, 152, 193, 243, 231, 110, 46, 96, 38, 3, 81, 214,
228, 31, 42, 119, 126, 26, 204, 218, 226, 6, 253, 79, 77, 78, 76,
90, 140, 199, 37, 58, 16, 240, 223, 32, 150, 30, 106, 101, 39, 44,
150, 255, 170, 225, 215, 1, 202, 102, 216, 5, 81, 32, 119, 3, 85,
172, 21, 240, 62, 82, 29, 19, 101, 133, 203, 2, 95, 139, 118, 185,
189, 225, 202, 211, 212, 226, 5, 158, 151, 47, 82, 26, 29, 121, 216,
176, 132, 11, 157, 166, 200, 80, 103, 83, 225, 206, 123, 64, 254, 88,
186, 22, 68, 158, 47, 245, 59, 78, 149, 98, 209, 144, 102, 88, 70,
168, 205, 226, 152, 66, 0, 52, 220, 50, 227, 104, 34, 64, 219, 208,
236, 249, 101, 84, 225, 220, 226, 253, 141, 38, 175, 235, 147, 131, 139,
2, 149, 86, 209, 231, 42, 30, 106, 206, 144, 126, 153, 82, 110, 190,
187, 11, 193, 252, 124, 101, 4, 245, 128, 22, 30, 204, 23, 206, 200,
75, 17, 186, 38, 137, 186, 175, 83, 0, 238, 17, 143, 46, 154, 14,
12, 8, 233, 28, 11, 23, 44, 30, 10, 229, 186, 114, 254, 178, 156,
31, 75, 59, 60, 160, 21, 75, 23, 222, 152, 42, 74, 29, 86, 18,
6, 227, 248, 88, 173, 89, 165, 61, 86, 92, 100, 156, 186, 43, 171,
48, 119, 26, 5, 29, 224, 92, 136, 193, 154, 81, 103, 138, 151, 250,
19, 98, 21, 128, 164, 65, 236, 116, 19, 248, 230, 194, 250, 88, 214,
86, 0, 31, 26, 152, 166, 197, 192, 30, 113, 208, 34, 205, 37, 118,
234, 47, 61, 167, 235, 49, 198, 108, 73, 147, 19, 157, 198, 241, 18,
227, 40, 170, 250, 39, 179, 185, 168, 38, 191, 146, 240, 58, 233, 99,
182, 118, 90, 119, 179, 234, 183, 15, 111, 176, 153, 34, 75, 195, 130,
122, 53, 220, 235, 186, 27, 154, 65, 190, 107, 0, 42, 189, 25, 190,
24, 146, 76, 22, 191, 132, 36, 167, 63, 254, 4, 97, 148, 132, 184,
169, 24, 49, 233, 65, 98, 237, 17, 151, 213, 90, 207, 215, 137, 177,
23, 230, 3, 154, 154, 212, 215, 166, 132, 125, 1, 35, 145, 50, 177,
38, 31, 77, 227, 79, 10, 159, 110, 116, 125, 88, 120, 18, 96, 240,
164, 82, 218, 193, 165, 25, 238, 154, 162, 21, 112, 85, 244, 247, 212,
200, 100, 65, 38, 59, 212, 152, 77, 153, 248, 186, 245, 171, 98, 20,
72, 174, 113, 59, 152, 85, 194, 59, 20, 239, 238, 201, 104, 168, 162,
86, 237, 52, 39, 80, 170, 101, 248, 220, 173, 150, 54, 13, 232, 114,
240, 112, 121, 201, 54, 86, 121, 195, 172, 239, 211, 167, 176, 27, 165,
9, 22, 184, 238, 162, 192, 190, 66, 1, 63, 210, 40, 145, 174, 247,
95, 183, 243, 6, 112, 199, 191, 72, 48, 100, 189, 111, 54, 54, 35,
245, 63, 111, 44, 57, 152, 170, 94, 4, 232, 251, 7, 228, 227, 250,
100, 198, 13, 119, 134, 26, 254, 59, 234, 30, 51, 215, 180, 195, 179,
159, 222, 34, 125, 249, 22, 155, 211, 134, 131, 32, 36, 150, 29, 15,
73, 53, 84, 43, 243, 231, 85, 212, 236, 76, 165, 35, 200, 252, 79,
251, 177, 24, 15, 215, 14, 64, 164, 28, 235, 209, 10, 69, 27, 253,
159, 35, 173, 181, 161, 250, 185, 154, 178, 231, 50, 226, 231, 68, 66,
164, 157, 112, 23, 127, 31, 77, 99, 152, 188, 62, 36, 2, 115, 131,
226, 107, 13, 92, 44, 225, 231, 151, 250, 47, 194, 24, 195, 116, 22,
193, 75, 229, 3, 238, 168, 175, 175, 120, 128, 164, 73, 132, 153, 233,
145, 50, 167, 85, 42, 127, 143, 240, 93, 54, 95, 87, 115, 49, 18,
49, 210, 77, 118, 155, 167, 26, 86, 100, 82, 203, 100, 8, 1, 112,
96, 172, 162, 164, 104, 111, 24, 234, 249, 21, 20, 88, 199, 167, 162,
218, 236, 193, 169, 97, 121, 91, 112, 64, 61, 148, 46, 64, 155, 77,
172, 91, 156, 166, 223, 160, 208, 74, 103, 10, 137, 3, 40, 41, 31,
92, 96, 236, 23, 195, 163, 131, 254, 52, 216, 240, 136, 185, 169, 28,
31, 76, 1, 224, 154, 116, 242, 206, 104, 63, 56, 45, 248, 60, 221,
63, 147, 65, 232, 79, 70, 121, 199, 121, 233, 105, 225, 235, 149, 81,
155, 158, 132, 30, 150, 11, 153, 92, 198, 27, 96, 253, 240, 191, 3,
231, 194, 69, 193, 228, 250, 213, 9, 124, 125, 158, 202, 8, 244, 158,
204, 36, 93, 248, 157, 206, 208, 179, 227, 38, 66, 253, 163, 12, 100,
42, 28, 157, 86, 30, 67, 177, 49, 77, 184, 165, 108, 119, 234, 35,
37, 131, 142, 221, 150, 5, 64, 30, 84, 96, 166, 27, 211, 59, 211,
60, 99, 226, 54, 29, 207, 249, 242, 156, 96, 201, 172, 144, 165, 99,
221, 142, 47, 84, 108, 54, 200, 86, 175, 57, 176, 11, 120, 206, 106,
85, 205, 126, 69, 66, 51, 253, 21, 255, 62, 229, 145, 229, 208, 85,
128, 231, 94, 162, 107, 249, 196, 166, 124, 254, 119, 17, 208, 170, 180,
65, 104, 200, 238, 133, 233, 229, 2, 30, 41, 163, 148, 166, 107, 57,
53, 51, 187, 118, 19, 189, 146, 185, 125, 47, 170, 37, 108, 98, 108,
143, 51, 208, 121, 100, 110, 60, 219, 222, 65, 87, 135, 206, 251, 33,
166, 71, 104, 123, 138, 138, 104, 237, 32, 196, 120, 99, 0, 197, 32,
131, 22, 165, 207, 212, 10, 227, 140, 166, 119, 49, 218, 148, 120, 213,
54, 69, 99, 233, 13, 171, 218, 2, 178, 82, 130, 196, 68, 80, 33,
174, 80, 31, 58, 118, 1, 187, 90, 175, 230, 248, 161, 67, 73, 147,
84, 0, 219, 213, 242, 59, 19, 137, 6, 130, 184, 250, 214, 16, 70,
216, 167, 201, 16, 242, 209, 60, 42, 5, 5, 218, 44, 209, 113, 110,
110, 191, 160, 167, 50, 143, 183, 101, 218, 147, 230, 143, 163, 255, 116,
150, 102, 19, 141, 112, 204, 102, 71, 59, 184, 28, 129, 201, 90, 253,
147, 22, 79, 158, 94, 158, 143, 53, 90, 32, 152, 55, 185, 64, 60,
25, 49, 253, 71, 31, 92, 154, 241, 243, 80, 129, 6, 137, 221, 210,
242, 13, 131, 237, 119, 254, 70, 114, 205, 49, 79, 233, 205, 181, 45,
133, 32, 181, 53, 103, 114, 193, 80, 139, 206, 67, 87, 127, 207, 177,
112, 225, 164, 178, 102, 205, 172, 78, 222, 63, 0, 185, 143, 92, 195,
83, 220, 30, 20, 169, 184, 37, 78, 3, 101, 201, 202, 195, 186, 98,
120, 114, 73, 45, 33, 65, 33, 40, 53, 177, 79, 238, 151, 234, 2,
150, 54, 243, 51, 57, 28, 145, 28, 9, 24, 186, 251, 239, 160, 56,
213, 118, 236, 97, 159, 67, 111, 128, 203, 98, 96, 249, 214, 178, 48,
39, 145, 125, 198, 46, 184, 109, 252, 166, 65, 113, 67, 27, 252, 244,
189, 95, 118, 210, 195, 112, 76, 33, 15, 58, 142, 170, 116, 87, 78,
105, 123, 81, 243, 21, 110, 117, 115, 214, 27, 161, 111, 91, 182, 148,
130, 20, 168, 2, 113, 16, 72, 184, 232, 147, 167, 9, 70, 210, 5,
91, 101, 164, 154, 112, 105, 19, 179, 161, 240, 86, 135, 65, 211, 241,
144, 148, 89, 245, 195, 54, 52, 56, 138, 203, 160, 68, 57, 166, 137,
4, 219, 53, 204, 13, 7, 191, 8, 71, 255, 177, 242, 138, 210, 211,
153, 9, 106, 16, 54, 26, 32, 177, 54, 63, 195, 100, 184, 15, 114,
148, 0, 106, 229, 94, 13, 147, 1, 126, 211, 55, 25, 157, 63, 132,
204, 76, 157, 43, 40, 116, 190, 234, 154, 153, 68, 80, 70, 173, 70,
4, 79, 195, 153, 209, 225, 87, 16, 159, 49, 234, 75, 118, 213, 59,
61, 245, 121, 110, 130, 187, 176, 26, 29, 12, 202, 218, 163, 71, 11,
151, 156, 74, 18, 34, 231, 88, 110, 11, 2, 208, 89, 119, 90, 69,
152, 76, 13, 138, 193, 1, 137, 174, 251, 152, 95, 71, 252, 183, 140,
203, 103, 25, 51, 37, 87, 254, 252, 209, 126, 119, 233, 41, 75, 123,
121, 110, 106, 192, 248, 74, 242, 162, 227, 220, 122, 214, 152, 120, 94,
103, 7, 65, 191, 181, 35, 68, 125, 62, 218, 144, 164, 173, 18, 209,
183, 47, 231, 183, 245, 170, 122, 63, 188, 215, 156, 25, 61, 131, 196,
139, 57, 49, 174, 182, 239, 36, 138, 251, 67, 24, 172, 61, 83, 112,
97, 93, 6, 255, 221, 72, 60, 11, 210, 249, 87, 221, 15, 148, 245,
81, 52, 200, 99, 109, 150, 171, 67, 183, 2, 67, 228, 30, 109, 174,
127, 206, 114, 118, 60, 136, 127, 210, 4, 43, 194, 15, 59, 47, 159,
7, 182, 115, 102, 179, 233, 198, 38, 170, 154, 229, 27, 12, 45, 17,
20, 237, 202, 76, 98, 188, 189, 64, 250, 40, 238, 254, 222, 72, 144,
80, 238, 88, 215, 141, 45, 130, 11, 135, 43, 147, 84, 237, 112, 241,
78, 81, 128, 119, 252, 201, 78, 151, 128, 94, 33, 202, 131, 127, 148,
67, 188, 66, 129, 211, 138, 236, 243, 202, 132, 14, 34, 219, 242, 18,
56, 68, 210, 118, 203, 69, 182, 1, 4, 224, 79, 186, 1, 252, 88,
205, 201, 243, 5, 157, 59, 129, 42, 150, 42, 229, 248, 3, 167, 232,
206, 161, 200, 71, 136, 70, 214, 204, 114, 36, 180, 58, 36, 89, 179,
199, 10, 202, 235, 196, 69, 183, 126, 28, 237, 53, 32, 248, 242, 145,
19, 245, 183, 159, 231, 174, 242, 98, 53, 235, 37, 106, 209, 21, 136,
45, 199, 148, 183, 209, 153, 87, 202, 149, 8, 187, 21, 132, 166, 143,
130, 240, 145, 184, 3, 149, 146, 188, 179, 229, 164, 161, 151, 85, 42,
242, 73, 56, 0, 237, 168, 45, 176, 246, 170, 119, 50, 196, 50, 7,
230, 21, 14, 56, 19, 181, 221, 253, 5, 92, 124, 63, 163, 214, 47,
25, 238, 217, 100, 166, 53, 247, 128, 83, 138, 19, 219, 254, 2, 145,
111, 109, 27, 13, 57, 166, 31, 11, 188, 56, 8, 37, 80, 10, 126,
109, 2, 227, 47, 4, 192, 67, 252, 153, 41, 138, 48, 94, 72, 235,
226, 55, 251, 184, 195, 16, 253, 61, 33, 227, 12, 89, 138, 154, 246,
189, 134, 47, 214, 245, 4, 35, 67, 53, 69, 167, 134, 240, 138, 200,
92, 192, 212, 157, 244, 13, 31, 34, 181, 2, 39, 102, 139, 25, 216,
187, 137, 252, 247, 110, 100, 167, 72, 93, 180, 35, 236, 117, 1, 15,
226, 54, 163, 227, 152, 24, 221, 59, 157, 173, 135, 35, 157, 104, 20,
25, 112, 113, 36, 15, 236, 47, 36, 99, 209, 243, 204, 134, 254, 78,
243, 81, 189, 134, 108, 90, 58, 97, 227, 253, 104, 2, 162, 40, 80,
127, 190, 11, 126, 92, 210, 44, 177, 205, 133, 127, 162, 103, 138, 40,
214, 172, 148, 103, 248, 33, 143, 172, 41, 48, 182, 33, 170, 216, 42,
69, 34, 202, 115, 101, 197, 3, 38, 255, 83, 152, 128, 76, 236, 139,
115, 101, 40, 46, 203, 147, 147, 126, 219, 120, 191, 214, 109, 185, 170,
248, 242, 27, 99, 85, 105, 39, 172, 27, 206, 153, 107, 202, 245, 93,
20, 126, 129, 254, 62, 133, 241, 75, 203, 138, 16, 68, 64, 254, 194,
71, 115, 254, 109, 90, 196, 184, 179, 8, 130, 114, 64, 72, 126, 218,
201, 6, 243, 248, 0, 244, 198, 40, 9, 28, 37, 103, 153, 146, 108,
24, 171, 240, 112, 28, 71, 165, 239, 32, 94, 169, 93, 217, 151, 30,
9, 3, 227, 87, 45, 220, 136, 81, 152, 66, 176, 87, 129, 142, 129,
139, 194, 8, 164, 164, 135, 161, 121, 136, 97, 63, 105, 17, 180, 26,
208, 42, 66, 29, 131, 181, 13, 187, 160, 212, 50, 83, 73, 202, 174,
86, 14, 67, 147, 79, 136, 209, 199, 85, 38, 92, 234, 29, 211, 70,
11, 112, 252, 229, 195, 251, 63, 154, 35, 67, 7, 75, 254, 110, 191,
117, 186, 164, 202, 93, 116, 97, 162, 94, 123, 228, 241, 221, 146, 24,
218, 102, 223, 85, 74, 183, 64, 70, 39, 208, 164, 11, 50, 202, 181,
26, 254, 168, 130, 199, 123, 72, 5, 244, 202, 71, 118, 126, 149, 104,
20, 208, 207, 224, 156, 33, 55, 237, 186, 132, 189, 53, 100, 4, 95,
83, 234, 71, 230, 66, 233, 237, 138, 220, 76, 213, 87, 193, 132, 101,
238, 48, 84, 235, 255, 81, 134, 133, 168, 35, 135, 96, 82, 156, 160,
122, 159, 234, 224, 105, 178, 20, 72, 57, 74, 248, 236, 124, 60, 170,
157, 100, 207, 126, 216, 141, 200, 14, 152, 79, 34, 136, 78, 167, 205,
52, 208, 142, 94, 63, 233, 200, 239, 20, 50, 249, 176, 37, 84, 163,
234, 87, 67, 69, 136, 73, 194, 0, 107, 57, 85, 131, 75, 222, 216,
74, 173, 189, 220, 124, 148, 144, 220, 90, 248, 77, 69, 12, 156, 6,
60, 90, 103, 192, 173, 75, 187, 89, 235, 66, 44, 103, 144, 166, 11,
87, 98, 212, 118, 42, 13, 134, 242, 11, 77, 43, 227, 80, 112, 99,
69, 93, 227, 102, 40, 105, 195, 241, 233, 227, 148, 119, 192, 252, 163,
69, 31, 149, 59, 253, 196, 238, 32, 245, 37, 11, 189, 144, 141, 241,
231, 7, 27, 3, 16, 183, 220, 210, 197, 170, 110, 138, 135, 242, 134,
64, 185, 10, 130, 68, 225, 4, 103, 184, 184, 95, 17, 183, 201, 4,
234, 191, 206, 171, 44, 240, 92, 75, 229, 211, 132, 229, 238, 243, 37,
76, 81, 15, 167, 65, 21, 118, 211, 88, 36, 94, 45, 31, 184, 112,
228, 111, 52, 97, 77, 111, 144, 129, 13, 241, 4, 253, 161, 168, 132,
117, 250, 7, 132, 173, 250, 103, 209, 22, 213, 227, 213, 173, 128, 236,
252, 3, 197, 167, 0, 40, 82, 1, 67, 160, 18, 141, 220, 138, 149,
145, 174, 238, 127, 180, 135, 0, 4, 111, 186, 86, 139, 172, 202, 220,
128, 136, 53, 207, 48, 170, 181, 201, 43, 95, 179, 92, 101, 34, 142,
145, 13, 25, 18, 238, 36, 13, 113, 70, 182, 200, 66, 167, 191, 0,
33, 8, 12, 3, 66, 199, 163, 229, 60, 33, 159, 14, 129, 171, 187,
209, 92, 252, 91, 147, 78, 190, 175, 109, 111, 22, 143, 13, 205, 223,
79, 222, 78, 132, 116, 247, 112, 22, 178, 0, 218, 147, 207, 170, 189,
170, 245, 23, 156, 226, 23, 3, 27, 175, 97, 186, 167, 136, 170, 172,
61, 152, 134, 193, 127, 59, 23, 183, 131, 184, 95, 116, 151, 157, 83,
128, 83, 238, 224, 212, 180, 216, 199, 53, 40, 92, 9, 32, 242, 117,
134, 114, 39, 4, 240, 247, 100, 159, 75, 152, 130, 126, 174, 107, 4,
12, 145, 87, 84, 39, 191, 129, 115, 86, 69, 191, 114, 204, 64, 6,
217, 148, 83, 171, 235, 90, 172, 195, 0, 226, 159, 122, 104, 182, 185,
11, 110, 176, 79, 166, 130, 105, 194, 126, 166, 179, 148, 243, 110, 185,
249, 210, 59, 133, 208, 39, 160, 51, 245, 178, 45, 203, 253, 96, 225,
25, 128, 229, 134, 92, 154, 12, 129, 63, 253, 144, 221, 94, 247, 253,
199, 78, 135, 174, 171, 237, 176, 123, 25, 165, 177, 26, 172, 237, 217,
177, 53, 43, 209, 7, 141, 248, 84, 100, 156, 42, 235, 125, 239, 250,
236, 91, 129, 213, 235, 28, 208, 248, 247, 136, 169, 148, 220, 120, 251,
0, 37, 218, 26, 114, 68, 166, 6, 53, 81, 115, 145, 134, 200, 101,
67, 226, 52, 153, 195, 93, 191, 212, 120, 202, 118, 108, 243, 167, 63,
17, 158, 199, 255, 100, 175, 177, 140, 217, 178, 141, 195, 13, 175, 216,
90, 143, 245, 169, 67, 206, 11, 151, 112, 26, 247, 47, 179, 105, 17,
236, 51, 132, 134, 157, 232, 68, 114, 209, 236, 68, 32, 112, 102, 176,
205, 23, 59, 215, 88, 5, 186, 251, 26, 57, 83, 125, 250, 229, 142,
161, 160, 217, 15, 157, 193, 230, 172, 126, 46, 150, 150, 252, 82, 80,
228, 43, 130, 39, 106, 151, 21, 197, 164, 227, 234, 128, 155, 28, 89,
6, 60, 87, 190, 16, 40, 157, 155, 1, 111, 9, 61, 21, 156, 57,
37, 0, 244, 205, 108, 236, 32, 152, 3, 43, 205, 154, 246, 151, 240,
26, 62, 61, 142, 149, 133, 7, 47, 31, 117, 52, 223, 49, 58, 212,
25, 30, 196, 165, 206, 113, 148, 6, 222, 217, 212, 136, 8, 211, 241,
120, 204, 52, 252, 2, 186, 23, 149, 210, 82, 90, 32, 203, 209, 92,
143, 113, 166, 201, 17, 199, 156, 56, 205, 116, 21, 55, 220, 157, 228,
172, 159, 246, 128, 181, 101, 231, 92, 212, 211, 8, 42, 70, 119, 116,
253, 249, 178, 65, 58, 25, 84, 8, 113, 94, 96, 92, 124, 188, 240,
67, 58, 221, 218, 47, 213, 189, 55, 194, 144, 235, 223, 218, 229, 51,
112, 15, 112, 138, 142, 101, 157, 128, 78, 148, 153, 208, 166, 19, 108,
204, 47, 213, 102, 65, 115, 131, 83, 162, 148, 108, 227, 59, 156, 223,
205, 149, 187, 213, 2, 205, 236, 114, 163, 91, 226, 147, 80, 143, 70,
245, 106, 21, 23, 111, 104, 1, 180, 119, 137, 88, 53, 7, 158, 212,
159, 98, 242, 69, 69, 21, 45, 52, 170, 39, 2, 121, 15, 57, 57,
128, 68, 96, 152, 96, 238, 60, 144, 149, 7, 170, 203, 141, 98, 140,
180, 129, 104, 181, 62, 61, 48, 19, 245, 101, 179, 151, 98, 110, 235,
68, 139, 88, 87, 157, 182, 203, 255, 12, 253, 139, 191, 90, 241, 26,
27, 227, 51, 160, 0, 169, 252, 251, 245, 185, 171, 143, 92, 111, 91,
253, 62, 3, 130, 148, 56, 207, 147, 101, 182, 45, 10, 90, 37, 207,
128, 154, 239, 254, 152, 27, 83, 119, 20, 104, 251, 170, 63, 68, 82,
26, 140, 52, 193, 44, 3, 24, 197, 61, 166, 238, 143, 117, 94, 74,
69, 195, 14, 77, 89, 131, 191, 151, 208, 15, 219, 205, 186, 179, 99,
214, 225, 2, 12, 228, 29, 91, 172, 100, 32, 168, 148, 59, 141, 28,
120, 232, 50, 82, 247, 32, 136, 193, 229, 207, 226, 33, 31, 99, 208,
163, 59, 70, 218, 212, 100, 229, 87, 28, 131, 229, 34, 35, 23, 221,
76, 166, 26, 36, 78, 125, 132, 142, 109, 66, 91, 200, 166, 187, 24,
199, 100, 55, 115, 64, 135, 93, 131, 17, 113, 74, 40, 12, 41, 152,
112, 26, 166, 35, 31, 43, 108, 192, 176, 172, 216, 6, 252, 6, 108,
3, 80, 129, 211, 190, 26, 164, 118, 11, 157, 26, 130, 103, 30, 97,
42, 100, 235, 151, 40, 213, 202, 126, 2, 72, 41, 192, 179, 194, 185,
189, 41, 61, 61, 193, 138, 95, 118, 39, 118, 26, 216, 152, 210, 154,
85, 203, 201, 85, 115, 91, 249, 82, 226, 200, 33, 192, 15, 219, 244,
165, 165, 210, 210, 11, 216, 10, 67, 77, 151, 185, 170, 185, 131, 51,
27, 157, 176, 196, 114, 41, 48, 26, 16, 148, 195, 103, 96, 190, 118,
241, 229, 30, 10, 158, 108, 114, 150, 127, 7, 199, 143, 214, 168, 230,
41, 247, 193, 86, 247, 64, 247, 100, 223, 236, 233, 136, 199, 131, 58,
206, 8, 15, 155, 135, 204, 152, 205, 1, 97, 22, 15, 61, 52, 128,
118, 111, 2, 74, 1, 91, 186, 7, 134, 43, 225, 98, 87, 186, 9,
243, 199, 124, 219, 105, 124, 29, 224, 38, 126, 148, 114, 235, 199, 227,
222, 228, 88, 30, 180, 28, 201, 232, 108, 2, 162, 90, 195, 34, 116,
46, 164, 40, 166, 105, 90, 159, 48, 109, 176, 31, 138, 136, 153, 108,
252, 159, 10, 87, 208, 196, 49, 71, 165, 76, 52, 15, 245, 100, 247,
0, 176, 185, 103, 174, 250, 232, 242, 184, 71, 233, 51, 133, 96, 77,
18, 207, 51, 220, 249, 28, 101, 83, 57, 129, 31, 31, 126, 73, 253,
37, 88, 42, 21, 142, 182, 141, 60, 239, 249, 230, 230, 35, 234, 215,
251, 182, 215, 158, 245, 41, 198, 198, 131, 214, 129, 176, 103, 159, 19,
249, 127, 227, 38, 160, 146, 57, 110, 122, 80, 1, 241, 165, 9, 38,
59, 6, 141, 129, 29, 155, 214, 183, 148, 169, 239, 178, 188, 3, 239,
205, 109, 13, 211, 35, 191, 144, 242, 30, 50, 9, 121, 92, 136, 161,
9, 68, 6, 183, 0, 155, 199, 10, 129, 161, 189, 106, 179, 149, 197,
121, 146, 144, 5, 215, 85, 210, 184, 152, 229, 209, 91, 50, 190, 61,
146, 24, 27, 92, 105, 77, 65, 153, 131, 120, 190, 10, 178, 141, 31,
227, 81, 54, 138, 11, 64, 211, 161, 173, 158, 25, 83, 196, 2, 165,
253, 177, 140, 240, 48, 17, 108, 60, 132, 222, 158, 248, 250, 243, 250,
218, 171, 180, 48, 115, 14, 24, 26, 65, 102, 80, 190, 85, 57, 20,
227, 170, 126, 236, 163, 31, 255, 182, 134, 132, 30, 216, 138, 101, 218,
170, 175, 221, 113, 158, 246, 190, 139, 88, 52, 174, 195, 89, 206, 80,
99, 174, 133, 3, 3, 115, 114, 222, 38, 178, 115, 32, 120, 214, 45,
177, 91, 207, 64, 235, 188, 138, 251, 155, 7, 136, 188, 250, 23, 173,
137, 16, 6, 219, 211, 37, 67, 80, 71, 229, 42, 55, 155, 66, 218,
219, 96, 85, 194, 80, 233, 236, 39, 246, 14, 15, 190, 11, 177, 87,
26, 140, 118, 239, 114, 129, 128, 241, 78, 11, 150, 243, 85, 174, 76,
70, 7, 79, 2, 38, 225, 84, 24, 171, 186, 255, 83, 201, 49, 30,
186, 196, 151, 21, 198, 175, 58, 170, 254, 63, 129, 244, 59, 156, 205,
15, 76, 47, 144, 138, 255, 141, 128, 89, 27, 109, 36, 102, 213, 94,
73, 167, 108, 194, 28, 23, 100, 87, 230, 20, 6, 11, 104, 21, 93,
179, 38, 68, 121, 46, 179, 212, 219, 210, 216, 176, 150, 89, 170, 18,
84, 103, 175, 22, 89, 233, 66, 218, 247, 251, 23, 170, 73, 186, 221,
215, 67, 254, 153, 73, 215, 23, 147, 234, 3, 102, 133, 127, 171, 88,
226, 49, 163, 148, 162, 77, 148, 191, 126, 211, 242, 253, 124, 72, 178,
210, 204, 232, 15, 248, 116, 144, 58, 130, 24, 41, 40, 22, 79, 176,
36, 224, 106, 5, 209, 20, 95, 77, 244, 27, 228, 54, 156, 18, 124,
113, 48, 229, 4, 77, 153, 81, 122, 7, 205, 16, 126, 173, 160, 102,
50, 160, 198, 180, 206, 161, 199, 124, 173, 63, 63, 212, 145, 162, 139,
232, 161, 144, 61, 121, 99, 28, 250, 199, 138, 137, 123, 16, 245, 239,
143, 216, 189, 190, 186, 25, 49, 6, 216, 56, 221, 119, 92, 105, 69,
94, 174, 95, 136, 130, 56, 165, 41, 217, 106, 61, 160, 194, 138, 104,
67, 208, 139, 51, 184, 212, 179, 46, 218, 168, 10, 119, 34, 26, 161,
151, 183, 181, 114, 116, 148, 157, 93, 1, 152, 9, 203, 125, 107, 104,
13, 6, 8, 14, 113, 249, 98, 70, 99, 93, 127, 152, 252, 190, 191,
215, 3, 82, 144, 147, 1, 241, 215, 121, 80, 239, 192, 97, 55, 190,
234, 185, 57, 174, 27, 109, 132, 236, 196, 212, 112, 24, 192, 36, 84,
119, 195, 171, 134, 254, 116, 192, 150, 103, 49, 202, 1, 145, 71, 171,
53, 179, 62, 226, 24, 1, 48, 238, 158, 59, 22, 52, 156, 21, 49,
199, 203, 248, 18, 165, 78, 143, 230, 220, 9, 95, 216, 17, 119, 44,
17, 54, 200, 211, 233, 198, 255, 96, 196, 199, 182, 111, 148, 146, 43,
35, 196, 155, 159, 173, 211, 64, 243, 201, 71, 24, 36, 73, 147, 251,
137, 250, 55, 52, 176, 11, 203, 246, 166, 111, 104, 138, 107, 101, 76,
169, 166, 164, 236, 44, 170, 117, 112, 42, 123, 231, 96, 4, 229, 4,
20, 14, 163, 249, 115, 22, 28, 8, 103, 163, 71, 174, 11, 107, 164,
227, 23, 23, 38, 223, 207, 19, 198, 245, 140, 203, 204, 80, 71, 214,
67, 197, 157, 200, 63, 210, 244, 1, 142, 93, 96, 31, 72, 56, 199,
103, 13, 82, 92, 100, 199, 176, 222, 219, 198, 145, 219, 200, 198, 181,
85, 104, 207, 162, 88, 232, 127, 50, 245, 216, 246, 21, 114, 154, 166,
138, 179, 221, 139, 83, 83, 151, 216, 89, 251, 240, 144, 118, 205, 94,
94, 197, 146, 194, 209, 151, 204, 134, 44, 193, 252, 146, 47, 221, 194,
215, 28, 213, 96, 122, 169, 219, 66, 104, 1, 162, 111, 229, 138, 125,
148, 170, 166, 18, 248, 228, 163, 199, 159, 70, 40, 78, 108, 19, 210,
69, 141, 41, 201, 165, 150, 31, 114, 43, 60, 43, 156, 216, 110, 183,
142, 56, 44, 87, 98, 201, 61, 100, 163, 22, 154, 113, 147, 249, 229,
49, 54, 217, 89, 230, 121, 81, 192, 87, 178, 35, 34, 63, 168, 168,
17, 229, 90, 191, 125, 49, 50, 220, 213, 28, 179, 88, 28, 196, 203,
166, 123, 185, 12, 181, 120, 65, 76, 149, 191, 57, 164, 45, 229, 178,
61, 138, 46, 137, 249, 154, 250, 60, 130, 219, 87, 167, 203, 227, 218,
58, 17, 44, 249, 96, 43, 33, 222, 80, 97, 125, 108, 190, 249, 127,
200, 137, 79, 183, 169, 90, 111, 123, 101, 81, 163, 202, 207, 24, 235,
135, 67, 115, 119, 241, 19, 137, 146, 76, 17, 124, 213, 143, 149, 56,
217, 174, 25, 162, 160, 199, 198, 58, 6, 231, 19, 189, 139, 150, 60,
234, 157, 45, 129, 167, 1, 16, 104, 143, 173, 203, 14, 143, 192, 224,
234, 102, 164, 90, 229, 136, 2, 49, 201, 80, 55, 196, 39, 67, 74,
113, 214, 152, 227, 185, 239, 184, 170, 147, 1, 98, 238, 186, 63, 29,
69, 47, 104, 130, 190, 30, 13, 243, 90, 119, 163, 39, 46, 93, 69,
178, 137, 120, 77, 114, 195, 197, 111, 105, 76, 141, 173, 19, 182, 170,
94, 22, 180, 228, 213, 127, 119, 197, 110, 119, 141, 133, 14, 44, 240,
194, 202, 53, 252, 232, 104, 224, 44, 180, 8, 36, 187, 146, 31, 88,
11, 10, 185, 50, 255, 79, 251, 11, 29, 103, 213, 19, 60, 244, 227,
100, 190, 75, 149, 5, 238, 90, 147, 142, 44, 122, 245, 53, 0, 97,
58, 21, 79, 114, 211, 45, 64, 58, 13, 121, 85, 251, 157, 229, 66,
226, 63, 242, 216, 46, 5, 64, 140, 233, 125, 114, 146, 139, 160, 108,
217, 28, 150, 217, 160, 246, 202, 174, 161, 16, 243, 161, 243, 188, 251,
30, 25, 61, 15, 29, 152, 10, 179, 181, 30, 42, 148, 116, 118, 255,
8, 100, 37, 19, 237, 138, 102, 25, 29, 164, 160, 40, 253, 51, 100,
158, 197, 48, 50, 20, 62, 248, 41, 194, 243, 152, 193, 18, 142, 50,
236, 178, 164, 107, 254, 141, 71, 107, 30, 154, 160, 37, 23, 176, 230,
112, 151, 100, 220, 126, 103, 46, 142, 67, 175, 223, 20, 36, 100, 100,
212, 194, 212, 246, 128, 234, 125, 203, 160, 100, 131, 210, 87, 243, 199,
78, 49, 195, 12, 48, 224, 244, 110, 29, 113, 233, 59, 91, 217, 209,
28, 141, 103, 64, 230, 156, 239, 179, 51, 64, 205, 139, 251, 147, 232,
158, 99, 9, 60, 190, 193, 96, 163, 176, 247, 5, 86, 151, 97, 202,
94, 33, 179, 107, 248, 207, 114, 121, 121, 19, 70, 24, 174, 104, 38,
122, 163, 178, 22, 187, 30, 152, 118, 64, 138, 29, 175, 85, 228, 213,
219, 171, 70, 182, 73, 215, 124, 88, 222, 229, 118, 74, 57, 230, 66,
254, 135, 243, 237, 127, 5, 243, 167, 143, 10, 190, 90, 156, 162, 96,
169, 14, 235, 210, 60, 8, 212, 85, 128, 250, 205, 225, 9, 114, 139,
150, 34, 27, 247, 148, 71, 161, 139, 58, 178, 70, 209, 128, 102, 177,
103, 230, 66, 11, 192, 7, 44, 66, 43, 116, 147, 90, 38, 139, 205,
162, 17, 248, 145, 64, 131, 172, 165, 216, 211, 223, 23, 122, 183, 137,
19, 46, 62, 152, 2, 79, 109, 122, 64, 8, 211, 46, 29, 54, 31,
104, 29, 61, 46, 201, 254, 67, 77, 17, 125, 95, 41, 254, 245, 191,
150, 147, 98, 171, 149, 174, 59, 95, 182, 40, 132, 132, 201, 79, 84,
250, 76, 144, 170, 172, 229, 144, 181, 148, 231, 51, 171, 181, 71, 204,
123, 87, 92, 149, 238, 207, 21, 71, 72, 119, 162, 244, 156, 177, 7,
112, 1, 118, 156, 12, 1, 87, 192, 217, 110, 63, 236, 154, 245, 51,
177, 111, 89, 241, 114, 49, 122, 139, 100, 50, 215, 141, 94, 129, 64,
168, 219, 194, 83, 14, 18, 130, 83, 142, 254, 98, 172, 115, 191, 25,
218, 170, 197, 253, 6, 210, 127, 6, 219, 200, 184, 24, 104, 193, 45,
240, 217, 30, 95, 180, 60, 91, 3, 185, 49, 194, 165, 46, 215, 172,
118, 155, 238, 81, 231, 28, 201, 16, 100, 13, 89, 150, 15, 209, 110,
216, 90, 86, 157, 43, 174, 103, 251, 48, 158, 229, 190, 38, 230, 127,
75, 179, 161, 198, 241, 82, 11, 47, 47, 116, 220, 221, 91, 17, 20,
222, 106, 225, 168, 72, 161, 182, 218, 14, 197, 1, 68, 173, 56, 134,
19, 198, 180, 112, 125, 150, 38, 57, 226, 204, 161, 104, 230, 51, 149,
66, 9, 188, 206, 228, 90, 186, 61, 56, 19, 41, 143, 249, 182, 131,
220, 218, 148, 73, 110, 117, 106, 202, 52, 178, 61, 78, 73, 223, 134,
135, 86, 174, 35, 83, 216, 58, 149, 166, 48, 5, 65, 124, 109, 137,
151, 103, 215, 20, 94, 9, 47, 84, 36, 1, 203, 22, 249, 225, 43,
56, 186, 236, 189, 126, 8, 133, 184, 83, 220, 3, 4, 60, 132, 188,
252, 135, 109, 149, 111, 113, 157, 225, 61, 47, 34, 144, 183, 135, 67,
166, 53, 14, 233, 154, 115, 130, 46, 4, 120, 16, 163, 64, 170, 24,
158, 133, 36, 123, 34, 91, 41, 16, 224, 242, 62, 215, 44, 95, 228,
193, 235, 142, 148, 151, 245, 76, 177, 176, 28, 58, 154, 95, 254, 200,
241, 134, 250, 63, 232, 13, 190, 189, 165, 33, 77, 252, 171, 139, 221,
78, 246, 56, 186, 201, 210, 234, 240, 41, 46, 216, 254, 149, 12, 22,
150, 182, 174, 236, 18, 222, 234, 102, 231, 225, 243, 37, 201, 130, 162,
33, 89, 206, 0, 17, 136, 36, 105, 3, 51, 172, 99, 191, 177, 30,
1, 98, 111, 112, 212, 42, 125, 40, 23, 25, 74, 125, 52, 51, 147,
185, 63, 213, 143, 111, 89, 237, 236, 12, 144, 194, 17, 109, 162, 171,
102, 34, 232, 10, 154, 251, 95, 23, 246, 127, 75, 127, 153, 98, 58,
36, 23, 59, 192, 128, 239, 192, 243, 16, 198, 9, 42, 145, 182, 78,
144, 224, 64, 57, 8, 121, 173, 208, 153, 114, 52, 63, 138, 82, 206,
30, 204, 156, 135, 219, 36, 93, 35, 129, 84, 57, 14, 31, 121, 151,
215, 254, 46, 42, 143, 158, 42, 68, 213, 52, 33, 142, 188, 100, 228,
97, 113, 190, 113, 27, 204, 140, 136, 155, 20, 186, 97, 149, 252, 2,
68, 94, 41, 220, 169, 144, 35, 21, 81, 121, 53, 169, 22, 4, 140,
188, 4, 103, 205, 88, 111, 88, 180, 131, 165, 223, 99, 208, 111, 142,
139, 83, 175, 147, 195, 65, 29, 139, 0, 218, 206, 100, 234, 30, 235,
16, 41, 105, 232, 32, 203, 78, 200, 199, 154, 1, 205, 106, 217, 23,
237, 141, 197, 89, 57, 232, 19, 173, 156, 146, 228, 191, 163, 228, 63,
94, 52, 126, 29, 14, 107, 194, 79, 250, 48, 15, 212, 124, 79, 126,
254, 181, 225, 13, 26, 57, 242, 199, 158, 211, 219, 237, 113, 73, 202,
20, 25, 231, 86, 239, 48, 32, 38, 143, 143, 209, 71, 243, 75, 167,
68, 74, 112, 200, 176, 247, 218, 122, 110, 57, 250, 214, 84, 224, 154,
102, 170, 44, 172, 86, 218, 43, 91, 38, 146, 204, 113, 47, 48, 53,
88, 232, 186, 20, 132, 199, 18, 92, 169, 47, 212, 101, 154, 250, 92,
79, 121, 20, 233, 30, 158, 223, 232, 7, 193, 108, 107, 141, 69, 135,
48, 20, 21, 131, 245, 4, 217, 245, 55, 130, 175, 156, 159, 129, 222,
134, 71, 112, 222, 79, 222, 68, 63, 79, 17, 164, 157, 72, 222, 20,
180, 220, 29, 162, 168, 102, 66, 168, 159, 100, 74, 35, 72, 137, 168,
171, 249, 213, 168, 179, 232, 230, 211, 39, 172, 194, 32, 218, 162, 243,
205, 233, 13, 237, 216, 84, 221, 82, 38, 42, 247, 127, 165, 195, 135,
208, 13, 81, 152, 24, 24, 251, 85, 166, 61, 229, 44, 244, 97, 131,
225, 216, 193, 49, 15, 92, 197, 183, 125, 107, 158, 71, 7, 129, 111,
185, 124, 234, 10, 120, 134, 147, 252, 221, 181, 149, 34, 227, 24, 11,
224, 224, 20, 198, 11, 197, 49, 143, 117, 96, 124, 206, 209, 135, 103,
191, 47, 217, 171, 83, 154, 111, 26, 150, 156, 191, 44, 173, 251, 143,
142, 59, 85, 162, 145, 51, 143, 55, 219, 166, 135, 97, 147, 130, 15,
224, 131, 185, 199, 205, 44, 197, 59, 133, 126, 94, 144, 152, 237, 60,
217, 189, 204, 157, 136, 254, 171, 29, 248, 78, 206, 76, 163, 189, 213,
27, 196, 54, 147, 251, 72, 159, 73, 184, 0, 84, 227, 124, 98, 35,
246, 79, 248, 186, 97, 108, 24, 215, 232, 3, 200, 152, 66, 30, 21,
122, 27, 206, 89, 36, 239, 208, 69, 232, 97, 132, 252, 177, 230, 109,
141, 247, 99, 116, 34, 180, 190, 142, 155, 222, 229, 147, 124, 98, 253,
214, 151, 221, 174, 0, 38, 243, 49, 179, 38, 206, 138, 253, 44, 218,
111, 57, 6, 55, 3, 158, 176, 238, 54, 235, 79, 228, 91, 139, 165,
184, 25, 155, 15, 1, 181, 48, 96, 197, 14, 11, 106, 62, 162, 117,
3, 29, 116, 183, 63, 74, 159, 86, 99, 9, 174, 27, 188, 115, 29,
111, 253, 70, 231, 216, 13, 162, 255, 129, 210, 101, 227, 131, 163, 130,
194, 94, 249, 204, 53, 125, 77, 10, 148, 70, 115, 193, 120, 219, 216,
77, 251, 118, 20, 55, 124, 150, 229, 241, 9, 94, 100, 128, 79, 192,
141, 2, 94, 254, 84, 77, 32, 10, 36, 232, 24, 225, 29, 238, 28,
153, 74, 197, 178, 49, 101, 144, 251, 184, 6, 140, 245, 219, 61, 181,
86, 28, 150, 83, 153, 29, 142, 179, 14, 14, 168, 219, 182, 37, 77,
29, 164, 24, 23, 44, 128, 151, 74, 185, 81, 58, 41, 123, 51, 62,
64, 227, 168, 59, 147, 143, 191, 93, 95, 158, 135, 219, 96, 172, 102,
35, 82, 126, 102, 216, 252, 22, 31, 51, 117, 20, 228, 99, 125, 176,
143, 2, 130, 130, 79, 12, 71, 44, 246, 235, 234, 86, 82, 167, 177,
246, 39, 197, 249, 158, 205, 75, 178, 135, 253, 241, 30, 172, 119, 151,
198, 214, 229, 23, 27, 90, 26, 213, 196, 120, 195, 64, 141, 228, 197,
194, 135, 25, 94, 207, 112, 109, 115, 116, 156, 145, 192, 182, 203, 6,
117, 125, 21, 79, 37, 177, 50, 69, 139, 215, 97, 150, 46, 31, 80,
70, 238, 82, 3, 239, 151, 93, 235, 232, 159, 2, 18, 177, 43, 178,
176, 253, 76, 138, 113, 217, 113, 164, 45, 121, 82, 3, 113, 18, 22,
120, 35, 41, 41, 176, 20, 83, 164, 202, 250, 143, 54, 226, 225, 192,
184, 207, 154, 240, 128, 187, 180, 239, 233, 54, 110, 122, 243, 240, 220,
158, 131, 111, 202, 17, 232, 139, 115, 145, 172, 91, 90, 42, 150, 190,
183, 192, 65, 128, 102, 213, 200, 9, 12, 74, 158, 67, 168, 71, 71,
111, 56, 205, 156, 62, 133, 86, 109, 247, 161, 211, 23, 158, 39, 216,
94, 20, 140, 158, 245, 237, 92, 24, 163, 72, 250, 88, 99, 146, 195,
211, 187, 240, 66, 25, 43, 159, 15, 225, 222, 131, 228, 131, 147, 238,
76, 251, 228, 0, 53, 186, 41, 243, 184, 88, 110, 71, 211, 3, 127,
29, 186, 69, 40, 224, 92, 145, 200, 50, 236, 245, 42, 198, 242, 9,
97, 177, 93, 86, 57, 248, 29, 50, 131, 131, 160, 109, 156, 80, 21,
204, 189, 190, 244, 193, 165, 173, 98, 173, 187, 37, 157, 31, 167, 216,
173, 9, 30, 226, 13, 208, 210, 64, 241, 53, 27, 218, 149, 126, 92,
169, 167, 70, 84, 84, 64, 83, 100, 130, 251, 137, 255, 69, 157, 136,
161, 49, 197, 149, 237, 224, 103, 114, 205, 21, 35, 254, 27, 6, 69,
72, 54, 86, 109, 20, 99, 126, 107, 29, 134, 135, 12, 203, 227, 15,
173, 49, 152, 240, 211, 111, 245, 246, 245, 162, 88, 148, 39, 111, 197,
200, 183, 236, 191, 74, 211, 131, 222, 35, 211, 185, 122, 97, 173, 146,
128, 60, 83, 244, 135, 75, 208, 230, 144, 127, 29, 115, 146, 129, 201,
19, 25, 181, 85, 174, 38, 65, 230, 17, 142, 71, 109, 15, 96, 180,
38, 20, 109, 70, 234, 219, 148, 43, 179, 231, 222, 222, 13, 73, 85,
153, 231, 33, 189, 33, 135, 70, 100, 190, 117, 53, 203, 196, 2, 15,
146, 210, 175, 237, 231, 124, 68, 254, 150, 55, 18, 153, 31, 48, 113,
118, 82, 249, 43, 2, 136, 111, 35, 140, 114, 45, 223, 21, 115, 37,
209, 14, 86, 34, 115, 115, 98, 152, 189, 57, 130, 96, 103, 103, 122,
74, 3, 230, 38, 45, 188, 18, 223, 140, 40, 234, 251, 46, 168, 44,
16, 230, 155, 184, 133, 94, 89, 29, 179, 194, 78, 15, 238, 8, 18,
41, 177, 87, 244, 16, 88, 176, 150, 108, 247, 127, 26, 71, 225, 109,
190, 2, 220, 132, 12, 18, 17, 35, 125, 87, 163, 153, 118, 225, 147,
26, 106, 0, 144, 137, 148, 45, 68, 112, 195, 225, 104, 255, 195, 34,
6, 210, 35, 205, 232, 173, 169, 138, 212, 198, 229, 241, 158, 216, 218,
231, 31, 97, 233, 241, 252, 44, 156, 110, 225, 6, 128, 148, 145, 190,
101, 117, 124, 116, 158, 39, 93, 64, 200, 244, 162, 247, 35, 25, 248,
145, 106, 75, 23, 163, 55, 183, 176, 188, 78, 219, 192, 77, 113, 24,
70, 133, 254, 222, 15, 45, 102, 9, 253, 47, 129, 9, 212, 53, 18,
77, 233, 217, 172, 88, 233, 38, 215, 168, 93, 244, 58, 218, 209, 52,
105, 58, 8, 67, 234, 29, 227, 1, 152, 140, 62, 223, 237, 78, 178,
216, 125, 205, 42, 249, 191, 173, 133, 55, 146, 99, 129, 91, 80, 182,
233, 114, 241, 80, 119, 200, 24, 31, 201, 33, 14, 175, 53, 186, 75,
41, 8, 83, 44, 157, 3, 237, 1, 202, 89, 193, 109, 198, 78, 228,
3, 105, 249, 14, 163, 220, 196, 82, 203, 104, 199, 5, 248, 81, 94,
96, 242, 198, 39, 122, 137, 212, 240, 200, 69, 115, 151, 111, 19, 20,
91, 243, 56, 157, 82, 181, 236, 201, 201, 99, 228, 181, 252, 251, 227,
28, 99, 76, 33, 233, 143, 216, 120, 255, 183, 75, 138, 159, 229, 117,
7, 167, 226, 172, 197, 148, 137, 50, 168, 47, 164, 160, 36, 122, 137,
48, 162, 23, 197, 193, 4, 117, 186, 124, 115, 66, 145, 179, 21, 144,
149, 217, 50, 186, 196, 36, 249, 209, 239, 181, 118, 108, 164, 169, 119,
28, 22, 135, 162, 176, 164, 137, 162, 84, 220, 16, 235, 98, 192, 185,
99, 218, 133, 146, 152, 73, 137, 61, 187, 230, 222, 140, 198, 183, 182,
46, 157, 188, 151, 238, 137, 114, 66, 194, 33, 135, 152, 100, 74, 25,
153, 90, 32, 193, 64, 61, 193, 150, 117, 159, 77, 139, 159, 181, 28,
79, 149, 94, 13, 142, 6, 183, 143, 51, 107, 154, 135, 96, 82, 82,
237, 131, 226, 122, 18, 255, 68, 173, 93, 239, 214, 166, 214, 160, 224,
227, 74, 192, 125, 170, 81, 0, 53, 219, 219, 114, 67, 115, 140, 224,
162, 190, 247, 221, 182, 57, 247, 27, 97, 65, 60, 5, 151, 125, 79,
125, 247, 143, 16, 165, 132, 14, 102, 130, 164, 182, 155, 106, 162, 38,
115, 196, 173, 205, 199, 131, 45, 65, 193, 193, 200, 204, 230, 144, 231,
32, 104, 75, 92, 33, 197, 67, 1, 52, 188, 77, 3, 207, 146, 0,
183, 232, 9, 223, 105, 147, 223, 175, 251, 80, 127, 228, 107, 162, 248,
94, 253, 254, 163, 79, 109, 1, 203, 34, 49, 77, 101, 239, 21, 64,
197, 84, 109, 113, 86, 173, 86, 237, 0, 188, 17, 67, 252, 74, 236,
56, 213, 44, 221, 227, 118, 176, 138, 158, 44, 154, 144, 230, 193, 49,
238, 135, 35, 192, 185, 228, 229, 214, 148, 49, 82, 225, 237, 219, 87,
204, 3, 57, 180, 119, 30, 46, 235, 68, 210, 213, 118, 54, 197, 35,
66, 188, 48, 123, 64, 137, 186, 209, 224, 103, 66, 95, 14, 54, 114,
198, 176, 72, 109, 136, 30, 97, 156, 174, 181, 227, 144, 244, 245, 2,
137, 64, 10, 186, 174, 239, 242, 241, 87, 91, 189, 116, 116, 100, 247,
205, 34, 251, 147, 207, 81, 222, 105, 57, 7, 211, 64, 242, 71, 189,
198, 3, 13, 112, 51, 5, 54, 226, 109, 127, 30, 177, 196, 131, 35,
222, 46, 187, 40, 4, 230, 255, 114, 231, 122, 82, 110, 104, 172, 114,
105, 214, 177, 54, 92, 81, 153, 123, 147, 230, 253, 99, 12, 114, 82,
191, 219, 113, 190, 169, 45, 233, 6, 186, 183, 244, 190, 238, 70, 167,
247, 167, 89, 170, 249, 154, 158, 50, 127, 58, 121, 1, 115, 176, 39,
118, 115, 170, 70, 175, 35, 21, 109, 224, 90, 56, 196, 11, 95, 249,
45, 2, 54, 243, 165, 229, 120, 112, 94, 252, 217, 214, 241, 81, 47,
141, 170, 189, 7, 35, 207, 69, 227, 235, 210, 115, 111, 135, 175, 129,
157, 184, 20, 122, 101, 205, 207, 26, 85, 218, 239, 198, 3, 160, 28,
60, 219, 68, 42, 154, 160, 180, 106, 182, 36, 2, 218, 26, 188, 157,
84, 206, 5, 27, 20, 229, 62, 202, 212, 75, 218, 155, 75, 232, 100,
78, 80, 149, 171, 20, 239, 251, 129, 55, 170, 154, 124, 75, 183, 152,
97, 67, 130, 155, 13, 192, 81, 118, 137, 209, 196, 140, 178, 48, 128,
133, 225, 155, 249, 247, 202, 28, 120, 33, 255, 100, 93, 227, 218, 213,
171, 236, 11, 174, 221, 57, 86, 208, 156, 72, 236, 210, 132, 139, 247,
222, 203, 23, 227, 220, 162, 59, 251, 143, 157, 71, 219, 224, 235, 25,
27, 100, 142, 201, 86, 165, 39, 58, 119, 97, 109, 91, 172, 211, 206,
147, 41, 115, 15, 14, 131, 249, 54, 235, 29, 63, 229, 231, 233, 93,
251, 100, 166, 241, 146, 28, 219, 84, 105, 134, 250, 231, 194, 182, 174,
56, 200, 154, 197, 42, 20, 191, 99, 168, 129, 130, 203, 184, 186, 46,
233, 92, 246, 43, 109, 183, 242, 154, 213, 112, 194, 153, 241, 13, 104,
98, 181, 158, 68, 187, 51, 84, 105, 199, 188, 86, 68, 12, 23, 184,
113, 215, 223, 30, 241, 29, 191, 5, 109, 79, 140, 130, 185, 249, 35,
147, 88, 7, 155, 1, 105, 169, 5, 228, 9, 186, 104, 166, 78, 221,
21, 133, 213, 44, 78, 143, 4, 179, 173, 111, 233, 151, 110, 187, 71,
116, 92, 199, 172, 99, 216, 111, 222, 115, 37, 197, 136, 212, 139, 153,
101, 19, 98, 63, 182, 217, 190, 65, 69, 148, 1, 197, 49, 193, 40,
176, 14, 154, 185, 135, 247, 235, 152, 15, 182, 77, 19, 186, 129, 127,
78, 31, 159, 102, 87, 105, 125, 244, 189, 18, 118, 131, 249, 36, 236,
12, 163, 88, 209, 175, 120, 185, 198, 24, 207, 228, 208, 113, 74, 13,
255, 244, 254, 84, 180, 39, 113, 9, 34, 153, 87, 68, 11, 106, 91,
7, 174, 105, 168, 52, 255, 225, 216, 27, 244, 100, 227, 228, 151, 90,
21, 126, 195, 59, 185, 63, 92, 2, 194, 178, 52, 62, 57, 107, 101,
26, 208, 70, 20, 48, 16, 180, 72, 70, 37, 222, 18, 220, 219, 197,
92, 234, 58, 152, 241, 77, 140, 189, 22, 252, 147, 198, 45, 87, 23,
91, 114, 46, 40, 59, 244, 75, 51, 61, 49, 114, 110, 170, 61, 99,
250, 126, 101, 48, 7, 78, 210, 95, 212, 117, 166, 17, 24, 105, 96,
16, 64, 195, 229, 46, 163, 46, 30, 34, 104, 8, 130, 68, 56, 144,
51, 73, 191, 85, 191, 107, 185, 230, 153, 227, 175, 79, 176, 165, 204,
225, 64, 180, 33, 27, 151, 120, 196, 103, 241, 33, 176, 163, 16, 58,
209, 91, 112, 191, 231, 24, 222, 94, 6, 17, 237, 115, 72, 77, 160,
136, 156, 201, 100, 73, 148, 138, 200, 224, 0, 175, 237, 198, 143, 92,
179, 11, 160, 162, 70, 99, 123, 7, 244, 238, 128, 154, 237, 171, 201,
83, 111, 209, 158, 104, 238, 141, 99, 99, 244, 54, 24, 252, 170, 83,
230, 136, 53, 72, 205, 206, 247, 56, 192, 88, 23, 163, 176, 74, 227,
34, 2, 159, 94, 15, 39, 157, 115, 5, 97, 201, 128, 58, 63, 133,
78, 3, 65, 78, 220, 207, 1, 100, 168, 122, 34, 54, 103, 20, 123,
49, 146, 91, 8, 232, 185, 17, 243, 69, 213, 121, 132, 68, 5, 205,
60, 176, 191, 116, 219, 115, 7, 10, 32, 214, 81, 92, 195, 108, 242,
155, 75, 162, 39, 44, 9, 18, 60, 185, 38, 126, 32, 246, 37, 44,
119, 63, 55, 239, 101, 122, 34, 245, 245, 211, 127, 166, 165, 121, 57,
213, 174, 71, 41, 210, 53, 201, 84, 12, 195, 213, 80, 223, 16, 231,
225, 172, 163, 189, 0, 152, 255, 166, 229, 36, 96, 144, 54, 124, 12,
133, 99, 226, 147, 165, 136, 252, 99, 81, 173, 254, 143, 56, 95, 28,
62, 93, 229, 140, 223, 66, 50, 79, 216, 151, 210, 120, 147, 169, 177,
247, 8, 21, 76, 153, 4, 172, 88, 234, 236, 218, 143, 216, 251, 34,
68, 20, 180, 176, 130, 124, 77, 18, 212, 226, 157, 147, 102, 14, 230,
156, 93, 211, 184, 248, 36, 217, 37, 32, 176, 22, 157, 85, 96, 18,
122, 88, 230, 183, 216, 0, 189, 209, 228, 84, 51, 112, 203, 8, 139,
172, 123, 222, 134, 98, 227, 140, 66, 239, 176, 128, 97, 58, 174, 169,
107, 137, 131, 169, 163, 59, 229, 88, 253, 76, 161, 163, 181, 188, 235,
126, 130, 110, 173, 113, 169, 68, 33, 37, 66, 71, 138, 131, 69, 110,
84, 196, 253, 251, 128, 79, 251, 31, 192, 140, 55, 64, 46, 170, 28,
86, 244, 240, 186, 45, 71, 83, 168, 126, 74, 144, 155, 120, 215, 47,
120, 107, 225, 249, 146, 225, 111, 88, 176, 247, 252, 53, 134, 2, 168,
251, 251, 41, 162, 5, 110, 244, 212, 51, 113, 215, 165, 227, 6, 248,
122, 102, 229, 26, 130, 223, 140, 173, 230, 133, 110, 86, 215, 227, 98,
72, 40, 107, 85, 207, 53, 241, 84, 74, 149, 138, 161, 171, 190, 131,
69, 0, 239, 222, 219, 82, 39, 5, 122, 238, 119, 22, 209, 2, 167,
175, 52, 162, 254, 193, 22, 68, 137, 79, 177, 228, 145, 155, 118, 110,
183, 182, 129, 252, 26, 41, 29, 244, 226, 113, 240, 245, 121, 86, 4,
97, 165, 184, 182, 116, 136, 67, 136, 41, 229, 87, 39, 218, 108, 86,
35, 6, 64, 209, 106, 38, 215, 37, 0, 91, 51, 223, 150, 127, 138,
67, 137, 17, 205, 47, 211, 141, 178, 105, 198, 183, 98, 112, 132, 125,
75, 27, 153, 184, 162, 76, 61, 214, 30, 24, 13, 110, 52, 14, 179,
169, 29, 255, 108, 32, 24, 60, 158, 229, 135, 219, 17, 188, 153, 91,
176, 113, 97, 35, 98, 156, 202, 55, 143, 76, 226, 17, 235, 246, 166,
19, 182, 59, 216, 180, 36, 51, 194, 4, 60, 76, 155, 1, 69, 80,
252, 46, 149, 65, 170, 251, 60, 227, 146, 174, 33, 229, 2, 182, 189,
23, 175, 99, 199, 37, 143, 11, 68, 12, 189, 92, 167, 101, 12, 133,
233, 189, 104, 219, 113, 54, 213, 56, 79, 62, 97, 54, 238, 117, 106,
105, 53, 46, 11, 177, 56, 204, 38, 206, 76, 50, 149, 18, 110, 164,
110, 4, 221, 100, 210, 41, 244, 59, 187, 34, 183, 236, 221, 136, 249,
51, 136, 74, 153, 247, 11, 12, 224, 174, 247, 229, 75, 95, 198, 133,
105, 68, 203, 95, 95, 157, 188, 36, 94, 118, 69, 71, 254, 14, 177,
100, 46, 242, 161, 171, 205, 207, 38, 110, 132, 58, 174, 85, 199, 32,
12, 138, 255, 79, 161, 218, 202, 232, 155, 111, 96, 189, 91, 166, 247,
117, 105, 184, 213, 147, 188, 170, 204, 84, 60, 133, 222, 36, 28, 182,
244, 133, 97, 82, 251, 248, 169, 198, 101, 75, 166, 215, 111, 127, 46,
91, 51, 26, 31, 252, 231, 251, 98, 159, 60, 4, 60, 63, 30, 213,
213, 162, 33, 142, 195, 176, 226, 159, 109, 238, 214, 249, 84, 153, 94,
112, 245, 209, 192, 103, 230, 206, 107, 80, 80, 168, 28, 164, 3, 217,
147, 43, 200, 6, 23, 164, 114, 123, 233, 152, 162, 190, 136, 247, 164,
38, 71, 163, 113, 232, 203, 106, 245, 123, 13, 85, 2, 72, 35, 48,
133, 253, 112, 69, 238, 32, 193, 90, 239, 197, 12, 104, 157, 11, 117,
192, 230, 159, 191, 125, 47, 156, 167, 101, 30, 205, 103, 170, 103, 75,
123, 204, 63, 158, 32, 36, 145, 39, 151, 182, 228, 45, 209, 23, 232,
97, 189, 82, 43, 199, 242, 183, 15, 81, 233, 106, 133, 183, 127, 228,
113, 88, 249, 255, 98, 238, 46, 99, 251, 22, 14, 31, 210, 218, 135,
97, 237, 159, 134, 73, 92, 169, 140, 88, 50, 175, 54, 187, 4, 112,
21, 231, 96, 40, 99, 229, 183, 107, 46, 232, 100, 149, 16, 10, 113,
162, 188, 180, 199, 95, 134, 112, 172, 157, 105, 8, 8, 45, 135, 56,
107, 54, 239, 159, 66, 98, 174, 67, 126, 251, 110, 176, 90, 37, 192,
22, 132, 65, 217, 222, 238, 239, 163, 239, 3, 54, 222, 132, 3, 218,
157, 21, 144, 63, 227, 93, 174, 237, 137, 150, 38, 252, 183, 7, 209,
112, 75, 204, 50, 190, 12, 33, 233, 125, 164, 66, 7, 237, 222, 234,
252, 213, 74, 171, 244, 196, 135, 55, 41, 25, 251, 99, 240, 197, 111,
70, 113, 129, 57, 43, 197, 59, 24, 149, 43, 245, 238, 98, 134, 226,
184, 139, 180, 127, 182, 155, 129, 23, 19, 191, 213, 116, 19, 79, 230,
84, 206, 224, 136, 77, 17, 195, 251, 79, 36, 13, 18, 169, 76, 80,
81, 166, 197, 170, 94, 108, 30, 58, 234, 25, 4, 73, 222, 3, 45,
87, 223, 117, 117, 242, 53, 245, 202, 104, 21, 99, 181, 16, 17, 73,
38, 160, 68, 4, 186, 25, 210, 77, 214, 226, 32, 250, 26, 78, 209,
106, 96, 177, 54, 248, 95, 114, 145, 135, 162, 151, 54, 34, 202, 225,
238, 71, 7, 131, 246, 14, 221, 22, 43, 78, 176, 185, 135, 219, 97,
100, 177, 112, 48, 7, 238, 93, 23, 247, 182, 194, 150, 236, 237, 127,
134, 162, 30, 149, 166, 142, 201, 51, 81, 44, 239, 52, 36, 58, 245,
156, 154, 173, 95, 33, 133, 83, 44, 127, 106, 28, 252, 130, 245, 18,
7, 175, 147, 252, 252, 174, 56, 59, 29, 53, 120, 37, 139, 186, 213,
6, 90, 4, 206, 103, 118, 32, 53, 250, 84, 73, 17, 76, 28, 156,
166, 96, 146, 157, 137, 33, 56, 165, 184, 245, 254, 105, 243, 38, 74,
73, 114, 147, 133, 100, 46, 151, 203, 10, 255, 235, 154, 11, 175, 47,
169, 233, 89, 204, 73, 2, 73, 37, 244, 250, 43, 23, 57, 244, 7,
236, 182, 58, 51, 163, 244, 12, 200, 91, 128, 218, 196, 188, 160, 128,
214, 171, 253, 12, 194, 155, 6, 24, 218, 96, 211, 166, 37, 134, 125,
219, 237, 41, 112, 87, 21, 51, 1, 9, 143, 165, 213, 131, 43, 195,
147, 218, 87, 191, 107, 68, 116, 195, 238, 76, 222, 124, 216, 60, 237,
55, 225, 102, 47, 111, 243, 153, 154, 122, 101, 87, 197, 188, 160, 237,
76, 45, 41, 85, 64, 30, 99, 252, 209, 195, 113, 210, 150, 150, 64,
167, 205, 8, 75, 130, 181, 66, 32, 155, 221, 98, 218, 126, 97, 54,
80, 13, 213, 6, 26, 142, 109, 23, 4, 57, 144, 148, 23, 83, 0,
237, 136, 133, 133, 125, 102, 11, 68, 211, 74, 2, 101, 155, 13, 144,
27, 116, 186, 85, 191, 188, 42, 251, 184, 10, 217, 147, 230, 132, 37,
246, 139, 251, 232, 91, 225, 180, 29, 89, 201, 20, 155, 166, 250, 54,
211, 226, 6, 109, 39, 58, 180, 221, 159, 148, 72, 56, 161, 100, 23,
248, 23, 61, 201, 235, 44, 157, 192, 155, 176, 199, 251, 248, 45, 80,
157, 27, 135, 169, 68, 230, 67, 202, 3, 223, 50, 197, 118, 191, 197,
69, 158, 190, 146, 225, 139, 158, 100, 47, 119, 204, 205, 54, 149, 105,
169, 163, 174, 52, 92, 120, 212, 170, 175, 213, 113, 92, 235, 25, 213,
28, 87, 242, 91, 84, 252, 203, 231, 2, 0, 88, 184, 159, 146, 216,
195, 109, 214, 151, 181, 54, 175, 172, 220, 47, 153, 95, 139, 234, 220,
144, 40, 153, 41, 217, 7, 121, 113, 126, 212, 85, 233, 144, 180, 108,
5, 73, 210, 163, 163, 206, 100, 226, 117, 189, 76, 232, 246, 254, 187,
56, 203, 111, 94, 202, 229, 63, 87, 24, 203, 30, 72, 119, 157, 223,
18, 163, 139, 156, 64, 77, 75, 39, 161, 229, 83, 14, 24, 114, 197,
180, 213, 7, 222, 33, 190, 47, 67, 111, 32, 177, 207, 18, 3, 151,
122, 205, 52, 188, 101, 13, 132, 214, 193, 217, 133, 23, 223, 211, 69,
156, 146, 91, 162, 187, 191, 107, 8, 211, 107, 194, 71, 232, 142, 74,
192, 13, 84, 118, 16, 24, 71, 176, 21, 114, 102, 100, 93, 85, 106,
146, 30, 241, 157, 193, 118, 143, 227, 103, 213, 127, 137, 199, 101, 9,
14, 126, 175, 12, 166, 59, 61, 57, 201, 93, 214, 235, 4, 116, 191,
170, 250, 162, 239, 29, 91, 183, 158, 182, 19, 187, 48, 59, 25, 20,
173, 58, 215, 16, 181, 3, 62, 114, 245, 105, 29, 115, 79, 158, 225,
205, 117, 207, 117, 151, 23, 200, 53, 183, 78, 121, 18, 0, 183, 230,
249, 241, 227, 254, 229, 7, 175, 39, 119, 3, 69, 251, 189, 138, 197,
15, 225, 130, 195, 210, 163, 16, 125, 121, 171, 110, 62, 17, 97, 253,
119, 160, 120, 204, 140, 60, 211, 117, 127, 64, 109, 178, 202, 247, 234,
234, 14, 104, 42, 44, 251, 211, 67, 50, 221, 254, 187, 51, 62, 41,
143, 255, 188, 198, 28, 146, 199, 47, 44, 233, 156, 113, 248, 216, 170,
185, 27, 83, 146, 20, 160, 238, 201, 208, 49, 191, 0, 207, 103, 198,
97, 14, 218, 178, 32, 213, 180, 214, 71, 150, 173, 148, 85, 2, 110,
20, 14, 22, 172, 144, 74, 91, 227, 44, 82, 61, 134, 92, 176, 78,
222, 41, 87, 144, 233, 135, 57, 32, 211, 40, 247, 209, 170, 30, 47,
63, 49, 24, 35, 117, 78, 88, 253, 29, 50, 19, 63, 220, 205, 42,
211, 204, 117, 29, 150, 207, 177, 229, 173, 224, 111, 96, 103, 102, 229,
135, 8, 84, 139, 138, 201, 142, 124, 104, 61, 148, 116, 115, 194, 148,
162, 178, 193, 156, 33, 206, 207, 62, 238, 78, 174, 148, 219, 253, 49,
115, 40, 92, 216, 97, 123, 14, 129, 125, 222, 83, 111, 76, 127, 72,
94, 20, 38, 2, 152, 136, 103, 141, 209, 191, 210, 98, 162, 28, 172,
57, 113, 221, 67, 147, 191, 146, 190, 140, 115, 230, 30, 238, 100, 44,
4, 151, 228, 78, 214, 133, 120, 95, 73, 64, 244, 255, 159, 216, 135,
45, 7, 191, 225, 143, 228, 114, 244, 131, 172, 139, 235, 52, 179, 245,
14, 161, 21, 47, 144, 89, 35, 179, 37, 151, 98, 212, 65, 8, 68,
64, 186, 35, 178, 15, 208, 223, 163, 160, 165, 241, 45, 58, 77, 116,
158, 44, 14, 250, 94, 34, 142, 72, 192, 66, 124, 59, 138, 51, 36,
205, 169, 182, 241, 220, 215, 49, 84, 0, 139, 227, 224, 43, 194, 223,
215, 5, 205, 238, 178, 211, 215, 23, 211, 153, 250, 103, 221, 97, 96,
187, 99, 51, 57, 116, 68, 187, 247, 17, 202, 193, 197, 55, 94, 50,
97, 68, 187, 230, 236, 13, 38, 54, 73, 245, 144, 41, 147, 102, 103,
38, 125, 190, 201, 174, 111, 203, 227, 142, 188, 177, 253, 128, 165, 125,
11, 129, 242, 239, 238, 219, 12, 26, 41, 152, 219, 203, 216, 103, 253,
216, 94, 230, 18, 244, 157, 146, 30, 185, 17, 189, 245, 64, 159, 27,
50, 166, 142, 110, 175, 175, 47, 187, 54, 127, 27, 149, 20, 185, 193,
8, 223, 195, 167, 5, 87, 179, 18, 75, 187, 116, 54, 172, 182, 254,
129, 11, 253, 117, 3, 131, 14, 115, 17, 175, 7, 4, 109, 162, 111,
245, 204, 182, 147, 43, 104, 187, 169, 19, 71, 102, 55, 242, 119, 150,
42, 102, 244, 98, 65, 118, 128, 110, 200, 64, 42, 175, 79, 16, 184,
251, 49, 142, 204, 255, 147, 141, 163, 247, 181, 111, 25, 86, 166, 195,
62, 227, 48, 115, 153, 122, 151, 95, 242, 22, 243, 105, 163, 182, 96,
75, 97, 43, 215, 56, 175, 140, 228, 116, 176, 253, 193, 45, 119, 16,
192, 55, 221, 233, 187, 78, 127, 20, 143, 151, 220, 101, 9, 214, 252,
9, 89, 33, 254, 159, 169, 117, 37, 86, 130, 201, 129, 211, 9, 218,
151, 123, 3, 52, 159, 229, 60, 147, 22, 115, 179, 45, 240, 97, 17,
95, 33, 137, 165, 89, 9, 177, 174, 209, 238, 59, 116, 100, 163, 189,
120, 185, 243, 107, 150, 59, 199, 4, 107, 123, 10, 156, 169, 102, 21,
90, 86, 180, 125, 243, 186, 13, 22, 39, 170, 61, 182, 133, 164, 156,
97, 8, 246, 184, 107, 164, 151, 163, 184, 51, 248, 182, 218, 32, 17,
121, 145, 112, 54, 222, 231, 239, 63, 66, 98, 210, 100, 203, 167, 113,
30, 134, 229, 85, 15, 122, 85, 207, 36, 53, 155, 190, 5, 116, 204,
46, 141, 115, 44, 240, 209, 125, 2, 149, 157, 215, 189, 181, 68, 230,
237, 35, 58, 36, 74, 225, 142, 132, 146, 241, 242, 125, 26, 71, 1,
38, 57, 23, 124, 213, 123, 216, 112, 73, 72, 74, 82, 90, 28, 193,
167, 75, 137, 114, 253, 121, 212, 0, 119, 37, 211, 195, 161, 115, 154,
230, 121, 180, 14, 242, 171, 111, 30, 206, 165, 74, 44, 147, 44, 206,
224, 156, 200, 135, 241, 86, 77, 22, 220, 188, 86, 114, 22, 237, 47,
181, 86, 175, 157, 84, 164, 251, 129, 21, 232, 231, 123, 63, 17, 118,
32, 211, 153, 146, 237, 189, 169, 34, 12, 249, 190, 249, 123, 55, 185,
148, 134, 28, 1, 164, 31, 93, 130, 80, 185, 81, 106, 15, 212, 167,
144, 163, 155, 195, 47, 78, 25, 206, 7, 174, 66, 197, 192, 112, 238,
253, 65, 251, 168, 71, 131, 239, 91, 7, 178, 95, 53, 201, 7, 250,
128, 127, 107, 156, 221, 116, 210, 205, 19, 46, 223, 99, 46, 171, 24,
136, 93, 183, 172, 171, 60, 27, 88, 78, 209, 37, 250, 242, 188, 245,
112, 73, 179, 252, 158, 49, 10, 74, 139, 18, 245, 110, 104, 154, 174,
93, 10, 68, 15, 173, 53, 3, 133, 24, 154, 246, 138, 8, 126, 153,
199, 138, 80, 131, 136, 134, 241, 216, 106, 26, 136, 221, 125, 116, 142,
57, 91, 126, 106, 39, 130, 101, 182, 141, 224, 34, 190, 31, 204, 94,
212, 145, 189, 83, 93, 221, 211, 195, 127, 94, 254, 20, 60, 98, 98,
168, 147, 63, 3, 56, 226, 233, 112, 166, 180, 227, 248, 17, 177, 172,
6, 241, 240, 52, 158, 109, 25, 124, 55, 134, 99, 254, 228, 120, 201,
62, 60, 186, 164, 24, 184, 116, 44, 138, 54, 216, 153, 24, 101, 224,
224, 58, 156, 56, 159, 135, 91, 97, 151, 90, 154, 100, 144, 171, 2,
251, 53, 133, 44, 149, 7, 228, 88, 44, 62, 82, 185, 99, 135, 80,
218, 193, 32, 102, 153, 204, 48, 49, 138, 249, 243, 155, 167, 90, 154,
33, 192, 106, 63, 252, 105, 187, 91, 86, 109, 156, 51, 98, 0, 251,
211, 79, 179, 54, 136, 236, 30, 3, 57, 135, 2, 4, 253, 136, 234,
35, 237, 121, 29, 93, 194, 43, 3, 59, 110, 71, 58, 223, 102, 176,
1, 244, 97, 159, 121, 179, 66, 156, 102, 230, 251, 184, 92, 60, 12,
225, 140, 65, 174, 102, 167, 70, 102, 133, 240, 195, 83, 200, 196, 238,
245, 241, 139, 221, 127, 94, 36, 158, 176, 126, 83, 73, 46, 5, 7,
76, 19, 47, 86, 39, 104, 161, 226, 169, 145, 59, 167, 24, 3, 2,
199, 68, 179, 65, 236, 16, 182, 116, 64, 160, 125, 143, 195, 249, 198,
108, 129, 109, 57, 25, 206, 86, 102, 243, 26, 43, 226, 12, 201, 154,
252, 92, 22, 229, 205, 45, 107, 200, 54, 28, 255, 80, 4, 166, 3,
69, 179, 189, 89, 152, 244, 145, 224, 55, 52, 121, 87, 164, 92, 208,
104, 179, 224, 3, 186, 178, 121, 144, 209, 115, 157, 96, 220, 13, 198,
236, 65, 187, 150, 251, 79, 166, 254, 51, 212, 160, 42, 64, 110, 130,
204, 36, 69, 167, 241, 66, 32, 41, 32, 73, 61, 21, 250, 235, 99,
157, 48, 85, 217, 21, 126, 235, 145, 113, 45, 56, 206, 53, 14, 20,
106, 38, 71, 71, 108, 78, 249, 245, 159, 244, 162, 65, 165, 224, 111,
16, 26, 182, 229, 137, 57, 99, 242, 51, 138, 85, 236, 11, 66, 187,
254, 146, 218, 1, 96, 190, 160, 88, 183, 117, 2, 226, 139, 175, 21,
94, 23, 38, 57, 73, 171, 255, 91, 218, 232, 113, 99, 139, 26, 31,
174, 76, 128, 92, 183, 28, 96, 18, 24, 4, 193, 126, 84, 193, 185,
30, 189, 67, 209, 215, 43, 131, 123, 8, 225, 221, 117, 69, 61, 82,
247, 35, 87, 186, 89, 36, 0, 148, 144, 29, 190, 86, 203, 248, 249,
150, 85, 21, 43, 82, 167, 245, 30, 77, 0, 168, 39, 250, 21, 76,
26, 90, 130, 72, 95, 112, 34, 124, 74, 55, 22, 54, 69, 207, 92,
142, 33, 58, 17, 85, 130, 30, 183, 214, 204, 202, 87, 28, 10, 16,
1, 218, 240, 106, 46, 246, 114, 189, 24, 170, 250, 139, 144, 133, 196,
18, 216, 72, 63, 156, 121, 132, 147, 130, 111, 44, 108, 150, 227, 242,
56, 160, 86, 13, 135, 177, 23, 213, 33, 113, 67, 82, 67, 72, 174,
216, 107, 134, 118, 169, 113, 88, 208, 82, 221, 71, 101, 102, 32, 127,
78, 114, 9, 222, 58, 5, 209, 132, 163, 243, 125, 243, 58, 229, 36,
185, 142, 175, 112, 247, 52, 120, 11, 22, 16, 4, 90, 166, 117, 183,
128, 70, 122, 94, 115, 227, 36, 182, 0, 231, 3, 145, 163, 58, 152,
98, 191, 62, 107, 136, 250, 216, 39, 30, 187, 138, 43, 202, 247, 75,
107, 121, 87, 46, 242, 22, 66, 77, 201, 130, 143, 167, 64, 203, 219,
210, 63, 190, 145, 215, 201, 23, 124, 99, 51, 193, 14, 165, 118, 26,
68, 96, 34, 59, 2, 166, 179, 202, 128, 202, 69, 167, 2, 14, 180,
250, 141, 4, 219, 215, 156, 206, 249, 251, 236, 140, 230, 122, 42, 12,
163, 45, 245, 216, 112, 233, 192, 128, 0, 125, 51, 133, 235, 63, 119,
46, 94, 16, 252, 217, 11, 110, 242, 239, 163, 32, 159, 249, 19, 242,
248, 67, 26, 79, 31, 63, 16, 213, 209, 56, 170, 228, 160, 106, 179,
146, 224, 143, 23, 229, 160, 202, 204, 228, 200, 57, 156, 123, 12, 175,
229, 97, 137, 137, 130, 104, 49, 58, 62, 66, 175, 113, 217, 164, 193,
196, 165, 173, 240, 123, 179, 147, 121, 165, 121, 129, 74, 183, 124, 160,
89, 246, 229, 125, 163, 160, 103, 225, 69, 35, 182, 86, 37, 105, 32,
9, 28, 176, 4, 132, 151, 104, 77, 182, 42, 231, 156, 215, 214, 134,
39, 37, 94, 203, 145, 32, 251, 72, 243, 75, 161, 133, 207, 208, 221,
79, 192, 25, 21, 239, 156, 111, 217, 183, 238, 65, 167, 83, 127, 77,
83, 17, 77, 244, 179, 85, 93, 217, 29, 224, 202, 158, 58, 228, 158,
241, 159, 32, 183, 61, 112, 57, 13, 167, 23, 36, 167, 114, 132, 84,
172, 247, 72, 106, 115, 51, 170, 94, 151, 28, 157, 214, 204, 13, 1,
7, 93, 237, 56, 156, 93, 183, 218, 206, 255, 90, 128, 72, 158, 15,
198, 219, 219, 242, 95, 206, 11, 175, 34, 247, 217, 167, 204, 169, 132,
199, 241, 233, 73, 222, 192, 113, 225, 6, 164, 39, 187, 188, 51, 209,
17, 80, 90, 206, 0, 226, 19, 119, 165, 95, 109, 8, 161, 101, 77,
192, 94, 154, 220, 108, 63, 53, 18, 217, 236, 193, 106, 243, 112, 69,
181, 105, 93, 99, 108, 123, 133, 167, 51, 99, 41, 149, 205, 255, 253,
214, 26, 211, 114, 107, 225, 205, 23, 197, 220, 28, 27, 183, 170, 88,
103, 119, 87, 21, 15, 37, 245, 163, 231, 65, 171, 97, 91, 42, 120,
89, 30, 138, 24, 201, 27, 78, 98, 10, 40, 85, 17, 29, 173, 28,
46, 217, 118, 160, 173, 91, 25, 193, 56, 150, 9, 130, 12, 28, 77,
181, 245, 121, 252, 123, 172, 205, 76, 129, 113, 141, 9, 47, 24, 182,
169, 228, 49, 60, 19, 194, 36, 142, 51, 4, 56, 92, 120, 190, 177,
16, 187, 240, 16, 33, 227, 170, 102, 86, 95, 215, 88, 135, 6, 174,
12, 29, 211, 155, 91, 202, 6, 68, 62, 29, 9, 25, 14, 83, 128,
184, 41, 174, 5, 224, 27, 80, 180, 187, 78, 93, 114, 8, 56, 43,
9, 127, 75, 109, 47, 65, 163, 128, 130, 128, 79, 211, 4, 6, 99,
192, 41, 73, 231, 80, 123, 86, 171, 188, 70, 15, 101, 156, 224, 203,
229, 141, 92, 172, 201, 130, 43, 174, 241, 193, 219, 115, 87, 190, 49,
55, 16, 38, 32, 29, 41, 27, 17, 218, 246, 9, 4, 176, 228, 209,
121, 162, 117, 242, 162, 103, 175, 119, 50, 1, 226, 100, 134, 14, 47,
30, 83, 204, 60, 136, 104, 54, 167, 193, 33, 59, 165, 86, 125, 1,
47, 136, 197, 20, 159, 238, 14, 105, 189, 97, 3, 21, 157, 144, 247,
2, 26, 161, 28, 7, 153, 140, 16, 51, 25, 113, 60, 187, 193, 47,
116, 67, 13, 29, 251, 3, 165, 113, 213, 187, 57, 19, 161, 177, 169,
192, 204, 119, 239, 232, 209, 10, 242, 27, 1, 1, 198, 44, 111, 89,
187, 135, 172, 231, 149, 3, 179, 54, 65, 77, 125, 120, 222, 157, 158,
61, 44, 42, 148, 111, 197, 185, 111, 240, 35, 134, 124, 168, 11, 58,
192, 24, 250, 51, 24, 91, 228, 206, 12, 32, 179, 160, 254, 57, 221,
124, 153, 124, 153, 147, 50, 60, 213, 123, 202, 139, 229, 32, 57, 19,
88, 182, 222, 39, 149, 76, 206, 154, 155, 44, 34, 167, 130, 111, 180,
32, 113, 218, 247, 16, 36, 15, 86, 180, 236, 204, 73, 123, 165, 19,
28, 123, 153, 156, 228, 51, 81, 138, 62, 49, 155, 11, 95, 66, 185,
18, 158, 240, 234, 5, 134, 131, 54, 225, 244, 203, 73, 11, 150, 69,
236, 244, 160, 10, 9, 88, 225, 68, 22, 199, 168, 73, 137, 181, 23,
231, 170, 217, 140, 252, 107, 155, 6, 240, 99, 144, 109, 224, 162, 37,
161, 75, 173, 169, 144, 9, 220, 247, 25, 73, 16, 142, 179, 245, 127,
150, 181, 169, 84, 83, 72, 52, 41, 65, 159, 153, 139, 180, 124, 201,
49, 128, 177, 176, 59, 207, 93, 214, 120, 26, 138, 157, 206, 171, 63,
226, 28, 91, 244, 39, 20, 253, 179, 40, 77, 254, 220, 136, 143, 138,
73, 142, 0, 189, 253, 211, 98, 49, 67, 71, 27, 244, 105, 15, 127,
28, 166, 238, 95, 93, 147, 30, 185, 207, 131, 1, 52, 50, 199, 15,
140, 173, 14, 93, 187, 108, 22, 30, 125, 83, 223, 73, 221, 28, 113,
21, 243, 74, 205, 198, 144, 248, 240, 5, 0, 157, 75, 85, 171, 154,
193, 152, 17, 71, 130, 94, 124, 177, 241, 26, 188, 193, 131, 90, 15,
229, 57, 53, 17, 203, 121, 34, 147, 76, 44, 189, 162, 2, 96, 189,
195, 200, 214, 205, 48, 105, 16, 221, 220, 39, 118, 131, 77, 6, 138,
226, 181, 213, 75, 66, 29, 245, 63, 247, 170, 96, 44, 18, 156, 130,
75, 66, 135, 212, 80, 153, 212, 58, 137, 129, 228, 26, 252, 144, 138,
198, 208, 74, 195, 5, 21, 54, 67, 192, 84, 111, 35, 146, 232, 209,
128, 213, 83, 177, 228, 62, 168, 2, 47, 102, 189, 224, 157, 205, 2,
227, 156, 97, 36, 49, 92, 114, 171, 33, 64, 141, 38, 199, 144, 206,
102, 86, 104, 117, 214, 140, 166, 215, 114, 83, 11, 4, 143, 126, 78,
76, 105, 225, 86, 221, 114, 0, 116, 83, 224, 139, 204, 21, 115, 153,
138, 246, 99, 192, 4, 128, 197, 137, 22, 19, 73, 246, 68, 140, 187,
91, 208, 30, 230, 254, 63, 189, 61, 82, 10, 105, 1, 113, 140, 53,
167, 18, 122, 87, 223, 140, 145, 78, 14, 3, 221, 192, 73, 236, 8,
97, 80, 206, 244, 174, 73, 216, 68, 92, 81, 190, 32, 211, 37, 126,
158, 129, 107, 128, 169, 39, 134, 208, 197, 64, 103, 181, 119, 101, 4,
245, 174, 50, 154, 198, 209, 250, 29, 126, 247, 195, 144, 215, 116, 161,
97, 57, 223, 66, 91, 106, 67, 102, 63, 156, 184, 172, 216, 228, 38,
64, 12, 12, 32, 2, 37, 104, 245, 211, 80, 141, 27, 87, 123, 121,
238, 253, 223, 144, 106, 25, 10, 201, 167, 221, 192, 170, 163, 191, 167,
244, 189, 204, 112, 193, 203, 17, 76, 83, 148, 164, 242, 250, 129, 18,
200, 68, 242, 18, 225, 144, 61, 201, 235, 222, 91, 72, 199, 255, 101,
29, 14, 173, 34, 212, 155, 99, 148, 187, 18, 37, 140, 21, 217, 200,
231, 23, 26, 5, 160, 7, 78, 94, 40, 57, 111, 27, 19, 141, 199,
119, 0, 183, 103, 31, 213, 76, 102, 75, 183, 174, 59, 80, 202, 208,
106, 250, 248, 1, 126, 125, 196, 181, 111, 149, 90, 22, 103, 170, 206,
181, 239, 195, 70, 56, 38, 117, 77, 90, 63, 93, 46, 199, 124, 127,
146, 55, 44, 100, 177, 45, 71, 92, 1, 94, 166, 66, 233, 149, 225,
193, 176, 118, 245, 41, 185, 163, 129, 178, 223, 186, 70, 54, 142, 129,
213, 178, 226, 187, 205, 0, 103, 158, 142, 255, 178, 110, 171, 56, 13,
23, 234, 102, 193, 61, 138, 110, 76, 239, 242, 139, 197, 57, 116, 141,
213, 61, 165, 98, 148, 14, 151, 243, 10, 83, 65, 9, 196, 80, 51,
9, 131, 104, 95, 77, 142, 115, 217, 122, 48, 75, 10, 105, 230, 147,
68, 147, 240, 6, 61, 131, 189, 78, 171, 127, 168, 12, 68, 80, 1,
222, 232, 201, 3, 18, 31, 190, 80, 52, 43, 39, 187, 235, 217, 175,
106, 25, 235, 63, 205, 106, 15, 93, 82, 213, 119, 175, 153, 35, 242,
39, 2, 30, 146, 157, 130, 165, 151, 163, 38, 204, 89, 19, 80, 37,
251, 104, 153, 251, 138, 48, 30, 202, 60, 134, 66, 193, 192, 15, 17,
84, 118, 165, 170, 15, 99, 167, 212, 227, 93, 219, 217, 139, 93, 136,
4, 149, 212, 78, 159, 191, 91, 58, 139, 88, 114, 224, 109, 228, 195,
251, 2, 1, 200, 102, 178, 199, 49, 7, 253, 66, 99, 77, 122, 249,
100, 184, 119, 221, 12, 59, 249, 241, 225, 72, 1, 196, 233, 247, 87,
58, 10, 58, 222, 91, 203, 158, 184, 188, 163, 92, 130, 43, 115, 237,
133, 56, 240, 69, 221, 112, 242, 64, 38, 33, 109, 91, 186, 251, 52,
66, 32, 39, 173, 47, 29, 170, 47, 119, 158, 81, 30, 18, 196, 6,
207, 212, 254, 73, 135, 94, 217, 27, 242, 179, 113, 26, 121, 61, 253,
35, 156, 61, 207, 82, 94, 226, 136, 167, 126, 45, 172, 248, 151, 168,
154, 132, 31, 67, 104, 111, 4, 234, 117, 160, 229, 181, 7, 28, 36,
115, 202, 29, 145, 120, 228, 115, 23, 125, 128, 239, 99, 41, 17, 159,
88, 62, 166, 241, 218, 173, 77, 131, 182, 213, 142, 215, 62, 138, 161,
40, 113, 218, 73, 28, 53, 229, 128, 32, 174, 183, 95, 37, 223, 7,
188, 222, 222, 207, 131, 242, 6, 208, 174, 198, 9, 68, 113, 166, 38,
179, 67, 181, 61, 119, 8, 14, 79, 18, 27, 156, 129, 158, 90, 42,
227, 223, 73, 191, 77, 26, 18, 120, 78, 26, 89, 224, 186, 202, 184,
118, 232, 162, 76, 88, 35, 157, 244, 185, 194, 223, 208, 186, 150, 184,
157, 120, 143, 148, 239, 90, 10, 182, 145, 138, 214, 150, 213, 78, 189,
46, 78, 203, 210, 190, 190, 1, 12, 178, 87, 121, 222, 159, 96, 53,
60, 169, 131, 21, 71, 128, 175, 231, 71, 231, 125, 160, 0, 32, 162,
71, 70, 193, 136, 148, 128, 219, 11, 80, 182, 155, 32, 128, 60, 138,
228, 65, 19, 23, 234, 123, 89, 81, 33, 72, 84, 49, 156, 68, 180,
108, 62, 146, 73, 35, 188, 102, 228, 85, 147, 4, 116, 219, 76, 74,
1, 14, 59, 254, 56, 46, 53, 83, 202, 224, 135, 26, 239, 47, 104,
80, 36, 197, 182, 239, 197, 153, 162, 118, 56, 97, 69, 32, 41, 13,
30, 125, 191, 220, 62, 92, 206, 169, 49, 72, 250, 122, 42, 207, 15,
187, 170, 103, 253, 199, 236, 244, 89, 115, 99, 254, 133, 233, 120, 69,
212, 153, 53, 251, 143, 81, 99, 243, 242, 220, 198, 164, 163, 215, 178,
124, 236, 39, 91, 190, 254, 90, 83, 186, 168, 129, 252, 157, 214, 224,
223, 210, 98, 20, 27, 152, 233, 212, 228, 230, 178, 0, 148, 44, 106,
169, 175, 228, 187, 193, 50, 6, 0, 214, 194, 4, 182, 90, 107, 34,
157, 211, 251, 95, 31, 68, 51, 130, 242, 20, 24, 219, 131, 174, 220,
230, 146, 107, 87, 113, 192, 53, 68, 198, 247, 90, 215, 238, 191, 108,
241, 4, 30, 188, 179, 140, 14, 186, 19, 204, 54, 208, 37, 27, 62,
9, 111, 126, 139, 206, 185, 3, 182, 164, 123, 217, 204, 215, 231, 124,
8, 228, 53, 60, 114, 76, 35, 28, 158, 83, 228, 155, 151, 145, 242,
29, 162, 77, 95, 36, 191, 62, 197, 191, 195, 234, 10, 76, 222, 59,
132, 51, 173, 139, 83, 202, 203, 35, 147, 189, 112, 160, 198, 35, 122,
216, 112, 194, 88, 160, 138, 76, 144, 182, 110, 167, 117, 61, 240, 27,
183, 226, 94, 21, 251, 85, 55, 253, 22, 37, 146, 0, 144, 56, 11,
72, 228, 222, 183, 62, 229, 160, 183, 18, 224, 152, 142, 230, 140, 104,
34, 177, 62, 222, 190, 83, 188, 234, 67, 139, 142, 57, 146, 40, 218,
138, 77, 82, 155, 84, 27, 99, 75, 52, 169, 147, 83, 143, 218, 28,
150, 18, 52, 81, 214, 83, 127, 49, 44, 214, 67, 50, 192, 110, 220,
53, 107, 37, 43, 118, 125, 157, 3, 109, 149, 187, 202, 57, 58, 64,
186, 249, 20, 94, 16, 177, 79, 140, 36, 158, 104, 42, 228, 178, 207,
160, 240, 125, 50, 67, 251, 42, 255, 42, 128, 224, 135, 82, 108, 102,
139, 207, 220, 229, 77, 187, 133, 43, 29, 221, 208, 114, 229, 237, 162,
26, 124, 126, 235, 176, 52, 133, 194, 192, 175, 188, 73, 67, 25, 65,
231, 132, 115, 57, 128, 36, 114, 31, 53, 235, 170, 188, 55, 104, 93,
39, 43, 43, 32, 199, 123, 138, 221, 234, 147, 150, 203, 138, 15, 29,
49, 84, 136, 143, 154, 196, 77, 157, 130, 17, 71, 182, 5, 5, 184,
108, 239, 237, 149, 33, 32, 28, 213, 202, 185, 36, 20, 217, 231, 190,
116, 216, 219, 255, 20, 253, 101, 37, 226, 195, 254, 27, 32, 188, 227,
141, 137, 21, 224, 94, 11, 254, 112, 248, 16, 151, 91, 18, 57, 134,
53, 232, 130, 205, 178, 76, 5, 7, 231, 55, 157, 40, 144, 76, 218,
121, 193, 148, 11, 78, 183, 253, 254, 94, 129, 9, 4, 160, 140, 167,
73, 213, 133, 201, 5, 53, 100, 116, 253, 93, 63, 169, 17, 197, 186,
156, 11, 148, 185, 155, 49, 186, 189, 247, 7, 93, 142, 181, 132, 73,
153, 33, 140, 180, 150, 58, 23, 124, 93, 101, 92, 74, 94, 114, 187,
148, 209, 203, 216, 28, 57, 20, 136, 209, 197, 229, 119, 236, 153, 170,
148, 102, 15, 52, 128, 72, 233, 123, 239, 132, 46, 28, 248, 88, 232,
202, 103, 148, 205, 192, 108, 3, 207, 92, 65, 83, 73, 154, 222, 240,
229, 160, 32, 53, 117, 49, 46, 98, 83, 116, 164, 176, 16, 97, 69,
186, 171, 153, 46, 224, 133, 149, 155, 252, 18, 95, 102, 254, 39, 177,
120, 108, 228, 13, 64, 0, 244, 36, 99, 54, 138, 236, 75, 181, 53,
86, 137, 108, 216, 37, 73, 214, 157, 14, 216, 162, 155, 142, 114, 75,
34, 93, 239, 209, 250, 101, 244, 20, 114, 155, 77, 82, 39, 196, 249,
81, 221, 225, 7, 239, 246, 175, 57, 68, 144, 97, 177, 221, 98, 95,
81, 87, 189, 247, 107, 95, 255, 8, 16, 37, 80, 126, 41, 182, 184,
11, 127, 209, 15, 149, 4, 37, 18, 35, 165, 232, 185, 67, 179, 207,
239, 90, 154, 34, 108, 144, 181, 135, 47, 216, 219, 95, 198, 161, 39,
138, 114, 112, 177, 168, 214, 68, 142, 96, 80, 224, 65, 9, 108, 225,
113, 73, 10, 15, 196, 67, 62, 164, 81, 67, 116, 255, 131, 73, 9,
68, 81, 83, 110, 49, 113, 61, 235, 152, 245, 70, 208, 163, 98, 247,
90, 243, 83, 70, 195, 79, 134, 220, 132, 118, 217, 205, 162, 249, 145,
143, 110, 154, 159, 137, 66, 231, 91, 152, 239, 188, 219, 75, 67, 215,
145, 157, 29, 220, 139, 116, 65, 215, 117, 162, 112, 112, 34, 106, 19,
93, 237, 155, 74, 139, 243, 169, 111, 175, 117, 125, 253, 159, 179, 225,
52, 109, 211, 224, 34, 68, 187, 90, 114, 133, 197, 80, 211, 137, 70,
78, 6, 117, 94, 203, 158, 24, 145, 155, 138, 253, 239, 114, 6, 41,
120, 127, 186, 92, 17, 81, 162, 222, 176, 225, 135, 160, 24, 227, 41,
146, 249, 111, 112, 106, 236, 107, 103, 95, 1, 51, 106, 11, 25, 168,
171, 86, 74, 62, 253, 157, 244, 14, 191, 71, 78, 225, 149, 8, 25,
121, 252, 139, 44, 51, 43, 7, 167, 226, 21, 250, 50, 39, 36, 169,
152, 75, 209, 101, 2, 15, 192, 186, 166, 186, 239, 49, 225, 196, 53,
189, 187, 6, 137, 180, 147, 42, 75, 79, 203, 63, 151, 68, 5, 143,
94, 105, 161, 30, 103, 143, 251, 48, 142, 128, 214, 136, 150, 163, 88,
138, 224, 141, 220, 107, 136, 80, 14, 192, 236, 120, 61, 208, 34, 179,
238, 119, 231, 58, 190, 41, 40, 158, 199, 172, 173, 102, 54, 3, 76,
211, 104, 186, 248, 150, 169, 72, 83, 136, 141, 10, 189, 198, 108, 151,
206, 95, 24, 202, 213, 41, 159, 148, 121, 199, 137, 147, 68, 97, 233,
201, 249, 197, 101, 87, 142, 120, 90, 68, 191, 114, 141, 162, 154, 8,
224, 124, 243, 86, 226, 251, 75, 13, 230, 240, 249, 124, 81, 62, 135,
187, 98, 2, 157, 213, 98, 54, 28, 50, 18, 201, 175, 140, 153, 156,
214, 5, 0, 164, 5, 78, 160, 254, 124, 50, 153, 230, 72, 79, 74,
41, 192, 120, 130, 238, 213, 122, 192, 93, 50, 144, 205, 219, 75, 204,
30, 249, 180, 246, 20, 213, 152, 160, 82, 180, 185, 69, 59, 176, 215,
152, 22, 250, 180, 136, 14, 6, 187, 179, 94, 82, 49, 62, 65, 47,
187, 233, 37, 117, 77, 75, 122, 68, 64, 40, 118, 6, 202, 186, 203,
237, 27, 243, 9, 76, 16, 125, 160, 172, 34, 56, 107, 84, 139, 249,
219, 113, 119, 167, 50, 187, 236, 232, 138, 176, 252, 75, 104, 162, 225,
73, 54, 208, 113, 164, 138, 131, 76, 178, 254, 160, 114, 238, 196, 227,
79, 185, 206, 217, 67, 168, 7, 129, 145, 69, 27, 95, 216, 173, 67,
245, 136, 47, 222, 123, 145, 86, 227, 120, 35, 218, 160, 93, 103, 43,
116, 69, 101, 38, 191, 92, 52, 176, 250, 136, 42, 196, 188, 159, 238,
161, 182, 139, 107, 99, 206, 19, 223, 51, 4, 25, 138, 18, 217, 117,
142, 164, 69, 247, 137, 133, 167, 69, 37, 206, 38, 72, 107, 6, 208,
239, 237, 173, 28, 248, 41, 57, 221, 178, 0, 229, 113, 174, 212, 89,
64, 71, 92, 187, 142, 25, 100, 236, 39, 63, 196, 186, 123, 216, 104,
135, 57, 2, 121, 40, 13, 87, 75, 151, 12, 158, 181, 196, 197, 208,
230, 110, 28, 206, 66, 123, 246, 243, 106, 88, 240, 82, 60, 152, 144,
211, 90, 134, 143, 101, 152, 114, 124, 68, 52, 47, 172, 93, 194, 196,
136, 184, 225, 50, 140, 28, 125, 74, 80, 199, 29, 212, 196, 161, 178,
222, 88, 72, 60, 85, 128, 182, 82, 227, 160, 10, 221, 13, 191, 97,
210, 9, 59, 12, 65, 210, 75, 228, 164, 120, 69, 109, 179, 134, 160,
96, 15, 207, 131, 130, 95, 93, 255, 167, 186, 206, 242, 212, 229, 232,
40, 134, 223, 184, 153, 183, 158, 54, 80, 151, 97, 247, 210, 7, 141,
208, 114, 95, 106, 212, 200, 111, 4, 136, 248, 24, 173, 141, 251, 99,
110, 94, 124, 246, 159, 153, 102, 102, 116, 185, 178, 195, 29, 177, 174,
80, 23, 179, 140, 205, 84, 88, 127, 126, 15, 90, 202, 178, 27, 161,
248, 160, 1, 168, 197, 142, 179, 206, 191, 29, 230, 106, 25, 54, 171,
42, 1, 19, 229, 88, 255, 153, 153, 84, 225, 19, 223, 134, 222, 7,
24, 125, 47, 126, 96, 128, 161, 74, 130, 75, 136, 148, 243, 76, 183,
78, 166, 31, 28, 33, 124, 212, 179, 63, 70, 156, 205, 169, 120, 39,
194, 212, 4, 172, 185, 219, 8, 12, 43, 171, 143, 89, 222, 220, 14,
8, 128, 145, 216, 81, 122, 25, 91, 17, 83, 222, 64, 143, 197, 149,
176, 106, 18, 238, 234, 23, 118, 253, 49, 158, 50, 71, 15, 255, 59,
19, 236, 43, 68, 107, 250, 216, 44, 202, 6, 142, 204, 204, 193, 192,
73, 22, 217, 132, 73, 216, 126, 32, 156, 83, 66, 247, 190, 209, 28,
52, 51, 23, 31, 97, 31, 227, 57, 174, 63, 226, 78, 72, 75, 250,
244, 251, 162, 98, 85, 175, 245, 50, 68, 139, 86, 227, 121, 253, 209,
115, 156, 107, 35, 29, 108, 83, 35, 42, 21, 111, 89, 62, 14, 205,
102, 46, 216, 133, 223, 190, 226, 235, 13, 158, 162, 197, 23, 92, 79,
229, 46, 98, 84, 45, 136, 235, 82, 160, 140, 123, 80, 158, 26, 140,
135, 49, 92, 254, 70, 164, 196, 154, 88, 18, 183, 65, 23, 81, 239,
60, 135, 5, 229, 67, 154, 45, 189, 235, 153, 194, 1, 157, 99, 144,
121, 185, 253, 125, 173, 159, 159, 186, 73, 56, 197, 68, 152, 25, 37,
96, 248, 31, 162, 10, 198, 96, 60, 245, 33, 235, 39, 55, 148, 150,
19, 234, 237, 124, 166, 33, 249, 214, 94, 161, 224, 163, 222, 149, 170,
199, 30, 178, 250, 176, 96, 100, 112, 22, 154, 101, 89, 38, 202, 236,
89, 66, 206, 95, 123, 180, 245, 160, 36, 197, 132, 86, 103, 192, 222,
243, 230, 31, 42, 243, 19, 141, 231, 230, 227, 194, 89, 118, 162, 125,
168, 176, 86, 214, 173, 28, 109, 36, 159, 110, 57, 93, 12, 89, 147,
175, 109, 165, 59, 127, 170, 235, 126, 35, 19, 218, 34, 41, 13, 193,
242, 121, 222, 152, 84, 214, 213, 31, 19, 24, 161, 161, 106, 130, 190,
66, 10, 128, 74, 81, 184, 231, 91, 212, 29, 233, 230, 205, 37, 180,
129, 198, 116, 189, 168, 253, 165, 17, 193, 40, 177, 60, 75, 162, 103,
71, 46, 137, 75, 196, 30, 194, 113, 118, 129, 103, 207, 227, 172, 164,
186, 61, 231, 73, 235, 182, 209, 23, 141, 187, 116, 2, 128, 69, 92,
239, 135, 159, 203, 105, 12, 242, 185, 147, 208, 76, 109, 241, 153, 226,
112, 148, 143, 124, 42, 199, 57, 120, 26, 3, 124, 181, 177, 160, 193,
182, 237, 128, 153, 150, 40, 181, 87, 207, 178, 35, 10, 178, 15, 144,
54, 68, 205, 104, 212, 173, 226, 20, 57, 181, 17, 106, 207, 171, 203,
178, 90, 176, 86, 2, 73, 43, 119, 53, 171, 205, 120, 157, 147, 148,
35, 52, 7, 173, 244, 228, 18, 108, 187, 166, 133, 18, 74, 127, 99,
153, 153, 93, 115, 245, 188, 140, 52, 150, 122, 56, 226, 34, 210, 113,
93, 194, 18, 125, 63, 64, 221, 58, 136, 1, 63, 126, 60, 139, 87,
214, 13, 80, 80, 51, 149, 239, 148, 229, 68, 237, 0, 55, 51, 152,
19, 249, 143, 129, 229, 3, 154, 48, 103, 48, 144, 205, 203, 180, 8,
80, 32, 30, 35, 233, 192, 165, 97, 220, 99, 203, 91, 13, 41, 14,
196, 164, 122, 67, 5, 143, 60, 190, 213, 124, 96, 80, 12, 158, 234,
100, 236, 106, 179, 163, 154, 27, 149, 40, 61, 237, 56, 46, 132, 241,
136, 15, 247, 83, 106, 119, 0, 207, 5, 185, 213, 59, 37, 222, 21,
215, 46, 23, 60, 200, 0, 165, 223, 157, 193, 182, 43, 6, 125, 232,
180, 158, 190, 170, 165, 130, 173, 0, 89, 204, 88, 212, 219, 19, 234,
235, 99, 144, 66, 105, 222, 9, 208, 167, 56, 108, 235, 9, 34, 2,
198, 29, 29, 137, 3, 130, 218, 25, 134, 116, 243, 37, 207, 136, 50,
179, 253, 251, 35, 95, 108, 157, 20, 221, 193, 1, 241, 178, 173, 39,
185, 138, 188, 72, 92, 64, 15, 126, 30, 65, 206, 62, 47, 54, 244,
58, 88, 176, 254, 30, 163, 140, 91, 102, 222, 62, 194, 1, 229, 189,
34, 53, 162, 118, 127, 74, 9, 178, 38, 43, 255, 153, 210, 202, 240,
173, 152, 98, 149, 194, 52, 34, 220, 7, 142, 12, 203, 156, 50, 159,
144, 204, 132, 44, 72, 20, 30, 167, 232, 250, 113, 35, 174, 16, 97,
32, 45, 55, 204, 10, 148, 87, 31, 195, 63, 198, 193, 248, 63, 9,
20, 189, 243, 205, 64, 160, 104, 182, 117, 142, 205, 200, 45, 83, 239,
0, 115, 103, 2, 211, 236, 116, 8, 127, 253, 187, 215, 223, 43, 38,
184, 62, 66, 84, 167, 220, 52, 239, 58, 132, 153, 15, 132, 82, 36,
110, 114, 154, 196, 106, 90, 175, 80, 219, 86, 31, 40, 28, 97, 54,
203, 86, 193, 24, 8, 39, 244, 159, 242, 57, 74, 83, 181, 238, 171,
160, 249, 192, 115, 233, 93, 194, 242, 246, 188, 111, 175, 120, 50, 147,
223, 69, 2, 108, 202, 205, 113, 125, 61, 102, 82, 243, 23, 115, 173,
250, 242, 206, 30, 121, 54, 213, 122, 221, 28, 178, 209, 197, 100, 56,
19, 72, 68, 7, 203, 2, 98, 91, 68, 230, 39, 127, 97, 71, 230,
37, 178, 111, 48, 246, 98, 190, 167, 177, 62, 190, 103, 223, 28, 98,
83, 212, 74, 244, 54, 146, 195, 62, 73, 150, 127, 171, 127, 84, 72,
56, 190, 50, 226, 240, 40, 88, 205, 96, 230, 69, 177, 128, 61, 229,
230, 229, 218, 1, 129, 98, 181, 40, 90, 252, 250, 197, 247, 86, 55,
61, 59, 175, 99, 15, 8, 195, 56, 174, 79, 19, 64, 70, 209, 22,
63, 212, 88, 226, 10, 64, 67, 199, 36, 212, 208, 5, 97, 113, 203,
156, 6, 12, 179, 187, 49, 188, 242, 15, 80, 91, 28, 95, 69, 236,
56, 172, 96, 255, 38, 187, 189, 110, 153, 119, 26, 72, 68, 205, 69,
95, 69, 43, 161, 100, 180, 49, 248, 182, 207, 67, 250, 44, 123, 97,
225, 209, 54, 225, 59, 255, 114, 182, 127, 12, 22, 76, 167, 190, 129,
155, 224, 153, 88, 207, 44, 59, 250, 221, 224, 255, 115, 63, 184, 52,
43, 203, 188, 77, 157, 131, 224, 94, 52, 146, 14, 3, 241, 84, 75,
179, 93, 175, 6, 86, 32, 70, 12, 151, 44, 87, 228, 236, 84, 54,
104, 246, 129, 108, 115, 29, 157, 87, 54, 4, 211, 57, 230, 169, 183,
255, 180, 95, 51, 41, 107, 151, 100, 188, 150, 119, 233, 114, 224, 205,
244, 234, 48, 20, 203, 61, 229, 35, 95, 213, 197, 51, 57, 90, 174,
166, 59, 71, 190, 251, 137, 50, 199, 149, 173, 119, 30, 19, 44, 89,
76, 48, 14, 185, 134, 4, 164, 9, 248, 39, 199, 241, 17, 53, 140,
215, 109, 142, 165, 126, 180, 208, 71, 17, 42, 185, 186, 238, 234, 128,
38, 120, 16, 243, 151, 70, 125, 202, 108, 8, 227, 168, 189, 249, 175,
3, 252, 15, 43, 0, 121, 52, 252, 113, 131, 60, 150, 249, 109, 137,
210, 116, 44, 169, 243, 154, 188, 198, 107, 190, 167, 45, 44, 157, 70,
185, 34, 47, 66, 127, 252, 74, 240, 4, 162, 192, 157, 246, 34, 107,
251, 221, 79, 53, 78, 208, 198, 138, 109, 227, 69, 120, 14, 0, 164,
181, 117, 167, 158, 207, 53, 180, 12, 76, 168, 82, 217, 45, 134, 169,
242, 128, 75, 25, 60, 35, 56, 204, 197, 146, 187, 120, 255, 180, 156,
88, 34, 125, 234, 47, 217, 34, 114, 92, 255, 75, 94, 129, 27, 119,
161, 199, 156, 106, 30, 129, 53, 152, 54, 1, 181, 24, 8, 247, 7,
150, 83, 142, 101, 32, 176, 101, 213, 113, 22, 226, 159, 142, 162, 97,
138, 158, 97, 66, 23, 53, 22, 38, 204, 211, 160, 149, 243, 34, 80,
226, 208, 47, 80, 41, 211, 21, 82, 121, 189, 203, 232, 227, 205, 72,
237, 219, 29, 152, 132, 153, 138, 238, 64, 216, 202, 225, 164, 98, 213,
214, 147, 184, 49, 73, 55, 32, 196, 15, 226, 109, 226, 177, 193, 0,
18, 57, 157, 53, 53, 50, 179, 175, 125, 60, 178, 151, 214, 52, 248,
238, 181, 81, 148, 167, 49, 203, 102, 151, 122, 248, 246, 250, 64, 4,
16, 65, 64, 15, 49, 28, 135, 198, 240, 5, 224, 155, 0, 35, 190,
33, 130, 99, 156, 68, 6, 79, 252, 213, 252, 14, 119, 86, 81, 16,
106, 52, 19, 64, 218, 68, 215, 99, 51, 62, 208, 101, 51, 49, 178,
237, 169, 43, 32, 116, 246, 1, 198, 1, 137, 211, 245, 241, 64, 241,
232, 37, 36, 224, 47, 176, 104, 62, 55, 9, 52, 22, 154, 180, 234,
87, 32, 183, 146, 242, 221, 141, 115, 27, 112, 76, 156, 13, 214, 28,
223, 175, 164, 72, 197, 63, 232, 125, 171, 28, 178, 55, 254, 169, 11,
182, 51, 247, 188, 235, 74, 60, 107, 145, 164, 208, 72, 123, 89, 200,
161, 9, 98, 32, 22, 30, 59, 39, 121, 76, 158, 244, 82, 246, 207,
168, 49, 248, 96, 201, 6, 202, 93, 133, 69, 225, 102, 246, 190, 111,
28, 20, 135, 31, 88, 158, 131, 247, 79, 5, 240, 181, 171, 13, 199,
79, 140, 44, 96, 59, 216, 78, 202, 167, 124, 243, 3, 86, 185, 17,
101, 102, 13, 169, 227, 48, 11, 86, 221, 48, 205, 210, 219, 84, 227,
188, 173, 144, 169, 124, 205, 107, 167, 21, 152, 146, 247, 48, 239, 235,
8, 85, 130, 128, 157, 3, 108, 123, 39, 26, 187, 234, 15, 9, 229,
86, 196, 199, 64, 140, 179, 150, 84, 200, 221, 150, 204, 33, 243, 119,
165, 200, 151, 84, 151, 10, 114, 6, 97, 182, 194, 41, 218, 15, 199,
243, 84, 200, 86, 168, 121, 161, 5, 233, 13, 162, 104, 242, 198, 106,
20, 135, 177, 143, 206, 180, 120, 193, 207, 100, 117, 44, 2, 109, 86,
163, 111, 151, 118, 149, 139, 190, 145, 4, 175, 184, 154, 155, 63, 126,
151, 82, 48, 240, 28, 186, 184, 126, 227, 240, 111, 231, 172, 116, 131,
58, 44, 230, 52, 232, 199, 222, 194, 36, 115, 68, 50, 30, 166, 134,
186, 73, 225, 72, 58, 0, 237, 223, 87, 123, 38, 86, 11, 68, 93,
112, 124, 168, 108, 88, 47, 113, 16, 108, 13, 179, 151, 173, 50, 188,
106, 25, 184, 172, 173, 251, 233, 71, 66, 96, 108, 102, 183, 69, 13,
73, 119, 1, 202, 105, 223, 216, 160, 89, 1, 176, 102, 173, 220, 165,
64, 46, 125, 149, 56, 202, 169, 74, 156, 114, 218, 49, 223, 183, 43,
112, 176, 58, 197, 55, 59, 18, 11, 42, 147, 61, 31, 36, 218, 53,
190, 7, 130, 200, 5, 147, 24, 153, 147, 205, 123, 4, 54, 225, 33,
210, 193, 123, 236, 209, 63, 6, 24, 112, 204, 8, 83, 175, 146, 46,
222, 157, 36, 156, 20, 163, 47, 222, 245, 49, 88, 117, 83, 219, 144,
91, 222, 8, 250, 11, 210, 90, 206, 253, 167, 4, 98, 160, 146, 197,
202, 151, 46, 35, 58, 197, 43, 163, 75, 234, 106, 34, 245, 182, 99,
195, 201, 185, 199, 115, 41, 107, 84, 18, 1, 72, 3, 65, 211, 251,
239, 112, 117, 191, 121, 27, 253, 152, 17, 224, 152, 207, 111, 190, 188,
24, 225, 15, 224, 66, 17, 186, 41, 74, 243, 30, 124, 43, 144, 119,
117, 127, 58, 161, 98, 238, 208, 243, 232, 125, 1, 14, 227, 244, 8,
231, 135, 193, 148, 36, 225, 229, 142, 34, 109, 177, 237, 165, 172, 108,
101, 59, 102, 92, 198, 60, 170, 150, 161, 158, 159, 120, 106, 106, 196,
138, 112, 74, 97, 48, 252, 241, 192, 183, 100, 20, 8, 61, 144, 192,
209, 172, 230, 114, 75, 37, 26, 216, 162, 55, 199, 201, 163, 76, 54,
122, 125, 42, 116, 86, 235, 42, 139, 122, 98, 42, 52, 182, 11, 218,
140, 79, 9, 191, 36, 79, 203, 112, 6, 46, 208, 73, 81, 146, 115,
236, 180, 110, 104, 202, 140, 20, 50, 55, 255, 65, 94, 72, 67, 207,
204, 204, 177, 49, 207, 36, 112, 251, 140, 178, 84, 63, 160, 246, 234,
173, 146, 235, 24, 97, 105, 78, 199, 10, 66, 131, 155, 116, 207, 151,
133, 51, 177, 15, 226, 178, 100, 255, 100, 4, 105, 128, 28, 39, 214,
92, 174, 141, 45, 51, 95, 79, 175, 119, 38, 133, 158, 4, 216, 69,
230, 178, 84, 196, 8, 117, 233, 164, 28, 163, 61, 146, 232, 184, 130,
245, 226, 176, 111, 25, 148, 169, 120, 156, 199, 249, 86, 64, 254, 93,
201, 17, 221, 180, 61, 124, 224, 106, 66, 120, 154, 127, 85, 219, 192,
61, 189, 196, 90, 230, 113, 209, 20, 85, 239, 138, 247, 221, 147, 119,
69, 253, 123, 179, 177, 114, 190, 198, 251, 65, 239, 222, 140, 143, 69,
207, 161, 25, 21, 192, 165, 47, 158, 81, 89, 0, 78, 178, 79, 65,
21, 62, 165, 126, 43, 105, 116, 93, 79, 217, 129, 191, 117, 161, 142,
32, 210, 204, 26, 122, 118, 128, 93, 248, 7, 81, 73, 119, 126, 39,
223, 87, 10, 58, 210, 121, 226, 213, 96, 146, 78, 102, 187, 10, 181,
206, 242, 7, 54, 120, 241, 224, 139, 114, 152, 240, 103, 104, 22, 224,
83, 183, 199, 84, 116, 228, 136, 122, 170, 208, 182, 205, 174, 190, 208,
140, 7, 152, 197, 145, 126, 111, 33, 98, 50, 217, 92, 190, 220, 38,
98, 134, 100, 154, 202, 200, 28, 199, 169, 79, 86, 236, 22, 75, 73,
158, 228, 157, 15, 134, 205, 213, 76, 35, 205, 251, 108, 87, 235, 104,
12, 115, 60, 107, 82, 237, 242, 0, 225, 177, 75, 98, 207, 114, 205,
6, 249, 86, 6, 255, 148, 133, 66, 247, 73, 138, 190, 185, 243, 215,
136, 156, 15, 11, 132, 249, 255, 9, 176, 1, 197, 204, 244, 249, 118,
64, 107, 199, 234, 80, 173, 1, 23, 162, 65, 122, 78, 143, 88, 231,
210, 55, 173, 220, 254, 252, 135, 3, 29, 124, 238, 176, 155, 156, 21,
29, 25, 36, 133, 164, 57, 50, 185, 245, 192, 204, 119, 195, 166, 103,
235, 142, 65, 245, 24, 113, 79, 173, 21, 219, 19, 231, 92, 161, 50,
159, 102, 247, 214, 231, 173, 161, 79, 214, 248, 165, 141, 10, 17, 13,
16, 86, 87, 255, 235, 145, 239, 217, 245, 251, 34, 153, 28, 27, 57,
62, 122, 250, 13, 149, 6, 200, 163, 174, 222, 160, 32, 52, 6, 26,
2, 160, 64, 38, 140, 135, 146, 170, 24, 19, 239, 91, 112, 95, 5,
3, 86, 17, 174, 15, 174, 5, 224, 90, 191, 165, 208, 178, 199, 38,
29, 226, 234, 133, 160, 69, 112, 220, 239, 130, 180, 196, 91, 185, 88,
207, 98, 180, 240, 170, 9, 35, 2, 223, 193, 107, 80, 215, 91, 12,
142, 201, 141, 250, 217, 68, 224, 95, 27, 232, 62, 156, 132, 112, 166,
10, 43, 107, 33, 94, 153, 238, 49, 31, 252, 120, 95, 39, 237, 138,
106, 51, 85, 23, 150, 105, 65, 252, 201, 31, 111, 12, 91, 184, 143,
184, 4, 44, 90, 28, 54, 255, 40, 204, 17, 106, 18, 3, 193, 184,
73, 219, 82, 37, 84, 121, 130, 42, 141, 107, 231, 182, 245, 185, 252,
132, 164, 166, 126, 152, 21, 225, 81, 255, 136, 97, 45, 9, 80, 102,
12, 228, 104, 174, 194, 134, 142, 128, 38, 225, 124, 204, 187, 142, 13,
150, 245, 87, 59, 137, 147, 87, 180, 170, 165, 144, 213, 238, 126, 229,
72, 246, 44, 18, 214, 61, 143, 212, 133, 87, 54, 98, 136, 122, 183,
210, 135, 214, 208, 7, 40, 156, 150, 152, 193, 7, 172, 120, 6, 88,
46, 210, 167, 188, 49, 65, 58, 25, 224, 242, 109, 243, 120, 180, 178,
148, 80, 233, 11, 252, 186, 135, 161, 182, 56, 124, 114, 43, 79, 127,
72, 200, 162, 92, 252, 213, 100, 143, 171, 46, 82, 167, 230, 3, 146,
34, 206, 82, 57, 167, 186, 93, 80, 86, 1, 88, 200, 90, 160, 183,
165, 68, 224, 176, 78, 202, 185, 136, 76, 56, 162, 255, 138, 67, 110,
64, 7, 233, 6, 225, 206, 30, 14, 232, 82, 89, 128, 248, 23, 36,
249, 16, 242, 132, 10, 131, 236, 123, 250, 97, 198, 20, 89, 64, 107,
139, 232, 202, 21, 68, 69, 75, 19, 6, 160, 80, 31, 222, 190, 107,
246, 104, 187, 103, 108, 229, 97, 78, 232, 67, 178, 153, 159, 101, 28,
76, 200, 6, 39, 180, 12, 3, 151, 125, 158, 238, 216, 39, 206, 153,
129, 162, 175, 201, 181, 225, 38, 164, 120, 25, 40, 114, 83, 33, 96,
128, 82, 195, 82, 95, 202, 61, 23, 208, 15, 100, 150, 77, 213, 186,
247, 195, 104, 42, 185, 104, 113, 4, 132, 115, 181, 58, 185, 55, 157,
80, 191, 97, 200, 139, 187, 201, 227, 185, 134, 149, 220, 254, 4, 31,
45, 25, 158, 90, 100, 238, 181, 160, 76, 100, 225, 170, 74, 7, 88,
92, 106, 12, 23, 126, 1, 53, 88, 135, 159, 210, 157, 75, 54, 48,
207, 145, 110, 66, 28, 122, 30, 208, 177, 33, 171, 155, 41, 18, 46,
106, 183, 201, 79, 194, 15, 52, 53, 178, 127, 244, 212, 72, 162, 15,
57, 92, 153, 204, 235, 148, 176, 71, 172, 16, 9, 187, 32, 164, 96,
109, 208, 55, 43, 121, 19, 245, 116, 107, 124, 117, 191, 151, 0, 229,
37, 220, 174, 130, 92, 40, 126, 229, 29, 196, 95, 140, 168, 21, 137,
16, 15, 62, 134, 208, 189, 77, 244, 115, 67, 146, 229, 183, 229, 222,
98, 162, 212, 143, 81, 147, 154, 0, 243, 245, 33, 85, 3, 70, 154,
160, 246, 247, 114, 107, 109, 97, 117, 113, 171, 78, 202, 169, 224, 116,
60, 94, 201, 178, 158, 145, 88, 255, 3, 249, 168, 210, 119, 46, 222,
108, 165, 235, 119, 98, 141, 13, 153, 147, 156, 82, 101, 221, 127, 177,
16, 147, 224, 211, 89, 91, 127, 159, 97, 41, 89, 126, 207, 241, 66,
62, 170, 155, 31, 109, 68, 154, 105, 31, 163, 250, 169, 117, 195, 205,
205, 72, 135, 93, 237, 47, 214, 70, 40, 239, 154, 175, 204, 101, 64,
74, 90, 255, 30, 188, 79, 83, 143, 189, 170, 37, 87, 235, 236, 31,
42, 171, 33, 78, 34, 248, 139, 192, 244, 0, 202, 139, 78, 106, 182,
82, 234, 197, 126, 82, 243, 172, 111, 178, 94, 221, 69, 17, 166, 107,
54, 195, 89, 217, 129, 108, 55, 13, 185, 43, 172, 150, 120, 164, 96,
175, 74, 93, 195, 118, 238, 103, 139, 41, 171, 166, 30, 187, 165, 157,
66, 35, 175, 199, 65, 236, 22, 169, 150, 132, 214, 130, 90, 99, 247,
89, 241, 203, 247, 119, 169, 33, 251, 245, 205, 104, 169, 222, 171, 255,
121, 255, 73, 124, 149, 234, 136, 173, 110, 128, 176, 252, 24, 208, 23,
67, 155, 107, 159, 156, 59, 238, 66, 31, 132, 110, 201, 211, 2, 181,
93, 159, 185, 70, 243, 106, 127, 36, 236, 189, 254, 231, 206, 83, 255,
1, 12, 207, 152, 49, 245, 122, 234, 202, 186, 224, 134, 154, 143, 100,
52, 40, 82, 242, 252, 255, 33, 84, 150, 87, 212, 181, 89, 225, 173,
245, 78, 136, 151, 148, 145, 223, 99, 237, 104, 2, 174, 168, 196, 206,
115, 232, 105, 37, 185, 153, 127, 244, 104, 219, 44, 122, 130, 180, 23,
201, 58, 56, 113, 139, 209, 31, 95, 48, 70, 164, 140, 149, 193, 167,
61, 100, 16, 104, 34, 154, 232, 158, 145, 145, 125, 215, 199, 237, 15,
128, 37, 251, 105, 21, 87, 13, 137, 145, 3, 24, 118, 69, 194, 191,
197, 166, 208, 166, 29, 8, 49, 192, 124, 193, 204, 232, 0, 101, 41,
33, 149, 125, 192, 60, 11, 108, 9, 19, 42, 250, 214, 204, 2, 194,
26, 219, 98, 62, 251, 62, 206, 175, 204, 18, 166, 220, 9, 6, 110,
243, 99, 26, 98, 34, 37, 50, 232, 219, 13, 108, 138, 80, 220, 225,
126, 171, 134, 89, 117, 100, 247, 116, 219, 133, 31, 255, 203, 81, 102,
136, 5, 83, 213, 87, 144, 48, 15, 82, 70, 69, 154, 4, 82, 41,
136, 74, 37, 206, 225, 157, 195, 200, 88, 155, 111, 236, 217, 44, 243,
215, 104, 150, 3, 95, 90, 122, 140, 136, 7, 42, 192, 3, 122, 115,
202, 219, 164, 68, 111, 226, 0, 18, 149, 210, 56, 27, 249, 43, 203,
59, 8, 143, 171, 213, 92, 47, 85, 65, 36, 164, 115, 209, 116, 129,
108, 110, 48, 238, 228, 144, 128, 81, 137, 188, 50, 231, 101, 157, 191,
161, 31, 79, 254, 212, 21, 94, 112, 57, 47, 212, 190, 70, 100, 70,
129, 203, 208, 217, 69, 187, 30, 21, 131, 212, 70, 122, 191, 170, 32,
155, 255, 249, 9, 76, 244, 171, 29, 7, 182, 238, 40, 18, 11, 154,
193, 14, 188, 249, 173, 117, 55, 18, 222, 134, 191, 107, 153, 215, 211,
3, 235, 93, 49, 254, 42, 44, 105, 34, 193, 219, 19, 237, 239, 32,
207, 242, 227, 252, 225, 157, 62, 203, 76, 79, 137, 196, 213, 134, 224,
115, 76, 31, 66, 246, 199, 14, 144, 61, 213, 240, 69, 201, 238, 221,
53, 108, 116, 208, 22, 202, 3, 48, 210, 118, 24, 211, 133, 163, 235,
202, 188, 221, 180, 225, 26, 190, 47, 116, 221, 217, 208, 27, 10, 204,
214, 11, 83, 238, 113, 129, 73, 119, 90, 138, 104, 73, 25, 240, 149,
161, 167, 198, 150, 210, 73, 158, 3, 136, 249, 47, 33, 42, 209, 111,
87, 59, 113, 52, 83, 62, 41, 169, 101, 169, 123, 45, 214, 204, 94,
29, 88, 147, 157, 146, 131, 199, 240, 43, 5, 64, 214, 130, 150, 130,
80, 235, 194, 245, 88, 59, 75, 202, 130, 113, 4, 1, 124, 250, 5,
161, 228, 240, 161, 114, 187, 128, 130, 190, 75, 190, 195, 63, 112, 169,
10, 215, 176, 142, 197, 171, 63, 100, 143, 105, 6, 130, 216, 253, 189,
194, 227, 235, 174, 81, 186, 7, 26, 74, 29, 209, 17, 188, 5, 22,
222, 89, 162, 217, 103, 222, 175, 48, 238, 162, 192, 211, 121, 164, 212,
2, 194, 154, 18, 209, 215, 26, 128, 44, 235, 6, 189, 234, 210, 152,
14, 36, 6, 126, 13, 125, 35, 110, 63, 22, 82, 20, 203, 54, 123,
45, 182, 129, 148, 207, 66, 18, 54, 113, 18, 158, 110, 225, 85, 56,
113, 21, 191, 203, 85, 187, 193, 17, 252, 91, 51, 253, 253, 83, 249,
129, 94, 134, 62, 226, 136, 5, 39, 105, 213, 110, 229, 73, 88, 95,
66, 76, 115, 204, 190, 152, 9, 223, 62, 190, 13, 111, 140, 166, 186,
91, 68, 245, 15, 127, 6, 220, 223, 94, 10, 198, 23, 184, 7, 180,
121, 104, 180, 157, 28, 110, 55, 220, 99, 32, 227, 28, 239, 68, 88,
253, 56, 61, 195, 187, 147, 222, 150, 140, 171, 95, 95, 100, 217, 102,
66, 5, 211, 254, 39, 59, 4, 35, 213, 98, 180, 194, 99, 42, 218,
125, 48, 71, 41, 218, 24, 226, 37, 85, 232, 233, 54, 57, 189, 217,
129, 166, 25, 39, 174, 100, 161, 108, 24, 9, 139, 125, 19, 204, 163,
99, 207, 19, 52, 224, 246, 126, 20, 128, 39, 103, 190, 127, 172, 120,
244, 114, 53, 100, 250, 30, 237, 32, 131, 24, 205, 45, 62, 255, 146,
159, 47, 205, 11, 47, 123, 211, 50, 222, 221, 67, 241, 28, 61, 82,
240, 106, 111, 145, 96, 169, 164, 152, 34, 16, 202, 52, 168, 97, 21,
146, 11, 222, 58, 1, 188, 130, 51, 194, 191, 66, 233, 253, 222, 87,
226, 250, 63, 5, 252, 113, 249, 42, 208, 110, 97, 148, 232, 58, 88,
251, 29, 47, 202, 254, 177, 57, 255, 72, 177, 121, 156, 172, 149, 152,
98, 86, 81, 206, 239, 235, 45, 188, 12, 204, 248, 104, 238, 139, 254,
180, 27, 43, 65, 96, 37, 46, 167, 230, 109, 248, 45, 130, 176, 104,
51, 130, 44, 196, 3, 204, 136, 139, 118, 12, 28, 47, 170, 153, 151,
77, 220, 142, 229, 104, 133, 187, 1, 155, 169, 133, 230, 229, 221, 31,
200, 244, 5, 253, 178, 115, 231, 118, 19, 106, 171, 97, 134, 27, 105,
182, 47, 57, 143, 66, 175, 32, 77, 93, 108, 171, 216, 139, 167, 119,
33, 151, 130, 82, 151, 52, 16, 206, 71, 225, 125, 65, 93, 203, 220,
200, 86, 57, 161, 246, 162, 136, 158, 149, 115, 123, 57, 66, 31, 46,
59, 214, 16, 48, 249, 165, 77, 156, 88, 142, 13, 101, 30, 26, 62,
213, 23, 162, 212, 68, 46, 184, 167, 244, 106, 66, 51, 161, 88, 248,
143, 233, 144, 220, 84, 68, 144, 114, 219, 144, 79, 99, 9, 203, 149,
89, 192, 146, 197, 217, 73, 172, 204, 155, 129, 206, 182, 155, 233, 248,
200, 197, 136, 252, 224, 66, 255, 191, 78, 232, 166, 228, 234, 24, 180,
198, 71, 171, 6, 37, 187, 236, 96, 233, 168, 10, 223, 32, 152, 47,
154, 156, 162, 184, 80, 5, 191, 238, 132, 124, 255, 176, 191, 10, 108,
73, 131, 2, 182, 184, 220, 178, 65, 191, 192, 202, 49, 170, 139, 87,
182, 20, 110, 223, 3, 15, 156, 81, 185, 149, 102, 242, 53, 40, 203,
168, 242, 75, 185, 208, 66, 154, 199, 32, 175, 78, 219, 57, 60, 222,
92, 43, 7, 113, 110, 51, 254, 150, 118, 114, 131, 134, 149, 56, 87,
100, 152, 51, 226, 18, 85, 49, 130, 187, 215, 154, 195, 26, 254, 187,
181, 218, 54, 54, 77, 178, 20, 12, 152, 157, 180, 133, 86, 52, 48,
172, 37, 49, 117, 183, 71, 235, 13, 151, 90, 192, 119, 140, 36, 15,
192, 103, 11, 95, 5, 138, 239, 65, 152, 161, 41, 165, 210, 48, 96,
230, 96, 196, 9, 234, 29, 243, 170, 220, 42, 27, 86, 16, 213, 139,
82, 229, 246, 19, 83, 184, 248, 157, 199, 160, 238, 95, 174, 178, 136,
241, 61, 154, 99, 41, 89, 1, 156, 20, 53, 4, 193, 151, 145, 131,
72, 14, 220, 213, 230, 231, 82, 123, 249, 9, 68, 144, 51, 141, 25,
79, 210, 195, 238, 134, 206, 105, 12, 81, 173, 134, 6, 134, 8, 226,
21, 171, 219, 47, 227, 24, 31, 133, 181, 112, 138, 42, 234, 94, 39,
61, 84, 199, 207, 225, 107, 114, 214, 100, 8, 196, 68, 87, 138, 25,
32, 110, 180, 103, 225, 254, 249, 229, 128, 32, 66, 144, 202, 253, 46,
2, 195, 238, 37, 157, 18, 96, 57, 175, 42, 31, 125, 50, 2, 63,
209, 147, 162, 92, 163, 185, 240, 187, 162, 234, 112, 14, 189, 42, 76,
193, 168, 128, 251, 56, 251, 102, 156, 10, 132, 176, 16, 183, 139, 85,
94, 13, 190, 128, 213, 29, 168, 199, 232, 226, 104, 91, 0, 1, 69,
138, 191, 106, 64, 31, 79, 44, 231, 31, 167, 129, 172, 22, 6, 13,
98, 128, 63, 209, 221, 27, 59, 107, 81, 25, 189, 107, 208, 240, 84,
72, 82, 11, 57, 117, 146, 21, 63, 91, 2, 97, 60, 133, 157, 230,
74, 163, 245, 111, 95, 126, 188, 97, 89, 215, 35, 67, 13, 79, 15,
16, 175, 245, 239, 188, 233, 180, 127, 37, 236, 61, 56, 165, 45, 184,
220, 91, 76, 97, 100, 129, 241, 3, 3, 51, 25, 65, 210, 180, 191,
116, 105, 254, 139, 174, 220, 204, 181, 204, 216, 86, 228, 249, 122, 57,
143, 210, 48, 27, 249, 7, 165, 189, 143, 233, 163, 210, 249, 96, 86,
240, 43, 14, 132, 201, 92, 93, 160, 209, 85, 247, 104, 93, 33, 31,
101, 68, 35, 187, 172, 54, 130, 81, 51, 158, 209, 5, 149, 137, 248,
230, 72, 21, 58, 116, 189, 204, 204, 154, 6, 120, 178, 90, 155, 167,
104, 117, 137, 180, 135, 80, 3, 35, 108, 53, 225, 231, 4, 6, 112,
152, 80, 125, 85, 60, 150, 169, 0, 19, 217, 235, 149, 189, 143, 7,
194, 139, 224, 136, 163, 85, 119, 161, 222, 167, 147, 6, 85, 170, 204,
33, 12, 222, 209, 44, 128, 67, 90, 74, 110, 98, 184, 163, 124, 50,
147, 39, 237, 7, 99, 200, 202, 42, 193, 106, 235, 76, 194, 121, 96,
139, 31, 182, 213, 49, 169, 165, 93, 49, 207, 32, 97, 235, 65, 225,
234, 116, 30, 128, 182, 114, 45, 198, 74, 133, 55, 3, 159, 150, 124,
102, 153, 218, 185, 7, 146, 192, 187, 58, 83, 244, 251, 77, 87, 196,
181, 161, 30, 65, 247, 240, 143, 71, 75, 39, 147, 222, 201, 152, 139,
157, 180, 23, 43, 142, 215, 115, 223, 150, 194, 150, 201, 134, 188, 46,
23, 7, 195, 14, 106, 178, 92, 96, 128, 44, 167, 232, 22, 130, 186,
175, 136, 163, 52, 188, 168, 51, 135, 203, 70, 193, 191, 125, 163, 146,
188, 116, 141, 204, 62, 32, 192, 9, 133, 165, 59, 126, 159, 66, 29,
118, 187, 66, 218, 185, 215, 45, 187, 253, 100, 179, 162, 68, 134, 80,
193, 213, 172, 141, 73, 25, 81, 213, 135, 198, 111, 152, 14, 212, 92,
189, 191, 252, 152, 227, 88, 175, 203, 105, 139, 10, 3, 218, 190, 224,
113, 37, 255, 54, 39, 76, 211, 17, 250, 109, 2, 235, 55, 67, 224,
129, 134, 212, 57, 202, 133, 32, 249, 56, 246, 123, 14, 14, 158, 56,
242, 167, 6, 85, 107, 96, 64, 92, 30, 164, 60, 116, 190, 112, 203,
121, 143, 110, 178, 241, 231, 135, 250, 27, 91, 98, 139, 178, 43, 254,
68, 159, 42, 137, 208, 138, 85, 92, 242, 240, 17, 194, 208, 247, 242,
53, 145, 20, 179, 1, 40, 12, 171, 34, 58, 119, 79, 112, 193, 109,
127, 128, 121, 144, 254, 27, 161, 145, 192, 88, 65, 102, 109, 133, 9,
232, 36, 179, 53, 226, 81, 124, 164, 183, 51, 133, 243, 213, 174, 52,
21, 20, 27, 38, 4, 226, 75, 241, 131, 8, 192, 227, 79, 140, 72,
76, 234, 242, 82, 56, 178, 157, 184, 187, 179, 27, 184, 118, 4, 45,
115, 124, 140, 46, 130, 55, 94, 166, 75, 12, 44, 24, 225, 215, 62,
110, 23, 4, 153, 255, 109, 55, 255, 206, 240, 61, 125, 153, 43, 187,
204, 136, 154, 214, 109, 99, 127, 178, 212, 112, 50, 220, 230, 244, 163,
205, 166, 179, 205, 15, 91, 25, 2, 58, 116, 83, 106, 231, 108, 133,
49, 86, 136, 202, 154, 230, 211, 231, 201, 91, 91, 32, 169, 68, 17,
42, 49, 129, 35, 106, 211, 35, 197, 114, 66, 71, 221, 221, 147, 248,
112, 169, 75, 203, 63, 221, 7, 148, 220, 232, 222, 120, 212, 147, 27,
209, 187, 76, 22, 248, 27, 238, 133, 59, 124, 199, 254, 184, 23, 164,
146, 12, 173, 16, 39, 207, 220, 209, 54, 55, 157, 207, 238, 187, 66,
222, 131, 205, 218, 183, 223, 173, 171, 173, 41, 247, 219, 106, 62, 155,
131, 120, 246, 250, 57, 222, 20, 65, 136, 92, 71, 230, 157, 224, 42,
209, 120, 4, 158, 196, 246, 10, 218, 143, 8, 41, 37, 31, 51, 205,
230, 223, 100, 246, 131, 148, 198, 188, 177, 133, 235, 148, 91, 207, 91,
69, 225, 252, 116, 253, 125, 125, 35, 224, 127, 68, 38, 67, 228, 183,
6, 108, 130, 172, 19, 16, 118, 144, 69, 93, 70, 182, 87, 152, 207,
191, 32, 22, 42, 114, 203, 106, 4, 179, 144, 92, 21, 79, 13, 226,
187, 206, 158, 57, 82, 122, 48, 127, 214, 28, 104, 146, 135, 117, 194,
11, 199, 234, 52, 209, 11, 162, 171, 171, 75, 49, 18, 91, 82, 143,
181, 16, 71, 103, 0, 173, 10, 4, 124, 218, 85, 193, 107, 118, 172,
14, 103, 60, 180, 250, 30, 255, 114, 177, 5, 217, 132, 125, 10, 159,
165, 137, 255, 153, 233, 163, 88, 150, 185, 218, 178, 141, 2, 175, 8,
175, 44, 191, 242, 59, 15, 191, 100, 31, 84, 167, 10, 172, 217, 42,
44, 230, 169, 58, 80, 94, 29, 232, 73, 98, 217, 29, 217, 207, 255,
27, 54, 19, 234, 191, 125, 54, 82, 210, 195, 115, 70, 103, 160, 85,
222, 190, 47, 63, 86, 138, 90, 77, 75, 146, 73, 106, 33, 117, 164,
150, 149, 111, 63, 236, 123, 33, 240, 113, 252, 161, 30, 44, 225, 104,
98, 94, 49, 60, 34, 51, 243, 86, 72, 126, 194, 235, 176, 145, 5,
221, 226, 45, 80, 134, 59, 235, 202, 5, 247, 2, 164, 23, 195, 232,
125, 155, 177, 87, 160, 94, 33, 212, 135, 55, 255, 116, 170, 207, 173,
148, 234, 51, 152, 213, 158, 175, 35, 122, 190, 64, 92, 122, 144, 243,
201, 230, 191, 252, 190, 250, 70, 198, 193, 180, 25, 205, 75, 210, 78,
81, 198, 94, 254, 220, 162, 189, 212, 239, 209, 149, 213, 91, 255, 105,
145, 136, 210, 118, 119, 173, 98, 13, 87, 91, 3, 113, 45, 7, 20,
153, 163, 169, 45, 188, 216, 174, 140, 168, 110, 136, 10, 155, 116, 218,
132, 94, 18, 78, 15, 117, 47, 98, 130, 93, 80, 219, 107, 184, 10,
138, 184, 180, 89, 154, 43, 13, 143, 179, 140, 23, 160, 224, 59, 113,
79, 126, 219, 144, 94, 13, 153, 245, 8, 215, 121, 206, 251, 141, 16,
167, 159, 198, 190, 226, 247, 4, 120, 253, 39, 147, 173, 68, 226, 152,
27, 137, 161, 131, 59, 86, 6, 90, 227, 103, 4, 96, 27, 76, 28,
201, 146, 42, 77, 253, 104, 49, 219, 196, 106, 199, 107, 47, 157, 53,
191, 67, 219, 159, 68, 183, 39, 233, 130, 24, 85, 188, 201, 200, 249,
131, 197, 246, 97, 213, 158, 173, 156, 19, 171, 121, 122, 147, 72, 40,
251, 97, 158, 175, 115, 171, 151, 254, 53, 163, 35, 142, 5, 14, 12,
15, 224, 154, 187, 134, 78, 187, 223, 237, 147, 124, 33, 113, 221, 135,
150, 33, 20, 71, 134, 89, 70, 2, 161, 101, 100, 13, 29, 144, 201,
99, 24, 224, 204, 35, 245, 197, 47, 65, 25, 2, 62, 43, 177, 55,
124, 236, 10, 140, 249, 23, 11, 69, 196, 174, 189, 132, 100, 9, 44,
30, 54, 167, 131, 191, 199, 181, 16, 250, 56, 4, 62, 114, 93, 122,
118, 75, 231, 138, 41, 85, 187, 58, 209, 249, 63, 94, 34, 227, 10,
153, 12, 98, 3, 135, 248, 68, 139, 231, 83, 221, 77, 248, 147, 94,
21, 151, 168, 230, 115, 4, 69, 34, 202, 71, 102, 32, 88, 28, 6,
250, 115, 236, 28, 0, 177, 188, 252, 209, 194, 165, 221, 8, 199, 180,
72, 169, 23, 14, 29, 14, 227, 68, 148, 5, 137, 60, 39, 115, 136,
90, 28, 228, 189, 39, 17, 102, 196, 68, 121, 161, 90, 70, 62, 141,
12, 52, 161, 17, 246, 128, 37, 170, 189, 213, 49, 97, 67, 227, 60,
26, 60, 113, 198, 247, 49, 132, 169, 7, 220, 219, 47, 112, 74, 48,
230, 203, 212, 198, 83, 214, 12, 173, 206, 159, 243, 171, 255, 246, 239,
66, 24, 111, 39, 235, 73, 248, 174, 247, 153, 238, 86, 202, 109, 189,
105, 80, 232, 21, 12, 198, 133, 125, 207, 44, 118, 99, 190, 57, 185,
152, 2, 122, 20, 86, 170, 244, 61, 165, 31, 36, 117, 109, 62, 207,
119, 205, 2, 105, 25, 141, 15, 81, 76, 230, 18, 165, 78, 189, 100,
238, 13, 234, 219, 207, 126, 167, 139, 202, 194, 157, 106, 112, 61, 224,
158, 104, 239, 201, 149, 223, 79, 226, 196, 0, 177, 23, 140, 251, 48,
154, 51, 4, 27, 156, 151, 178, 79, 216, 70, 141, 124, 249, 188, 91,
114, 206, 69, 26, 81, 176, 123, 176, 219, 121, 102, 170, 243, 27, 216,
142, 116, 141, 246, 225, 28, 196, 137, 153, 33, 14, 173, 139, 198, 127,
142, 39, 183, 224, 113, 150, 246, 18, 165, 8, 185, 30, 105, 223, 209,
71, 162, 207, 186, 8, 206, 211, 232, 249, 43, 59, 127, 42, 233, 211,
75, 5, 165, 70, 51, 101, 2, 117, 82, 91, 92, 49, 45, 169, 132,
101, 154, 91, 97, 210, 19, 238, 187, 254, 126, 87, 187, 48, 52, 2,
74, 208, 60, 151, 102, 83, 87, 157, 93, 65, 151, 48, 134, 244, 172,
112, 58, 18, 129, 87, 85, 34, 110, 21, 69, 119, 104, 76, 25, 252,
213, 130, 199, 220, 125, 8, 147, 4, 70, 88, 172, 121, 213, 232, 58,
86, 161, 182, 108, 148, 112, 77, 214, 114, 209, 153, 110, 249, 1, 155,
248, 182, 58, 129, 234, 29, 214, 15, 202, 85, 222, 7, 12, 89, 8,
207, 124, 234, 188, 212, 15, 117, 71, 128, 202, 164, 48, 120, 85, 59,
128, 234, 77, 227, 229, 124, 191, 16, 114, 41, 166, 212, 4, 84, 112,
139, 44, 68, 209, 82, 149, 13, 219, 160, 136, 150, 219, 198, 20, 159,
17, 222, 54, 40, 34, 161, 91, 40, 193, 119, 177, 190, 222, 3, 9,
90, 234, 242, 69, 141, 127, 247, 154, 227, 200, 116, 147, 107, 115, 73,
198, 159, 68, 194, 238, 146, 101, 232, 154, 226, 253, 218, 249, 5, 137,
54, 92, 115, 87, 154, 69, 56, 25, 162, 112, 239, 237, 200, 9, 172,
39, 208, 18, 146, 34, 43, 89, 82, 249, 234, 35, 41, 238, 44, 223,
196, 219, 190, 7, 240, 133, 61, 180, 175, 200, 115, 115, 18, 193, 146,
58, 138, 58, 30, 127, 101, 211, 192, 136, 163, 125, 33, 63, 120, 204,
135, 135, 83, 121, 144, 68, 157, 191, 237, 101, 84, 63, 226, 227, 122,
73, 254, 194, 104, 172, 145, 89, 215, 234, 161, 70, 36, 234, 196, 51,
193, 189, 81, 117, 56, 185, 233, 75, 158, 226, 30, 42, 89, 228, 7,
221, 208, 201, 99, 84, 217, 112, 231, 73, 227, 250, 249, 199, 4, 161,
241, 62, 21, 91, 68, 87, 252, 205, 203, 106, 33, 65, 210, 251, 71,
13, 48, 131, 59, 185, 233, 47, 1, 198, 234, 246, 48, 92, 103, 215,
114, 101, 8, 171, 70, 138, 7, 71, 18, 58, 94, 226, 145, 4, 255,
124, 210, 0, 164, 227, 194, 241, 124, 212, 155, 78, 48, 127, 183, 49,
222, 4, 191, 195, 108, 50, 191, 92, 161, 14, 130, 156, 184, 218, 15,
235, 4, 165, 17, 0, 122, 46, 115, 1, 86, 205, 149, 64, 252, 190,
54, 28, 142, 46, 18, 8, 128, 226, 58, 207, 160, 172, 67, 155, 18,
98, 187, 223, 32, 165, 87, 171, 252, 69, 229, 176, 132, 240, 73, 182,
255, 171, 199, 18, 195, 157, 165, 221, 183, 220, 98, 254, 194, 115, 105,
93, 35, 116, 148, 57, 58, 101, 158, 16, 100, 97, 245, 21, 4, 86,
234, 63, 100, 91, 122, 243, 141, 89, 205, 103, 221, 33, 137, 12, 56,
3, 255, 184, 215, 214, 142, 223, 64, 46, 144, 84, 118, 115, 79, 78,
86, 60, 172, 184, 73, 253, 105, 254, 102, 16, 49, 22, 10, 219, 26,
101, 240, 193, 56, 137, 117, 72, 85, 148, 130, 34, 51, 141, 2, 137,
142, 88, 62, 4, 27, 28, 135, 114, 224, 230, 229, 4, 90, 173, 104,
197, 43, 85, 97, 36, 173, 99, 75, 34, 121, 34, 187, 97, 158, 171,
208, 146, 83, 200, 5, 66, 45, 181, 72, 126, 79, 226, 184, 4, 33,
42, 99, 11, 89, 15, 75, 34, 193, 62, 59, 183, 98, 148, 199, 53,
4, 169, 198, 133, 156, 240, 176, 39, 51, 49, 145, 67, 123, 198, 45,
27, 19, 128, 174, 162, 168, 84, 176, 90, 23, 104, 210, 247, 133, 214,
140, 247, 228, 0, 212, 238, 161, 27, 116, 249, 0, 19, 94, 156, 221,
176, 246, 207, 82, 140, 113, 135, 149, 92, 193, 45, 45, 197, 221, 43,
175, 71, 158, 223, 209, 219, 95, 212, 240, 125, 103, 3, 225, 108, 133,
179, 59, 171, 170, 181, 119, 158, 174, 108, 238, 211, 127, 9, 3, 124,
103, 168, 216, 174, 93, 22, 119, 3, 133, 164, 93, 119, 185, 52, 251,
248, 79, 30, 44, 15, 107, 20, 248, 156, 155, 86, 147, 175, 38, 85,
110, 17, 91, 68, 154, 15, 46, 182, 112, 125, 4, 219, 164, 156, 105,
105, 208, 142, 53, 88, 147, 15, 163, 70, 237, 27, 247, 188, 162, 254,
149, 149, 92, 152, 184, 27, 189, 250, 216, 250, 169, 244, 72, 186, 121,
236, 248, 23, 198, 255, 6, 255, 188, 7, 12, 59, 54, 143, 247, 109,
132, 173, 52, 16, 235, 157, 234, 118, 60, 55, 160, 30, 36, 105, 80,
95, 121, 70, 99, 220, 24, 215, 173, 177, 3, 253, 191, 138, 188, 161,
106, 236, 199, 218, 54, 240, 240, 115, 99, 40, 5, 55, 125, 109, 238,
251, 52, 87, 210, 73, 226, 10, 176, 152, 5, 223, 254, 111, 10, 149,
158, 134, 53, 88, 1, 108, 74, 168, 102, 73, 39, 184, 52, 82, 250,
158, 219, 170, 172, 218, 129, 228, 246, 23, 87, 115, 135, 94, 5, 130,
203, 97, 76, 56, 164, 114, 71, 57, 241, 165, 4, 146, 237, 46, 80,
21, 222, 100, 45, 195, 74, 161, 157, 241, 183, 199, 70, 223, 167, 172,
227, 92, 66, 245, 171, 14, 136, 4, 50, 190, 52, 29, 194, 32, 232,
149, 59, 11, 248, 175, 0, 58, 192, 49, 122, 163, 150, 219, 89, 167,
252, 186, 231, 45, 69, 58, 172, 134, 132, 171, 66, 174, 47, 95, 169,
233, 15, 230, 81, 158, 190, 85, 223, 12, 46, 131, 51, 122, 149, 217,
69, 237, 100, 216, 220, 20, 79, 242, 50, 76, 183, 86, 56, 12, 231,
32, 129, 26, 26, 186, 63, 105, 152, 179, 194, 68, 57, 0, 124, 217,
193, 191, 47, 73, 165, 88, 153, 21, 74, 69, 227, 112, 49, 195, 44,
153, 16, 211, 228, 13, 217, 186, 122, 184, 137, 237, 204, 224, 21, 202,
182, 120, 55, 172, 154, 216, 209, 30, 209, 62, 4, 122, 31, 184, 62,
160, 238, 170, 243, 203, 189, 221, 195, 140, 136, 249, 60, 103, 84, 216,
27, 5, 199, 122, 123, 76, 212, 40, 189, 104, 138, 112, 64, 109, 56,
194, 113, 86, 95, 159, 155, 1, 34, 106, 147, 28, 186, 55, 60, 211,
160, 20, 45, 192, 220, 84, 230, 34, 126, 71, 196, 123, 148, 49, 167,
87, 51, 188, 43, 228, 86, 144, 79, 175, 81, 198, 41, 183, 126, 7,
196, 66, 138, 143, 60, 41, 188, 193, 159, 161, 75, 198, 227, 241, 84,
61, 228, 150, 51, 8, 168, 173, 222, 53, 163, 227, 46, 186, 60, 163,
90, 137, 132, 246, 83, 70, 31, 50, 100, 75, 60, 250, 90, 37, 134,
155, 89, 198, 94, 86, 89, 254, 26, 35, 66, 5, 11, 120, 198, 204,
223, 114, 121, 63, 81, 117, 247, 200, 118, 26, 181, 230, 146, 231, 66,
42, 82, 239, 155, 83, 34, 62, 39, 86, 141, 4, 5, 249, 156, 221,
29, 245, 145, 116, 160, 248, 212, 84, 107, 161, 233, 213, 92, 54, 55,
67, 176, 126, 190, 85, 82, 254, 119, 248, 0, 207, 82, 67, 3, 64,
19, 1, 164, 62, 194, 7, 252, 93, 87, 185, 160, 255, 80, 83, 20,
104, 25, 251, 145, 153, 186, 8, 250, 210, 131, 2, 67, 33, 41, 151,
178, 97, 19, 180, 180, 13, 181, 111, 252, 70, 71, 101, 223, 92, 191,
234, 8, 191, 12, 141, 180, 27, 63, 187, 130, 202, 4, 241, 42, 49,
172, 103, 220, 81, 248, 194, 232, 159, 30, 253, 130, 166, 43, 221, 190,
13, 62, 198, 237, 247, 176, 102, 172, 218, 94, 64, 39, 142, 215, 12,
213, 103, 111, 42, 251, 143, 126, 8, 135, 182, 46, 209, 65, 124, 38,
67, 74, 141, 150, 193, 118, 9, 72, 92, 24, 2, 188, 151, 233, 114,
229, 0, 174, 167, 165, 131, 234, 123, 140, 3, 6, 78, 210, 106, 228,
55, 133, 164, 75, 53, 72, 85, 192, 175, 163, 254, 231, 168, 252, 51,
126, 165, 91, 242, 95, 111, 36, 180, 195, 145, 133, 80, 125, 61, 180,
130, 79, 4, 50, 212, 106, 253, 249, 209, 28, 237, 253, 2, 190, 140,
24, 56, 46, 186, 164, 39, 168, 214, 113, 48, 114, 22, 45, 96, 178,
177, 188, 250, 215, 115, 143, 33, 79, 167, 52, 155, 57, 234, 40, 116,
10, 35, 121, 0, 40, 182, 33, 192, 162, 69, 167, 78, 243, 167, 176,
246, 243, 255, 218, 9, 137, 235, 6, 46, 64, 219, 219, 205, 37, 246,
55, 188, 96, 240, 21, 31, 41, 111, 174, 98, 165, 59, 242, 197, 239,
228, 191, 131, 202, 248, 164, 11, 181, 157, 39, 141, 183, 180, 186, 121,
228, 70, 1, 201, 175, 195, 128, 40, 146, 76, 172, 24, 75, 107, 126,
207, 96, 165, 240, 224, 235, 178, 63, 246, 40, 0, 116, 172, 186, 250,
178, 176, 17, 149, 251, 217, 129, 252, 224, 227, 126, 203, 170, 138, 164,
210, 222, 223, 156, 81, 219, 163, 89, 241, 0, 246, 98, 16, 19, 180,
181, 111, 139, 54, 103, 149, 110, 138, 195, 82, 186, 254, 112, 142, 245,
12, 45, 215, 184, 131, 81, 166, 66, 18, 11, 255, 6, 37, 62, 218,
254, 185, 69, 231, 5, 169, 159, 56, 97, 118, 214, 10, 131, 139, 102,
60, 105, 76, 209, 239, 195, 214, 47, 172, 73, 247, 51, 115, 174, 50,
29, 157, 206, 130, 210, 13, 43, 234, 183, 95, 129, 183, 0, 68, 25,
146, 252, 29, 132, 91, 140, 145, 192, 34, 61, 178, 179, 160, 74, 190,
107, 1, 132, 169, 0, 6, 63, 58, 31, 246, 53, 142, 123, 19, 218,
132, 51, 123, 35, 238, 143, 201, 4, 118, 32, 155, 217, 13, 18, 85,
164, 24, 75, 109, 116, 220, 167, 185, 189, 132, 124, 163, 168, 201, 102,
117, 218, 149, 82, 137, 36, 158, 77, 171, 169, 51, 32, 11, 88, 71,
209, 76, 105, 243, 159, 158, 248, 66, 65, 178, 9, 197, 171, 134, 36,
176, 183, 84, 184, 13, 229, 33, 30, 158, 67, 59, 226, 14, 220, 47,
95, 219, 18, 19, 110, 185, 163, 226, 9, 104, 192, 179, 201, 117, 0,
243, 172, 112, 105, 96, 218, 123, 119, 99, 168, 142, 11, 61, 153, 52,
59, 42, 42, 60, 75, 185, 101, 231, 24, 43, 58, 149, 189, 167, 95,
122, 252, 51, 5, 128, 100, 235, 170, 105, 216, 17, 49, 28, 120, 208,
83, 19, 4, 192, 96, 81, 231, 97, 218, 139, 235, 83, 65, 84, 203,
152, 84, 33, 184, 233, 43, 254, 230, 253, 142, 14, 246, 4, 197, 209,
235, 244, 87, 179, 44, 196, 195, 42, 250, 160, 48, 5, 62, 136, 177,
105, 101, 186, 156, 133, 94, 236, 127, 204, 70, 110, 70, 235, 182, 102,
66, 128, 43, 76, 215, 168, 12, 151, 169, 89, 34, 245, 159, 89, 73,
237, 110, 85, 55, 104, 23, 157, 88, 56, 40, 8, 1, 186, 210, 140,
221, 202, 227, 191, 132, 89, 146, 98, 14, 0, 211, 15, 187, 118, 190,
40, 180, 120, 91, 230, 156, 155, 66, 79, 65, 33, 87, 32, 216, 114,
60, 61, 167, 59, 36, 14, 89, 59, 167, 171, 247, 225, 173, 134, 28,
244, 250, 128, 193, 75, 54, 245, 88, 121, 189, 196, 75, 65, 239, 153,
60, 128, 7, 213, 165, 112, 50, 198, 255, 207, 132, 170, 235, 82, 77,
188, 120, 191, 37, 177, 46, 128, 212, 65, 174, 84, 59, 82, 252, 137,
40, 3, 175, 105, 153, 198, 171, 141, 15, 164, 62, 205, 174, 75, 58,
44, 140, 199, 0, 61, 223, 109, 104, 62, 134, 116, 72, 239, 26, 9,
54, 132, 143, 192, 82, 112, 47, 215, 92, 25, 159, 50, 98, 209, 156,
62, 179, 89, 92, 143, 125, 184, 249, 69, 15, 120, 164, 185, 157, 122,
120, 149, 92, 10, 70, 38, 88, 30, 170, 15, 33, 161, 162, 216, 18,
15, 2, 128, 34, 38, 45, 236, 238, 101, 101, 137, 2, 15, 58, 126,
40, 202, 207, 125, 166, 0, 85, 100, 227, 59, 197, 136, 154, 120, 95,
219, 139, 221, 216, 155, 212, 183, 176, 69, 110, 35, 116, 147, 63, 237,
67, 84, 145, 109, 219, 170, 14, 47, 219, 73, 237, 154, 88, 145, 10,
230, 207, 127, 196, 227, 82, 158, 210, 99, 98, 127, 138, 25, 220, 59,
208, 33, 159, 14, 219, 242, 147, 162, 178, 170, 115, 10, 123, 49, 59,
49, 113, 124, 96, 220, 162, 154, 52, 20, 32, 108, 200, 87, 214, 140,
224, 65, 50, 196, 37, 31, 9, 197, 196, 30, 211, 12, 194, 67, 26,
90, 240, 105, 44, 198, 73, 233, 216, 93, 13, 189, 177, 212, 36, 214,
141, 3, 43, 246, 78, 141, 85, 175, 139, 194, 139, 119, 248, 204, 34,
56, 142, 91, 116, 92, 141, 146, 232, 26, 49, 172, 56, 212, 155, 253,
192, 12, 178, 103, 52, 171, 94, 200, 48, 132, 19, 254, 254, 213, 199,
175, 191, 178, 253, 82, 70, 179, 124, 112, 192, 208, 184, 127, 138, 207,
47, 121, 217, 176, 219, 125, 104, 13, 88, 190, 65, 20, 244, 108, 128,
97, 86, 67, 194, 172, 124, 74, 79, 87, 190, 9, 3, 76, 213, 149,
136, 188, 119, 1, 103, 250, 207, 58, 24, 133, 18, 212, 134, 8, 33,
248, 233, 229, 176, 252, 166, 87, 44, 223, 81, 231, 252, 135, 178, 152,
147, 243, 244, 28, 153, 153, 34, 72, 83, 80, 112, 222, 243, 133, 242,
170, 84, 73, 97, 209, 6, 157, 198, 23, 202, 1, 162, 204, 26, 202,
201, 245, 138, 193, 217, 163, 57, 245, 108, 247, 236, 172, 229, 90, 190,
133, 95, 194, 46, 233, 125, 50, 24, 154, 248, 188, 102, 171, 7, 174,
54, 133, 93, 219, 99, 184, 107, 42, 47, 39, 95, 25, 125, 27, 6,
1, 142, 248, 37, 55, 178, 25, 206, 189, 76, 230, 41, 241, 37, 197,
24, 236, 42, 156, 245, 162, 167, 126, 145, 74, 55, 170, 190, 151, 155,
221, 141, 141, 20, 207, 2, 234, 116, 64, 199, 134, 61, 91, 210, 72,
194, 249, 185, 186, 66, 18, 35, 99, 149, 191, 72, 219, 237, 44, 178,
137, 150, 74, 68, 11, 28, 36, 249, 198, 188, 29, 132, 116, 133, 101,
21, 82, 122, 50, 219, 52, 32, 165, 240, 249, 89, 70, 12, 90, 98,
220, 164, 105, 3, 204, 61, 89, 151, 145, 251, 36, 227, 158, 124, 98,
111, 65, 229, 67, 149, 2, 149, 180, 189, 109, 50, 226, 148, 215, 128,
50, 115, 64, 200, 89, 243, 118, 224, 56, 72, 201, 146, 203, 202, 203,
113, 75, 12, 92, 72, 213, 240, 118, 222, 130, 118, 39, 78, 74, 30,
36, 16, 45, 70, 126, 110, 34, 62, 158, 113, 34, 75, 217, 9, 222,
228, 66, 225, 112, 102, 5, 10, 73, 139, 57, 236, 188, 70, 176, 101,
132, 74, 61, 31, 197, 250, 223, 98, 145, 244, 237, 149, 125, 42, 63,
215, 51, 244, 196, 138, 191, 139, 159, 137, 113, 232, 36, 139, 25, 6,
99, 114, 206, 228, 40, 224, 234, 91, 132, 80, 63, 47, 81, 123, 202,
226, 162, 248, 155, 179, 177, 109, 46, 119, 177, 61, 74, 68, 17, 30,
127, 67, 87, 72, 253, 15, 222, 31, 240, 114, 205, 5, 104, 232, 104,
41, 9, 237, 172, 250, 196, 194, 38, 109, 122, 235, 51, 29, 92, 117,
73, 239, 182, 115, 81, 71, 171, 220, 226, 228, 17, 172, 167, 179, 149,
5, 142, 168, 187, 59, 67, 146, 74, 135, 185, 6, 199, 67, 39, 196,
123, 108, 8, 150, 83, 137, 22, 71, 110, 69, 148, 45, 12, 44, 180,
225, 107, 106, 54, 186, 176, 18, 120, 127, 203, 54, 92, 191, 111, 186,
210, 91, 231, 97, 144, 102, 1, 100, 50, 25, 141, 153, 188, 29, 251,
223, 120, 213, 56, 56, 66, 8, 75, 221, 73, 55, 200, 241, 32, 146,
81, 191, 155, 212, 167, 132, 194, 212, 255, 0, 98, 163, 193, 159, 9,
191, 4, 81, 27, 48, 145, 179, 69, 190, 178, 238, 175, 212, 100, 105,
3, 246, 30, 82, 123, 16, 246, 212, 173, 197, 67, 127, 11, 65, 94,
10, 54, 172, 85, 88, 214, 219, 186, 152, 112, 83, 193, 224, 174, 107,
246, 176, 167, 35, 232, 102, 216, 112, 77, 132, 212, 146, 64, 218, 14,
9, 46, 219, 28, 130, 23, 23, 50, 20, 68, 211, 179, 27, 217, 158,
195, 209, 232, 67, 3, 20, 254, 90, 233, 162, 95, 195, 23, 231, 136,
141, 16, 163, 2, 240, 232, 38, 249, 15, 139, 34, 183, 55, 97, 93,
131, 223, 101, 253, 74, 159, 130, 182, 44, 153, 112, 233, 213, 205, 75,
97, 59, 122, 65, 198, 204, 163, 162, 144, 111, 199, 247, 132, 244, 111,
206, 45, 55, 114, 117, 124, 0, 6, 76, 173, 54, 166, 205, 229, 212,
94, 138, 62, 109, 120, 28, 234, 162, 82, 218, 124, 194, 245, 237, 206,
144, 155, 153, 211, 251, 94, 193, 10, 147, 247, 197, 170, 55, 251, 126,
154, 148, 8, 18, 255, 131, 196, 126, 166, 198, 137, 165, 87, 20, 42,
6, 83, 218, 237, 225, 211, 226, 135, 149, 3, 174, 88, 216, 227, 241,
68, 208, 112, 8, 235, 116, 37, 35, 105, 164, 84, 65, 122, 129, 229,
77, 124, 22, 209, 153, 170, 223, 136, 131, 184, 30, 146, 167, 95, 198,
60, 130, 3, 33, 183, 4, 100, 49, 247, 120, 191, 75, 248, 50, 89,
78, 186, 214, 172, 166, 38, 93, 163, 58, 160, 211, 121, 36, 98, 221,
108, 177, 154, 106, 241, 113, 63, 250, 234, 230, 168, 36, 144, 218, 95,
49, 98, 93, 55, 105, 34, 106, 37, 188, 157, 16, 252, 121, 55, 68,
247, 172, 151, 164, 236, 184, 71, 184, 161, 0, 185, 193, 191, 223, 206,
213, 224, 82, 117, 38, 98, 178, 41, 195, 85, 153, 212, 205, 184, 22,
187, 170, 97, 158, 115, 11, 82, 8, 88, 55, 183, 87, 131, 61, 128,
194, 227, 158, 135, 249, 196, 157, 141, 246, 132, 240, 151, 236, 33, 112,
148, 115, 2, 222, 74, 65, 108, 43, 94, 69, 220, 235, 243, 106, 107,
203, 170, 233, 135, 98, 35, 70, 146, 197, 41, 159, 212, 197, 11, 117,
206, 114, 43, 146, 20, 155, 246, 43, 8, 43, 107, 189, 2, 154, 243,
189, 254, 196, 217, 204, 49, 139, 221, 237, 120, 149, 125, 120, 162, 146,
253, 144, 38, 253, 226, 161, 84, 6, 159, 86, 255, 125, 153, 96, 241,
21, 191, 169, 172, 110, 70, 203, 70, 192, 15, 221, 248, 45, 11, 108,
216, 168, 240, 117, 151, 76, 106, 46, 125, 57, 116, 28, 27, 102, 246,
241, 199, 150, 54, 17, 235, 211, 181, 29, 102, 201, 175, 225, 97, 210,
68, 96, 52, 180, 89, 229, 226, 217, 221, 59, 65, 53, 108, 70, 184,
39, 44, 248, 42, 44, 148, 27, 233, 227, 77, 165, 57, 36, 23, 61,
222, 98, 191, 244, 202, 184, 7, 79, 255, 153, 171, 33, 158, 237, 140,
122, 97, 155, 104, 145, 15, 202, 27, 242, 215, 22, 30, 118, 155, 239,
80, 72, 168, 29, 185, 237, 5, 155, 27, 96, 160, 215, 14, 139, 213,
174, 52, 58, 130, 20, 45, 255, 62, 233, 95, 198, 153, 30, 111, 21,
81, 211, 208, 201, 254, 236, 239, 217, 213, 170, 239, 61, 9, 64, 170,
241, 153, 205, 148, 181, 187, 45, 155, 97, 141, 190, 195, 61, 176, 214,
122, 197, 226, 13, 23, 175, 96, 166, 204, 24, 4, 41, 99, 7, 74,
96, 189, 45, 77, 78, 120, 46, 192, 181, 133, 180, 15, 230, 24, 73,
72, 177, 116, 52, 240, 63, 196, 57, 156, 77, 192, 232, 42, 170, 82,
5, 175, 233, 166, 173, 174, 156, 177, 11, 136, 60, 245, 157, 123, 244,
52, 13, 73, 90, 129, 135, 129, 81, 203, 147, 180, 97, 28, 107, 88,
143, 13, 239, 218, 243, 92, 199, 182, 181, 129, 4, 49, 110, 31, 68,
24, 107, 75, 255, 111, 113, 9, 252, 245, 243, 19, 136, 164, 155, 9,
11, 163, 225, 52, 189, 156, 211, 3, 218, 73, 17, 253, 74, 24, 91,
211, 185, 14, 108, 171, 118, 187, 178, 109, 108, 141, 25, 204, 83, 249,
54, 115, 120, 249, 37, 179, 213, 188, 228, 190, 139, 160, 201, 219, 6,
73, 70, 36, 170, 35, 42, 199, 2, 162, 57, 25, 2, 242, 239, 29,
221, 248, 102, 203, 151, 42, 134, 58, 212, 220, 207, 183, 223, 249, 115,
164, 182, 198, 5, 75, 204, 71, 164, 157, 14, 255, 44, 178, 29, 123,
9, 0, 233, 74, 20, 129, 9, 128, 168, 125, 254, 165, 4, 150, 60,
194, 164, 249, 13, 228, 144, 81, 57, 95, 145, 189, 108, 124, 131, 16,
30, 40, 113, 49, 209, 149, 141, 1, 127, 228, 113, 244, 135, 207, 179,
125, 17, 7, 241, 52, 49, 83, 93, 210, 229, 138, 86, 136, 112, 110,
191, 141, 25, 172, 38, 235, 247, 109, 13, 171, 150, 136, 93, 233, 134,
23, 161, 129, 75, 184, 18, 112, 217, 128, 180, 254, 207, 152, 128, 234,
110, 57, 84, 219, 157, 215, 109, 117, 241, 193, 187, 214, 146, 0, 247,
204, 235, 161, 42, 108, 112, 207, 199, 26, 107, 25, 142, 46, 7, 23,
41, 90, 186, 191, 138, 47, 91, 212, 198, 182, 224, 22, 48, 7, 231,
36, 211, 20, 96, 18, 160, 19, 180, 140, 96, 183, 97, 80, 230, 219,
29, 57, 247, 102, 210, 76, 111, 210, 171, 179, 167, 75, 33, 108, 158,
151, 92, 235, 225, 159, 159, 19, 125, 215, 209, 190, 244, 201, 218, 77,
244, 135, 172, 204, 166, 221, 156, 240, 15, 126, 110, 231, 38, 242, 103,
159, 162, 23, 215, 253, 39, 220, 78, 130, 236, 73, 6, 252, 211, 108,
215, 94, 153, 3, 115, 171, 218, 17, 156, 129, 48, 77, 244, 247, 222,
120, 205, 20, 220, 216, 94, 132, 196, 243, 129, 234, 146, 30, 35, 103,
65, 247, 183, 136, 253, 74, 181, 16, 150, 175, 206, 137, 13, 147, 65,
40, 185, 251, 106, 143, 82, 12, 97, 216, 26, 164, 11, 123, 100, 172,
92, 90, 59, 48, 161, 255, 52, 89, 45, 164, 121, 74, 66, 157, 226,
112, 171, 135, 173, 99, 161, 14, 170, 201, 103, 81, 78, 12, 239, 192,
44, 155, 179, 109, 107, 184, 166, 89, 45, 223, 41, 165, 239, 85, 19,
116, 144, 184, 176, 22, 4, 99, 13, 181, 2, 4, 214, 49, 129, 32,
182, 110, 172, 85, 138, 231, 58, 159, 144, 42, 209, 238, 161, 207, 150,
19, 255, 98, 221, 121, 114, 209, 186, 32, 101, 168, 202, 231, 109, 148,
184, 112, 127, 100, 53, 70, 75, 60, 23, 127, 93, 30, 92, 87, 116,
204, 85, 73, 160, 250, 77, 129, 214, 238, 253, 132, 121, 188, 213, 84,
139, 229, 0, 219, 124, 84, 173, 66, 11, 177, 245, 120, 2, 71, 65,
241, 78, 202, 195, 13, 66, 165, 236, 97, 212, 22, 99, 6, 221, 195,
26, 208, 230, 184, 11, 14, 77, 167, 33, 186, 178, 181, 136, 117, 54,
92, 222, 250, 144, 11, 221, 69, 54, 51, 34, 66, 205, 130, 106, 162,
174, 57, 2, 165, 92, 212, 240, 164, 73, 243, 147, 56, 189, 41, 251,
225, 254, 70, 28, 70, 28, 108, 107, 228, 203, 166, 188, 59, 77, 114,
187, 2, 101, 194, 85, 212, 84, 235, 149, 231, 142, 80, 255, 152, 158,
27, 19, 48, 247, 23, 111, 40, 27, 20, 84, 12, 142, 171, 20, 197,
217, 5, 97, 209, 215, 28, 168, 76, 178, 214, 23, 29, 222, 234, 38,
39, 15, 147, 75, 84, 232, 156, 202, 233, 10, 63, 28, 230, 254, 168,
64, 116, 96, 116, 96, 129, 167, 61, 112, 112, 215, 241, 67, 96, 30,
144, 121, 249, 14, 28, 193, 202, 239, 220, 222, 30, 115, 34, 58, 190,
249, 202, 215, 90, 87, 32, 83, 178, 54, 91, 198, 155, 213, 158, 0,
230, 18, 63, 42, 100, 219, 251, 128, 160, 254, 121, 80, 181, 97, 84,
107, 138, 13, 115, 61, 241, 242, 213, 118, 111, 245, 26, 86, 166, 133,
101, 110, 191, 10, 128, 133, 161, 245, 205, 21, 1, 33, 30, 18, 115,
158, 27, 190, 234, 98, 60, 251, 57, 206, 111, 254, 111, 170, 62, 223,
147, 245, 24, 214, 120, 35, 168, 40, 98, 64, 32, 197, 163, 33, 151,
99, 126, 38, 117, 235, 255, 85, 234, 226, 168, 149, 122, 180, 1, 196,
235, 137, 191, 64, 254, 46, 183, 111, 105, 11, 125, 33, 244, 85, 148,
74, 195, 206, 15, 93, 60, 50, 170, 34, 123, 199, 199, 239, 172, 52,
37, 109, 64, 17, 214, 98, 120, 22, 225, 94, 168, 55, 118, 89, 253,
9, 51, 123, 242, 62, 201, 129, 78, 29, 185, 34, 130, 242, 46, 125,
195, 211, 54, 242, 145, 181, 98, 94, 121, 191, 22, 29, 68, 101, 106,
236, 168, 185, 35, 20, 38, 114, 109, 30, 53, 0, 136, 114, 197, 26,
176, 126, 171, 200, 1, 49, 252, 22, 22, 189, 243, 114, 193, 250, 197,
42, 9, 34, 214, 73, 209, 244, 136, 129, 168, 160, 206, 76, 156, 172,
175, 174, 195, 107, 242, 34, 224, 35, 166, 221, 94, 140, 5, 52, 10,
79, 71, 23, 2, 91, 16, 200, 131, 172, 25, 206, 249, 128, 102, 32,
212, 244, 218, 154, 215, 16, 200, 129, 26, 117, 24, 3, 154, 29, 164,
22, 105, 112, 53, 239, 154, 158, 1, 104, 48, 198, 25, 212, 85, 218,
91, 133, 40, 92, 143, 195, 131, 131, 61, 245, 50, 115, 252, 182, 217,
63, 167, 163, 144, 246, 211, 62, 5, 140, 217, 191, 249, 17, 148, 191,
43, 188, 44, 199, 173, 247, 255, 19, 122, 160, 79, 150, 90, 11, 204,
6, 9, 113, 129, 19, 79, 208, 103, 65, 240, 85, 76, 59, 176, 71,
239, 236, 150, 94, 252, 55, 48, 21, 227, 221, 2, 59, 85, 111, 116,
64, 120, 49, 58, 160, 153, 46, 17, 199, 32, 138, 38, 109, 203, 112,
205, 2, 215, 88, 165, 13, 176, 200, 87, 185, 238, 129, 197, 109, 123,
229, 18, 125, 115, 217, 203, 110, 79, 36, 94, 48, 215, 236, 190, 213,
103, 58, 96, 62, 87, 31, 106, 170, 115, 6, 214, 57, 53, 220, 237,
17, 247, 251, 8, 236, 140, 251, 110, 74, 160, 146, 14, 55, 96, 102,
223, 20, 123, 26, 36, 211, 164, 57, 72, 187, 198, 146, 92, 211, 56,
92, 212, 118, 22, 203, 246, 237, 51, 242, 124, 104, 237, 240, 248, 85,
44, 49, 195, 156, 148, 217, 61, 187, 163, 91, 186, 8, 31, 30, 125,
202, 14, 231, 29, 83, 22, 156, 179, 253, 228, 111, 49, 251, 224, 96,
231, 7, 202, 141, 108, 169, 41, 241, 221, 204, 176, 209, 90, 37, 72,
11, 139, 29, 154, 29, 122, 118, 156, 3, 134, 108, 84, 98, 33, 48,
138, 199, 77, 108, 168, 102, 229, 133, 139, 39, 212, 241, 175, 4, 158,
242, 253, 196, 188, 236, 102, 165, 166, 20, 93, 79, 4, 100, 73, 186,
243, 168, 173, 120, 82, 198, 176, 192, 168, 142, 70, 153, 151, 247, 86,
195, 208, 163, 70, 234, 35, 253, 159, 7, 205, 164, 23, 197, 212, 144,
248, 159, 106, 219, 28, 217, 17, 129, 44, 223, 44, 221, 73, 138, 237,
46, 41, 95, 44, 205, 217, 132, 136, 196, 91, 29, 128, 179, 197, 242,
136, 79, 41, 251, 117, 74, 121, 212, 234, 143, 91, 69, 95, 127, 39,
219, 206, 82, 225, 1, 136, 8, 179, 65, 221, 184, 202, 153, 13, 148,
4, 226, 109, 46, 216, 66, 115, 224, 156, 69, 223, 218, 25, 71, 213,
254, 56, 66, 106, 159, 91, 84, 88, 245, 14, 20, 4, 87, 95, 6,
32, 175, 161, 218, 168, 159, 167, 150, 92, 106, 162, 24, 219, 67, 73,
114, 7, 154, 64, 236, 233, 180, 127, 10, 127, 182, 98, 216, 34, 2,
141, 167, 107, 253, 93, 154, 85, 128, 57, 134, 185, 192, 113, 74, 214,
76, 93, 223, 90, 132, 93, 105, 245, 35, 219, 163, 114, 239, 100, 138,
143, 98, 236, 114, 34, 188, 17, 40, 0, 20, 214, 38, 103, 78, 174,
246, 184, 90, 236, 115, 223, 184, 127, 135, 54, 199, 254, 110, 142, 2,
208, 8, 208, 195, 35, 80, 235, 34, 218, 38, 43, 175, 34, 126, 38,
244, 70, 192, 94, 108, 72, 27, 147, 84, 216, 102, 110, 83, 148, 48,
108, 54, 31, 204, 193, 84, 247, 20, 44, 159, 155, 253, 181, 118, 114,
252, 22, 56, 117, 242, 24, 142, 150, 31, 142, 181, 216, 128, 113, 34,
179, 153, 40, 209, 79, 11, 74, 204, 117, 6, 221, 118, 56, 135, 146,
220, 148, 236, 15, 122, 230, 99, 235, 199, 166, 254, 75, 227, 45, 202,
100, 236, 115, 190, 89, 108, 43, 73, 141, 202, 177, 208, 198, 9, 227,
239, 92, 69, 146, 202, 199, 248, 29, 194, 159, 108, 87, 49, 196, 221,
98, 125, 247, 43, 230, 217, 60, 108, 44, 72, 142, 174, 162, 203, 179,
102, 28, 180, 90, 193, 94, 167, 182, 230, 87, 45, 142, 127, 35, 52,
69, 132, 255, 135, 133, 158, 7, 233, 128, 29, 17, 42, 206, 254, 222,
249, 158, 141, 89, 38, 211, 130, 163, 171, 254, 120, 93, 32, 138, 150,
217, 40, 136, 206, 201, 126, 82, 82, 154, 246, 99, 70, 194, 213, 124,
86, 61, 31, 178, 235, 253, 72, 238, 77, 22, 242, 133, 5, 130, 126,
175, 137, 158, 197, 169, 35, 184, 147, 87, 35, 65, 87, 180, 55, 46,
188, 130, 101, 55, 202, 199, 176, 62, 103, 233, 25, 50, 107, 18, 191,
11, 227, 106, 83, 0, 155, 202, 170, 229, 104, 103, 179, 236, 146, 46,
121, 190, 22, 225, 98, 162, 37, 236, 33, 20, 51, 194, 168, 243, 252,
65, 179, 40, 120, 217, 111, 96, 38, 55, 46, 125, 188, 180, 167, 241,
232, 104, 224, 3, 238, 50, 65, 222, 190, 145, 166, 73, 90, 156, 128,
224, 44, 22, 0, 187, 81, 15, 228, 158, 189, 113, 164, 249, 32, 236,
243, 233, 169, 101, 42, 3, 102, 8, 4, 60, 196, 46, 139, 100, 154,
50, 67, 230, 207, 105, 229, 7, 111, 97, 95, 245, 120, 121, 85, 26,
178, 153, 200, 86, 148, 155, 90, 110, 244, 89, 192, 207, 106, 213, 253,
62, 241, 222, 148, 121, 46, 210, 75, 79, 98, 15, 171, 206, 164, 51,
235, 115, 216, 119, 210, 90, 238, 152, 32, 196, 39, 120, 153, 254, 64,
251, 110, 35, 171, 158, 161, 56, 86, 84, 0, 64, 151, 9, 152, 174,
10, 231, 91, 139, 22, 63, 54, 206, 33, 167, 44, 114, 203, 130, 160,
178, 85, 100, 66, 79, 59, 221, 3, 163, 96, 147, 69, 207, 152, 20,
7, 164, 169, 110, 22, 204, 72, 39, 222, 24, 198, 46, 240, 62, 18,
105, 133, 220, 151, 82, 130, 251, 75, 83, 180, 57, 197, 45, 74, 71,
3, 8, 91, 157, 155, 96, 107, 99, 74, 173, 21, 69, 131, 202, 64,
70, 29, 154, 119, 71, 168, 22, 97, 31, 235, 80, 162, 134, 109, 250,
7, 130, 249, 86, 164, 110, 200, 140, 217, 42, 133, 162, 29, 180, 52,
66, 190, 150, 250, 46, 205, 240, 164, 233, 191, 88, 33, 154, 132, 154,
185, 12, 124, 41, 9, 222, 172, 221, 114, 100, 215, 178, 52, 91, 118,
42, 229, 207, 254, 49, 179, 79, 159, 24, 86, 246, 195, 6, 192, 124,
230, 36, 217, 177, 192, 27, 30, 45, 57, 19, 87, 196, 53, 70, 30,
126, 120, 196, 45, 168, 218, 195, 80, 200, 56, 84, 1, 11, 14, 163,
230, 121, 244, 229, 244, 69, 196, 115, 142, 44, 157, 124, 66, 143, 130,
141, 211, 251, 136, 133, 112, 83, 162, 119, 66, 212, 173, 100, 11, 213,
215, 3, 129, 75, 183, 196, 237, 135, 209, 240, 59, 160, 185, 232, 84,
79, 210, 151, 125, 62, 204, 9, 89, 255, 45, 98, 162, 216, 185, 240,
117, 222, 158, 186, 96, 219, 17, 4, 119, 238, 170, 105, 173, 73, 242,
131, 94, 97, 197, 52, 72, 59, 1, 114, 6, 210, 243, 15, 152, 196,
60, 243, 28, 12, 175, 74, 8, 169, 7, 57, 15, 65, 242, 189, 113,
29, 9, 53, 153, 194, 142, 56, 33, 112, 218, 17, 191, 75, 128, 208,
227, 101, 223, 182, 200, 41, 72, 155, 189, 7, 106, 85, 243, 193, 250,
98, 168, 248, 200, 100, 203, 52, 31, 238, 76, 231, 147, 238, 150, 142,
116, 251, 154, 238, 36, 95, 91, 210, 116, 189, 209, 110, 100, 236, 33,
131, 115, 209, 61, 184, 74, 199, 101, 145, 128, 183, 60, 97, 179, 210,
206, 215, 197, 5, 131, 206, 11, 173, 112, 86, 63, 36, 166, 47, 205,
144, 89, 185, 182, 2, 47, 20, 29, 234, 248, 97, 246, 204, 239, 43,
175, 204, 100, 219, 224, 114, 37, 122, 201, 171, 59, 13, 121, 120, 33,
224, 128, 71, 254, 55, 49, 188, 48, 97, 5, 164, 145, 55, 115, 254,
236, 28, 244, 2, 151, 79, 71, 218, 159, 148, 243, 241, 88, 182, 95,
23, 233, 136, 247, 250, 98, 222, 232, 148, 58, 232, 161, 93, 1, 162,
185, 82, 42, 71, 111, 158, 111, 216, 152, 158, 26, 130, 194, 95, 145,
213, 18, 88, 169, 109, 85, 71, 163, 4, 4, 206, 44, 160, 96, 4,
0, 144, 201, 73, 18, 98, 1, 162, 13, 179, 58, 240, 139, 88, 84,
144, 192, 69, 226, 83, 108, 92, 183, 74, 78, 168, 223, 208, 70, 205,
219, 220, 5, 207, 147, 220, 239, 130, 88, 226, 58, 221, 237, 214, 164,
49, 196, 127, 3, 141, 124, 238, 3, 146, 217, 4, 60, 178, 213, 64,
67, 225, 253, 209, 8, 89, 82, 104, 78, 191, 104, 82, 1, 209, 224,
31, 72, 57, 193, 128, 183, 38, 239, 91, 49, 219, 12, 235, 141, 128,
134, 62, 181, 241, 111, 32, 133, 6, 35, 154, 197, 37, 17, 70, 68,
219, 163, 132, 86, 242, 45, 166, 245, 120, 83, 13, 47, 135, 74, 62,
199, 242, 135, 78, 183, 129, 104, 190, 95, 214, 100, 5, 30, 207, 152,
122, 242, 227, 96, 211, 240, 43, 161, 23, 212, 216, 129, 140, 160, 222,
30, 121, 100, 189, 62, 160, 244, 18, 187, 78, 154, 55, 7, 214, 76,
176, 86, 93, 124, 192, 101, 65, 150, 250, 227, 88, 68, 55, 161, 224,
237, 77, 201, 135, 63, 196, 59, 50, 248, 219, 160, 228, 31, 149, 153,
102, 226, 122, 138, 192, 177, 111, 16, 241, 107, 13, 15, 152, 13, 101,
46, 171, 54, 58, 25, 97, 23, 112, 185, 100, 139, 17, 40, 147, 47,
221, 173, 16, 120, 12, 149, 250, 246, 81, 99, 149, 10, 159, 1, 81,
12, 235, 229, 251, 199, 211, 210, 85, 86, 189, 54, 122, 172, 197, 86,
235, 112, 178, 76, 40, 6, 130, 120, 18, 101, 245, 244, 235, 19, 227,
103, 74, 170, 152, 245, 84, 148, 48, 23, 29, 248, 218, 169, 238, 86,
116, 2, 45, 180, 136, 175, 235, 150, 124, 30, 54, 106, 155, 110, 124,
169, 167, 36, 78, 208, 225, 156, 98, 161, 76, 219, 247, 85, 90, 252,
160, 236, 220, 71, 7, 174, 175, 37, 166, 102, 25, 114, 181, 46, 208,
231, 216, 24, 46, 77, 215, 137, 218, 144, 45, 96, 18, 64, 238, 186,
188, 98, 228, 210, 8, 238, 171, 124, 77, 149, 93, 11, 205, 128, 46,
99, 34, 178, 193, 114, 28, 177, 25, 37, 228, 213, 213, 89, 123, 27,
165, 173, 236, 146, 6, 219, 231, 115, 162, 171, 183, 101, 32, 123, 234,
121, 9, 13, 230, 136, 120, 208, 201, 210, 27, 176, 174, 84, 183, 62,
59, 86, 142, 51, 4, 206, 131, 224, 69, 151, 13, 131, 106, 119, 217,
149, 226, 173, 214, 240, 62, 191, 19, 157, 161, 39, 38, 147, 124, 242,
254, 207, 108, 135, 51, 43, 224, 159, 115, 193, 23, 111, 81, 115, 166,
78, 109, 195, 1, 128, 175, 177, 157, 177, 56, 145, 236, 90, 50, 187,
57, 156, 209, 10, 71, 155, 52, 3, 196, 0, 155, 174, 213, 35, 54,
191, 8, 49, 207, 245, 229, 210, 81, 134, 102, 186, 1, 58, 75, 221,
13, 230, 159, 206, 176, 36, 106, 81, 10, 122, 217, 63, 225, 15, 8,
161, 221, 242, 75, 124, 26, 58, 17, 203, 0, 109, 102, 58, 251, 24,
40, 240, 95, 188, 111, 136, 74, 130, 160, 235, 237, 91, 251, 95, 0,
68, 174, 106, 107, 172, 153, 93, 31, 67, 80, 1, 187, 153, 144, 243,
177, 87, 224, 202, 98, 51, 111, 248, 79, 222, 190, 191, 107, 206, 47,
224, 228, 74, 205, 32, 59, 18, 147, 153, 183, 125, 134, 89, 0, 39,
164, 95, 67, 239, 138, 91, 70, 249, 172, 59, 198, 186, 3, 18, 117,
39, 97, 120, 16, 167, 230, 89, 155, 76, 1, 210, 25, 185, 161, 15,
43, 219, 195, 181, 208, 8, 59, 226, 133, 59, 121, 118, 174, 127, 153,
221, 40, 98, 115, 206, 152, 240, 76, 112, 205, 138, 121, 55, 189, 71,
145, 45, 165, 181, 232, 88, 81, 61, 238, 181, 187, 36, 84, 84, 237,
248, 90, 164, 255, 227, 192, 218, 244, 49, 93, 189, 93, 35, 249, 1,
128, 7, 137, 61, 107, 213, 91, 85, 28, 178, 9, 35, 43, 219, 209,
27, 192, 83, 226, 131, 0, 41, 225, 158, 191, 17, 76, 49, 31, 239,
219, 70, 108, 181, 76, 174, 241, 138, 81, 254, 168, 36, 197, 93, 36,
145, 158, 241, 64, 237, 250, 87, 231, 174, 161, 167, 106, 117, 84, 217,
33, 63, 109, 157, 21, 151, 107, 131, 28, 251, 223, 18, 193, 20, 230,
28, 108, 4, 84, 228, 153, 163, 84, 1, 108, 93, 227, 238, 127, 250,
135, 38, 237, 194, 186, 173, 2, 43, 33, 66, 45, 252, 233, 122, 100,
201, 229, 72, 27, 151, 221, 209, 54, 193, 75, 77, 34, 27, 64, 153,
236, 218, 114, 4, 162, 207, 40, 146, 53, 185, 168, 172, 135, 111, 154,
40, 209, 172, 209, 106, 181, 162, 161, 170, 89, 0, 220, 193, 24, 8,
14, 105, 202, 234, 123, 20, 236, 216, 54, 206, 70, 177, 41, 112, 122,
162, 120, 109, 87, 178, 57, 171, 162, 210, 159, 5, 48, 13, 40, 194,
33, 137, 164, 156, 89, 189, 216, 189, 180, 136, 173, 211, 23, 250, 28,
25, 137, 155, 54, 255, 173, 30, 110, 179, 145, 33, 106, 229, 99, 31,
116, 72, 89, 247, 134, 111, 225, 65, 98, 120, 160, 161, 164, 46, 102,
42, 42, 155, 135, 171, 204, 33, 222, 45, 43, 196, 192, 73, 219, 86,
30, 40, 178, 115, 142, 131, 121, 240, 73, 68, 212, 158, 132, 35, 90,
0, 60, 70, 4, 119, 4, 155, 9, 161, 99, 245, 80, 1, 188, 76,
63, 251, 102, 252, 53, 194, 92, 149, 49, 165, 124, 216, 83, 208, 142,
212, 170, 49, 143, 246, 176, 175, 82, 148, 46, 203, 77, 44, 91, 176,
86, 216, 186, 176, 114, 193, 66, 161, 78, 113, 156, 25, 144, 216, 187,
42, 146, 10, 169, 132, 61, 90, 84, 3, 106, 149, 106, 5, 121, 185,
126, 198, 179, 244, 179, 87, 169, 130, 118, 215, 20, 80, 211, 30, 236,
178, 57, 168, 104, 159, 160, 95, 137, 159, 164, 31, 165, 210, 175, 66,
103, 1, 155, 26, 21, 106, 52, 188, 137, 27, 18, 77, 32, 185, 131,
39, 12, 56, 36, 218, 121, 201, 231, 21, 134, 24, 168, 153, 250, 83,
201, 170, 14, 49, 152, 19, 100, 46, 184, 193, 19, 225, 146, 85, 36,
166, 63, 127, 211, 107, 53, 122, 79, 28, 255, 219, 221, 169, 143, 122,
150, 111, 132, 245, 69, 248, 77, 70, 75, 161, 209, 239, 169, 200, 177,
115, 49, 61, 34, 48, 138, 54, 198, 153, 36, 19, 178, 28, 153, 169,
152, 40, 75, 157, 208, 146, 254, 248, 49, 76, 191, 240, 122, 242, 155,
114, 168, 124, 59, 200, 243, 25, 46, 51, 77, 163, 92, 154, 183, 66,
155, 111, 69, 208, 230, 174, 162, 172, 232, 231, 86, 117, 150, 150, 108,
74, 137, 5, 210, 166, 21, 185, 192, 12, 187, 247, 146, 241, 157, 0,
71, 248, 79, 60, 101, 165, 89, 192, 236, 246, 2, 130, 153, 210, 4,
169, 112, 47, 87, 87, 30, 143, 202, 83, 112, 49, 154, 176, 236, 177,
182, 223, 49, 125, 187, 51, 161, 143, 80, 32, 68, 42, 46, 71, 203,
48, 90, 155, 0, 92, 69, 28, 13, 155, 38, 162, 178, 202, 57, 17,
70, 141, 93, 44, 194, 0, 142, 74, 215, 48, 195, 125, 99, 247, 233,
230, 13, 37, 11, 238, 76, 45, 128, 116, 74, 122, 200, 167, 107, 219,
201, 185, 252, 86, 122, 225, 59, 242, 15, 83, 80, 253, 63, 169, 9,
246, 52, 73, 154, 201, 169, 131, 249, 228, 192, 192, 157, 5, 160, 8,
193, 82, 214, 245, 255, 7, 4, 37, 171, 129, 136, 191, 25, 90, 57,
167, 31, 251, 59, 16, 241, 179, 86, 203, 30, 11, 143, 194, 181, 118,
28, 193, 246, 162, 8, 84, 24, 204, 15, 181, 18, 202, 208, 64, 61,
177, 14, 120, 161, 252, 65, 212, 48, 187, 54, 204, 114, 160, 227, 62,
79, 219, 222, 239, 74, 218, 71, 165, 110, 92, 93, 36, 117, 73, 105,
55, 73, 120, 19, 185, 30, 129, 144, 194, 42, 235, 104, 202, 215, 236,
242, 246, 205, 3, 89, 187, 127, 185, 89, 214, 80, 56, 111, 12, 76,
70, 47, 222, 139, 37, 114, 215, 114, 191, 183, 31, 156, 0, 1, 238,
19, 30, 80, 139, 34, 1, 68, 93, 38, 44, 18, 189, 23, 182, 7,
176, 83, 17, 120, 113, 47, 102, 238, 93, 128, 90, 197, 104, 126, 178,
44, 112, 232, 179, 144, 206, 100, 146, 23, 39, 145, 129, 85, 124, 121,
72, 166, 248, 157, 82, 23, 2, 74, 53, 10, 206, 29, 2, 114, 24,
120, 215, 97, 64, 185, 48, 98, 220, 138, 91, 255, 40, 126, 247, 127,
74, 224, 211, 28, 5, 250, 105, 132, 225, 139, 157, 158, 229, 226, 82,
215, 95, 18, 225, 77, 187, 126, 175, 110, 140, 128, 154, 234, 240, 78,
17, 220, 237, 248, 91, 180, 204, 144, 234, 160, 23, 1, 145, 248, 15,
221, 29, 151, 50, 154, 94, 69, 94, 237, 102, 213, 232, 199, 187, 153,
164, 45, 146, 121, 204, 253, 25, 140, 102, 236, 16, 232, 49, 74, 40,
97, 248, 185, 20, 76, 44, 166, 176, 239, 226, 169, 64, 128, 102, 196,
26, 161, 252, 75, 156, 43, 32, 86, 180, 133, 142, 156, 213, 157, 126,
72, 4, 30, 111, 251, 212, 249, 69, 175, 128, 116, 115, 218, 128, 21,
248, 189, 50, 56, 240, 186, 202, 24, 57, 167, 131, 5, 246, 40, 106,
50, 126, 134, 45, 43, 34, 246, 156, 189, 20, 135, 231, 252, 90, 14,
49, 61, 53, 84, 95, 240, 49, 249, 193, 158, 225, 52, 100, 11, 13,
157, 199, 216, 89, 216, 22, 250, 129, 252, 152, 78, 42, 204, 54, 222,
219, 104, 95, 146, 248, 32, 143, 226, 19, 152, 20, 207, 78, 116, 141,
212, 154, 123, 40, 197, 157, 197, 136, 30, 99, 81, 16, 141, 77, 122,
38, 164, 69, 7, 121, 10, 102, 66, 24, 158, 120, 55, 5, 93, 67,
216, 216, 76, 242, 211, 22, 187, 61, 39, 107, 227, 239, 23, 149, 186,
164, 185, 99, 91, 146, 218, 183, 70, 196, 98, 109, 69, 52, 71, 165,
66, 226, 39, 86, 209, 254, 132, 127, 27, 89, 98, 161, 63, 126, 72,
7, 0, 140, 81, 61, 203, 60, 66, 248, 187, 75, 187, 200, 137, 60,
219, 120, 169, 78, 146, 99, 255, 72, 60, 83, 26, 134, 249, 210, 46,
109, 122, 147, 34, 198, 100, 254, 67, 213, 20, 144, 0, 77, 204, 67,
215, 73, 82, 65, 31, 232, 121, 250, 104, 179, 129, 148, 91, 156, 61,
179, 86, 79, 83, 57, 105, 49, 37, 172, 106, 231, 183, 127, 37, 105,
47, 121, 219, 126, 121, 39, 225, 134, 241, 69, 234, 22, 254, 165, 244,
117, 199, 98, 45, 108, 190, 25, 78, 224, 128, 84, 211, 233, 190, 173,
71, 47, 179, 81, 49, 67, 92, 86, 48, 114, 50, 139, 112, 17, 220,
199, 233, 5, 191, 142, 62, 197, 3, 156, 13, 226, 155, 6, 223, 199,
197, 244, 117, 89, 25, 5, 102, 206, 219, 117, 31, 120, 191, 62, 64,
127, 207, 207, 55, 59, 67, 163, 91, 120, 163, 91, 235, 84, 70, 134,
99, 163, 73, 168, 57, 71, 82, 106, 224, 71, 245, 12, 241, 197, 226,
75, 205, 74, 100, 21, 106, 208, 18, 40, 108, 166, 138, 80, 38, 175,
218, 79, 53, 86, 135, 245, 162, 166, 126, 37, 35, 240, 26, 222, 159,
126, 107, 13, 233, 143, 113, 25, 140, 156, 117, 62, 236, 228, 159, 82,
20, 15, 25, 172, 13, 224, 14, 100, 122, 49, 27, 243, 180, 84, 190,
165, 252, 72, 53, 70, 132, 95, 64, 125, 14, 87, 33, 218, 119, 115,
184, 41, 88, 51, 212, 186, 198, 193, 109, 116, 93, 217, 54, 81, 206,
186, 163, 195, 240, 30, 199, 191, 101, 120, 157, 155, 124, 185, 44, 88,
44, 207, 234, 128, 194, 122, 79, 81, 82, 253, 204, 189, 13, 232, 223,
149, 135, 51, 40, 143, 82, 157, 152, 233, 159, 13, 11, 181, 57, 137,
66, 18, 220, 3, 246, 24, 104, 39, 66, 64, 71, 195, 76, 246, 134,
133, 194, 115, 142, 140, 86, 13, 0, 176, 101, 6, 28, 47, 202, 134,
30, 61, 252, 21, 123, 206, 183, 40, 98, 172, 242, 206, 104, 131, 162,
220, 95, 10, 26, 96, 58, 139, 165, 242, 66, 44, 68, 35, 183, 130,
23, 221, 82, 23, 19, 245, 187, 10, 15, 71, 81, 233, 106, 41, 247,
197, 73, 186, 77, 80, 136, 181, 111, 58, 132, 77, 48, 161, 182, 10,
81, 153, 114, 93, 83, 133, 19, 232, 83, 216, 74, 209, 115, 27, 102,
190, 210, 221, 9, 232, 105, 137, 65, 181, 29, 103, 90, 197, 135, 2,
11, 207, 49, 229, 62, 209, 32, 22, 173, 29, 230, 199, 155, 120, 57,
38, 13, 200, 9, 128, 49, 71, 4, 22, 199, 188, 2, 250, 111, 100,
0, 49, 25, 22, 42, 95, 81, 206, 161, 39, 158, 202, 161, 49, 232,
105, 97, 159, 3, 92, 61, 111, 59, 91, 151, 106, 5, 53, 48, 131,
72, 20, 120, 164, 236, 154, 235, 252, 66, 69, 170, 17, 7, 208, 1,
103, 73, 53, 133, 17, 219, 115, 148, 159, 219, 87, 179, 117, 4, 80,
114, 203, 249, 35, 41, 240, 126, 174, 34, 163, 172, 5, 97, 17, 52,
140, 183, 242, 51, 198, 38, 227, 27, 144, 6, 185, 164, 137, 112, 215,
112, 28, 242, 63, 225, 169, 110, 207, 223, 8, 137, 221, 2, 242, 31,
182, 216, 126, 9, 2, 70, 76, 229, 175, 128, 184, 177, 2, 84, 8,
84, 25, 145, 231, 225, 134, 1, 163, 44, 126, 189, 63, 182, 32, 152,
175, 237, 236, 162, 212, 251, 89, 116, 225, 224, 233, 77, 207, 214, 102,
180, 84, 231, 217, 220, 251, 33, 239, 104, 167, 167, 152, 251, 1, 13,
101, 155, 121, 240, 231, 193, 126, 234, 31, 140, 107, 199, 136, 217, 209,
234, 161, 255, 191, 69, 43, 37, 41, 122, 193, 191, 198, 246, 148, 182,
179, 204, 139, 183, 249, 231, 212, 108, 2, 214, 98, 177, 161, 161, 34,
214, 193, 127, 170, 2, 94, 142, 148, 113, 182, 183, 117, 106, 46, 142,
185, 38, 121, 87, 209, 5, 131, 55, 242, 145, 210, 138, 161, 162, 100,
180, 54, 104, 69, 53, 45, 74, 39, 102, 56, 112, 227, 115, 23, 61,
90, 208, 16, 152, 99, 27, 64, 134, 245, 251, 215, 234, 59, 247, 3,
46, 62, 33, 220, 3, 221, 156, 32, 222, 44, 209, 6, 76, 232, 161,
236, 77, 204, 126, 42, 121, 204, 70, 108, 116, 220, 131, 149, 54, 10,
45, 132, 16, 110, 219, 19, 1, 181, 89, 66, 18, 237, 112, 13, 152,
229, 108, 27, 192, 138, 239, 245, 202, 112, 76, 234, 127, 178, 168, 94,
21, 186, 131, 2, 198, 153, 202, 251, 136, 232, 91, 90, 247, 35, 174,
3, 194, 202, 116, 174, 98, 163, 240, 104, 139, 61, 17, 216, 248, 103,
170, 68, 96, 236, 62, 244, 248, 146, 155, 62, 80, 153, 102, 3, 193,
23, 159, 22, 71, 142, 167, 166, 228, 153, 47, 221, 253, 217, 67, 3,
7, 125, 246, 146, 156, 241, 170, 111, 77, 96, 211, 145, 78, 33, 167,
85, 250, 4, 241, 213, 49, 176, 64, 205, 25, 114, 177, 174, 238, 251,
4, 115, 154, 124, 221, 31, 95, 0, 197, 164, 150, 83, 97, 219, 125,
93, 76, 28, 60, 56, 63, 214, 124, 131, 196, 251, 201, 216, 8, 100,
191, 128, 118, 237, 137, 124, 97, 28, 205, 38, 155, 232, 242, 6, 4,
203, 120, 234, 36, 185, 149, 50, 106, 39, 164, 93, 160, 29, 7, 212,
117, 180, 87, 216, 255, 162, 78, 75, 109, 21, 172, 148, 105, 149, 115,
23, 66, 149, 230, 80, 100, 206, 218, 212, 55, 149, 79, 164, 147, 254,
195, 239, 188, 4, 241, 38, 246, 138, 196, 247, 43, 17, 213, 233, 78,
100, 116, 48, 138, 255, 112, 195, 155, 143, 149, 36, 90, 24, 21, 152,
100, 56, 208, 213, 165, 240, 24, 77, 18, 207, 246, 64, 57, 95, 127,
180, 21, 242, 152, 151, 43, 207, 171, 40, 217, 42, 72, 229, 227, 83,
110, 46, 147, 159, 142, 117, 176, 24, 246, 129, 59, 125, 156, 125, 68,
213, 155, 153, 184, 123, 232, 154, 47, 186, 233, 222, 245, 167, 142, 156,
96, 147, 2, 16, 33, 201, 188, 10, 110, 229, 197, 44, 10, 149, 108,
224, 242, 68, 243, 177, 247, 72, 30, 95, 35, 224, 142, 231, 201, 117,
44, 139, 215, 17, 228, 144, 157, 56, 245, 205, 171, 223, 84, 205, 222,
42, 45, 251, 234, 131, 137, 254, 13, 210, 10, 65, 212, 20, 245, 197,
137, 76, 89, 223, 231, 81, 14, 14, 89, 99, 166, 172, 65, 152, 169,
105, 119, 47, 32, 204, 59, 84, 91, 15, 128, 253, 71, 82, 149, 177,
148, 200, 220, 153, 125, 65, 151, 205, 162, 68, 153, 171, 254, 56, 76,
82, 163, 33, 152, 199, 26, 56, 168, 51, 68, 133, 28, 168, 160, 73,
121, 239, 219, 68, 148, 32, 60, 125, 89, 157, 219, 248, 9, 113, 226,
55, 76, 194, 111, 220, 204, 240, 226, 224, 58, 175, 177, 41, 213, 137,
218, 15, 6, 88, 54, 56, 165, 104, 162, 3, 78, 122, 252, 109, 184,
24, 105, 100, 140, 139, 106, 162, 99, 196, 207, 44, 188, 52, 209, 78,
185, 174, 253, 22, 121, 21, 120, 140, 107, 154, 75, 93, 236, 238, 221,
172, 21, 144, 253, 247, 129, 31, 189, 28, 28, 100, 140, 21, 211, 79,
50, 32, 254, 102, 242, 174, 45, 191, 205, 100, 57, 204, 86, 17, 50,
50, 252, 19, 156, 0, 62, 185, 153, 205, 15, 248, 221, 161, 61, 247,
70, 36, 177, 98, 79, 20, 241, 1, 211, 201, 141, 3, 237, 79, 50,
227, 100, 149, 237, 22, 222, 223, 139, 92, 43, 195, 94, 130, 188, 84,
144, 46, 204, 204, 229, 178, 215, 54, 207, 68, 140, 20, 167, 189, 66,
255, 44, 107, 145, 150, 135, 38, 33, 106, 48, 93, 249, 125, 130, 50,
241, 8, 43, 234, 204, 12, 248, 151, 254, 53, 112, 9, 50, 166, 93,
135, 55, 150, 194, 173, 242, 0, 156, 149, 247, 97, 231, 193, 134, 132,
237, 155, 95, 136, 219, 61, 201, 85, 152, 76, 167, 99, 92, 248, 204,
237, 150, 229, 186, 51, 248, 242, 16, 107, 99, 132, 218, 69, 35, 90,
95, 124, 4, 213, 34, 246, 93, 220, 241, 14, 2, 128, 62, 105, 214,
119, 56, 157, 207, 191, 165, 216, 185, 84, 102, 6, 240, 128, 92, 83,
182, 10, 205, 34, 42, 222, 80, 27, 229, 138, 155, 8, 102, 55, 107,
174, 75, 148, 239, 6, 232, 240, 0, 50, 108, 171, 83, 152, 162, 142,
200, 163, 4, 31, 113, 14, 96, 48, 2, 65, 200, 10, 145, 192, 125,
41, 119, 250, 101, 63, 111, 171, 206, 226, 105, 169, 198, 50, 83, 197,
121, 228, 99, 206, 239, 148, 222, 197, 76, 89, 70, 34, 63, 5, 186,
88, 91, 231, 197, 192, 202, 73, 245, 235, 46, 56, 202, 47, 76, 205,
103, 146, 68, 49, 133, 87, 26, 144, 231, 11, 51, 77, 236, 199, 93,
128, 235, 52, 185, 161, 149, 208, 27, 41, 233, 125, 145, 81, 204, 144,
247, 242, 227, 208, 88, 157, 247, 73, 4, 142, 202, 250, 119, 255, 114,
149, 66, 96, 236, 204, 10, 58, 188, 220, 240, 83, 93, 252, 74, 240,
34, 212, 164, 145, 32, 146, 130, 162, 190, 193, 40, 101, 175, 144, 209,
39, 110, 249, 244, 76, 49, 70, 229, 65, 40, 137, 75, 83, 38, 209,
139, 62, 190, 91, 154, 40, 30, 89, 174, 119, 52, 99, 46, 87, 15,
165, 112, 233, 125, 220, 33, 216, 234, 37, 55, 142, 2, 150, 75, 242,
82, 175, 217, 76, 49, 63, 197, 151, 181, 28, 125, 194, 75, 84, 176,
9, 109, 215, 202, 83, 146, 128, 70, 252, 157, 99, 73, 121, 4, 5,
119, 8, 53, 89, 248, 15, 149, 91, 213, 5, 85, 100, 122, 200, 130,
40, 68, 187, 155, 115, 56, 17, 14, 244, 45, 119, 169, 20, 177, 187,
115, 158, 237, 20, 194, 61, 0, 185, 19, 148, 145, 81, 240, 61, 167,
168, 49, 21, 60, 114, 109, 96, 225, 166, 124, 236, 18, 93, 86, 61,
21, 132, 58, 109, 227, 68, 63, 249, 100, 70, 58, 41, 124, 182, 158,
103, 53, 90, 80, 143, 10, 117, 60, 88, 162, 50, 247, 74, 208, 39,
36, 212, 106, 131, 123, 72, 160, 4, 138, 229, 144, 120, 231, 2, 169,
17, 205, 83, 60, 243, 87, 7, 27, 170, 245, 156, 226, 74, 219, 9,
46, 200, 234, 137, 88, 71, 187, 53, 94, 37, 141, 206, 14, 11, 241,
189, 81, 116, 189, 125, 245, 239, 30, 68, 111, 134, 119, 160, 33, 217,
19, 93, 97, 11, 83, 10, 243, 161, 174, 165, 237, 179, 60, 123, 54,
100, 98, 128, 107, 16, 116, 120, 123, 97, 245, 238, 229, 25, 102, 241,
84, 220, 18, 208, 125, 20, 27, 241, 196, 22, 37, 70, 114, 251, 24,
66, 33, 122, 35, 146, 236, 244, 221, 103, 138, 144, 250, 193, 49, 177,
6, 83, 196, 6, 27, 103, 203, 53, 198, 111, 157, 100, 16, 82, 218,
27, 69, 203, 200, 126, 132, 154, 73, 67, 165, 212, 60, 15, 157, 150,
205, 71, 17, 227, 81, 78, 65, 212, 217, 102, 30, 229, 121, 97, 232,
198, 246, 81, 77, 191, 229, 201, 95, 171, 142, 88, 156, 30, 153, 247,
193, 30, 254, 191, 80, 25, 113, 178, 225, 55, 66, 169, 253, 72, 67,
74, 74, 139, 76, 33, 200, 31, 133, 67, 69, 48, 240, 93, 49, 121,
102, 219, 238, 237, 79, 98, 243, 172, 138, 114, 172, 154, 66, 99, 28,
91, 8, 36, 220, 136, 2, 218, 195, 94, 214, 171, 48, 92, 84, 86,
199, 139, 240, 201, 34, 37, 22, 201, 215, 73, 252, 119, 204, 117, 176,
150, 177, 202, 135, 190, 72, 120, 47, 167, 69, 180, 162, 245, 138, 104,
212, 218, 95, 234, 54, 228, 21, 12, 48, 5, 202, 49, 132, 24, 190,
207, 170, 227, 172, 231, 169, 224, 15, 1, 3, 1, 198, 130, 107, 250,
200, 26, 177, 235, 205, 31, 76, 151, 250, 80, 153, 58, 173, 17, 24,
67, 136, 108, 203, 4, 150, 87, 78, 39, 178, 36, 203, 211, 245, 102,
245, 150, 91, 66, 111, 208, 152, 56, 34, 31, 55, 215, 49, 48, 72,
204, 117, 105, 107, 61, 108, 177, 176, 50, 199, 115, 41, 143, 238, 62,
108, 191, 187, 209, 126, 44, 98, 247, 76, 50, 129, 154, 239, 225, 138,
226, 251, 137, 10, 198, 71, 253, 129, 139, 244, 25, 186, 89, 96, 184,
71, 145, 181, 252, 4, 210, 72, 89, 149, 212, 153, 37, 175, 70, 131,
151, 136, 176, 104, 106, 246, 252, 132, 132, 52, 25, 67, 207, 103, 48,
136, 2, 117, 230, 62, 167, 249, 98, 158, 156, 106, 106, 91, 202, 83,
113, 154, 219, 37, 40, 98, 221, 179, 49, 0, 10, 118, 124, 61, 60,
128, 168, 108, 137, 252, 164, 31, 224, 1, 109, 247, 101, 125, 222, 37,
132, 202, 183, 164, 212, 65, 250, 107, 223, 108, 60, 10, 21, 161, 207,
226, 117, 212, 176, 239, 229, 132, 63, 175, 228, 219, 134, 146, 85, 243,
93, 149, 76, 84, 190, 205, 107, 37, 88, 5, 238, 97, 107, 215, 108,
164, 23, 194, 186, 87, 44, 88, 185, 222, 51, 125, 207, 51, 218, 149,
139, 145, 216, 72, 253, 10, 199, 29, 187, 222, 140, 245, 138, 85, 9,
101, 33, 230, 81, 196, 84, 62, 26, 49, 108, 135, 86, 14, 77, 181,
177, 216, 154, 7, 21, 28, 205, 155, 225, 254, 219, 110, 76, 77, 34,
77, 109, 137, 217, 136, 133, 193, 21, 145, 188, 197, 227, 231, 113, 150,
78, 46, 141, 180, 37, 190, 84, 232, 87, 252, 24, 224, 131, 108, 172,
19, 253, 22, 251, 73, 188, 230, 93, 139, 154, 118, 55, 251, 43, 157,
191, 113, 36, 252, 51, 242, 112, 57, 189, 251, 255, 73, 157, 0, 115,
136, 75, 251, 184, 169, 26, 106, 12, 29, 143, 196, 112, 65, 242, 66,
129, 243, 221, 145, 175, 182, 215, 195, 147, 175, 1, 110, 149, 70, 23,
158, 6, 137, 169, 71, 130, 185, 11, 183, 147, 110, 147, 120, 141, 249,
163, 33, 191, 28, 75, 175, 35, 248, 150, 251, 122, 114, 244, 210, 191,
186, 176, 188, 176, 174, 230, 89, 132, 176, 169, 16, 45, 202, 210, 231,
116, 132, 241, 165, 250, 74, 26, 186, 126, 140, 135, 22, 196, 100, 82,
114, 39, 103, 55, 207, 74, 43, 141, 32, 127, 144, 206, 131, 197, 243,
22, 95, 81, 76, 239, 137, 137, 224, 181, 208, 38, 37, 44, 146, 149,
172, 216, 159, 61, 45, 182, 85, 243, 6, 255, 28, 43, 0, 16, 204,
97, 4, 215, 147, 181, 188, 44, 144, 27, 44, 67, 100, 225, 102, 207,
36, 81, 132, 152, 174, 228, 191, 193, 213, 181, 51, 22, 239, 96, 224,
102, 231, 27, 249, 81, 200, 6, 160, 109, 111, 103, 41, 114, 84, 44,
197, 30, 17, 149, 138, 221, 10, 241, 240, 232, 253, 105, 25, 175, 209,
124, 126, 176, 210, 173, 122, 37, 156, 5, 5, 53, 228, 3, 163, 150,
223, 45, 74, 250, 254, 228, 98, 240, 202, 133, 94, 55, 154, 232, 50,
61, 149, 144, 137, 222, 222, 243, 171, 53, 175, 98, 254, 107, 192, 242,
208, 127, 246, 36, 179, 33, 190, 26, 42, 21, 71, 184, 138, 79, 70,
8, 91, 175, 77, 245, 30, 196, 215, 217, 116, 211, 4, 205, 52, 208,
170, 98, 192, 219, 80, 7, 204, 240, 65, 165, 243, 33, 33, 7, 114,
125, 42, 39, 149, 112, 115, 54, 106, 46, 21, 181, 253, 139, 14, 77,
27, 96, 49, 252, 35, 51, 154, 88, 77, 65, 248, 30, 174, 157, 15,
115, 145, 88, 71, 45, 60, 222, 30, 163, 249, 206, 150, 177, 153, 75,
229, 177, 38, 31, 224, 128, 208, 194, 159, 162, 169, 249, 199, 56, 70,
38, 38, 86, 180, 97, 34, 44, 158, 254, 0, 112, 44, 200, 29, 92,
50, 150, 143, 222, 112, 217, 55, 162, 21, 16, 142, 227, 214, 254, 163,
125, 52, 196, 159, 206, 114, 78, 59, 169, 197, 68, 126, 112, 155, 115,
129, 181, 138, 225, 68, 200, 60, 94, 21, 30, 79, 199, 72, 52, 233,
229, 195, 194, 107, 61, 168, 154, 56, 164, 248, 101, 252, 170, 212, 203,
24, 197, 175, 243, 176, 83, 117, 202, 185, 123, 249, 16, 164, 30, 104,
225, 91, 93, 153, 177, 44, 64, 246, 254, 86, 218, 95, 73, 125, 144,
77, 74, 97, 55, 6, 1, 38, 115, 153, 84, 231, 140, 21, 156, 192,
186, 136, 54, 165, 109, 100, 219, 19, 202, 49, 188, 84, 180, 109, 184,
216, 127, 113, 255, 38, 115, 74, 24, 144, 186, 167, 62, 103, 42, 25,
168, 89, 124, 77, 149, 139, 156, 241, 240, 117, 30, 78, 161, 188, 193,
64, 9, 134, 68, 149, 146, 182, 86, 44, 80, 217, 54, 198, 0, 93,
179, 221, 132, 160, 242, 207, 168, 146, 120, 252, 85, 141, 186, 65, 139,
42, 206, 72, 233, 51, 132, 36, 164, 143, 76, 77, 47, 97, 1, 130,
111, 123, 7, 15, 162, 83, 6, 245, 46, 102, 56, 42, 246, 25, 106,
94, 97, 241, 101, 177, 182, 170, 30, 110, 108, 19, 176, 84, 3, 201,
194, 184, 34, 9, 203, 247, 130, 98, 140, 67, 83, 128, 59, 147, 77,
127, 84, 137, 176, 169, 36, 60, 174, 99, 152, 227, 13, 117, 163, 137,
251, 96, 186, 151, 54, 94, 146, 111, 101, 230, 247, 4, 56, 90, 247,
108, 127, 215, 132, 98, 49, 196, 202, 52, 174, 144, 138, 140, 158, 182,
231, 86, 220, 5, 242, 92, 6, 54, 0, 143, 115, 249, 76, 204, 81,
82, 28, 2, 144, 135, 213, 75, 197, 33, 203, 130, 35, 133, 184, 140,
105, 48, 111, 45, 199, 115, 92, 6, 111, 237, 0, 199, 53, 96, 151,
212, 194, 145, 7, 220, 177, 246, 170, 145, 158, 78, 203, 29, 204, 72,
98, 227, 92, 53, 210, 239, 204, 161, 104, 64, 156, 56, 116, 35, 247,
33, 81, 30, 60, 41, 236, 117, 211, 175, 107, 158, 182, 42, 134, 232,
121, 182, 10, 48, 208, 77, 119, 183, 169, 244, 204, 204, 98, 58, 180,
162, 4, 138, 12, 147, 24, 5, 184, 95, 168, 136, 183, 203, 100, 113,
49, 206, 206, 31, 55, 43, 139, 10, 9, 198, 138, 68, 196, 224, 178,
209, 42, 34, 34, 210, 200, 189, 23, 213, 199, 111, 243, 239, 78, 1,
183, 141, 152, 15, 72, 136, 165, 6, 144, 221, 182, 187, 90, 92, 233,
18, 93, 141, 252, 138, 224, 195, 159, 185, 151, 134, 87, 26, 34, 102,
176, 239, 247, 123, 75, 127, 18, 18, 67, 226, 3, 86, 208, 126, 221,
190, 247, 228, 236, 203, 103, 159, 44, 221, 187, 198, 180, 14, 81, 178,
251, 142, 213, 108, 148, 5, 241, 15, 102, 67, 170, 127, 232, 48, 18,
48, 33, 38, 239, 173, 25, 179, 15, 115, 19, 145, 170, 108, 47, 79,
225, 222, 29, 35, 163, 248, 238, 39, 57, 103, 176, 222, 200, 18, 56,
85, 22, 52, 204, 75, 89, 72, 139, 49, 141, 224, 30, 87, 203, 145,
246, 214, 7, 15, 195, 39, 101, 83, 90, 123, 36, 139, 226, 0, 181,
117, 162, 21, 242, 254, 125, 96, 133, 90, 190, 11, 66, 124, 233, 7,
128, 21, 30, 152, 206, 199, 11, 153, 145, 147, 128, 17, 133, 217, 51,
90, 56, 132, 211, 18, 115, 63, 76, 138, 4, 230, 156, 9, 44, 154,
251, 46, 106, 118, 90, 237, 29, 234, 182, 226, 54, 208, 55, 63, 16,
56, 213, 117, 209, 40, 197, 61, 78, 70, 246, 70, 143, 26, 111, 89,
210, 129, 227, 94, 196, 251, 254, 194, 92, 137, 61, 150, 126, 15, 192,
32, 70, 4, 174, 40, 12, 86, 35, 174, 127, 172, 203, 249, 44, 70,
79, 112, 225, 17, 223, 248, 231, 46, 7, 126, 73, 164, 120, 69, 158,
98, 232, 137, 60, 229, 206, 189, 82, 93, 99, 97, 233, 108, 116, 7,
207, 131, 56, 210, 100, 212, 35, 228, 20, 255, 107, 238, 192, 131, 111,
15, 241, 0, 138, 184, 118, 243, 84, 224, 235, 0, 251, 19, 208, 174,
201, 16, 59, 221, 254, 40, 81, 239, 183, 239, 135, 9, 186, 5, 134,
87, 186, 90, 173, 224, 208, 243, 199, 179, 107, 250, 190, 255, 149, 54,
168, 115, 40, 250, 25, 66, 216, 32, 80, 24, 173, 33, 248, 114, 40,
55, 106, 79, 36, 213, 92, 183, 101, 241, 100, 240, 133, 4, 223, 46,
19, 114, 204, 172, 193, 6, 151, 114, 179, 10, 148, 188, 77, 215, 115,
84, 156, 68, 244, 117, 116, 202, 178, 59, 174, 245, 6, 1, 230, 210,
61, 94, 191, 210, 247, 160, 235, 39, 240, 78, 91, 223, 187, 1, 207,
222, 50, 86, 181, 253, 146, 246, 102, 38, 145, 227, 53, 205, 20, 132,
47, 242, 38, 94, 13, 105, 171, 210, 118, 241, 98, 139, 73, 213, 16,
2, 131, 70, 147, 29, 199, 104, 165, 236, 126, 201, 62, 74, 247, 244,
22, 255, 50, 206, 235, 34, 225, 128, 180, 175, 125, 115, 148, 232, 228,
151, 122, 221, 58, 53, 168, 29, 33, 205, 94, 219, 69, 229, 213, 242,
240, 19, 111, 77, 174, 20, 174, 135, 48, 46, 94, 191, 49, 89, 254,
216, 23, 167, 185, 187, 146, 210, 164, 16, 27, 83, 162, 192, 186, 251,
94, 236, 119, 124, 44, 215, 194, 230, 189, 159, 176, 165, 13, 158, 171,
247, 177, 8, 161, 119, 101, 172, 114, 146, 89, 147, 82, 88, 168, 168,
19, 120, 99, 65, 135, 106, 45, 70, 210, 166, 178, 175, 203, 40, 34,
101, 49, 106, 198, 104, 110, 22, 30, 79, 213, 220, 100, 150, 127, 188,
204, 34, 105, 117, 60, 191, 185, 125, 254, 157, 169, 243, 96, 240, 233,
81, 89, 205, 59, 83, 166, 34, 243, 196, 165, 147, 82, 9, 200, 80,
87, 1, 23, 85, 32, 109, 36, 128, 102, 236, 65, 80, 159, 113, 130,
188, 25, 207, 202, 74, 96, 59, 248, 7, 36, 246, 156, 40, 174, 216,
184, 205, 143, 228, 17, 181, 117, 177, 91, 0, 98, 3, 21, 168, 161,
177, 245, 48, 2, 36, 209, 252, 82, 47, 131, 9, 210, 136, 145, 119,
93, 246, 110, 56, 223, 161, 64, 64, 6, 29, 187, 154, 63, 217, 36,
71, 133, 233, 110, 22, 168, 21, 246, 223, 104, 28, 146, 69, 244, 65,
184, 40, 225, 205, 158, 193, 109, 212, 101, 242, 135, 68, 193, 52, 240,
34, 39, 18, 187, 139, 204, 139, 151, 169, 185, 183, 129, 186, 237, 81,
113, 81, 102, 142, 104, 42, 112, 91, 128, 134, 130, 70, 205, 55, 56,
21, 106, 206, 60, 156, 35, 19, 141, 107, 2, 180, 20, 0, 220, 124,
218, 86, 109, 79, 220, 232, 105, 34, 139, 79, 117, 1, 159, 220, 17,
185, 42, 17, 152, 160, 253, 214, 95, 12, 204, 20, 75, 103, 113, 204,
112, 57, 236, 96, 200, 48, 179, 131, 213, 96, 83, 20, 211, 22, 55,
208, 230, 167, 210, 223, 108, 203, 79, 100, 97, 123, 89, 104, 237, 241,
126, 165, 232, 178, 224, 246, 252, 144, 253, 232, 177, 50, 182, 215, 82,
27, 154, 136, 13, 111, 128, 153, 192, 172, 75, 208, 239, 43, 205, 210,
55, 11, 214, 215, 128, 144, 244, 11, 97, 75, 173, 82, 152, 132, 50,
197, 157, 244, 21, 163, 195, 93, 239, 156, 122, 46, 148, 214, 132, 62,
58, 40, 18, 174, 97, 98, 215, 114, 89, 180, 178, 39, 112, 159, 240,
65, 173, 87, 76, 131, 46, 189, 1, 126, 116, 206, 215, 236, 117, 110,
94, 158, 78, 80, 20, 25, 236, 153, 250, 199, 44, 181, 242, 152, 226,
137, 224, 35, 222, 64, 207, 238, 143, 104, 247, 188, 190, 162, 247, 209,
230, 146, 69, 81, 111, 13, 246, 78, 191, 93, 115, 114, 45, 70, 156,
218, 75, 25, 84, 243, 11, 205, 185, 205, 85, 16, 191, 105, 156, 88,
206, 19, 236, 47, 160, 58, 9, 107, 176, 87, 126, 153, 250, 211, 11,
94, 61, 129, 254, 169, 206, 141, 73, 165, 246, 189, 59, 54, 205, 5,
60, 42, 170, 131, 46, 216, 4, 119, 2, 1, 1, 110, 226, 242, 119,
135, 205, 80, 205, 202, 85, 133, 240, 140, 175, 179, 248, 112, 77, 197,
30, 249, 135, 54, 78, 244, 225, 211, 201, 178, 102, 31, 75, 154, 228,
155, 198, 9, 170, 0, 115, 161, 15, 205, 231, 240, 71, 237, 20, 246,
131, 131, 106, 205, 176, 221, 180, 177, 249, 233, 172, 219, 246, 224, 98,
119, 72, 98, 30, 119, 93, 28, 76, 67, 179, 196, 207, 207, 108, 162,
7, 0, 175, 148, 225, 58, 107, 251, 114, 0, 50, 131, 237, 66, 45,
216, 91, 26, 157, 88, 75, 114, 92, 171, 25, 238, 135, 143, 213, 171,
28, 15, 31, 52, 61, 193, 80, 249, 133, 143, 112, 254, 64, 57, 166,
223, 182, 64, 240, 243, 60, 207, 145, 236, 239, 152, 213, 100, 158, 20,
183, 104, 246, 141, 47, 239, 122, 240, 185, 68, 116, 69, 236, 43, 248,
3, 131, 22, 51, 155, 150, 1, 231, 138, 8, 220, 116, 107, 36, 195,
168, 139, 177, 181, 97, 182, 231, 205, 53, 186, 34, 226, 101, 168, 184,
252, 145, 249, 113, 145, 163, 121, 75, 87, 253, 205, 227, 101, 190, 206,
218, 8, 57, 46, 81, 167, 229, 235, 173, 135, 187, 132, 246, 216, 192,
238, 102, 203, 22, 119, 71, 56, 36, 135, 219, 178, 94, 191, 127, 98,
184, 60, 240, 187, 144, 133, 73, 82, 180, 13, 211, 18, 46, 12, 176,
20, 249, 229, 229, 150, 144, 220, 181, 254, 223, 25, 123, 248, 15, 36,
160, 170, 77, 65, 1, 250, 157, 30, 11, 111, 133, 143, 193, 49, 35,
168, 217, 166, 16, 37, 4, 91, 160, 242, 205, 241, 125, 201, 3, 90,
229, 106, 149, 202, 217, 67, 58, 87, 104, 79, 233, 183, 250, 126, 11,
197, 180, 29, 161, 20, 73, 206, 252, 121, 20, 47, 178, 137, 34, 51,
15, 194, 231, 141, 78, 53, 33, 223, 246, 220, 182, 85, 152, 52, 125,
240, 144, 95, 33, 210, 118, 242, 86, 34, 171, 243, 228, 179, 206, 110,
168, 91, 39, 36, 226, 130, 241, 251, 216, 207, 141, 200, 0, 51, 111,
122, 235, 34, 219, 226, 102, 240, 52, 54, 136, 22, 75, 234, 207, 40,
13, 125, 66, 148, 54, 243, 127, 86, 160, 97, 250, 216, 13, 56, 89,
58, 191, 166, 182, 153, 63, 184, 195, 11, 150, 42, 22, 11, 248, 109,
153, 17, 60, 85, 46, 227, 158, 27, 221, 249, 237, 230, 101, 45, 9,
16, 201, 26, 129, 72, 35, 117, 26, 160, 138, 10, 136, 61, 214, 166,
86, 1, 9, 247, 247, 31, 232, 250, 67, 106, 216, 55, 0, 128, 98,
11, 95, 140, 129, 83, 93, 196, 48, 187, 124, 140, 249, 79, 113, 165,
164, 53, 21, 34, 136, 118, 71, 219, 78, 55, 162, 125, 159, 36, 245,
244, 109, 96, 78, 103, 217, 91, 236, 120, 154, 12, 160, 170, 148, 23,
224, 242, 47, 251, 8, 65, 102, 220, 41, 239, 53, 115, 29, 98, 205,
212, 102, 173, 144, 223, 46, 163, 7, 176, 178, 123, 10, 19, 165, 34,
6, 232, 65, 114, 165, 243, 156, 115, 76, 203, 29, 27, 3, 117, 253,
248, 10, 172, 205, 214, 77, 182, 120, 145, 7, 61, 46, 45, 101, 6,
48, 232, 141, 70, 205, 177, 228, 61, 73, 59, 15, 236, 17, 66, 173,
76, 15, 181, 40, 171, 154, 3, 64, 197, 128, 128, 229, 60, 76, 8,
211, 97, 237, 105, 148, 78, 160, 11, 93, 233, 210, 45, 63, 99, 86,
116, 182, 242, 130, 129, 1, 142, 211, 219, 19, 5, 98, 84, 6, 42,
69, 233, 218, 72, 194, 167, 82, 35, 46, 105, 205, 72, 89, 58, 95,
205, 124, 87, 158, 199, 9, 196, 15, 71, 24, 130, 86, 110, 85, 113,
43, 7, 234, 121, 198, 48, 26, 102, 242, 19, 145, 62, 36, 173, 119,
5, 46, 137, 50, 155, 200, 186, 111, 49, 171, 91, 34, 35, 233, 245,
210, 211, 5, 75, 124, 96, 79, 51, 109, 191, 26, 64, 196, 44, 150,
124, 210, 126, 180, 236, 56, 164, 245, 126, 48, 236, 146, 201, 233, 187,
155, 129, 177, 61, 144, 202, 50, 104, 23, 74, 228, 72, 90, 10, 174,
92, 177, 195, 98, 20, 160, 41, 102, 10, 179, 100, 178, 254, 201, 159,
72, 59, 121, 64, 12, 26, 161, 119, 154, 163, 174, 107, 30, 119, 175,
222, 101, 243, 6, 94, 132, 252, 86, 197, 46, 15, 215, 42, 191, 63,
37, 93, 208, 107, 91, 48, 47, 121, 192, 1, 120, 127, 160, 148, 217,
246, 255, 154, 149, 247, 63, 208, 27, 217, 252, 96, 60, 87, 223, 206,
139, 230, 225, 100, 11, 206, 192, 132, 103, 221, 110, 6, 87, 103, 65,
69, 99, 101, 175, 226, 63, 70, 176, 178, 124, 181, 84, 110, 48, 238,
196, 128, 21, 142, 86, 149, 191, 142, 255, 228, 23, 173, 218, 214, 25,
215, 144, 52, 98, 6, 76, 133, 99, 153, 181, 199, 134, 108, 201, 96,
200, 163, 14, 195, 183, 135, 8, 150, 160, 38, 68, 131, 32, 69, 61,
72, 191, 172, 105, 98, 203, 220, 165, 253, 168, 57, 197, 150, 120, 144,
220, 67, 54, 21, 228, 225, 208, 12, 182, 243, 90, 23, 246, 124, 167,
181, 117, 109, 125, 117, 48, 5, 227, 106, 164, 163, 75, 29, 144, 119,
206, 135, 65, 101, 93, 82, 244, 44, 46, 184, 216, 14, 174, 23, 143,
246, 137, 225, 21, 7, 246, 9, 206, 157, 112, 19, 248, 113, 180, 131,
219, 38, 212, 187, 233, 103, 6, 91, 130, 127, 213, 115, 199, 6, 234,
164, 70, 237, 190, 184, 187, 244, 53, 145, 164, 223, 75, 92, 150, 195,
141, 246, 39, 156, 137, 111, 216, 1, 73, 188, 50, 229, 222, 90, 46,
105, 27, 214, 162, 68, 12, 86, 58, 206, 161, 136, 111, 219, 229, 244,
23, 43, 164, 49, 123, 252, 186, 74, 130, 191, 137, 243, 126, 159, 226,
135, 94, 95, 239, 170, 92, 116, 173, 125, 27, 132, 228, 151, 123, 126,
192, 226, 65, 237, 22, 236, 150, 178, 226, 24, 64, 0, 110, 155, 52,
90, 88, 37, 125, 236, 99, 169, 225, 169, 26, 62, 126, 133, 216, 40,
143, 172, 68, 171, 93, 140, 137, 240, 6, 173, 219, 26, 253, 152, 87,
96, 65, 246, 115, 63, 193, 254, 236, 177, 75, 153, 205, 247, 49, 201,
84, 251, 222, 117, 59, 135, 194, 130, 52, 186, 43, 136, 157, 60, 67,
253, 86, 19, 11, 51, 44, 242, 175, 242, 163, 214, 182, 124, 138, 98,
85, 108, 213, 156, 154, 7, 0, 183, 183, 9, 34, 20, 29, 43, 180,
132, 75, 168, 168, 117, 142, 226, 43, 180, 219, 176, 31, 13, 253, 251,
154, 111, 33, 51, 117, 5, 96, 35, 142, 235, 188, 234, 233, 154, 94,
218, 24, 20, 164, 44, 236, 68, 4, 58, 20, 202, 64, 53, 139, 26,
224, 133, 9, 255, 128, 176, 131, 100, 115, 46, 33, 215, 108, 87, 4,
195, 75, 233, 211, 157, 4, 119, 181, 4, 129, 185, 134, 72, 248, 99,
92, 71, 204, 74, 18, 38, 106, 213, 6, 148, 110, 40, 99, 187, 200,
232, 108, 71, 169, 232, 174, 44, 191, 253, 5, 167, 69, 114, 75, 238,
193, 251, 232, 97, 188, 23, 105, 31, 146, 101, 106, 79, 64, 62, 201,
83, 60, 133, 111, 105, 65, 51, 78, 201, 190, 241, 97, 181, 2, 208,
150, 186, 123, 236, 35, 174, 174, 141, 31, 212, 81, 28, 98, 88, 208,
226, 113, 206, 120, 52, 144, 211, 17, 236, 129, 230, 220, 116, 11, 21,
7, 43, 224, 169, 77, 21, 171, 50, 245, 94, 124, 101, 169, 156, 173,
17, 65, 157, 229, 211, 69, 9, 180, 171, 180, 144, 88, 141, 247, 194,
76, 198, 208, 216, 15, 250, 68, 126, 200, 85, 46, 151, 209, 96, 108,
238, 193, 87, 42, 157, 18, 175, 199, 93, 219, 152, 170, 221, 210, 138,
184, 250, 71, 239, 230, 204, 51, 55, 125, 13, 98, 90, 235, 100, 93,
62, 249, 99, 31, 75, 225, 206, 186, 178, 104, 174, 164, 102, 66, 40,
85, 204, 195, 228, 107, 228, 18, 99, 251, 225, 159, 140, 243, 112, 95,
67, 81, 131, 20, 150, 128, 143, 249, 124, 176, 242, 5, 235, 63, 62,
175, 18, 57, 161, 125, 137, 148, 127, 20, 143, 0, 174, 109, 141, 82,
92, 216, 238, 90, 116, 76, 148, 176, 192, 118, 131, 116, 196, 40, 221,
73, 250, 87, 45, 60, 161, 37, 159, 53, 171, 236, 195, 122, 35, 247,
23, 193, 88, 16, 154, 40, 69, 113, 144, 58, 105, 1, 119, 59, 148,
245, 35, 186, 218, 199, 23, 157, 180, 120, 205, 150, 194, 161, 96, 182,
228, 4, 192, 177, 33, 116, 87, 191, 107, 138, 236, 106, 28, 238, 240,
44, 175, 230, 104, 59, 12, 136, 11, 236, 106, 119, 28, 167, 149, 52,
129, 153, 29, 61, 145, 31, 206, 253, 219, 64, 236, 213, 151, 152, 40,
172, 94, 240, 148, 58, 188, 97, 80, 174, 255, 113, 225, 82, 231, 73,
5, 138, 75, 94, 69, 168, 172, 224, 251, 203, 191, 53, 103, 24, 80,
63, 247, 210, 88, 233, 212, 60, 89, 149, 192, 181, 31, 187, 95, 2,
4, 62, 126, 89, 22, 145, 144, 92, 139, 38, 34, 36, 141, 93, 89,
22, 33, 139, 206, 224, 255, 28, 239, 183, 15, 25, 136, 69, 110, 90,
143, 111, 108, 34, 78, 4, 176, 217, 231, 1, 203, 235, 94, 109, 70,
205, 111, 253, 129, 111, 121, 215, 122, 35, 53, 99, 126, 73, 195, 154,
147, 197, 24, 128, 168, 43, 83, 253, 63, 128, 117, 112, 237, 255, 114,
231, 178, 221, 195, 169, 221, 215, 130, 153, 216, 249, 20, 19, 220, 185,
229, 97, 114, 142, 21, 244, 192, 181, 61, 137, 251, 191, 189, 246, 156,
147, 97, 36, 79, 193, 70, 159, 30, 144, 129, 206, 147, 87, 253, 248,
16, 99, 141, 191, 83, 144, 139, 34, 156, 46, 139, 115, 70, 139, 67,
78, 92, 133, 172, 52, 28, 107, 134, 45, 119, 216, 254, 172, 71, 97,
65, 246, 25, 98, 242, 135, 224, 68, 35, 101, 26, 85, 174, 47, 73,
47, 50, 122, 180, 70, 223, 19, 217, 221, 132, 57, 54, 199, 69, 128,
248, 168, 142, 236, 173, 106, 67, 87, 107, 17, 164, 177, 166, 139, 144,
172, 116, 81, 108, 161, 222, 15, 60, 66, 238, 232, 234, 55, 96, 255,
159, 117, 174, 235, 36, 113, 119, 220, 148, 226, 51, 252, 68, 61, 120,
67, 187, 223, 118, 105, 89, 144, 83, 229, 115, 133, 144, 209, 117, 108,
157, 103, 66, 174, 0, 66, 242, 184, 16, 216, 248, 89, 125, 64, 177,
13, 81, 245, 242, 227, 30, 77, 7, 40, 7, 131, 187, 156, 176, 112,
118, 28, 183, 24, 97, 147, 67, 41, 173, 94, 178, 72, 60, 113, 234,
79, 147, 86, 131, 164, 107, 220, 215, 194, 246, 63, 172, 35, 110, 83,
243, 44, 232, 113, 230, 219, 197, 70, 147, 24, 123, 130, 158, 22, 92,
95, 188, 126, 163, 81, 39, 233, 86, 124, 148, 200, 198, 212, 162, 77,
64, 41, 174, 84, 51, 85, 2, 111, 92, 6, 180, 217, 248, 230, 77,
242, 145, 17, 57, 226, 63, 148, 248, 43, 118, 156, 245, 66, 196, 73,
37, 157, 82, 223, 51, 135, 67, 54, 98, 52, 194, 103, 228, 74, 77,
250, 165, 192, 150, 16, 193, 148, 181, 56, 113, 102, 122, 194, 4, 64,
208, 161, 9, 209, 10, 160, 56, 147, 208, 57, 72, 215, 54, 66, 134,
183, 216, 99, 179, 117, 108, 139, 141, 147, 13, 131, 93, 238, 165, 81,
123, 12, 105, 199, 34, 169, 211, 111, 0, 119, 97, 11, 123, 26, 30,
31, 124, 236, 32, 218, 152, 117, 217, 117, 175, 35, 62, 171, 189, 42,
161, 63, 212, 31, 126, 188, 175, 94, 47, 61, 43, 139, 89, 220, 120,
245, 48, 151, 194, 35, 72, 97, 3, 50, 177, 33, 234, 186, 12, 133,
39, 68, 218, 31, 58, 236, 238, 49, 154, 6, 174, 143, 5, 165, 102,
95, 195, 67, 166, 105, 78, 9, 22, 87, 2, 148, 151, 197, 37, 163,
210, 208, 66, 14, 206, 25, 209, 123, 139, 12, 31, 137, 55, 241, 158,
221, 108, 156, 240, 3, 184, 116, 184, 30, 228, 236, 171, 104, 223, 172,
158, 228, 167, 147, 210, 172, 134, 68, 134, 28, 55, 14, 12, 196, 205,
56, 232, 126, 214, 42, 53, 48, 30, 100, 31, 45, 63, 4, 255, 11,
35, 140, 83, 213, 173, 131, 130, 99, 197, 242, 64, 37, 25, 216, 130,
166, 138, 123, 136, 9, 142, 140, 62, 147, 223, 253, 196, 227, 125, 110,
110, 112, 111, 109, 93, 12, 119, 59, 246, 45, 213, 27, 186, 201, 249,
151, 239, 125, 101, 131, 252, 0, 104, 213, 170, 15, 202, 79, 168, 228,
200, 19, 55, 194, 165, 91, 228, 44, 88, 69, 126, 114, 229, 44, 16,
122, 113, 130, 24, 40, 113, 172, 151, 53, 226, 18, 132, 183, 26, 30,
22, 123, 139, 10, 190, 49, 30, 179, 84, 90, 247, 27, 95, 93, 162,
61, 212, 214, 180, 202, 30, 97, 162, 219, 17, 26, 69, 173, 201, 224,
109, 220, 198, 28, 148, 34, 78, 20, 147, 121, 51, 23, 187, 16, 121,
89, 13, 78, 97, 32, 180, 0, 35, 81, 209, 41, 157, 220, 229, 170,
203, 159, 219, 177, 149, 225, 138, 208, 163, 176, 67, 13, 155, 165, 9,
53, 244, 210, 117, 172, 249, 34, 180, 189, 139, 188, 114, 247, 63, 86,
141, 194, 131, 79, 119, 216, 150, 72, 50, 29, 51, 157, 80, 112, 200,
143, 132, 232, 7, 145, 113, 53, 168, 9, 247, 246, 60, 176, 127, 70,
132, 197, 245, 150, 77, 6, 144, 251, 131, 164, 137, 212, 70, 68, 63,
90, 38, 62, 133, 201, 129, 114, 223, 195, 69, 134, 123, 174, 0, 54,
156, 217, 222, 17, 55, 125, 85, 97, 135, 133, 28, 93, 137, 225, 133,
66, 101, 27, 196, 174, 180, 71, 162, 118, 136, 18, 72, 14, 192, 150,
86, 50, 188, 136, 227, 54, 107, 100, 224, 90, 154, 169, 58, 242, 230,
79, 48, 139, 176, 147, 18, 232, 30, 102, 5, 178, 87, 71, 13, 218,
204, 19, 252, 26, 239, 37, 251, 14, 125, 33, 45, 251, 95, 77, 120,
32, 131, 218, 102, 166, 116, 21, 108, 234, 118, 9, 66, 203, 73, 134,
176, 14, 68, 97, 151, 227, 70, 142, 179, 104, 103, 29, 108, 194, 133,
104, 129, 241, 67, 193, 111, 246, 180, 134, 217, 152, 8, 154, 43, 144,
131, 27, 116, 100, 116, 75, 106, 96, 62, 150, 119, 143, 60, 75, 104,
174, 164, 20, 133, 192, 31, 164, 186, 91, 14, 177, 162, 119, 76, 49,
6, 149, 89, 173, 28, 208, 190, 234, 213, 4, 240, 55, 66, 171, 39,
92, 60, 176, 253, 162, 179, 53, 151, 146, 38, 98, 127, 162, 42, 237,
209, 108, 168, 169, 216, 15, 146, 159, 48, 112, 195, 220, 233, 161, 75,
61, 0, 18, 18, 178, 204, 187, 240, 99, 81, 95, 197, 220, 83, 123,
52, 86, 195, 172, 26, 215, 129, 29, 126, 126, 106, 48, 118, 244, 159,
29, 16, 31, 172, 246, 196, 160, 240, 43, 208, 177, 167, 156, 84, 170,
69, 159, 26, 78, 182, 152, 1, 90, 204, 149, 131, 35, 149, 218, 107,
9, 24, 255, 114, 3, 157, 132, 95, 109, 114, 121, 138, 31, 59, 48,
84, 61, 76, 42, 55, 156, 160, 242, 12, 90, 115, 99, 40, 195, 64,
143, 116, 10, 125, 221, 91, 28, 154, 239, 197, 172, 226, 159, 125, 128,
47, 8, 30, 139, 141, 80, 89, 190, 33, 22, 135, 221, 191, 222, 127,
22, 113, 237, 150, 146, 135, 209, 231, 132, 69, 61, 29, 129, 126, 73,
15, 149, 11, 90, 233, 227, 137, 231, 168, 79, 248, 251, 85, 170, 141,
186, 187, 12, 193, 35, 233, 169, 114, 85, 122, 226, 217, 194, 210, 236,
65, 224, 251, 168, 60, 247, 187, 125, 5, 92, 182, 254, 62, 78, 40,
165, 82, 31, 241, 247, 35, 161, 129, 12, 33, 37, 49, 59, 21, 160,
204, 25, 22, 37, 206, 205, 159, 37, 145, 131, 158, 19, 55, 41, 32,
155, 127, 185, 201, 53, 75, 171, 188, 27, 141, 48, 245, 70, 51, 78,
220, 199, 196, 101, 196, 214, 155, 227, 76, 141, 16, 10, 232, 224, 103,
31, 84, 65, 213, 17, 147, 235, 57, 121, 128, 144, 130, 156, 225, 65,
39, 160, 79, 183, 216, 148, 82, 229, 63, 235, 12, 159, 60, 168, 252,
249, 93, 147, 165, 128, 61, 212, 87, 243, 196, 109, 129, 14, 188, 122,
200, 45, 144, 254, 176, 114, 2, 135, 167, 121, 83, 214, 57, 200, 138,
220, 102, 123, 140, 198, 157, 165, 51, 247, 33, 178, 138, 15, 224, 254,
90, 217, 138, 78, 32, 13, 214, 172, 162, 11, 194, 162, 185, 162, 163,
126, 152, 196, 179, 1, 140, 108, 217, 93, 222, 159, 174, 16, 215, 25,
182, 164, 112, 154, 188, 40, 48, 19, 231, 126, 141, 136, 230, 63, 166,
130, 117, 53, 75, 9, 231, 74, 114, 214, 54, 78, 108, 155, 221, 191,
56, 216, 139, 37, 82, 96, 74, 236, 63, 110, 100, 123, 67, 111, 212,
128, 124, 178, 92, 40, 172, 121, 12, 175, 56, 194, 254, 32, 80, 63,
55, 24, 136, 184, 238, 166, 27, 102, 221, 232, 16, 90, 49, 211, 202,
225, 25, 212, 120, 189, 138, 204, 134, 22, 4, 118, 54, 196, 103, 185,
104, 143, 98, 193, 162, 57, 194, 224, 228, 84, 28, 73, 192, 37, 245,
159, 209, 186, 53, 14, 151, 73, 69, 161, 220, 243, 192, 69, 232, 200,
35, 189, 250, 3, 161, 115, 21, 253, 138, 166, 46, 196, 188, 219, 124,
56, 172, 99, 173, 93, 46, 21, 142, 178, 242, 181, 105, 45, 132, 170,
138, 46, 215, 8, 236, 136, 103, 61, 201, 52, 13, 11, 85, 67, 16,
107, 222, 50, 150, 54, 121, 120, 234, 72, 34, 150, 18, 205, 135, 133,
136, 123, 239, 77, 198, 225, 246, 226, 128, 147, 192, 53, 101, 227, 108,
93, 106, 119, 83, 50, 123, 41, 226, 116, 83, 163, 93, 106, 205, 173,
197, 113, 136, 221, 93, 247, 208, 125, 151, 203, 241, 212, 209, 101, 6,
218, 141, 165, 227, 83, 186, 104, 239, 190, 177, 118, 30, 138, 35, 81,
9, 41, 106, 101, 102, 108, 211, 8, 145, 134, 59, 146, 22, 162, 32,
10, 123, 4, 49, 21, 212, 79, 102, 132, 207, 44, 177, 191, 246, 200,
46, 63, 181, 88, 100, 85, 244, 166, 250, 154, 174, 115, 228, 202, 171,
211, 194, 65, 103, 200, 12, 80, 216, 69, 243, 39, 101, 175, 79, 226,
90, 9, 51, 61, 40, 33, 55, 72, 108, 123, 163, 96, 240, 66, 241,
1, 247, 22, 42, 51, 104, 247, 81, 165, 201, 59, 182, 69, 137, 111,
21, 23, 150, 54, 62, 122, 72, 57, 76, 90, 207, 179, 56, 86, 86,
201, 151, 200, 145, 144, 187, 152, 34, 56, 145, 171, 42, 27, 211, 54,
53, 77, 164, 236, 18, 124, 20, 117, 162, 102, 50, 127, 186, 5, 81,
239, 142, 140, 143, 94, 88, 222, 63, 180, 88, 228, 248, 228, 167, 169,
75, 253, 87, 136, 156, 83, 45, 175, 79, 162, 157, 220, 53, 187, 230,
186, 79, 175, 18, 249, 120, 0, 252, 110, 8, 97, 78, 98, 137, 127,
94, 11, 88, 220, 126, 101, 12, 236, 52, 42, 84, 255, 121, 19, 106,
144, 154, 2, 176, 35, 246, 110, 3, 27, 122, 23, 210, 254, 14, 98,
110, 89, 203, 190, 209, 201, 101, 204, 98, 105, 99, 87, 107, 227, 235,
187, 194, 36, 119, 15, 124, 195, 90, 34, 198, 95, 32, 167, 32, 169,
250, 139, 82, 194, 245, 201, 150, 116, 48, 11, 83, 110, 200, 167, 134,
124, 88, 19, 15, 119, 230, 142, 225, 219, 26, 58, 152, 6, 187, 241,
25, 149, 209, 3, 107, 136, 137, 45, 75, 49, 94, 170, 243, 18, 82,
113, 229, 40, 107, 8, 4, 47, 159, 147, 113, 68, 133, 79, 139, 12,
105, 204, 251, 246, 66, 146, 133, 247, 5, 93, 67, 206, 158, 216, 32,
39, 45, 96, 55, 96, 81, 193, 101, 99, 227, 254, 112, 10, 188, 1,
222, 149, 76, 155, 34, 244, 137, 105, 62, 210, 83, 207, 150, 217, 76,
143, 106, 14, 119, 58, 166, 119, 59, 121, 153, 224, 191, 136, 155, 2,
187, 168, 112, 164, 235, 4, 126, 83, 53, 233, 171, 206, 59, 155, 68,
237, 37, 40, 232, 190, 119, 52, 133, 111, 235, 70, 217, 171, 171, 102,
211, 182, 124, 34, 126, 22, 117, 88, 39, 220, 137, 158, 147, 89, 7,
148, 119, 88, 99, 216, 176, 244, 146, 191, 225, 74, 218, 143, 172, 230,
26, 28, 227, 136, 13, 217, 50, 8, 238, 190, 116, 185, 243, 35, 79,
70, 255, 9, 175, 38, 92, 172, 219, 6, 242, 233, 227, 162, 175, 213,
170, 187, 76, 57, 207, 229, 143, 216, 216, 208, 57, 45, 98, 226, 18,
101, 57, 53, 137, 74, 162, 234, 66, 177, 70, 152, 148, 16, 115, 127,
152, 87, 112, 235, 8, 219, 89, 245, 255, 189, 236, 2, 168, 129, 161,
141, 225, 25, 119, 185, 158, 160, 138, 97, 138, 84, 155, 81, 167, 132,
184, 231, 21, 216, 11, 171, 217, 98, 155, 207, 222, 215, 11, 109, 130,
164, 0, 255, 65, 168, 69, 9, 82, 225, 191, 242, 144, 107, 249, 218,
123, 237, 71, 64, 160, 197, 232, 186, 107, 210, 15, 5, 182, 135, 175,
237, 138, 145, 223, 178, 127, 171, 201, 232, 141, 52, 147, 81, 215, 2,
108, 144, 47, 166, 236, 223, 108, 66, 250, 251, 99, 221, 215, 125, 71,
127, 224, 60, 207, 151, 208, 122, 188, 112, 212, 86, 212, 97, 113, 185,
219, 73, 118, 253, 208, 120, 75, 213, 224, 87, 130, 178, 61, 56, 82,
231, 59, 109, 164, 183, 89, 96, 31, 166, 34, 118, 41, 26, 12, 237,
3, 255, 200, 241, 64, 165, 84, 10, 18, 129, 223, 173, 179, 217, 120,
70, 76, 69, 90, 121, 3, 147, 179, 131, 252, 195, 242, 230, 209, 34,
23, 37, 146, 239, 158, 86, 204, 96, 175, 33, 214, 137, 87, 40, 29,
91, 8, 111, 215, 169, 26, 50, 208, 200, 97, 29, 148, 57, 66, 164,
68, 131, 212, 97, 220, 26, 52, 234, 177, 231, 185, 171, 230, 10, 55,
224, 182, 138, 209, 151, 250, 63, 88, 151, 231, 135, 189, 241, 137, 183,
101, 169, 14, 43, 229, 57, 202, 208, 90, 132, 156, 130, 27, 115, 84,
157, 45, 38, 111, 134, 11, 224, 103, 247, 14, 187, 77, 242, 114, 234,
70, 87, 235, 103, 154, 47, 158, 73, 87, 169, 73, 11, 210, 24, 199,
99, 79, 148, 119, 245, 201, 19, 101, 236, 220, 21, 219, 72, 237, 33,
141, 166, 168, 96, 172, 4, 146, 231, 174, 36, 228, 79, 234, 175, 53,
105, 218, 100, 177, 29, 201, 44, 227, 25, 97, 244, 99, 170, 236, 88,
77, 213, 12, 41, 23, 115, 171, 214, 149, 131, 87, 247, 90, 68, 110,
244, 93, 18, 161, 165, 92, 224, 136, 22, 191, 30, 189, 24, 108, 185,
230, 18, 38, 66, 30, 231, 24, 188, 105, 66, 60, 194, 79, 248, 43,
79, 177, 84, 48, 122, 126, 214, 46, 159, 171, 55, 12, 109, 144, 173,
73, 47, 139, 158, 24, 65, 108, 96, 84, 239, 220, 51, 170, 245, 192,
17, 121, 152, 182, 33, 88, 13, 173, 84, 89, 131, 54, 235, 8, 151,
3, 23, 200, 236, 247, 185, 133, 103, 170, 219, 124, 89, 30, 155, 76,
187, 5, 7, 25, 175, 13, 99, 57, 104, 217, 145, 102, 137, 89, 151,
175, 20, 56, 19, 203, 4, 35, 173, 44, 127, 206, 8, 95, 41, 198,
214, 232, 73, 93, 157, 175, 78, 182, 86, 74, 151, 23, 189, 250, 26,
226, 2, 153, 232, 26, 171, 174, 158, 146, 169, 161, 129, 32, 119, 79,
116, 82, 215, 19, 100, 242, 90, 215, 218, 67, 155, 151, 32, 52, 155,
217, 94, 78, 42, 253, 9, 250, 244, 126, 214, 71, 35, 34, 252, 191,
248, 61, 147, 45, 92, 140, 77, 216, 214, 87, 85, 126, 233, 34, 109,
89, 133, 221, 104, 121, 71, 251, 217, 255, 30, 38, 45, 154, 193, 119,
103, 90, 186, 195, 132, 131, 27, 54, 26, 229, 62, 77, 28, 118, 177,
4, 146, 59, 102, 244, 55, 95, 91, 78, 137, 11, 45, 151, 3, 21,
208, 20, 4, 34, 232, 42, 54, 79, 28, 143, 234, 236, 205, 126, 98,
5, 87, 209, 249, 100, 124, 29, 53, 130, 235, 26, 53, 54, 33, 119,
25, 43, 240, 183, 165, 178, 169, 186, 28, 39, 39, 12, 11, 21, 76,
83, 205, 23, 68, 140, 24, 89, 11, 139, 92, 75, 24, 166, 67, 254,
232, 11, 123, 254, 180, 129, 203, 38, 65, 51, 115, 106, 60, 251, 26,
142, 246, 219, 206, 89, 12, 41, 142, 253, 45, 20, 151, 107, 31, 171,
177, 51, 123, 5, 238, 94, 6, 252, 186, 61, 215, 38, 83, 76, 27,
227, 53, 10, 228, 206, 206, 248, 255, 136, 140, 162, 124, 110, 234, 42,
111, 132, 168, 166, 25, 100, 82, 206, 234, 170, 176, 219, 103, 140, 58,
116, 155, 186, 177, 2, 116, 158, 64, 239, 10, 230, 225, 247, 178, 120,
216, 169, 8, 131, 46, 21, 81, 107, 119, 198, 233, 192, 83, 240, 106,
6, 237, 233, 116, 12, 100, 71, 226, 54, 251, 47, 39, 248, 27, 222,
83, 29, 215, 22, 221, 27, 252, 55, 32, 238, 27, 125, 194, 5, 192,
114, 80, 152, 226, 143, 249, 74, 144, 4, 25, 95, 178, 120, 99, 14,
42, 216, 56, 159, 37, 74, 29, 46, 170, 255, 203, 107, 91, 155, 46,
111, 96, 201, 120, 34, 255, 91, 119, 165, 226, 159, 88, 212, 140, 128,
36, 248, 220, 34, 167, 14, 44, 241, 55, 80, 83, 109, 136, 203, 240,
144, 248, 131, 245, 124, 14, 214, 88, 95, 143, 199, 78, 174, 24, 187,
43, 249, 240, 40, 71, 2, 95, 114, 192, 133, 186, 152, 119, 76, 230,
110, 98, 76, 236, 31, 150, 181, 175, 212, 246, 103, 100, 225, 80, 157,
207, 11, 60, 160, 143, 219, 64, 75, 53, 53, 233, 113, 55, 176, 54,
36, 91, 9, 240, 117, 88, 152, 233, 126, 26, 237, 23, 131, 9, 24,
149, 167, 220, 249, 49, 246, 232, 213, 155, 23, 64, 218, 185, 127, 50,
253, 117, 151, 91, 254, 140, 57, 174, 108, 251, 95, 131, 187, 241, 53,
251, 249, 23, 52, 143, 20, 87, 83, 214, 115, 155, 113, 152, 46, 85,
171, 174, 124, 188, 224, 91, 84, 188, 113, 101, 192, 190, 249, 56, 12,
185, 107, 230, 186, 219, 242, 251, 178, 46, 24, 178, 11, 3, 177, 221,
51, 164, 202, 69, 219, 69, 227, 72, 161, 66, 228, 13, 252, 74, 252,
124, 126, 79, 37, 67, 17, 94, 9, 112, 238, 208, 82, 59, 211, 250,
92, 230, 239, 122, 76, 79, 201, 5, 254, 102, 70, 117, 182, 160, 136,
16, 107, 246, 50, 98, 167, 93, 168, 73, 55, 220, 204, 130, 62, 100,
26, 96, 150, 53, 182, 38, 144, 24, 212, 182, 22, 123, 142, 9, 174,
145, 130, 90, 207, 191, 27, 83, 185, 44, 123, 194, 52, 62, 59, 189,
4, 62, 137, 207, 75, 98, 130, 227, 112, 133, 62, 52, 162, 54, 184,
237, 153, 120, 99, 75, 113, 25, 143, 53, 1, 208, 157, 31, 193, 111,
68, 165, 209, 194, 88, 50, 198, 80, 58, 203, 145, 36, 187, 92, 241,
52, 47, 226, 44, 214, 21, 207, 108, 99, 207, 197, 69, 10, 153, 90,
171, 211, 135, 168, 21, 61, 159, 218, 184, 91, 131, 80, 126, 174, 249,
13, 178, 170, 146, 67, 126, 59, 64, 92, 190, 233, 229, 122, 151, 116,
116, 71, 35, 249, 71, 106, 51, 128, 98, 125, 138, 29, 100, 44, 136,
78, 248, 156, 67, 27, 96, 0, 211, 43, 161, 221, 184, 206, 56, 187,
143, 238, 220, 18, 226, 164, 145, 22, 190, 121, 98, 247, 94, 98, 181,
83, 77, 155, 42, 110, 194, 42, 49, 41, 66, 216, 46, 163, 10, 196,
187, 28, 43, 235, 170, 236, 156, 134, 164, 139, 59, 241, 157, 226, 236,
141, 87, 29, 148, 103, 161, 210, 213, 137, 89, 20, 125, 27, 36, 32,
113, 20, 111, 219, 159, 53, 146, 158, 116, 136, 159, 80, 22, 248, 17,
96, 23, 93, 107, 235, 149, 255, 97, 227, 220, 241, 124, 238, 61, 146,
109, 173, 217, 150, 201, 138, 66, 115, 164, 227, 105, 57, 59, 78, 82,
255, 149, 218, 96, 113, 65, 27, 140, 73, 147, 199, 17, 159, 36, 137,
100, 87, 72, 96, 225, 146, 41, 79, 134, 79, 104, 169, 38, 128, 123,
98, 1, 82, 84, 28, 124, 238, 176, 240, 165, 216, 46, 180, 144, 3,
255, 41, 187, 251, 37, 72, 63, 206, 13, 178, 5, 43, 58, 237, 60,
210, 3, 32, 28, 186, 24, 159, 86, 243, 31, 52, 246, 241, 57, 139,
88, 29, 115, 136, 23, 245, 178, 104, 250, 199, 199, 14, 243, 231, 136,
23, 7, 222, 56, 22, 180, 135, 34, 192, 226, 253, 70, 42, 62, 2,
34, 119, 158, 69, 166, 73, 19, 177, 80, 98, 190, 83, 128, 171, 96,
166, 55, 16, 107, 178, 219, 242, 32, 116, 60, 2, 178, 135, 213, 35,
162, 89, 75, 15, 21, 45, 138, 10, 84, 191, 198, 199, 40, 43, 92,
177, 235, 9, 152, 211, 4, 84, 251, 222, 240, 181, 96, 58, 94, 60,
245, 216, 72, 214, 198, 184, 80, 135, 151, 247, 72, 147, 184, 179, 97,
254, 229, 102, 118, 81, 254, 161, 129, 220, 234, 41, 171, 111, 126, 125,
226, 168, 246, 148, 100, 65, 185, 208, 100, 188, 247, 185, 37, 145, 4,
248, 78, 245, 191, 144, 156, 141, 95, 29, 108, 45, 154, 157, 165, 224,
36, 97, 211, 235, 200, 162, 8, 232, 149, 209, 243, 230, 80, 126, 196,
68, 207, 92, 182, 146, 199, 128, 250, 170, 23, 66, 204, 239, 75, 92,
155, 234, 56, 151, 177, 39, 106, 33, 77, 219, 37, 72, 212, 202, 205,
135, 80, 136, 216, 228, 174, 52, 243, 163, 178, 11, 145, 91, 163, 128,
137, 89, 194, 3, 215, 128, 236, 110, 234, 66, 128, 40, 88, 66, 86,
13, 74, 71, 15, 166, 214, 185, 15, 252, 241, 166, 249, 216, 99, 145,
21, 242, 239, 227, 129, 64, 66, 229, 164, 2, 246, 209, 137, 231, 254,
35, 56, 218, 171, 126, 143, 163, 62, 164, 149, 208, 91, 13, 89, 49,
109, 151, 136, 6, 248, 167, 42, 165, 163, 229, 43, 69, 60, 123, 50,
69, 102, 73, 144, 215, 2, 223, 140, 90, 246, 136, 132, 78, 156, 142,
143, 104, 17, 159, 182, 233, 211, 28, 165, 124, 19, 180, 59, 197, 60,
78, 139, 217, 83, 34, 233, 20, 158, 242, 166, 243, 234, 88, 181, 114,
207, 208, 254, 206, 101, 97, 19, 192, 129, 198, 84, 93, 182, 223, 80,
122, 152, 134, 218, 35, 225, 111, 238, 47, 129, 107, 110, 194, 230, 238,
73, 237, 80, 180, 42, 43, 220, 33, 62, 166, 134, 161, 28, 165, 159,
0, 197, 151, 92, 130, 163, 221, 39, 180, 255, 154, 121, 230, 22, 247,
28, 249, 190, 215, 232, 6, 16, 64, 80, 174, 85, 31, 212, 84, 102,
138, 247, 7, 108, 5, 60, 143, 153, 152, 14, 119, 236, 9, 113, 170,
208, 152, 122, 98, 131, 30, 218, 82, 102, 192, 90, 231, 134, 45, 252,
162, 141, 152, 34, 30, 147, 157, 243, 192, 222, 159, 96, 204, 234, 248,
239, 39, 124, 194, 53, 22, 210, 206, 212, 235, 66, 252, 104, 113, 60,
62, 50, 10, 205, 89, 230, 169, 182, 216, 221, 186, 227, 51, 83, 14,
8, 43, 91, 60, 116, 9, 64, 158, 139, 89, 51, 6, 77, 93, 160,
70, 45, 59, 107, 245, 66, 131, 99, 108, 24, 83, 233, 202, 191, 182,
248, 205, 206, 102, 36, 169, 159, 159, 239, 89, 252, 8, 233, 110, 154,
172, 137, 12, 169, 217, 96, 117, 64, 143, 55, 64, 212, 142, 231, 212,
179, 2, 61, 155, 88, 56, 87, 196, 56, 34, 69, 246, 246, 43, 20,
190, 67, 0, 13, 19, 28, 101, 149, 72, 60, 195, 250, 225, 54, 197,
82, 50, 37, 69, 218, 73, 191, 201, 30, 133, 81, 238, 174, 209, 181,
110, 182, 102, 127, 163, 78, 95, 64, 182, 170, 211, 202, 188, 41, 27,
60, 41, 210, 110, 71, 157, 64, 40, 37, 107, 234, 4, 126, 62, 68,
64, 240, 117, 172, 57, 118, 204, 205, 129, 219, 96, 134, 61, 147, 115,
70, 88, 92, 207, 22, 122, 46, 10, 134, 145, 24, 78, 190, 254, 141,
45, 77, 147, 75, 222, 240, 141, 58, 221, 26, 102, 216, 58, 161, 187,
148, 42, 142, 211, 246, 4, 142, 88, 166, 50, 157, 22, 33, 27, 10,
117, 1, 84, 113, 209, 110, 74, 154, 52, 85, 149, 39, 0, 247, 228,
185, 50, 24, 228, 130, 61, 46, 191, 234, 80, 171, 114, 161, 178, 57,
79, 79, 215, 103, 239, 99, 160, 173, 178, 69, 210, 64, 171, 18, 165,
219, 194, 204, 249, 59, 37, 186, 116, 217, 6, 180, 28, 189, 87, 64,
243, 233, 124, 119, 102, 230, 179, 200, 98, 47, 195, 72, 136, 214, 122,
116, 127, 185, 42, 70, 101, 129, 117, 143, 227, 36, 196, 62, 187, 200,
247, 170, 160, 40, 41, 117, 127, 99, 39, 219, 185, 216, 7, 169, 52,
162, 208, 100, 212, 82, 247, 145, 89, 199, 34, 6, 59, 139, 54, 37,
36, 184, 117, 17, 16, 234, 107, 29, 131, 79, 55, 177, 57, 30, 90,
36, 39, 4, 71, 135, 113, 162, 230, 193, 102, 157, 168, 164, 230, 240,
85, 243, 77, 217, 146, 147, 158, 15, 100, 61, 251, 242, 104, 149, 47,
37, 230, 33, 113, 146, 76, 125, 220, 173, 65, 56, 231, 114, 132, 192,
41, 231, 14, 232, 18, 195, 203, 86, 229, 50, 84, 58, 250, 204, 220,
184, 133, 236, 17, 16, 85, 149, 16, 108, 74, 153, 20, 82, 177, 102,
140, 62, 51, 173, 254, 192, 131, 135, 106, 86, 152, 84, 55, 210, 7,
124, 195, 244, 131, 162, 41, 88, 58, 166, 197, 172, 165, 144, 47, 198,
37, 236, 176, 177, 35, 157, 78, 159, 218, 41, 149, 227, 110, 103, 15,
58, 148, 192, 31, 247, 100, 158, 149, 128, 29, 165, 125, 255, 225, 174,
105, 236, 241, 30, 173, 190, 11, 101, 2, 53, 38, 237, 135, 33, 50,
78, 103, 52, 227, 218, 228, 140, 170, 240, 70, 180, 72, 24, 211, 98,
150, 165, 148, 97, 41, 12, 32, 78, 230, 13, 30, 213, 80, 24, 108,
157, 61, 165, 77, 159, 132, 194, 89, 202, 44, 231, 171, 30, 66, 235,
168, 68, 76, 45, 35, 85, 123, 2, 155, 155, 185, 152, 193, 198, 184,
237, 71, 251, 137, 212, 56, 82, 50, 153, 111, 143, 97, 80, 212, 17,
157, 188, 158, 14, 5, 69, 134, 122, 37, 179, 204, 146, 62, 216, 88,
174, 75, 57, 122, 235, 239, 199, 18, 134, 181, 163, 91, 242, 168, 229,
186, 58, 222, 194, 205, 218, 62, 116, 235, 93, 116, 152, 135, 95, 157,
124, 113, 211, 218, 18, 4, 95, 225, 217, 89, 180, 86, 86, 235, 88,
206, 50, 94, 26, 83, 29, 15, 61, 197, 45, 41, 124, 164, 56, 213,
106, 147, 114, 59, 109, 34, 142, 164, 33, 146, 245, 208, 221, 248, 108,
168, 142, 203, 232, 95, 61, 33, 33, 40, 17, 71, 209, 166, 86, 141,
211, 47, 59, 119, 150, 180, 148, 242, 172, 113, 54, 77, 229, 178, 40,
33, 161, 164, 64, 114, 4, 206, 36, 191, 199, 230, 205, 193, 154, 141,
187, 135, 24, 130, 96, 40, 45, 40, 210, 109, 225, 216, 100, 245, 194,
125, 125, 151, 174, 88, 248, 50, 193, 78, 21, 139, 141, 233, 92, 76,
199, 110, 176, 65, 16, 124, 150, 173, 64, 140, 202, 66, 111, 18, 31,
102, 136, 239, 32, 183, 214, 95, 219, 194, 217, 168, 85, 175, 154, 255,
111, 27, 211, 124, 90, 79, 71, 48, 131, 100, 110, 133, 75, 240, 13,
210, 191, 188, 164, 243, 124, 22, 233, 179, 14, 57, 29, 148, 245, 67,
28, 246, 192, 0, 252, 206, 221, 194, 38, 184, 27, 175, 207, 77, 135,
127, 126, 239, 45, 26, 103, 169, 66, 213, 152, 9, 36, 232, 252, 203,
153, 109, 102, 42, 252, 237, 132, 212, 148, 192, 61, 97, 152, 148, 108,
33, 83, 58, 176, 123, 88, 235, 213, 32, 84, 63, 247, 79, 216, 69,
179, 97, 68, 52, 194, 123, 59, 179, 225, 129, 120, 66, 195, 218, 9,
100, 8, 140, 143, 99, 250, 226, 166, 126, 2, 23, 46, 92, 105, 239,
168, 160, 39, 102, 152, 148, 61, 94, 92, 46, 247, 1, 229, 253, 210,
14, 47, 111, 113, 144, 111, 143, 97, 215, 202, 205, 55, 232, 243, 223,
59, 130, 156, 57, 111, 0, 76, 87, 230, 174, 84, 160, 33, 127, 205,
55, 68, 193, 116, 45, 119, 195, 3, 75, 178, 175, 146, 204, 244, 185,
233, 70, 74, 201, 164, 126, 120, 223, 247, 32, 72, 35, 159, 78, 147,
181, 65, 220, 56, 126, 214, 32, 230, 109, 240, 18, 248, 96, 207, 251,
58, 161, 70, 169, 39, 208, 53, 221, 65, 148, 250, 70, 81, 160, 71,
181, 100, 177, 59, 52, 227, 112, 217, 104, 7, 161, 137, 22, 140, 65,
158, 227, 216, 83, 132, 88, 111, 131, 153, 73, 150, 219, 42, 152, 254,
150, 232, 16, 42, 236, 58, 83, 138, 41, 124, 218, 99, 138, 248, 59,
185, 133, 85, 146, 79, 19, 137, 29, 127, 29, 248, 194, 216, 254, 239,
36, 88, 196, 140, 187, 232, 195, 251, 95, 94, 245, 124, 5, 174, 254,
189, 105, 160, 218, 163, 88, 41, 74, 85, 211, 236, 207, 161, 5, 155,
219, 246, 133, 87, 0, 118, 117, 40, 220, 63, 116, 201, 209, 105, 165,
113, 156, 32, 113, 139, 55, 79, 160, 228, 178, 27, 7, 10, 99, 140,
82, 238, 180, 156, 226, 175, 166, 202, 46, 67, 91, 150, 158, 74, 32,
230, 73, 116, 105, 166, 101, 63, 105, 177, 236, 90, 72, 251, 49, 45,
221, 255, 127, 169, 253, 60, 146, 38, 63, 224, 14, 119, 150, 222, 21,
1, 29, 230, 216, 251, 32, 248, 20, 34, 205, 178, 112, 26, 146, 231,
9, 149, 135, 234, 87, 57, 65, 29, 1, 42, 243, 242, 214, 170, 93,
202, 153, 44, 137, 185, 84, 222, 200, 24, 222, 76, 158, 120, 11, 148,
22, 8, 219, 202, 41, 203, 14, 65, 63, 7, 182, 76, 22, 120, 37,
246, 190, 101, 181, 59, 253, 97, 116, 170, 78, 67, 167, 54, 185, 222,
84, 72, 204, 109, 215, 41, 7, 38, 20, 54, 26, 116, 221, 26, 201,
33, 85, 23, 34, 123, 174, 102, 194, 183, 156, 49, 91, 75, 230, 202,
167, 9, 176, 245, 179, 90, 54, 54, 220, 38, 170, 42, 75, 139, 201,
48, 126, 101, 74, 126, 141, 200, 17, 62, 146, 125, 85, 255, 15, 222,
191, 206, 199, 206, 247, 0, 70, 77, 103, 191, 32, 28, 161, 137, 30,
83, 14, 160, 139, 87, 191, 237, 102, 40, 63, 17, 53, 165, 37, 93,
165, 121, 172, 171, 19, 116, 79, 54, 214, 182, 171, 30, 255, 169, 97,
255, 236, 235, 77, 12, 2, 18, 247, 16, 219, 64, 94, 20, 172, 241,
124, 20, 107, 241, 97, 183, 200, 251, 73, 136, 123, 181, 218, 174, 136,
214, 195, 225, 222, 28, 148, 153, 228, 112, 195, 105, 202, 74, 4, 100,
248, 242, 21, 16, 70, 83, 158, 148, 36, 98, 245, 84, 245, 151, 91,
128, 122, 24, 239, 218, 169, 243, 122, 148, 250, 110, 221, 77, 170, 236,
45, 200, 33, 60, 97, 161, 240, 68, 212, 3, 199, 4, 23, 246, 122,
127, 46, 149, 138, 184, 122, 19, 193, 62, 105, 82, 231, 216, 95, 169,
54, 216, 39, 199, 220, 100, 12, 231, 143, 112, 232, 221, 30, 143, 113,
112, 104, 38, 143, 99, 238, 84, 243, 1, 192, 233, 218, 103, 218, 237,
23, 175, 110, 200, 70, 168, 40, 210, 70, 173, 232, 232, 93, 63, 246,
92, 8, 63, 45, 144, 225, 137, 192, 11, 124, 121, 77, 60, 85, 214,
107, 172, 191, 227, 127, 91, 4, 75, 20, 191, 161, 164, 64, 21, 204,
35, 189, 251, 45, 196, 38, 224, 29, 99, 224, 63, 244, 8, 177, 90,
45, 91, 88, 174, 25, 194, 76, 128, 130, 29, 78, 21, 126, 186, 56,
223, 145, 112, 62, 72, 145, 67, 146, 157, 145, 35, 132, 205, 158, 44,
37, 52, 178, 100, 192, 105, 236, 116, 138, 33, 76, 163, 182, 33, 223,
234, 63, 158, 183, 123, 149, 3, 40, 56, 160, 22, 130, 243, 109, 251,
61, 165, 40, 199, 178, 9, 247, 208, 121, 199, 101, 132, 60, 102, 213,
38, 153, 210, 195, 77, 31, 229, 192, 177, 16, 160, 248, 227, 151, 112,
31, 56, 74, 61, 176, 178, 69, 167, 153, 131, 172, 161, 191, 232, 173,
255, 83, 103, 2, 65, 18, 114, 73, 44, 44, 0, 63, 131, 129, 31,
62, 75, 143, 140, 183, 124, 204, 64, 22, 135, 170, 125, 140, 10, 216,
36, 142, 92, 19, 108, 118, 95, 47, 213, 238, 52, 36, 24, 85, 119,
252, 240, 72, 215, 179, 243, 236, 122, 34, 174, 63, 188, 228, 228, 40,
240, 118, 239, 252, 39, 52, 86, 106, 155, 228, 22, 108, 42, 218, 142,
49, 111, 184, 78, 224, 223, 9, 11, 223, 54, 246, 105, 132, 108, 49,
136, 50, 54, 44, 101, 145, 46, 54, 210, 214, 120, 57, 67, 93, 204,
221, 250, 160, 195, 231, 221, 234, 48, 233, 172, 53, 248, 246, 30, 220,
210, 99, 232, 108, 24, 50, 108, 124, 169, 194, 64, 130, 22, 4, 21,
0, 118, 81, 15, 57, 223, 100, 237, 48, 14, 242, 4, 43, 146, 217,
77, 198, 116, 249, 5, 96, 176, 27, 107, 42, 125, 202, 65, 237, 152,
66, 186, 147, 74, 170, 34, 179, 154, 19, 10, 251, 203, 60, 136, 108,
84, 192, 113, 248, 73, 147, 192, 7, 135, 11, 118, 48, 185, 180, 145,
163, 124, 159, 73, 252, 111, 49, 52, 235, 101, 42, 57, 227, 200, 201,
138, 93, 78, 152, 2, 138, 182, 148, 126, 226, 191, 84, 3, 16, 159,
211, 247, 119, 204, 98, 160, 69, 240, 174, 90, 253, 246, 0, 102, 247,
152, 231, 220, 130, 208, 81, 182, 175, 92, 89, 185, 53, 74, 154, 27,
197, 150, 253, 189, 103, 102, 11, 57, 59, 74, 11, 208, 237, 8, 231,
131, 235, 55, 1, 167, 161, 28, 154, 194, 232, 60, 25, 161, 141, 120,
128, 188, 105, 220, 127, 221, 20, 58, 227, 244, 159, 95, 176, 245, 103,
51, 158, 168, 130, 236, 150, 68, 124, 8, 93, 240, 116, 247, 6, 17,
192, 147, 22, 232, 88, 27, 223, 142, 222, 200, 42, 36, 224, 193, 152,
205, 16, 236, 240, 128, 2, 64, 8, 45, 218, 228, 138, 180, 8, 228,
178, 125, 152, 99, 6, 199, 159, 240, 125, 235, 31, 195, 86, 42, 238,
84, 202, 189, 132, 195, 172, 64, 107, 151, 123, 157, 50, 205, 152, 192,
146, 14, 70, 160, 173, 112, 8, 230, 56, 158, 41, 10, 197, 131, 208,
219, 152, 40, 46, 60, 76, 140, 49, 234, 184, 168, 166, 155, 1, 157,
84, 182, 128, 128, 76, 13, 22, 218, 12, 56, 2, 192, 65, 96, 167,
63, 217, 203, 131, 235, 75, 221, 37, 157, 41, 161, 175, 59, 135, 239,
116, 39, 78, 55, 198, 146, 182, 72, 219, 20, 192, 24, 195, 223, 28,
194, 102, 168, 119, 88, 111, 11, 99, 158, 194, 187, 189, 127, 137, 238,
177, 67, 94, 29, 35, 139, 203, 131, 2, 148, 252, 50, 116, 46, 58,
195, 243, 23, 114, 41, 147, 56, 231, 152, 166, 244, 125, 232, 19, 98,
104, 160, 18, 154, 79, 221, 173, 148, 100, 103, 149, 201, 209, 40, 110,
198, 60, 33, 182, 177, 137, 185, 151, 206, 88, 194, 160, 215, 197, 123,
91, 5, 97, 103, 233, 37, 189, 229, 228, 83, 150, 103, 195, 10, 194,
0, 68, 255, 98, 8, 108, 224, 246, 231, 20, 185, 59, 231, 85, 94,
250, 108, 221, 138, 164, 210, 93, 105, 109, 88, 157, 195, 53, 16, 235,
152, 180, 230, 33, 71, 102, 45, 84, 17, 63, 72, 218, 96, 151, 161,
197, 222, 13, 92, 216, 119, 60, 92, 87, 140, 240, 138, 53, 95, 122,
47, 60, 136, 66, 26, 195, 92, 170, 213, 227, 73, 143, 27, 185, 190,
82, 208, 94, 140, 30, 227, 107, 143, 151, 44, 87, 48, 12, 60, 76,
6, 145, 199, 133, 57, 177, 81, 212, 161, 179, 145, 42, 93, 101, 238,
17, 234, 139, 82, 191, 148, 111, 55, 189, 173, 50, 227, 187, 197, 49,
216, 91, 37, 203, 39, 192, 41, 83, 17, 244, 233, 222, 18, 176, 59,
167, 59, 34, 98, 16, 40, 103, 101, 21, 210, 59, 177, 19, 182, 212,
80, 165, 162, 223, 17, 223, 88, 12, 126, 9, 243, 253, 127, 26, 116,
201, 26, 239, 213, 179, 199, 4, 176, 176, 238, 61, 143, 198, 55, 212,
69, 42, 92, 67, 121, 85, 33, 175, 243, 109, 47, 137, 218, 129, 137,
151, 217, 18, 40, 35, 63, 113, 206, 201, 142, 156, 230, 26, 194, 26,
37, 35, 124, 38, 213, 149, 242, 9, 157, 137, 80, 175, 106, 133, 211,
217, 9, 250, 73, 110, 232, 245, 25, 193, 85, 253, 168, 67, 99, 232,
98, 100, 206, 4, 174, 157, 102, 144, 86, 50, 79, 111, 52, 112, 194,
23, 178, 153, 174, 14, 185, 61, 92, 38, 139, 61, 89, 173, 177, 212,
133, 120, 185, 166, 224, 37, 107, 114, 189, 120, 221, 191, 44, 59, 138,
228, 9, 54, 67, 91, 42, 28, 57, 179, 138, 60, 59, 29, 124, 66,
99, 171, 202, 201, 241, 122, 61, 194, 72, 232, 214, 70, 32, 227, 168,
245, 112, 212, 166, 69, 170, 240, 103, 173, 53, 146, 244, 94, 166, 162,
249, 113, 118, 103, 177, 159, 153, 135, 186, 192, 239, 191, 252, 228, 39,
131, 82, 30, 37, 48, 44, 153, 121, 166, 198, 68, 4, 233, 127, 30,
88, 219, 25, 197, 20, 242, 139, 91, 140, 34, 154, 197, 180, 62, 251,
237, 228, 224, 227, 227, 172, 112, 219, 124, 175, 93, 106, 244, 237, 49,
178, 190, 136, 207, 70, 103, 186, 21, 186, 23, 218, 115, 66, 101, 233,
191, 22, 68, 70, 235, 86, 145, 140, 175, 26, 4, 226, 128, 254, 85,
165, 18, 217, 81, 59, 229, 121, 70, 60, 33, 38, 3, 6, 77, 34,
148, 204, 167, 182, 209, 38, 221, 176, 217, 179, 182, 153, 150, 194, 31,
18, 195, 172, 77, 148, 187, 62, 221, 89, 46, 177, 19, 219, 164, 228,
50, 230, 113, 86, 78, 92, 167, 181, 246, 47, 203, 81, 199, 25, 16,
152, 28, 66, 5, 156, 104, 126, 181, 140, 50, 177, 19, 96, 162, 229,
11, 123, 128, 140, 161, 214, 40, 194, 76, 84, 223, 196, 14, 117, 11,
141, 44, 7, 64, 44, 35, 120, 7, 199, 238, 172, 21, 104, 30, 218,
171, 150, 233, 160, 176, 207, 44, 244, 192, 198, 167, 45, 90, 183, 246,
62, 172, 64, 148, 141, 177, 99, 121, 87, 241, 76, 176, 28, 32, 41,
96, 195, 82, 139, 251, 163, 212, 10, 143, 163, 143, 212, 179, 52, 237,
58, 144, 35, 144, 0, 240, 229, 182, 164, 108, 57, 92, 185, 108, 219,
54, 185, 236, 108, 9, 228, 144, 248, 63, 220, 200, 87, 183, 179, 223,
100, 125, 225, 40, 30, 35, 26, 189, 67, 35, 230, 44, 23, 185, 232,
244, 125, 204, 185, 168, 180, 208, 62, 133, 14, 33, 131, 144, 126, 109,
11, 188, 108, 143, 1, 17, 242, 18, 46, 242, 100, 40, 56, 224, 213,
76, 236, 26, 9, 119, 54, 2, 73, 91, 209, 45, 250, 119, 102, 33,
196, 156, 206, 38, 8, 106, 138, 113, 92, 117, 152, 24, 165, 223, 166,
177, 96, 199, 58, 155, 106, 106, 255, 151, 104, 211, 174, 222, 150, 224,
145, 88, 94, 233, 57, 116, 37, 189, 108, 187, 132, 204, 175, 122, 14,
135, 41, 102, 152, 153, 227, 103, 65, 244, 253, 234, 75, 210, 38, 167,
224, 239, 85, 254, 168, 143, 205, 171, 97, 64, 59, 20, 142, 202, 151,
206, 33, 116, 29, 103, 107, 143, 186, 195, 214, 65, 167, 133, 110, 137,
191, 31, 202, 43, 106, 226, 244, 52, 233, 22, 207, 73, 61, 215, 143,
226, 148, 233, 36, 24, 196, 36, 212, 131, 165, 160, 164, 95, 150, 64,
34, 99, 175, 43, 136, 0, 66, 124, 60, 242, 165, 230, 20, 92, 102,
173, 143, 14, 148, 23, 199, 19, 72, 187, 48, 192, 108, 83, 65, 138,
14, 69, 110, 221, 149, 120, 81, 229, 103, 206, 155, 172, 243, 36, 156,
124, 76, 236, 189, 247, 91, 151, 240, 178, 223, 234, 13, 192, 143, 222,
55, 116, 22, 105, 252, 188, 240, 83, 57, 254, 193, 158, 233, 191, 242,
80, 98, 83, 110, 210, 159, 186, 101, 76, 53, 31, 160, 113, 99, 131,
158, 247, 157, 61, 235, 117, 255, 150, 122, 124, 156, 93, 229, 138, 190,
163, 32, 2, 193, 158, 165, 223, 226, 206, 186, 177, 127, 253, 115, 237,
95, 7, 174, 196, 230, 160, 167, 186, 26, 158, 100, 88, 123, 202, 169,
211, 104, 160, 55, 191, 242, 188, 232, 54, 241, 236, 206, 76, 136, 59,
74, 24, 188, 40, 96, 252, 119, 113, 87, 117, 54, 244, 33, 211, 80,
146, 66, 233, 10, 254, 32, 184, 128, 106, 120, 125, 80, 177, 24, 40,
144, 247, 150, 152, 19, 36, 120, 245, 219, 44, 37, 40, 50, 204, 16,
174, 140, 211, 125, 247, 81, 177, 153, 140, 201, 187, 113, 31, 240, 241,
92, 22, 189, 199, 9, 129, 85, 77, 171, 6, 186, 13, 12, 95, 90,
75, 251, 68, 210, 121, 67, 65, 210, 31, 3, 124, 244, 68, 189, 65,
216, 184, 36, 254, 176, 184, 39, 167, 5, 12, 79, 196, 173, 155, 101,
187, 46, 153, 99, 45, 4, 105, 98, 251, 169, 232, 169, 150, 157, 236,
255, 243, 193, 35, 62, 237, 245, 26, 192, 71, 106, 183, 113, 121, 208,
195, 209, 213, 145, 98, 79, 17, 180, 7, 61, 84, 154, 75, 253, 124,
65, 96, 208, 210, 124, 221, 31, 130, 74, 114, 136, 175, 80, 91, 144,
124, 216, 180, 141, 200, 25, 13, 34, 110, 254, 21, 150, 8, 67, 208,
213, 139, 31, 180, 19, 213, 188, 114, 57, 19, 197, 165, 255, 40, 250,
169, 223, 116, 174, 20, 36, 203, 1, 43, 87, 64, 95, 59, 197, 149,
110, 127, 172, 178, 198, 42, 19, 73, 20, 167, 11, 30, 200, 54, 30,
77, 109, 75, 253, 126, 143, 251, 147, 93, 155, 64, 40, 52, 151, 97,
39, 233, 34, 188, 140, 195, 67, 174, 239, 69, 124, 115, 124, 128, 43,
84, 106, 191, 143, 168, 116, 231, 62, 246, 98, 66, 103, 172, 147, 184,
136, 121, 211, 118, 189, 45, 137, 16, 26, 30, 221, 56, 162, 136, 172,
135, 90, 112, 242, 58, 137, 154, 250, 118, 18, 51, 33, 90, 241, 254,
207, 177, 226, 68, 174, 245, 247, 74, 85, 89, 111, 208, 104, 122, 101,
21, 24, 148, 46, 101, 199, 119, 6, 44, 166, 123, 25, 71, 219, 34,
102, 149, 224, 117, 68, 225, 159, 105, 156, 142, 1, 123, 89, 215, 169,
92, 178, 182, 18, 208, 37, 194, 38, 18, 33, 26, 58, 244, 189, 0,
91, 175, 155, 179, 56, 75, 235, 8, 22, 187, 117, 18, 30, 36, 201,
130, 113, 200, 139, 84, 29, 18, 142, 47, 137, 214, 101, 81, 210, 203,
24, 167, 62, 52, 90, 240, 16, 80, 247, 64, 4, 16, 44, 205, 213,
106, 97, 123, 87, 219, 64, 198, 235, 13, 102, 172, 15, 166, 115, 56,
167, 6, 225, 238, 185, 236, 105, 82, 156, 240, 20, 191, 249, 103, 136,
207, 210, 72, 248, 125, 31, 49, 97, 17, 139, 48, 25, 143, 47, 187,
75, 99, 147, 16, 225, 3, 192, 30, 93, 144, 92, 28, 0, 76, 160,
17, 172, 15, 159, 89, 69, 18, 242, 139, 37, 40, 209, 58, 177, 24,
124, 232, 153, 213, 159, 230, 28, 33, 64, 3, 55, 182, 234, 238, 219,
211, 83, 187, 119, 214, 32, 122, 139, 102, 97, 179, 68, 193, 81, 169,
162, 174, 62, 160, 152, 59, 151, 221, 89, 180, 151, 142, 243, 50, 23,
226, 238, 115, 220, 215, 71, 131, 234, 83, 230, 42, 96, 184, 149, 94,
167, 247, 74, 175, 233, 25, 50, 219, 115, 255, 84, 105, 176, 10, 205,
25, 118, 105, 116, 92, 144, 163, 86, 190, 11, 76, 28, 159, 212, 125,
211, 150, 134, 226, 246, 77, 230, 239, 67, 224, 63, 83, 163, 107, 162,
222, 91, 190, 53, 40, 13, 83, 233, 230, 47, 211, 206, 122, 195, 2,
225, 203, 199, 182, 84, 221, 186, 196, 186, 72, 86, 117, 55, 120, 33,
136, 251, 216, 70, 255, 184, 25, 0, 229, 248, 112, 245, 210, 144, 82,
178, 27, 229, 170, 84, 247, 224, 83, 233, 125, 146, 162, 252, 225, 193,
132, 193, 60, 149, 159, 5, 109, 221, 245, 14, 40, 194, 72, 85, 192,
97, 121, 127, 233, 68, 221, 22, 123, 233, 163, 206, 51, 249, 215, 41,
90, 241, 243, 246, 67, 212, 199, 8, 16, 210, 159, 224, 161, 109, 22,
246, 193, 204, 91, 172, 64, 54, 201, 125, 96, 155, 164, 27, 232, 34,
188, 61, 117, 80, 55, 74, 36, 155, 254, 73, 26, 102, 193, 120, 86,
128, 241, 16, 179, 48, 108, 35, 120, 14, 219, 204, 176, 26, 217, 177,
18, 81, 228, 233, 170, 230, 213, 200, 94, 1, 77, 177, 6, 224, 167,
45, 52, 8, 213, 153, 15, 182, 153, 211, 71, 13, 18, 40, 142, 190,
201, 193, 68, 129, 208, 25, 231, 2, 104, 133, 82, 111, 147, 51, 62,
143, 0, 172, 25, 15, 140, 100, 131, 194, 254, 93, 243, 93, 143, 80,
49, 220, 123, 199, 121, 78, 168, 185, 102, 252, 239, 151, 150, 119, 4,
254, 119, 38, 157, 112, 238, 75, 106, 176, 157, 148, 193, 93, 141, 1,
128, 64, 189, 67, 67, 82, 222, 178, 239, 89, 105, 247, 96, 7, 1,
126, 63, 89, 23, 42, 54, 145, 216, 8, 151, 163, 143, 68, 53, 147,
249, 143, 223, 37, 143, 178, 36, 25, 102, 119, 91, 131, 225, 148, 31,
174, 39, 128, 184, 211, 206, 197, 118, 34, 4, 161, 164, 230, 241, 166,
111, 21, 214, 81, 24, 108, 37, 178, 36, 232, 189, 119, 207, 252, 146,
213, 84, 47, 125, 223, 151, 244, 43, 74, 132, 14, 4, 152, 212, 135,
42, 97, 240, 53, 130, 170, 100, 232, 172, 134, 39, 69, 197, 158, 242,
136, 52, 179, 54, 233, 59, 82, 82, 75, 207, 237, 49, 150, 139, 39,
255, 105, 110, 190, 253, 172, 71, 204, 14, 192, 146, 118, 126, 78, 191,
37, 34, 177, 97, 194, 137, 191, 168, 166, 85, 15, 12, 37, 78, 135,
113, 39, 229, 20, 142, 32, 76, 76, 248, 185, 113, 7, 108, 175, 159,
47, 104, 154, 148, 96, 213, 222, 197, 82, 178, 24, 204, 188, 94, 36,
226, 241, 3, 174, 197, 237, 217, 77, 235, 208, 132, 43, 120, 99, 198,
183, 53, 43, 114, 175, 213, 52, 31, 94, 57, 115, 178, 63, 51, 214,
188, 112, 192, 168, 250, 37, 165, 15, 230, 109, 242, 49, 153, 158, 246,
222, 83, 46, 76, 32, 193, 92, 65, 6, 227, 14, 156, 112, 189, 18,
84, 162, 78, 227, 112, 113, 155, 139, 78, 223, 127, 110, 126, 176, 127,
158, 167, 17, 91, 3, 93, 27, 65, 146, 194, 200, 6, 110, 191, 81,
69, 166, 250, 80, 221, 29, 245, 116, 154, 20, 73, 173, 33, 201, 4,
190, 7, 172, 210, 249, 7, 223, 14, 3, 14, 132, 198, 194, 107, 3,
16, 58, 225, 176, 9, 11, 48, 38, 106, 188, 227, 138, 133, 18, 202,
89, 138, 110, 236, 78, 18, 146, 133, 89, 74, 101, 215, 129, 82, 173,
115, 154, 92, 59, 26, 217, 158, 4, 116, 167, 240, 58, 117, 113, 133,
54, 160, 229, 50, 11, 212, 148, 161, 2, 157, 61, 152, 153, 225, 24,
118, 91, 28, 70, 125, 29, 25, 19, 59, 171, 96, 21, 98, 67, 139,
39, 29, 23, 141, 78, 194, 158, 194, 82, 112, 211, 148, 113, 97, 189,
198, 191, 170, 239, 121, 66, 201, 151, 197, 210, 137, 195, 121, 190, 125,
34, 101, 149, 132, 159, 48, 32, 167, 199, 115, 208, 247, 37, 231, 209,
219, 25, 103, 24, 91, 211, 188, 202, 167, 23, 203, 110, 223, 44, 94,
253, 56, 211, 151, 60, 9, 165, 176, 179, 233, 156, 228, 30, 221, 133,
159, 103, 147, 88, 73, 166, 133, 166, 93, 164, 203, 162, 30, 91, 208,
238, 116, 193, 37, 116, 61, 119, 226, 8, 135, 38, 81, 92, 232, 212,
2, 39, 161, 160, 220, 225, 64, 179, 116, 152, 134, 201, 24, 247, 46,
229, 172, 187, 192, 107, 29, 87, 182, 65, 53, 121, 181, 113, 162, 53,
108, 108, 117, 0, 220, 51, 222, 116, 105, 167, 189, 136, 130, 249, 104,
107, 179, 105, 46, 26, 193, 230, 227, 147, 47, 15, 120, 94, 31, 93,
137, 78, 209, 125, 90, 115, 100, 167, 131, 32, 108, 92, 10, 124, 153,
138, 78, 147, 4, 90, 110, 73, 102, 104, 101, 81, 51, 142, 53, 22,
242, 202, 192, 32, 89, 121, 243, 72, 132, 68, 253, 102, 59, 90, 49,
106, 99, 187, 51, 133, 206, 121, 14, 30, 193, 153, 101, 53, 98, 212,
251, 194, 91, 202, 116, 188, 188, 89, 126, 117, 240, 129, 236, 82, 117,
229, 218, 115, 209, 202, 127, 157, 113, 118, 115, 197, 84, 231, 77, 175,
182, 182, 221, 204, 227, 128, 42, 172, 113, 224, 240, 175, 159, 113, 243,
227, 213, 10, 121, 186, 218, 247, 26, 252, 12, 249, 242, 121, 32, 55,
56, 3, 85, 162, 181, 134, 78, 254, 65, 248, 58, 187, 118, 232, 92,
11, 239, 176, 233, 35, 128, 170, 221, 237, 198, 48, 127, 43, 143, 217,
218, 255, 156, 22, 143, 11, 53, 234, 142, 43, 140, 147, 78, 153, 191,
38, 229, 21, 224, 243, 0, 93, 39, 215, 78, 42, 78, 4, 82, 41,
78, 121, 23, 244, 194, 19, 41, 40, 211, 226, 10, 180, 202, 47, 138,
122, 10, 232, 115, 68, 132, 84, 77, 78, 190, 55, 73, 52, 205, 118,
149, 152, 88, 170, 206, 197, 37, 48, 16, 117, 204, 76, 110, 61, 109,
244, 166, 152, 225, 195, 128, 164, 88, 17, 208, 161, 188, 36, 246, 81,
91, 147, 102, 213, 186, 214, 226, 186, 218, 148, 49, 253, 9, 144, 212,
147, 100, 3, 188, 178, 203, 173, 246, 143, 155, 93, 240, 177, 17, 142,
118, 217, 95, 158, 225, 49, 161, 53, 114, 15, 173, 86, 142, 204, 36,
13, 176, 56, 72, 169, 119, 118, 175, 77, 5, 59, 37, 242, 79, 200,
48, 198, 108, 44, 129, 82, 21, 231, 125, 19, 26, 173, 145, 16, 67,
233, 134, 36, 86, 30, 182, 187, 96, 121, 141, 15, 137, 44, 193, 253,
16, 242, 79, 139, 166, 69, 57, 182, 164, 253, 216, 62, 223, 74, 190,
245, 249, 157, 2, 135, 54, 47, 8, 24, 209, 49, 186, 189, 179, 202,
216, 207, 184, 16, 251, 153, 162, 129, 129, 26, 50, 26, 53, 155, 179,
152, 74, 110, 86, 176, 25, 88, 110, 165, 25, 11, 187, 216, 100, 196,
72, 174, 143, 152, 86, 88, 222, 11, 16, 16, 2, 25, 70, 157, 164,
155, 184, 158, 19, 73, 155, 10, 116, 172, 160, 132, 249, 136, 215, 50,
132, 72, 119, 113, 245, 167, 88, 115, 31, 224, 130, 196, 191, 177, 50,
171, 22, 100, 167, 151, 170, 166, 229, 241, 128, 218, 4, 12, 68, 54,
8, 199, 92, 97, 66, 59, 11, 167, 251, 49, 157, 75, 183, 43, 142,
131, 195, 98, 14, 218, 73, 1, 112, 17, 141, 196, 137, 193, 163, 143,
136, 170, 211, 72, 62, 33, 244, 40, 67, 184, 21, 241, 178, 169, 63,
19, 140, 0, 220, 91, 81, 151, 151, 98, 251, 244, 171, 181, 93, 89,
3, 170, 187, 13, 247, 65, 240, 170, 5, 245, 62, 81, 76, 30, 196,
196, 108, 249, 178, 175, 74, 11, 27, 236, 70, 33, 161, 136, 218, 44,
32, 159, 148, 211, 195, 115, 200, 10, 109, 220, 0, 82, 186, 224, 157,
96, 132, 97, 146, 0, 227, 50, 158, 66, 62, 55, 62, 216, 199, 140,
38, 43, 54, 134, 148, 80, 218, 37, 71, 187, 65, 181, 117, 74, 34,
178, 121, 70, 56, 198, 68, 66, 190, 109, 152, 154, 113, 149, 101, 228,
66, 177, 81, 125, 181, 90, 115, 88, 228, 150, 172, 239, 107, 117, 233,
202, 203, 223, 57, 140, 116, 82, 252, 177, 93, 176, 175, 46, 3, 148,
171, 163, 16, 86, 210, 167, 161, 34, 118, 114, 67, 113, 251, 119, 165,
85, 34, 175, 217, 134, 134, 70, 161, 118, 95, 230, 209, 197, 181, 254,
250, 235, 251, 135, 171, 38, 16, 233, 255, 208, 224, 230, 137, 211, 117,
84, 250, 150, 132, 1, 44, 70, 201, 194, 213, 35, 26, 28, 142, 204,
28, 166, 216, 29, 40, 203, 23, 165, 241, 166, 47, 222, 60, 201, 5,
2, 14, 172, 240, 131, 32, 0, 232, 39, 65, 198, 20, 107, 113, 109,
83, 7, 204, 198, 104, 148, 56, 89, 194, 153, 69, 10, 120, 114, 104,
24, 219, 21, 85, 231, 196, 161, 176, 149, 27, 80, 13, 107, 198, 101,
240, 104, 30, 45, 74, 38, 224, 117, 72, 234, 71, 195, 69, 158, 155,
206, 241, 132, 110, 51, 20, 199, 21, 183, 7, 44, 4, 99, 97, 205,
230, 166, 71, 143, 2, 184, 49, 2, 230, 211, 241, 49, 50, 47, 48,
74, 7, 189, 229, 31, 240, 24, 95, 238, 245, 55, 20, 79, 134, 100,
175, 87, 58, 9, 136, 212, 167, 9, 196, 80, 132, 159, 139, 112, 73,
139, 33, 58, 66, 21, 17, 1, 154, 21, 220, 86, 89, 174, 218, 196,
86, 88, 110, 144, 78, 109, 67, 83, 29, 130, 241, 229, 52, 134, 206,
211, 55, 62, 174, 255, 168, 75, 223, 177, 35, 236, 179, 238, 26, 136,
252, 0, 167, 129, 239, 163, 220, 169, 119, 195, 171, 51, 199, 77, 217,
166, 87, 214, 5, 71, 106, 38, 240, 251, 80, 136, 129, 101, 7, 180,
235, 213, 148, 110, 212, 239, 131, 118, 174, 28, 127, 251, 212, 201, 222,
135, 88, 67, 136, 89, 141, 81, 200, 148, 0, 78, 151, 72, 40, 216,
70, 44, 228, 73, 66, 211, 131, 228, 223, 221, 129, 211, 182, 182, 8,
196, 177, 68, 94, 114, 230, 145, 32, 87, 164, 244, 171, 245, 202, 141,
189, 236, 141, 26, 7, 202, 244, 122, 200, 137, 194, 199, 212, 113, 157,
27, 121, 242, 3, 8, 222, 81, 196, 147, 215, 180, 83, 218, 75, 164,
121, 213, 125, 142, 118, 17, 199, 234, 6, 57, 146, 53, 106, 19, 51,
13, 100, 50, 232, 128, 36, 234, 103, 240, 72, 82, 183, 5, 25, 86,
205, 208, 166, 0, 39, 173, 23, 197, 116, 191, 225, 83, 200, 24, 154,
17, 5, 139, 244, 123, 120, 47, 24, 84, 69, 61, 108, 125, 19, 152,
127, 85, 20, 131, 245, 230, 240, 13, 129, 2, 77, 67, 216, 244, 176,
17, 175, 135, 115, 119, 33, 155, 160, 24, 64, 131, 72, 162, 203, 212,
133, 133, 174, 155, 250, 101, 199, 117, 235, 250, 201, 133, 143, 98, 37,
165, 190, 159, 212, 30, 136, 217, 61, 133, 1, 90, 57, 172, 36, 237,
144, 38, 238, 213, 32, 243, 137, 112, 49, 152, 109, 211, 206, 74, 51,
191, 211, 101, 213, 214, 156, 114, 88, 165, 253, 204, 222, 73, 71, 122,
42, 121, 246, 139, 248, 90, 144, 13, 143, 28, 116, 248, 87, 63, 173,
37, 24, 98, 138, 75, 12, 10, 24, 131, 98, 124, 237, 255, 51, 140,
3, 151, 66, 158, 233, 184, 240, 196, 237, 136, 72, 95, 209, 125, 108,
106, 138, 206, 157, 250, 120, 17, 140, 40, 101, 5, 161, 175, 68, 95,
252, 246, 43, 183, 223, 130, 209, 26, 2, 14, 204, 191, 186, 10, 206,
126, 145, 236, 209, 122, 70, 194, 106, 248, 133, 109, 175, 34, 162, 20,
246, 66, 237, 118, 244, 196, 228, 164, 41, 185, 189, 77, 169, 157, 216,
9, 146, 191, 137, 170, 186, 216, 111, 209, 191, 149, 112, 105, 68, 171,
58, 21, 39, 68, 161, 64, 108, 78, 122, 28, 24, 119, 163, 224, 119,
223, 236, 69, 194, 235, 16, 188, 113, 28, 14, 253, 192, 30, 223, 140,
128, 78, 250, 170, 185, 53, 251, 249, 255, 152, 18, 81, 130, 95, 116,
169, 103, 145, 16, 122, 232, 255, 20, 227, 217, 79, 215, 191, 122, 193,
2, 68, 62, 154, 139, 57, 88, 18, 66, 222, 85, 27, 221, 73, 101,
67, 89, 10, 51, 180, 244, 39, 193, 48, 172, 246, 118, 127, 146, 135,
88, 31, 148, 57, 249, 146, 30, 22, 1, 8, 244, 225, 70, 216, 178,
25, 42, 145, 153, 118, 22, 62, 169, 123, 239, 12, 49, 240, 151, 218,
76, 154, 243, 47, 219, 151, 139, 232, 169, 206, 203, 106, 77, 119, 167,
58, 54, 20, 133, 105, 120, 251, 17, 205, 133, 236, 189, 238, 100, 220,
201, 34, 25, 49, 176, 80, 189, 72, 173, 12, 117, 196, 16, 20, 141,
106, 85, 251, 229, 160, 20, 209, 173, 82, 40, 254, 107, 0, 206, 221,
197, 235, 158, 114, 130, 20, 25, 249, 133, 23, 230, 220, 152, 135, 203,
184, 34, 52, 64, 137, 114, 145, 39, 254, 229, 94, 168, 203, 252, 89,
127, 250, 253, 202, 62, 32, 113, 247, 232, 24, 58, 36, 210, 52, 53,
11, 122, 238, 177, 163, 229, 18, 242, 180, 134, 182, 211, 149, 27, 238,
142, 254, 17, 17, 16, 209, 81, 40, 50, 188, 6, 233, 77, 245, 191,
233, 81, 204, 13, 228, 128, 27, 123, 98, 88, 154, 180, 120, 76, 173,
44, 225, 0, 109, 175, 109, 174, 183, 247, 165, 118, 227, 13, 38, 44,
132, 77, 208, 106, 78, 110, 45, 128, 128, 205, 195, 79, 47, 248, 117,
216, 226, 147, 87, 226, 210, 139, 233, 223, 10, 22, 254, 119, 231, 81,
127, 41, 116, 204, 131, 244, 154, 63, 170, 93, 123, 141, 218, 105, 102,
96, 201, 249, 96, 75, 117, 217, 25, 146, 81, 44, 116, 7, 15, 183,
252, 167, 175, 231, 245, 82, 98, 62, 156, 92, 125, 45, 32, 153, 104,
176, 229, 61, 166, 50, 98, 254, 191, 21, 249, 63, 100, 88, 48, 43,
111, 251, 159, 219, 220, 81, 76, 158, 167, 206, 222, 156, 217, 179, 253,
106, 229, 91, 252, 121, 36, 105, 114, 221, 108, 46, 26, 95, 16, 99,
29, 59, 54, 131, 80, 66, 205, 7, 79, 252, 147, 192, 244, 195, 206,
230, 96, 211, 36, 209, 232, 193, 176, 126, 68, 254, 243, 68, 182, 213,
254, 130, 48, 211, 218, 252, 164, 57, 132, 61, 118, 219, 69, 108, 153,
154, 130, 123, 80, 126, 120, 253, 239, 203, 20, 111, 98, 149, 10, 4,
16, 57, 205, 93, 196, 250, 150, 192, 205, 199, 63, 169, 141, 41, 193,
177, 233, 178, 203, 0, 156, 160, 81, 129, 226, 193, 78, 98, 230, 230,
202, 134, 0, 72, 51, 153, 238, 108, 35, 46, 94, 205, 219, 134, 152,
198, 163, 28, 35, 218, 110, 68, 19, 4, 74, 28, 101, 72, 105, 116,
129, 147, 23, 169, 206, 13, 129, 240, 211, 104, 194, 102, 113, 45, 32,
122, 6, 71, 249, 80, 71, 70, 15, 122, 98, 9, 163, 82, 216, 216,
24, 105, 104, 250, 57, 147, 226, 214, 33, 159, 171, 246, 224, 168, 157,
2, 3, 127, 176, 154, 236, 12, 163, 46, 119, 77, 167, 114, 116, 201,
229, 188, 32, 102, 61, 218, 207, 241, 97, 97, 223, 34, 20, 89, 101,
144, 249, 203, 56, 240, 109, 136, 189, 63, 188, 162, 215, 154, 112, 187,
168, 86, 85, 128, 74, 137, 13, 18, 26, 215, 111, 93, 172, 184, 86,
19, 197, 177, 21, 157, 28, 108, 212, 145, 67, 11, 204, 49, 217, 252,
7, 183, 62, 235, 120, 226, 9, 28, 3, 253, 46, 239, 31, 125, 110,
153, 206, 221, 180, 78, 187, 99, 130, 38, 1, 252, 24, 185, 76, 176,
248, 6, 69, 152, 247, 102, 119, 56, 61, 206, 96, 62, 80, 215, 115,
172, 155, 105, 220, 205, 233, 39, 166, 113, 186, 154, 6, 127, 53, 108,
149, 95, 95, 228, 109, 224, 50, 195, 231, 14, 119, 225, 46, 6, 1,
60, 196, 30, 115, 33, 179, 154, 205, 56, 32, 7, 121, 77, 94, 180,
133, 199, 107, 210, 22, 74, 152, 234, 187, 252, 147, 217, 44, 220, 166,
55, 172, 94, 167, 189, 30, 19, 104, 137, 157, 218, 9, 159, 156, 101,
92, 67, 180, 100, 150, 60, 78, 21, 82, 254, 233, 28, 78, 3, 127,
28, 181, 125, 169, 109, 143, 61, 92, 174, 231, 115, 219, 142, 190, 108,
156, 96, 91, 21, 146, 84, 86, 47, 100, 177, 107, 153, 132, 107, 77,
119, 148, 162, 167, 140, 55, 214, 250, 137, 159, 218, 157, 21, 35, 190,
22, 50, 53, 182, 60, 214, 18, 58, 229, 206, 95, 109, 103, 0, 129,
4, 235, 24, 196, 77, 56, 109, 109, 51, 122, 129, 219, 208, 123, 23,
75, 23, 92, 156, 148, 187, 6, 27, 211, 246, 23, 153, 190, 29, 182,
54, 143, 218, 63, 79, 242, 132, 170, 168, 101, 180, 62, 165, 178, 73,
133, 19, 66, 81, 93, 106, 255, 133, 138, 112, 108, 97, 245, 246, 127,
211, 65, 90, 194, 73, 34, 33, 76, 253, 97, 64, 129, 37, 210, 118,
49, 226, 91, 169, 184, 96, 98, 66, 214, 42, 128, 85, 245, 213, 161,
73, 133, 89, 65, 195, 248, 75, 154, 116, 18, 14, 207, 210, 172, 10,
152, 186, 190, 52, 245, 12, 251, 133, 74, 201, 114, 48, 245, 21, 58,
190, 143, 36, 177, 134, 224, 5, 239, 191, 100, 208, 95, 151, 45, 236,
7, 147, 39, 135, 3, 190, 243, 45, 170, 237, 56, 57, 143, 214, 114,
67, 96, 153, 217, 126, 200, 182, 141, 220, 83, 95, 176, 15, 24, 154,
227, 207, 92, 61, 70, 77, 249, 26, 214, 149, 129, 9, 179, 241, 205,
90, 217, 214, 0, 81, 221, 208, 10, 26, 23, 102, 55, 219, 240, 151,
179, 33, 7, 180, 248, 50, 4, 166, 231, 208, 132, 231, 42, 103, 244,
7, 80, 176, 85, 72, 2, 236, 112, 214, 9, 29, 252, 155, 168, 77,
231, 202, 3, 18, 208, 20, 140, 71, 183, 23, 64, 251, 228, 80, 134,
123, 145, 205, 247, 14, 137, 16, 117, 24, 34, 229, 135, 187, 63, 89,
88, 67, 240, 203, 116, 37, 87, 207, 109, 229, 79, 251, 250, 108, 110,
251, 116, 197, 36, 219, 54, 223, 179, 117, 227, 13, 62, 26, 178, 170,
235, 237, 72, 70, 178, 232, 222, 217, 13, 41, 74, 90, 106, 20, 42,
48, 232, 103, 143, 109, 133, 146, 244, 182, 127, 49, 106, 153, 4, 40,
46, 61, 64, 0, 33, 147, 62, 128, 11, 242, 84, 60, 239, 156, 211,
61, 169, 216, 105, 59, 241, 130, 14, 164, 79, 100, 74, 219, 146, 137,
178, 216, 25, 83, 38, 76, 202, 217, 60, 242, 139, 59, 144, 145, 51,
99, 92, 121, 252, 219, 231, 117, 126, 36, 57, 181, 81, 12, 91, 53,
58, 141, 233, 41, 5, 82, 248, 162, 49, 234, 242, 101, 200, 181, 184,
124, 110, 125, 169, 84, 157, 239, 166, 177, 35, 248, 166, 194, 91, 163,
222, 131, 59, 244, 205, 211, 72, 168, 108, 198, 47, 61, 155, 19, 102,
35, 209, 27, 148, 16, 73, 85, 83, 159, 194, 167, 85, 185, 32, 105,
183, 215, 113, 44, 84, 147, 170, 81, 42, 150, 85, 28, 146, 89, 197,
49, 237, 85, 92, 181, 48, 161, 222, 60, 17, 132, 240, 229, 51, 14,
100, 29, 233, 142, 67, 162, 81, 14, 9, 163, 192, 101, 215, 221, 11,
197, 227, 181, 250, 242, 205, 58, 30, 74, 11, 252, 36, 49, 217, 221,
54, 116, 110, 30, 104, 35, 192, 7, 157, 194, 138, 204, 102, 139, 212,
54, 101, 27, 69, 244, 202, 157, 42, 210, 255, 113, 48, 21, 98, 233,
204, 26, 164, 101, 71, 184, 58, 231, 115, 31, 48, 221, 36, 154, 220,
5, 147, 109, 121, 227, 147, 212, 50, 228, 28, 86, 244, 214, 215, 228,
14, 45, 142, 182, 240, 174, 124, 129, 32, 115, 153, 21, 226, 48, 192,
44, 41, 255, 39, 94, 68, 2, 21, 48, 204, 79, 203, 177, 153, 144,
40, 189, 234, 103, 217, 157, 35, 103, 208, 5, 131, 119, 209, 52, 22,
203, 81, 0, 187, 21, 75, 102, 214, 175, 246, 107, 106, 123, 159, 201,
198, 140, 104, 220, 155, 147, 21, 35, 73, 102, 59, 69, 5, 173, 242,
246, 123, 204, 189, 0, 198, 64, 225, 26, 218, 176, 86, 14, 123, 162,
240, 196, 70, 173, 231, 227, 231, 234, 19, 242, 117, 18, 57, 20, 70,
196, 149, 139, 225, 162, 115, 120, 238, 147, 227, 89, 191, 1, 166, 157,
98, 130, 245, 31, 220, 125, 192, 100, 190, 178, 3, 207, 218, 232, 195,
127, 170, 162, 66, 218, 240, 176, 148, 69, 75, 203, 36, 244, 102, 142,
103, 153, 79, 21, 219, 239, 115, 197, 220, 122, 50, 177, 104, 95, 77,
40, 109, 30, 47, 250, 199, 106, 64, 245, 90, 209, 177, 246, 130, 138,
217, 214, 183, 132, 80, 251, 118, 121, 236, 227, 84, 49, 15, 88, 26,
45, 165, 182, 172, 77, 144, 186, 138, 249, 45, 189, 22, 134, 130, 136,
65, 235, 170, 82, 47, 69, 207, 116, 35, 98, 156, 127, 195, 0, 15,
155, 171, 31, 118, 177, 121, 189, 156, 184, 66, 200, 46, 83, 78, 199,
250, 125, 124, 218, 56, 110, 227, 213, 228, 160, 122, 237, 213, 236, 26,
182, 114, 99, 114, 213, 187, 214, 3, 209, 214, 201, 28, 206, 115, 167,
104, 121, 12, 123, 220, 2, 80, 15, 147, 155, 61, 113, 111, 216, 126,
108, 117, 87, 20, 193, 9, 44, 162, 207, 188, 155, 22, 104, 122, 214,
166, 125, 97, 221, 134, 143, 98, 26, 166, 240, 182, 155, 250, 73, 108,
154, 137, 66, 41, 191, 92, 170, 139, 4, 19, 104, 13, 36, 43, 121,
150, 218, 159, 60, 110, 29, 82, 99, 105, 51, 95, 150, 12, 38, 135,
50, 39, 83, 191, 9, 83, 95, 239, 5, 238, 236, 255, 56, 136, 42,
148, 247, 211, 242, 230, 189, 126, 140, 125, 42, 196, 65, 110, 20, 252,
85, 50, 81, 153, 120, 191, 118, 180, 166, 84, 98, 92, 6, 136, 250,
72, 20, 95, 55, 131, 136, 84, 8, 159, 189, 236, 89, 207, 14, 204,
212, 141, 185, 217, 162, 33, 233, 27, 3, 128, 17, 83, 218, 80, 211,
206, 5, 27, 217, 121, 15, 75, 177, 82, 45, 107, 12, 44, 175, 152,
191, 2, 113, 211, 144, 64, 2, 84, 237, 156, 41, 54, 83, 38, 138,
146, 46, 247, 231, 72, 99, 188, 203, 181, 103, 32, 87, 176, 130, 179,
40, 244, 4, 206, 175, 15, 146, 97, 100, 158, 80, 13, 40, 114, 254,
221, 118, 79, 230, 147, 33, 76, 126, 86, 142, 45, 120, 83, 62, 106,
167, 168, 107, 32, 141, 236, 82, 95, 4, 218, 160, 20, 240, 81, 152,
104, 150, 146, 139, 45, 42, 245, 181, 48, 10, 197, 228, 69, 213, 63,
54, 231, 177, 152, 246, 43, 70, 110, 60, 206, 185, 154, 159, 37, 91,
243, 64, 52, 198, 160, 51, 167, 44, 180, 159, 191, 214, 172, 81, 183,
83, 197, 227, 250, 208, 107, 209, 202, 246, 32, 1, 224, 133, 125, 142,
202, 227, 85, 69, 170, 112, 93, 123, 43, 176, 225, 0, 146, 223, 28,
9, 74, 226, 103, 216, 21, 199, 148, 128, 239, 206, 89, 15, 79, 205,
15, 160, 65, 135, 206, 78, 144, 229, 156, 32, 201, 208, 154, 183, 227,
137, 210, 122, 61, 195, 240, 41, 170, 231, 210, 18, 65, 131, 222, 22,
161, 96, 49, 100, 18, 125, 16, 176, 35, 118, 233, 91, 133, 182, 209,
216, 162, 80, 100, 62, 224, 219, 46, 27, 181, 87, 189, 79, 165, 252,
63, 17, 209, 184, 89, 165, 209, 12, 225, 232, 181, 193, 101, 114, 100,
191, 141, 120, 81, 254, 65, 155, 46, 103, 65, 101, 95, 139, 184, 74,
27, 99, 129, 116, 119, 107, 29, 26, 237, 118, 167, 106, 64, 171, 227,
130, 235, 26, 187, 55, 149, 37, 73, 41, 191, 229, 164, 131, 24, 140,
35, 236, 11, 247, 161, 224, 185, 192, 92, 86, 174, 87, 100, 106, 144,
164, 178, 164, 242, 26, 240, 160, 84, 122, 151, 241, 159, 238, 73, 21,
232, 125, 162, 60, 128, 190, 135, 114, 207, 232, 238, 81, 47, 180, 220,
59, 187, 217, 142, 133, 125, 28, 99, 132, 41, 124, 121, 159, 131, 238,
114, 59, 144, 99, 209, 112, 37, 168, 21, 246, 117, 22, 115, 2, 78,
68, 40, 244, 252, 26, 163, 113, 206, 207, 201, 225, 126, 47, 90, 85,
106, 32, 181, 221, 27, 63, 19, 192, 25, 210, 12, 2, 74, 228, 217,
200, 134, 67, 66, 1, 103, 206, 107, 29, 114, 247, 241, 127, 9, 152,
210, 217, 109, 35, 180, 77, 52, 195, 50, 86, 245, 37, 47, 96, 150,
52, 226, 10, 88, 241, 231, 213, 132, 246, 42, 245, 103, 188, 1, 77,
245, 220, 232, 141, 43, 231, 85, 30, 73, 26, 181, 222, 246, 15, 55,
152, 28, 14, 116, 83, 248, 138, 33, 245, 68, 107, 239, 49, 37, 132,
150, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 91, 143, 38, 144, 250, 52, 197, 232, 84, 253, 128, 176,
55, 106, 128, 51, 193, 106, 219, 130, 220, 99, 125, 19, 2, 94, 195,
168, 172, 200, 184, 142, 200, 230, 75, 179, 75, 87, 228, 89, 67, 42,
200, 97, 236, 184, 125, 204, 179, 193, 111, 21, 32, 31, 10, 164, 198,
106, 117, 148, 189, 62, 21, 46, 220, 120, 243, 129, 73, 138, 108, 48,
141, 129, 198, 51, 42, 90, 20, 228, 218, 139, 214, 87, 212, 15, 40,
126, 51, 151, 117, 84, 172, 184, 120, 74, 32, 199, 146, 102, 164, 102,
195, 248, 198, 78, 203, 110, 39, 115, 128, 169, 182, 67, 67, 201, 68,
213, 62, 253, 124, 112, 243, 145, 205, 152, 123, 185, 61, 16, 217, 101,
173, 137, 39, 46, 101, 6, 178, 203, 85, 109, 105, 253, 16, 134, 134,
198, 60, 240, 57, 250, 215, 211, 64, 12, 102, 203, 155, 198, 19, 155,
97, 180, 9, 49, 148, 185, 25, 219, 34, 107, 217, 198, 166, 224, 245,
193, 153, 182, 181, 8, 60, 80, 242, 125, 255, 229, 80, 67, 48, 82,
224, 234, 231, 51, 144, 209, 183, 80, 147, 109, 241, 228, 45, 124, 39,
18, 207, 3, 19, 166, 187, 12, 127, 189, 137, 24, 243, 17, 156, 66,
45, 152, 200, 254, 20, 94, 192, 139, 209, 249, 25, 83, 33, 169, 198,
30, 92, 86, 242, 242, 65, 128, 196, 9, 113, 73, 169, 10, 250, 153,
43, 160, 158, 152, 95, 13, 1, 184, 92, 165, 74, 212, 205, 119, 126,
128, 222, 119, 168, 147, 220, 210, 235, 66, 7, 214, 227, 194, 192, 222,
219, 0, 110, 79, 231, 61, 82, 156, 247, 7, 52, 40, 127, 74, 27,
68, 154, 47, 200, 124, 27, 195, 249, 11, 171, 87, 48, 106, 32, 5,
216, 127, 66, 73, 101, 114, 89, 172, 182, 53, 201, 244, 16, 22, 156,
251, 33, 117, 212, 169, 104, 200, 201, 5, 219, 109, 3, 214, 254, 181,
234, 87, 168, 230, 134, 144, 194, 101, 186, 220, 75, 164, 101, 199, 43,
216, 148, 68, 234, 253, 94, 230, 187, 97, 171, 234, 69, 141, 132, 63,
55, 107, 57, 48, 148, 21, 77, 254, 184, 180, 251, 35, 204, 70, 64,
113, 5, 197, 147, 151, 187, 217, 68, 149, 3, 244, 163, 250, 234, 41,
109, 121, 63, 111, 201, 17, 215, 49, 84, 232, 136, 251, 33, 5, 150,
24, 52, 126, 59, 232, 188, 60, 192, 11, 143, 171, 52, 75, 189, 111,
88, 159, 225, 36, 8, 15, 151, 14, 114, 7, 40, 203, 213, 109, 97,
57, 24, 173, 21, 157, 107, 69, 218, 157, 156, 97, 93, 152, 214, 206,
13, 93, 98, 106, 111, 165, 15, 129, 32, 111, 139, 146, 8, 219, 203,
227, 108, 170, 95, 189, 32, 187, 87, 135, 109, 108, 27, 144, 180, 137,
180, 44, 41, 250, 130, 84, 110, 61, 137, 219, 8, 98, 62, 208, 125,
189, 3, 153, 88, 60, 83, 21, 248, 206, 231, 44, 7, 151, 129, 134,
60, 71, 204, 5, 137, 125, 123, 243, 134, 38, 37, 210, 15, 200, 211,
246, 227, 194, 117, 138, 209, 157, 65, 135, 214, 32, 223, 185, 57, 180,
243, 112, 212, 102, 35, 29, 222, 11, 238, 47, 93, 159, 171, 231, 61,
214, 211, 19, 182, 160, 11, 242, 106, 56, 23, 128, 66, 227, 189, 44,
235, 42, 37, 40, 5, 91, 188, 93, 136, 196, 237, 22, 10, 2, 9,
255, 21, 211, 32, 71, 84, 210, 207, 185, 195, 244, 149, 168, 73, 140,
175, 113, 37, 84, 28, 52, 156, 109, 141, 56, 135, 164, 236, 151, 252,
43, 200, 220, 149, 35, 187, 57, 169, 153, 206, 192, 182, 149, 4, 107,
16, 253, 151, 70, 237, 54, 199, 93, 137, 162, 243, 102, 166, 147, 79,
244, 117, 81, 40, 151, 158, 115, 15, 68, 76, 185, 229, 215, 236, 2,
171, 52, 25, 79, 133, 215, 81, 250, 43, 158, 104, 160, 255, 153, 242,
243, 177, 123, 76, 6, 226, 51, 149, 144, 150, 221, 38, 44, 221, 160,
219, 240, 119, 198, 227, 215, 95, 91, 231, 179, 41, 240, 146, 108, 158,
106, 53, 138, 232, 229, 112, 65, 179, 87, 41, 118, 89, 15, 31, 226,
97, 174, 61, 228, 244, 91, 121, 215, 231, 81, 181, 120, 3, 224, 141,
50, 165, 139, 52, 191, 67, 229, 231, 53, 153, 6, 17, 93, 199, 43,
229, 76, 252, 177, 4, 60, 152, 127, 98, 182, 90, 188, 167, 147, 73,
3, 34, 81, 111, 54, 177, 92, 133, 161, 135, 40, 247, 252, 117, 15,
13, 104, 237, 135, 106, 197, 199, 71, 4, 105, 247, 210, 81, 37, 82,
48, 162, 144, 205, 236, 51, 83, 195, 144, 33, 240, 128, 118, 109, 157,
186, 224, 230, 91, 78, 170, 116, 211, 148, 253, 75, 154, 127, 205, 184,
215, 194, 233, 187, 173, 192, 65, 239, 182, 235, 176, 98, 184, 182, 125,
126, 86, 85, 156, 0, 85, 254, 169, 176, 75, 85, 36, 47, 255, 34,
65, 11, 214, 42, 155, 227, 147, 200, 81, 25, 151, 165, 107, 46, 225,
157, 241, 181, 34, 248, 143, 171, 204, 171, 169, 186, 3, 217, 119, 149,
3, 231, 87, 113, 16, 27, 9, 106, 83, 28, 217, 202, 31, 158, 172,
144, 227, 94, 130, 62, 221, 10, 17, 158, 200, 144, 149, 159, 183, 17,
15, 122, 158, 195, 92, 43, 204, 82, 59, 205, 164, 25, 39, 52, 198,
218, 242, 213, 156, 159, 157, 106, 76, 146, 121, 43, 31, 76, 153, 94,
13, 156, 239, 222, 153, 203, 178, 226, 129, 143, 229, 113, 165, 163, 85,
31, 58, 15, 233, 217, 152, 226, 14, 45, 87, 169, 51, 130, 8, 218,
29, 88, 237, 211, 204, 67, 139, 25, 99, 232, 47, 107, 164, 217, 59,
70, 235, 221, 20, 227, 232, 61, 92, 126, 169, 133, 12, 225, 85, 62,
41, 155, 143, 246, 242, 146, 191, 218, 104, 120, 27, 66, 188, 240, 133,
95, 112, 69, 62, 68, 206, 151, 246, 132, 187, 135, 243, 191, 137, 195,
246, 154, 141, 81, 219, 117, 119, 91, 254, 216, 220, 179, 172, 178, 255,
227, 148, 191, 25, 1, 176, 28, 177, 85, 107, 100, 119, 102, 41, 198,
106, 189, 184, 161, 230, 56, 71, 229, 237, 3, 87, 14, 218, 31, 102,
171, 213, 57, 40, 124, 186, 242, 160, 169, 105, 27, 249, 190, 236, 223,
128, 199, 33, 112, 114, 142, 58, 17, 108, 17, 45, 76, 139, 133, 236,
241, 17, 99, 48, 60, 1, 43, 13, 212, 175, 135, 146, 103, 255, 236,
211, 212, 165, 254, 212, 63, 141, 122, 115, 72, 39, 119, 115, 144, 167,
27, 102, 115, 50, 234, 226, 201, 13, 247, 26, 234, 154, 142, 159, 98,
242, 104, 249, 36, 230, 119, 151, 1, 239, 1, 4, 88, 69, 186, 205,
220, 90, 209, 59, 78, 141, 157, 28, 206, 123, 90, 224, 129, 210, 194,
48, 86, 91, 244, 127, 62, 242, 187, 171, 93, 77, 208, 125, 44, 96,
34, 103, 224, 125, 205, 187, 165, 52, 160, 85, 206, 187, 6, 117, 6,
198, 66, 251, 109, 43, 183, 176, 32, 21, 187, 123, 88, 251, 12, 68,
107, 58, 58, 51, 68, 24, 20, 136, 6, 93, 67, 25, 3, 84, 83,
115, 241, 244, 114, 44, 185, 72, 250, 35, 163, 170, 29, 134, 145, 9,
134, 54, 236, 115, 200, 210, 85, 75, 19, 142, 2, 254, 218, 52, 94,
1, 116, 241, 54, 165, 94, 37, 198, 95, 115, 27, 43, 225, 150, 144,
122, 214, 218, 204, 235, 55, 255, 100, 133, 235, 205, 221, 169, 221, 35,
189, 120, 113, 195, 254, 219, 245, 22, 170, 241, 170, 212, 142, 19, 86,
195, 181, 102, 237, 118, 145, 119, 162, 31, 148, 96, 172, 30, 254, 162,
138, 223, 14, 50, 58, 98, 62, 184, 114, 68, 130, 68, 59, 86, 22,
110, 64, 173, 92, 36, 177, 150, 100, 51, 253, 27, 30, 105, 218, 3,
110, 238, 134, 213, 101, 155, 125, 37, 65, 13, 117, 126, 241, 172, 139,
81, 188, 145, 114, 43, 48, 232, 170, 123, 162, 25, 55, 125, 109, 198,
25, 236, 104, 114, 193, 40, 24, 236, 62, 19, 220, 246, 187, 220, 237,
33, 212, 203, 121, 252, 173, 220, 69, 55, 195, 141, 170, 229, 198, 172,
207, 216, 47, 31, 4, 119, 4, 223, 17, 1, 165, 74, 159, 212, 179,
3, 94, 188, 201, 236, 217, 103, 211, 237, 179, 88, 128, 216, 143, 115,
42, 229, 224, 214, 20, 172, 246, 6, 123, 87, 218, 4, 126, 112, 94,
195, 152, 52, 144, 126, 56, 96, 179, 90, 205, 178, 36, 183, 110, 19,
139, 184, 188, 166, 236, 192, 116, 124, 133, 45, 54, 133, 198, 118, 24,
176, 74, 203, 170, 183, 142, 121, 205, 66, 162, 234, 32, 43, 204, 130,
142, 253, 248, 22, 9, 121, 125, 194, 149, 166, 60, 224, 97, 104, 183,
14, 99, 97, 186, 163, 186, 255, 58, 243, 133, 140, 57, 16, 43, 155,
123, 159, 54, 47, 73, 75, 59, 61, 197, 181, 82, 85, 1, 8, 96,
102, 75, 26, 195, 76, 250, 255, 224, 100, 250, 240, 2, 100, 183, 246,
223, 85, 149, 220, 217, 238, 167, 235, 44, 51, 162, 190, 35, 202, 100,
194, 61, 98, 27, 29, 140, 192, 146, 138, 62, 215, 0, 53, 248, 204,
47, 11, 102, 117, 206, 77, 71, 143, 200, 225, 98, 57, 48, 177, 162,
71, 27, 159, 248, 177, 188, 167, 91, 181, 126, 60, 131, 58, 153, 110,
234, 152, 122, 251, 43, 106, 191, 71, 204, 55, 54, 97, 45, 72, 67,
236, 114, 137, 255, 235, 165, 187, 112, 214, 193, 158, 117, 114, 42, 104,
216, 142, 127, 121, 176, 32, 74, 5, 106, 164, 170, 80, 185, 162, 115,
244, 50, 65, 200, 141, 48, 222, 227, 119, 129, 165, 132, 183, 241, 49,
27, 42, 14, 193, 160, 215, 215, 53, 173, 238, 62, 205, 163, 238, 47,
164, 107, 176, 180, 121, 75, 4, 162, 50, 201, 56, 252, 171, 135, 200,
12, 248, 197, 215, 141, 97, 231, 127, 240, 45, 22, 107, 26, 167, 252,
68, 211, 109, 68, 110, 84, 253, 144, 38, 122, 128, 10, 206, 33, 88,
196, 93, 111, 66, 161, 216, 191, 2, 137, 123, 50, 94, 21, 123, 160,
137, 90, 12, 188, 179, 215, 170, 193, 69, 132, 236, 148, 130, 229, 202,
67, 31, 51, 253, 133, 242, 198, 238, 145, 234, 84, 99, 240, 24, 8,
71, 202, 16, 166, 36, 108, 26, 129, 251, 125, 19, 111, 99, 230, 136,
14, 39, 65, 185, 42, 91, 199, 0, 249, 253, 35, 206, 131, 82, 54,
215, 111, 61, 242, 155, 31, 22, 114, 233, 51, 99, 114, 121, 223, 202,
222, 196, 42, 90, 42, 109, 216, 175, 193, 225, 180, 231, 62, 203, 119,
153, 94, 227, 24, 0, 239, 26, 227, 26, 48, 50, 76, 194, 210, 1,
206, 43, 90, 249, 203, 119, 115, 71, 86, 209, 74, 110, 250, 121, 63,
73, 247, 23, 34, 201, 50, 133, 165, 177, 130, 88, 198, 141, 144, 110,
242, 211, 19, 91, 234, 118, 105, 41, 124, 224, 208, 212, 51, 3, 231,
251, 154, 122, 53, 136, 189, 11, 149, 221, 234, 179, 180, 61, 120, 123,
197, 237, 189, 182, 154, 76, 139, 100, 95, 107, 168, 37, 158, 160, 230,
79, 147, 200, 70, 151, 141, 151, 64, 179, 21, 232, 192, 211, 50, 238,
143, 123, 133, 57, 105, 117, 56, 28, 29, 146, 91, 81, 240, 142, 142,
73, 8, 218, 54, 131, 163, 93, 86, 86, 153, 166, 153, 89, 32, 214,
2, 216, 77, 139, 26, 115, 104, 152, 118, 115, 185, 179, 165, 6, 55,
179, 57, 82, 19, 240, 135, 236, 235, 221, 135, 88, 130, 186, 207, 15,
24, 81, 87, 237, 98, 123, 192, 113, 235, 230, 201, 222, 93, 29, 194,
23, 166, 36, 228, 5, 188, 64, 50, 233, 116, 109, 88, 43, 169, 171,
156, 21, 161, 142, 24, 189, 135, 25, 105, 58, 183, 33, 102, 252, 142,
117, 33, 113, 134, 234, 196, 2, 146, 75, 15, 214, 48, 238, 81, 193,
32, 216, 190, 170, 160, 73, 183, 131, 44, 95, 146, 100, 45, 115, 145,
14, 64, 107, 210, 88, 85, 246, 13, 111, 181, 11, 105, 143, 226, 170,
97, 72, 110, 89, 121, 176, 130, 124, 131, 66, 86, 163, 46, 247, 14,
228, 107, 52, 10, 150, 227, 65, 15, 126, 198, 226, 25, 88, 3, 15,
61, 247, 119, 172, 245, 199, 180, 167, 80, 109, 166, 49, 174, 111, 254,
158, 133, 158, 85, 181, 98, 165, 106, 54, 26, 14, 107, 65, 227, 255,
249, 240, 3, 214, 244, 240, 24, 147, 25, 5, 8, 211, 232, 197, 12,
144, 214, 42, 44, 65, 242, 150, 148, 120, 160, 131, 217, 201, 62, 115,
65, 217, 193, 180, 111, 89, 217, 48, 25, 70, 38, 58, 6, 207, 50,
104, 49, 124, 68, 112, 35, 190, 161, 162, 86, 157, 174, 153, 168, 5,
247, 110, 81, 53, 233, 199, 54, 52, 28, 176, 122, 107, 18, 211, 5,
169, 138, 173, 53, 111, 120, 151, 171, 234, 96, 241, 145, 153, 128, 153,
19, 203, 81, 129, 130, 154, 126, 24, 1, 125, 252, 171, 71, 115, 137,
20, 67, 102, 158, 120, 135, 20, 121, 34, 18, 72, 117, 49, 140, 134,
82, 141, 213, 222, 193, 86, 9, 172, 55, 27, 160, 99, 4, 35, 2,
82, 69, 164, 15, 23, 150, 150, 196, 114, 132, 62, 124, 210, 25, 87,
14, 132, 245, 174, 165, 164, 15, 93, 179, 39, 32, 89, 66, 42, 109,
91, 120, 35, 36, 173, 201, 211, 103, 56, 62, 62, 5, 127, 24, 44,
149, 94, 180, 20, 227, 186, 67, 31, 206, 231, 26, 241, 162, 87, 111,
89, 62, 217, 216, 110, 27, 36, 37, 83, 62, 134, 3, 122, 3, 36,
239, 91, 161, 225, 2, 175, 185, 73, 229, 74, 37, 111, 52, 169, 199,
35, 111, 183, 71, 31, 187, 126, 67, 12, 224, 206, 28, 27, 123, 180,
68, 24, 162, 47, 88, 50, 175, 74, 25, 25, 18, 168, 151, 95, 14,
239, 148, 161, 46, 38, 59, 119, 226, 217, 192, 232, 142, 135, 21, 154,
205, 77, 123, 50, 235, 38, 127, 99, 184, 191, 184, 208, 199, 85, 181,
20, 112, 55, 187, 76, 7, 98, 183, 119, 168, 255, 188, 254, 191, 127,
173, 11, 23, 30, 71, 30, 196, 244, 230, 232, 51, 51, 164, 234, 6,
55, 8, 213, 177, 117, 98, 92, 69, 222, 27, 192, 90, 108, 179, 62,
173, 143, 70, 62, 114, 200, 67, 58, 168, 19, 150, 62, 28, 127, 101,
170, 112, 169, 167, 187, 150, 242, 233, 184, 133, 181, 18, 177, 40, 80,
78, 77, 175, 201, 121, 165, 131, 3, 217, 19, 204, 91, 160, 13, 120,
174, 200, 188, 31, 236, 70, 141, 124, 167, 221, 135, 20, 141, 168, 227,
113, 220, 246, 71, 14, 92, 63, 152, 253, 55, 81, 177, 110, 97, 100,
208, 5, 179, 47, 100, 148, 58, 194, 36, 35, 23, 20, 251, 224, 89,
107, 113, 209, 139, 6, 240, 139, 172, 98, 154, 178, 155, 192, 240, 67,
97, 116, 42, 17, 237, 234, 181, 237, 222, 19, 198, 118, 198, 115, 117,
24, 214, 113, 158, 208, 128, 108, 241, 125, 178, 222, 151, 94, 252, 162,
160, 108, 72, 114, 190, 212, 63, 197, 115, 183, 147, 150, 196, 3, 210,
150, 207, 24, 198, 35, 236, 5, 100, 8, 254, 254, 220, 101, 157, 12,
184, 34, 43, 54, 7, 241, 5, 211, 112, 234, 52, 20, 182, 50, 75,
118, 92, 199, 109, 168, 130, 165, 157, 188, 223, 45, 31, 59, 136, 199,
216, 86, 181, 209, 198, 189, 134, 60, 97, 79, 208, 42, 129, 117, 103,
38, 218, 182, 224, 64, 227, 136, 211, 43, 103, 250, 253, 208, 9, 135,
128, 34, 245, 98, 201, 212, 143, 152, 12, 79, 92, 51, 96, 105, 42,
77, 125, 64, 74, 238, 229, 255, 162, 205, 206, 221, 116, 250, 148, 68,
252, 36, 253, 10, 233, 57, 66, 60, 206, 194, 125, 35, 37, 106, 243,
70, 232, 157, 84, 201, 25, 171, 124, 169, 143, 107, 176, 166, 235, 151,
13, 19, 44, 118, 20, 253, 43, 62, 34, 190, 190, 190, 203, 123, 232,
66, 71, 55, 192, 228, 198, 67, 52, 62, 4, 50, 230, 5, 3, 99,
139, 157, 58, 119, 157, 57, 81, 130, 164, 67, 118, 22, 145, 107, 246,
62, 211, 57, 252, 252, 132, 230, 3, 147, 235, 172, 77, 56, 52, 174,
134, 145, 215, 225, 65, 46, 222, 151, 73, 107, 4, 204, 144, 216, 33,
125, 99, 144, 130, 60, 157, 150, 72, 19, 193, 50, 55, 83, 141, 167,
193, 247, 230, 84, 250, 126, 193, 14, 1, 94, 25, 21, 244, 52, 121,
218, 50, 13, 184, 35, 31, 182, 107, 86, 220, 76, 156, 167, 87, 52,
82, 70, 47, 114, 82, 132, 93, 150, 110, 150, 73, 149, 28, 78, 251,
96, 100, 151, 80, 128, 167, 249, 96, 104, 169, 161, 171, 123, 153, 85,
111, 185, 168, 70, 214, 130, 84, 47, 184, 22, 81, 175, 187, 211, 156,
100, 65, 29, 181, 217, 27, 9, 242, 149, 225, 136, 59, 206, 159, 228,
218, 102, 55, 170, 159, 97, 124, 221, 44, 242, 221, 210, 201, 143, 15,
9, 179, 56, 0, 25, 67, 173, 69, 117, 92, 107, 69, 28, 148, 141,
141, 115, 45, 189, 28, 141, 18, 216, 18, 197, 79, 126, 145, 138, 67,
51, 29, 194, 149, 125, 62, 227, 229, 143, 29, 229, 89, 21, 44, 108,
88, 102, 140, 230, 137, 23, 18, 142, 165, 82, 11, 106, 215, 158, 188,
53, 148, 235, 181, 214, 46, 31, 209, 96, 187, 246, 199, 116, 133, 49,
246, 251, 15, 70, 107, 169, 167, 85, 245, 84, 132, 22, 145, 153, 25,
81, 174, 169, 229, 103, 161, 34, 143, 67, 225, 114, 150, 73, 119, 157,
194, 215, 96, 56, 199, 211, 133, 214, 254, 198, 36, 252, 55, 6, 123,
99, 39, 53, 102, 178, 155, 20, 60, 69, 192, 39, 121, 9, 41, 170,
30, 39, 160, 229, 223, 160, 9, 155, 208, 55, 168, 193, 48, 64, 142,
20, 198, 0, 14, 102, 226, 206, 145, 53, 86, 73, 22, 223, 59, 182,
203, 10, 136, 220, 34, 220, 183, 178, 101, 116, 73, 246, 104, 118, 83,
78, 110, 184, 223, 123, 239, 10, 9, 94, 181, 105, 91, 85, 145, 110,
46, 194, 76, 7, 76, 56, 205, 122, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 249, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
245, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 243, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 242, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 241, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
static const unsigned char *
precomputed_onetimeauth_poly1305_a[precomputed_onetimeauth_poly1305_NUM] = {
precomputed_onetimeauth_poly1305 + 0,
precomputed_onetimeauth_poly1305 + 16,
precomputed_onetimeauth_poly1305 + 32,
precomputed_onetimeauth_poly1305 + 48,
precomputed_onetimeauth_poly1305 + 64,
precomputed_onetimeauth_poly1305 + 80,
precomputed_onetimeauth_poly1305 + 96,
precomputed_onetimeauth_poly1305 + 112,
precomputed_onetimeauth_poly1305 + 128,
precomputed_onetimeauth_poly1305 + 144,
precomputed_onetimeauth_poly1305 + 160,
precomputed_onetimeauth_poly1305 + 176,
precomputed_onetimeauth_poly1305 + 192,
precomputed_onetimeauth_poly1305 + 208,
precomputed_onetimeauth_poly1305 + 224,
precomputed_onetimeauth_poly1305 + 240,
precomputed_onetimeauth_poly1305 + 256,
precomputed_onetimeauth_poly1305 + 272,
precomputed_onetimeauth_poly1305 + 288,
precomputed_onetimeauth_poly1305 + 304,
precomputed_onetimeauth_poly1305 + 320,
precomputed_onetimeauth_poly1305 + 336,
precomputed_onetimeauth_poly1305 + 352,
precomputed_onetimeauth_poly1305 + 368,
precomputed_onetimeauth_poly1305 + 384,
precomputed_onetimeauth_poly1305 + 400,
precomputed_onetimeauth_poly1305 + 416,
precomputed_onetimeauth_poly1305 + 432,
precomputed_onetimeauth_poly1305 + 448,
precomputed_onetimeauth_poly1305 + 464,
precomputed_onetimeauth_poly1305 + 480,
precomputed_onetimeauth_poly1305 + 496,
precomputed_onetimeauth_poly1305 + 512,
precomputed_onetimeauth_poly1305 + 528,
precomputed_onetimeauth_poly1305 + 544,
precomputed_onetimeauth_poly1305 + 560,
precomputed_onetimeauth_poly1305 + 576,
precomputed_onetimeauth_poly1305 + 592,
precomputed_onetimeauth_poly1305 + 608,
precomputed_onetimeauth_poly1305 + 624,
precomputed_onetimeauth_poly1305 + 640,
precomputed_onetimeauth_poly1305 + 656,
precomputed_onetimeauth_poly1305 + 672,
precomputed_onetimeauth_poly1305 + 688,
precomputed_onetimeauth_poly1305 + 704,
precomputed_onetimeauth_poly1305 + 720,
precomputed_onetimeauth_poly1305 + 736,
precomputed_onetimeauth_poly1305 + 752,
precomputed_onetimeauth_poly1305 + 768,
precomputed_onetimeauth_poly1305 + 784,
precomputed_onetimeauth_poly1305 + 800,
precomputed_onetimeauth_poly1305 + 816,
precomputed_onetimeauth_poly1305 + 832,
precomputed_onetimeauth_poly1305 + 848,
precomputed_onetimeauth_poly1305 + 864,
precomputed_onetimeauth_poly1305 + 880,
precomputed_onetimeauth_poly1305 + 896,
precomputed_onetimeauth_poly1305 + 912,
precomputed_onetimeauth_poly1305 + 928,
precomputed_onetimeauth_poly1305 + 944,
precomputed_onetimeauth_poly1305 + 960,
precomputed_onetimeauth_poly1305 + 976,
precomputed_onetimeauth_poly1305 + 992,
precomputed_onetimeauth_poly1305 + 1008,
precomputed_onetimeauth_poly1305 + 1024,
precomputed_onetimeauth_poly1305 + 1040,
precomputed_onetimeauth_poly1305 + 1056,
precomputed_onetimeauth_poly1305 + 1072,
precomputed_onetimeauth_poly1305 + 1088,
precomputed_onetimeauth_poly1305 + 1104,
precomputed_onetimeauth_poly1305 + 1120,
precomputed_onetimeauth_poly1305 + 1136,
precomputed_onetimeauth_poly1305 + 1152,
precomputed_onetimeauth_poly1305 + 1168,
precomputed_onetimeauth_poly1305 + 1184,
precomputed_onetimeauth_poly1305 + 1200,
precomputed_onetimeauth_poly1305 + 1216,
precomputed_onetimeauth_poly1305 + 1232,
precomputed_onetimeauth_poly1305 + 1248,
precomputed_onetimeauth_poly1305 + 1264,
precomputed_onetimeauth_poly1305 + 1280,
precomputed_onetimeauth_poly1305 + 1296,
precomputed_onetimeauth_poly1305 + 1312,
precomputed_onetimeauth_poly1305 + 1328,
precomputed_onetimeauth_poly1305 + 1344,
precomputed_onetimeauth_poly1305 + 1360,
precomputed_onetimeauth_poly1305 + 1376,
precomputed_onetimeauth_poly1305 + 1392,
precomputed_onetimeauth_poly1305 + 1408,
precomputed_onetimeauth_poly1305 + 1424,
precomputed_onetimeauth_poly1305 + 1440,
precomputed_onetimeauth_poly1305 + 1456,
precomputed_onetimeauth_poly1305 + 1472,
precomputed_onetimeauth_poly1305 + 1488,
precomputed_onetimeauth_poly1305 + 1504,
precomputed_onetimeauth_poly1305 + 1520,
precomputed_onetimeauth_poly1305 + 1536,
precomputed_onetimeauth_poly1305 + 1552,
precomputed_onetimeauth_poly1305 + 1568,
precomputed_onetimeauth_poly1305 + 1584,
precomputed_onetimeauth_poly1305 + 1600,
precomputed_onetimeauth_poly1305 + 1616,
precomputed_onetimeauth_poly1305 + 1632,
precomputed_onetimeauth_poly1305 + 1648,
precomputed_onetimeauth_poly1305 + 1664,
precomputed_onetimeauth_poly1305 + 1680,
precomputed_onetimeauth_poly1305 + 1696,
precomputed_onetimeauth_poly1305 + 1712,
precomputed_onetimeauth_poly1305 + 1728,
precomputed_onetimeauth_poly1305 + 1744,
precomputed_onetimeauth_poly1305 + 1760,
precomputed_onetimeauth_poly1305 + 1776,
precomputed_onetimeauth_poly1305 + 1792,
precomputed_onetimeauth_poly1305 + 1808,
precomputed_onetimeauth_poly1305 + 1824,
precomputed_onetimeauth_poly1305 + 1840,
precomputed_onetimeauth_poly1305 + 1856,
precomputed_onetimeauth_poly1305 + 1872,
precomputed_onetimeauth_poly1305 + 1888,
precomputed_onetimeauth_poly1305 + 1904,
precomputed_onetimeauth_poly1305 + 1920,
precomputed_onetimeauth_poly1305 + 1936,
precomputed_onetimeauth_poly1305 + 1952,
precomputed_onetimeauth_poly1305 + 1968,
precomputed_onetimeauth_poly1305 + 1984,
precomputed_onetimeauth_poly1305 + 2000,
precomputed_onetimeauth_poly1305 + 2016,
precomputed_onetimeauth_poly1305 + 2032,
precomputed_onetimeauth_poly1305 + 2048,
precomputed_onetimeauth_poly1305 + 2064,
precomputed_onetimeauth_poly1305 + 2080,
precomputed_onetimeauth_poly1305 + 2096,
};
static const unsigned char *
precomputed_onetimeauth_poly1305_m[precomputed_onetimeauth_poly1305_NUM] = {
precomputed_onetimeauth_poly1305 + 2112,
precomputed_onetimeauth_poly1305 + 3112,
precomputed_onetimeauth_poly1305 + 3813,
precomputed_onetimeauth_poly1305 + 4353,
precomputed_onetimeauth_poly1305 + 4443,
precomputed_onetimeauth_poly1305 + 5353,
precomputed_onetimeauth_poly1305 + 5464,
precomputed_onetimeauth_poly1305 + 5885,
precomputed_onetimeauth_poly1305 + 6430,
precomputed_onetimeauth_poly1305 + 7190,
precomputed_onetimeauth_poly1305 + 8060,
precomputed_onetimeauth_poly1305 + 8642,
precomputed_onetimeauth_poly1305 + 8921,
precomputed_onetimeauth_poly1305 + 9324,
precomputed_onetimeauth_poly1305 + 9852,
precomputed_onetimeauth_poly1305 + 10448,
precomputed_onetimeauth_poly1305 + 11348,
precomputed_onetimeauth_poly1305 + 11785,
precomputed_onetimeauth_poly1305 + 12585,
precomputed_onetimeauth_poly1305 + 12809,
precomputed_onetimeauth_poly1305 + 13670,
precomputed_onetimeauth_poly1305 + 14311,
precomputed_onetimeauth_poly1305 + 15034,
precomputed_onetimeauth_poly1305 + 15681,
precomputed_onetimeauth_poly1305 + 16500,
precomputed_onetimeauth_poly1305 + 16754,
precomputed_onetimeauth_poly1305 + 17598,
precomputed_onetimeauth_poly1305 + 18243,
precomputed_onetimeauth_poly1305 + 18450,
precomputed_onetimeauth_poly1305 + 18975,
precomputed_onetimeauth_poly1305 + 19883,
precomputed_onetimeauth_poly1305 + 20107,
precomputed_onetimeauth_poly1305 + 20720,
precomputed_onetimeauth_poly1305 + 21360,
precomputed_onetimeauth_poly1305 + 22178,
precomputed_onetimeauth_poly1305 + 22516,
precomputed_onetimeauth_poly1305 + 23495,
precomputed_onetimeauth_poly1305 + 24460,
precomputed_onetimeauth_poly1305 + 25344,
precomputed_onetimeauth_poly1305 + 25643,
precomputed_onetimeauth_poly1305 + 25684,
precomputed_onetimeauth_poly1305 + 26448,
precomputed_onetimeauth_poly1305 + 27195,
precomputed_onetimeauth_poly1305 + 28105,
precomputed_onetimeauth_poly1305 + 28494,
precomputed_onetimeauth_poly1305 + 29250,
precomputed_onetimeauth_poly1305 + 29417,
precomputed_onetimeauth_poly1305 + 29946,
precomputed_onetimeauth_poly1305 + 30071,
precomputed_onetimeauth_poly1305 + 30137,
precomputed_onetimeauth_poly1305 + 30845,
precomputed_onetimeauth_poly1305 + 31678,
precomputed_onetimeauth_poly1305 + 32619,
precomputed_onetimeauth_poly1305 + 33533,
precomputed_onetimeauth_poly1305 + 34324,
precomputed_onetimeauth_poly1305 + 34647,
precomputed_onetimeauth_poly1305 + 34890,
precomputed_onetimeauth_poly1305 + 35703,
precomputed_onetimeauth_poly1305 + 35835,
precomputed_onetimeauth_poly1305 + 35939,
precomputed_onetimeauth_poly1305 + 36079,
precomputed_onetimeauth_poly1305 + 36512,
precomputed_onetimeauth_poly1305 + 36944,
precomputed_onetimeauth_poly1305 + 37292,
precomputed_onetimeauth_poly1305 + 38048,
precomputed_onetimeauth_poly1305 + 38167,
precomputed_onetimeauth_poly1305 + 38633,
precomputed_onetimeauth_poly1305 + 39318,
precomputed_onetimeauth_poly1305 + 39626,
precomputed_onetimeauth_poly1305 + 40437,
precomputed_onetimeauth_poly1305 + 40577,
precomputed_onetimeauth_poly1305 + 41514,
precomputed_onetimeauth_poly1305 + 42220,
precomputed_onetimeauth_poly1305 + 42959,
precomputed_onetimeauth_poly1305 + 43780,
precomputed_onetimeauth_poly1305 + 44755,
precomputed_onetimeauth_poly1305 + 44810,
precomputed_onetimeauth_poly1305 + 45632,
precomputed_onetimeauth_poly1305 + 46373,
precomputed_onetimeauth_poly1305 + 46583,
precomputed_onetimeauth_poly1305 + 47023,
precomputed_onetimeauth_poly1305 + 47053,
precomputed_onetimeauth_poly1305 + 47304,
precomputed_onetimeauth_poly1305 + 47564,
precomputed_onetimeauth_poly1305 + 48550,
precomputed_onetimeauth_poly1305 + 48874,
precomputed_onetimeauth_poly1305 + 49804,
precomputed_onetimeauth_poly1305 + 50090,
precomputed_onetimeauth_poly1305 + 50934,
precomputed_onetimeauth_poly1305 + 51379,
precomputed_onetimeauth_poly1305 + 52125,
precomputed_onetimeauth_poly1305 + 52518,
precomputed_onetimeauth_poly1305 + 53366,
precomputed_onetimeauth_poly1305 + 54182,
precomputed_onetimeauth_poly1305 + 54622,
precomputed_onetimeauth_poly1305 + 55510,
precomputed_onetimeauth_poly1305 + 56419,
precomputed_onetimeauth_poly1305 + 56489,
precomputed_onetimeauth_poly1305 + 56765,
precomputed_onetimeauth_poly1305 + 56889,
precomputed_onetimeauth_poly1305 + 57421,
precomputed_onetimeauth_poly1305 + 57437,
precomputed_onetimeauth_poly1305 + 57453,
precomputed_onetimeauth_poly1305 + 57469,
precomputed_onetimeauth_poly1305 + 57485,
precomputed_onetimeauth_poly1305 + 57501,
precomputed_onetimeauth_poly1305 + 57517,
precomputed_onetimeauth_poly1305 + 57533,
precomputed_onetimeauth_poly1305 + 57549,
precomputed_onetimeauth_poly1305 + 57565,
precomputed_onetimeauth_poly1305 + 57581,
precomputed_onetimeauth_poly1305 + 57597,
precomputed_onetimeauth_poly1305 + 57613,
precomputed_onetimeauth_poly1305 + 57629,
precomputed_onetimeauth_poly1305 + 57645,
precomputed_onetimeauth_poly1305 + 57661,
precomputed_onetimeauth_poly1305 + 57677,
precomputed_onetimeauth_poly1305 + 57693,
precomputed_onetimeauth_poly1305 + 57709,
precomputed_onetimeauth_poly1305 + 57725,
precomputed_onetimeauth_poly1305 + 57741,
precomputed_onetimeauth_poly1305 + 57757,
precomputed_onetimeauth_poly1305 + 57773,
precomputed_onetimeauth_poly1305 + 57789,
precomputed_onetimeauth_poly1305 + 57805,
precomputed_onetimeauth_poly1305 + 57821,
precomputed_onetimeauth_poly1305 + 57837,
precomputed_onetimeauth_poly1305 + 57853,
precomputed_onetimeauth_poly1305 + 57869,
precomputed_onetimeauth_poly1305 + 57885,
precomputed_onetimeauth_poly1305 + 57901,
precomputed_onetimeauth_poly1305 + 57917,
};
static const unsigned char *
precomputed_onetimeauth_poly1305_k[precomputed_onetimeauth_poly1305_NUM] = {
precomputed_onetimeauth_poly1305 + 57933,
precomputed_onetimeauth_poly1305 + 57965,
precomputed_onetimeauth_poly1305 + 57997,
precomputed_onetimeauth_poly1305 + 58029,
precomputed_onetimeauth_poly1305 + 58061,
precomputed_onetimeauth_poly1305 + 58093,
precomputed_onetimeauth_poly1305 + 58125,
precomputed_onetimeauth_poly1305 + 58157,
precomputed_onetimeauth_poly1305 + 58189,
precomputed_onetimeauth_poly1305 + 58221,
precomputed_onetimeauth_poly1305 + 58253,
precomputed_onetimeauth_poly1305 + 58285,
precomputed_onetimeauth_poly1305 + 58317,
precomputed_onetimeauth_poly1305 + 58349,
precomputed_onetimeauth_poly1305 + 58381,
precomputed_onetimeauth_poly1305 + 58413,
precomputed_onetimeauth_poly1305 + 58445,
precomputed_onetimeauth_poly1305 + 58477,
precomputed_onetimeauth_poly1305 + 58509,
precomputed_onetimeauth_poly1305 + 58541,
precomputed_onetimeauth_poly1305 + 58573,
precomputed_onetimeauth_poly1305 + 58605,
precomputed_onetimeauth_poly1305 + 58637,
precomputed_onetimeauth_poly1305 + 58669,
precomputed_onetimeauth_poly1305 + 58701,
precomputed_onetimeauth_poly1305 + 58733,
precomputed_onetimeauth_poly1305 + 58765,
precomputed_onetimeauth_poly1305 + 58797,
precomputed_onetimeauth_poly1305 + 58829,
precomputed_onetimeauth_poly1305 + 58861,
precomputed_onetimeauth_poly1305 + 58893,
precomputed_onetimeauth_poly1305 + 58925,
precomputed_onetimeauth_poly1305 + 58957,
precomputed_onetimeauth_poly1305 + 58989,
precomputed_onetimeauth_poly1305 + 59021,
precomputed_onetimeauth_poly1305 + 59053,
precomputed_onetimeauth_poly1305 + 59085,
precomputed_onetimeauth_poly1305 + 59117,
precomputed_onetimeauth_poly1305 + 59149,
precomputed_onetimeauth_poly1305 + 59181,
precomputed_onetimeauth_poly1305 + 59213,
precomputed_onetimeauth_poly1305 + 59245,
precomputed_onetimeauth_poly1305 + 59277,
precomputed_onetimeauth_poly1305 + 59309,
precomputed_onetimeauth_poly1305 + 59341,
precomputed_onetimeauth_poly1305 + 59373,
precomputed_onetimeauth_poly1305 + 59405,
precomputed_onetimeauth_poly1305 + 59437,
precomputed_onetimeauth_poly1305 + 59469,
precomputed_onetimeauth_poly1305 + 59501,
precomputed_onetimeauth_poly1305 + 59533,
precomputed_onetimeauth_poly1305 + 59565,
precomputed_onetimeauth_poly1305 + 59597,
precomputed_onetimeauth_poly1305 + 59629,
precomputed_onetimeauth_poly1305 + 59661,
precomputed_onetimeauth_poly1305 + 59693,
precomputed_onetimeauth_poly1305 + 59725,
precomputed_onetimeauth_poly1305 + 59757,
precomputed_onetimeauth_poly1305 + 59789,
precomputed_onetimeauth_poly1305 + 59821,
precomputed_onetimeauth_poly1305 + 59853,
precomputed_onetimeauth_poly1305 + 59885,
precomputed_onetimeauth_poly1305 + 59917,
precomputed_onetimeauth_poly1305 + 59949,
precomputed_onetimeauth_poly1305 + 59981,
precomputed_onetimeauth_poly1305 + 60013,
precomputed_onetimeauth_poly1305 + 60045,
precomputed_onetimeauth_poly1305 + 60077,
precomputed_onetimeauth_poly1305 + 60109,
precomputed_onetimeauth_poly1305 + 60141,
precomputed_onetimeauth_poly1305 + 60173,
precomputed_onetimeauth_poly1305 + 60205,
precomputed_onetimeauth_poly1305 + 60237,
precomputed_onetimeauth_poly1305 + 60269,
precomputed_onetimeauth_poly1305 + 60301,
precomputed_onetimeauth_poly1305 + 60333,
precomputed_onetimeauth_poly1305 + 60365,
precomputed_onetimeauth_poly1305 + 60397,
precomputed_onetimeauth_poly1305 + 60429,
precomputed_onetimeauth_poly1305 + 60461,
precomputed_onetimeauth_poly1305 + 60493,
precomputed_onetimeauth_poly1305 + 60525,
precomputed_onetimeauth_poly1305 + 60557,
precomputed_onetimeauth_poly1305 + 60589,
precomputed_onetimeauth_poly1305 + 60621,
precomputed_onetimeauth_poly1305 + 60653,
precomputed_onetimeauth_poly1305 + 60685,
precomputed_onetimeauth_poly1305 + 60717,
precomputed_onetimeauth_poly1305 + 60749,
precomputed_onetimeauth_poly1305 + 60781,
precomputed_onetimeauth_poly1305 + 60813,
precomputed_onetimeauth_poly1305 + 60845,
precomputed_onetimeauth_poly1305 + 60877,
precomputed_onetimeauth_poly1305 + 60909,
precomputed_onetimeauth_poly1305 + 60941,
precomputed_onetimeauth_poly1305 + 60973,
precomputed_onetimeauth_poly1305 + 61005,
precomputed_onetimeauth_poly1305 + 61037,
precomputed_onetimeauth_poly1305 + 61069,
precomputed_onetimeauth_poly1305 + 61101,
precomputed_onetimeauth_poly1305 + 61133,
precomputed_onetimeauth_poly1305 + 61165,
precomputed_onetimeauth_poly1305 + 61197,
precomputed_onetimeauth_poly1305 + 61229,
precomputed_onetimeauth_poly1305 + 61261,
precomputed_onetimeauth_poly1305 + 61293,
precomputed_onetimeauth_poly1305 + 61325,
precomputed_onetimeauth_poly1305 + 61357,
precomputed_onetimeauth_poly1305 + 61389,
precomputed_onetimeauth_poly1305 + 61421,
precomputed_onetimeauth_poly1305 + 61453,
precomputed_onetimeauth_poly1305 + 61485,
precomputed_onetimeauth_poly1305 + 61517,
precomputed_onetimeauth_poly1305 + 61549,
precomputed_onetimeauth_poly1305 + 61581,
precomputed_onetimeauth_poly1305 + 61613,
precomputed_onetimeauth_poly1305 + 61645,
precomputed_onetimeauth_poly1305 + 61677,
precomputed_onetimeauth_poly1305 + 61709,
precomputed_onetimeauth_poly1305 + 61741,
precomputed_onetimeauth_poly1305 + 61773,
precomputed_onetimeauth_poly1305 + 61805,
precomputed_onetimeauth_poly1305 + 61837,
precomputed_onetimeauth_poly1305 + 61869,
precomputed_onetimeauth_poly1305 + 61901,
precomputed_onetimeauth_poly1305 + 61933,
precomputed_onetimeauth_poly1305 + 61965,
precomputed_onetimeauth_poly1305 + 61997,
precomputed_onetimeauth_poly1305 + 62029,
precomputed_onetimeauth_poly1305 + 62061,
precomputed_onetimeauth_poly1305 + 62093,
precomputed_onetimeauth_poly1305 + 62125,
};
static const long long precomputed_onetimeauth_poly1305_mlen
[precomputed_onetimeauth_poly1305_NUM] = {
1000, 701, 540, 90, 910, 111, 421, 545, 760, 870, 582, 279, 403, 528,
596, 900, 437, 800, 224, 861, 641, 723, 647, 819, 254, 844, 645, 207,
525, 908, 224, 613, 640, 818, 338, 979, 965, 884, 299, 41, 764, 747,
910, 389, 756, 167, 529, 125, 66, 708, 833, 941, 914, 791, 323, 243,
813, 132, 104, 140, 433, 432, 348, 756, 119, 466, 685, 308, 811, 140,
937, 706, 739, 821, 975, 55, 822, 741, 210, 440, 30, 251, 260, 986,
324, 930, 286, 844, 445, 746, 393, 848, 816, 440, 888, 909, 70, 276,
124, 532, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16,
};
static void test_onetimeauth_poly1305_impl(long long impl) {
unsigned char *a = test_onetimeauth_poly1305_a;
unsigned char *m = test_onetimeauth_poly1305_m;
unsigned char *k = test_onetimeauth_poly1305_k;
unsigned char *a2 = test_onetimeauth_poly1305_a2;
unsigned char *m2 = test_onetimeauth_poly1305_m2;
unsigned char *k2 = test_onetimeauth_poly1305_k2;
long long alen = crypto_onetimeauth_BYTES;
long long mlen;
long long klen = crypto_onetimeauth_KEYBYTES;
if (targetn && atol(targetn) != impl) return;
crypto_onetimeauth = crypto_onetimeauth_poly1305;
crypto_onetimeauth_verify = crypto_onetimeauth_poly1305_verify;
for (long long checksumbig = 0; checksumbig < 2; ++checksumbig) {
long long loops = checksumbig ? 32768 : 4096;
long long maxtest = checksumbig ? 4096 : 128;
checksum_clear();
for (long long loop = 0; loop < loops; ++loop) {
int result;
mlen = myrandom() % (maxtest + 1);
output_prepare(a2, a, alen);
input_prepare(m2, m, mlen);
input_prepare(k2, k, klen);
secret(m, mlen);
secret(k, klen);
crypto_onetimeauth(a, m, mlen, k);
public(m, mlen);
public(k, klen);
public(a, alen);
checksum(a, alen);
output_compare(a2, a, alen, "crypto_onetimeauth");
input_compare(m2, m, mlen, "crypto_onetimeauth");
input_compare(k2, k, klen, "crypto_onetimeauth");
double_canary(a2, a, alen);
double_canary(m2, m, mlen);
double_canary(k2, k, klen);
secret(m2, mlen);
secret(k2, klen);
crypto_onetimeauth(a2, m2, mlen, k2);
public(m2, mlen);
public(k2, klen);
public(a2, alen);
if (memcmp(a2, a, alen) != 0)
fail("failure: crypto_onetimeauth is nondeterministic\n");
double_canary(a2, a, alen);
double_canary(m2, m, mlen);
double_canary(k2, k, klen);
secret(m2, mlen);
secret(k, klen);
crypto_onetimeauth(m2, m2, mlen, k);
public(m2, alen);
public(k, klen);
if (memcmp(m2, a, alen) != 0)
fail("failure: crypto_onetimeauth does not handle m=a "
"overlap\n");
memcpy(m2, m, mlen);
secret(m, mlen);
secret(k2, klen);
crypto_onetimeauth(k2, m, mlen, k2);
public(k2, alen);
public(m, mlen);
if (memcmp(k2, a, alen) != 0)
fail("failure: crypto_onetimeauth does not handle k=a "
"overlap\n");
memcpy(k2, k, klen);
memcpy(a2, a, alen);
double_canary(a2, a, alen);
memcpy(m2, m, mlen);
double_canary(m2, m, mlen);
memcpy(k2, k, klen);
double_canary(k2, k, klen);
secret(a, alen);
secret(m, mlen);
secret(k, klen);
result = crypto_onetimeauth_verify(a, m, mlen, k);
public(&result, sizeof result);
if (result != 0)
fail("failure: crypto_onetimeauth_verify returns nonzero\n");
public(a, alen);
public(m, mlen);
public(k, klen);
input_compare(a2, a, alen, "crypto_onetimeauth_verify");
input_compare(m2, m, mlen, "crypto_onetimeauth_verify");
input_compare(k2, k, klen, "crypto_onetimeauth_verify");
double_canary(a2, a, alen);
double_canary(m2, m, mlen);
double_canary(k2, k, klen);
secret(a2, alen);
secret(m2, mlen);
secret(k2, klen);
result = crypto_onetimeauth_verify(a2, m2, mlen, k2);
public(&result, sizeof result);
if (result != 0)
fail("failure: crypto_onetimeauth_verify returns nonzero\n");
public(a2, alen);
public(m2, mlen);
public(k2, klen);
a[myrandom() % alen] += 1 + (myrandom() % 255);
if (crypto_onetimeauth_verify(a, m, mlen, k) == 0)
if (memcmp(a2, a, alen) != 0)
fail("crypto_onetimeauth_verify accepts modified "
"authenticators");
a[myrandom() % alen] += 1 + (myrandom() % 255);
if (crypto_onetimeauth_verify(a, m, mlen, k) == 0)
if (memcmp(a2, a, alen) != 0)
fail("crypto_onetimeauth_verify accepts modified "
"authenticators");
a[myrandom() % alen] += 1 + (myrandom() % 255);
if (crypto_onetimeauth_verify(a, m, mlen, k) == 0)
if (memcmp(a2, a, alen) != 0)
fail("crypto_onetimeauth_verify accepts modified "
"authenticators");
}
checksum_expected(onetimeauth_poly1305_checksums[checksumbig]);
}
for (long long precomp = 0; precomp < precomputed_onetimeauth_poly1305_NUM;
++precomp) {
output_prepare(a2, a, crypto_onetimeauth_BYTES);
input_prepare(m2, m, 4096 + crypto_onetimeauth_BYTES);
mlen = precomputed_onetimeauth_poly1305_mlen[precomp];
memcpy(m, precomputed_onetimeauth_poly1305_m[precomp], mlen);
memcpy(m2, precomputed_onetimeauth_poly1305_m[precomp], mlen);
input_prepare(k2, k, crypto_onetimeauth_KEYBYTES);
memcpy(k, precomputed_onetimeauth_poly1305_k[precomp],
crypto_onetimeauth_KEYBYTES);
memcpy(k2, precomputed_onetimeauth_poly1305_k[precomp],
crypto_onetimeauth_KEYBYTES);
crypto_onetimeauth(a, m, mlen, k);
if (memcmp(a, precomputed_onetimeauth_poly1305_a[precomp],
crypto_onetimeauth_BYTES)) {
fail(
"failure: crypto_onetimeauth fails precomputed test vectors\n");
printf("expected a %lld: ", precomp);
for (long long pos = 0; pos < crypto_onetimeauth_BYTES; ++pos)
printf("%02x",
((unsigned char *)
precomputed_onetimeauth_poly1305_a[precomp])[pos]);
printf("\n");
printf("received a %lld: ", precomp);
for (long long pos = 0; pos < crypto_onetimeauth_BYTES; ++pos)
printf("%02x", a[pos]);
printf("\n");
}
output_compare(a2, a, crypto_onetimeauth_BYTES, "crypto_onetimeauth");
input_compare(m2, m, 4096 + crypto_onetimeauth_BYTES,
"crypto_onetimeauth");
input_compare(k2, k, crypto_onetimeauth_KEYBYTES, "crypto_onetimeauth");
}
for (long long precomp = 0; precomp < precomputed_onetimeauth_poly1305_NUM;
++precomp) {
input_prepare(a2, a, crypto_onetimeauth_BYTES);
memcpy(a, precomputed_onetimeauth_poly1305_a[precomp],
crypto_onetimeauth_BYTES);
memcpy(a2, precomputed_onetimeauth_poly1305_a[precomp],
crypto_onetimeauth_BYTES);
input_prepare(m2, m, 4096 + crypto_onetimeauth_BYTES);
mlen = precomputed_onetimeauth_poly1305_mlen[precomp];
memcpy(m, precomputed_onetimeauth_poly1305_m[precomp], mlen);
memcpy(m2, precomputed_onetimeauth_poly1305_m[precomp], mlen);
input_prepare(k2, k, crypto_onetimeauth_KEYBYTES);
memcpy(k, precomputed_onetimeauth_poly1305_k[precomp],
crypto_onetimeauth_KEYBYTES);
memcpy(k2, precomputed_onetimeauth_poly1305_k[precomp],
crypto_onetimeauth_KEYBYTES);
crypto_onetimeauth_verify(a, m, mlen, k);
input_compare(a2, a, crypto_onetimeauth_BYTES,
"crypto_onetimeauth_verify");
input_compare(m2, m, 4096 + crypto_onetimeauth_BYTES,
"crypto_onetimeauth_verify");
input_compare(k2, k, crypto_onetimeauth_KEYBYTES,
"crypto_onetimeauth_verify");
}
}
void test_onetimeauth_poly1305(void) {
long long maxalloc = 0;
if (targeto && strcmp(targeto, "onetimeauth")) return;
if (targetp && strcmp(targetp, "poly1305")) return;
storage_onetimeauth_poly1305_a = callocplus(crypto_onetimeauth_BYTES);
test_onetimeauth_poly1305_a =
aligned(storage_onetimeauth_poly1305_a, crypto_onetimeauth_BYTES);
if (crypto_onetimeauth_BYTES > maxalloc)
maxalloc = crypto_onetimeauth_BYTES;
storage_onetimeauth_poly1305_m =
callocplus(4096 + crypto_onetimeauth_BYTES);
test_onetimeauth_poly1305_m = aligned(storage_onetimeauth_poly1305_m,
4096 + crypto_onetimeauth_BYTES);
if (4096 + crypto_onetimeauth_BYTES > maxalloc)
maxalloc = 4096 + crypto_onetimeauth_BYTES;
storage_onetimeauth_poly1305_k = callocplus(crypto_onetimeauth_KEYBYTES);
test_onetimeauth_poly1305_k =
aligned(storage_onetimeauth_poly1305_k, crypto_onetimeauth_KEYBYTES);
if (crypto_onetimeauth_KEYBYTES > maxalloc)
maxalloc = crypto_onetimeauth_KEYBYTES;
storage_onetimeauth_poly1305_a2 = callocplus(maxalloc);
test_onetimeauth_poly1305_a2 =
aligned(storage_onetimeauth_poly1305_a2, crypto_onetimeauth_BYTES);
storage_onetimeauth_poly1305_m2 = callocplus(maxalloc);
test_onetimeauth_poly1305_m2 = aligned(storage_onetimeauth_poly1305_m2,
4096 + crypto_onetimeauth_BYTES);
storage_onetimeauth_poly1305_k2 = callocplus(maxalloc);
test_onetimeauth_poly1305_k2 =
aligned(storage_onetimeauth_poly1305_k2, crypto_onetimeauth_KEYBYTES);
for (long long offset = 0; offset < 2; ++offset) {
if (targetoffset && atol(targetoffset) != offset) continue;
if (offset && valgrind) break;
printf("onetimeauth_poly1305 offset %lld\n", offset);
forked(test_onetimeauth_poly1305_impl, -1);
++test_onetimeauth_poly1305_a;
++test_onetimeauth_poly1305_m;
++test_onetimeauth_poly1305_k;
++test_onetimeauth_poly1305_a2;
++test_onetimeauth_poly1305_m2;
++test_onetimeauth_poly1305_k2;
}
free(storage_onetimeauth_poly1305_k2);
free(storage_onetimeauth_poly1305_m2);
free(storage_onetimeauth_poly1305_a2);
free(storage_onetimeauth_poly1305_k);
free(storage_onetimeauth_poly1305_m);
free(storage_onetimeauth_poly1305_a);
}
#undef crypto_onetimeauth_BYTES
#undef crypto_onetimeauth_KEYBYTES
tinyssh-20250501/_crypto-test_sign_ed25519.inc 0000664 0000000 0000000 00000033524 15004722224 0020705 0 ustar 00root root 0000000 0000000 /* ----- sign/ed25519, derived from supercop/crypto_sign/try.c */
/*
derived from djb work from lib25519/libntruprime
mj modifications:
- rename files to test-crypto.c and _crypto_<>.<>.inc
- fix compiler warnings
- include crypto.h
- use less rounds for valgrind test
- reformat using clang-format
*/
#include
#include
#include
#include
#include "crypto.h"
#define fail ((ok = 0), printf)
static const char *sign_ed25519_checksums[] = {
"ce11fd7c1eac4dd0bc5eec49b26ad1e91aef696fae50ce377dbd806dc394da01",
"2ed857f17c917a8185e6c296303a11772ae45683a5e7cb5b095489bad65fffde",
};
static int (*crypto_sign_keypair)(unsigned char *, unsigned char *);
static int (*crypto_sign)(unsigned char *, unsigned long long *,
const unsigned char *, unsigned long long,
const unsigned char *);
static int (*crypto_sign_open)(unsigned char *, unsigned long long *,
const unsigned char *, unsigned long long,
const unsigned char *);
#define crypto_sign_SECRETKEYBYTES crypto_sign_ed25519_SECRETKEYBYTES
#define crypto_sign_PUBLICKEYBYTES crypto_sign_ed25519_PUBLICKEYBYTES
#define crypto_sign_BYTES crypto_sign_ed25519_BYTES
static void *storage_sign_ed25519_p;
static unsigned char *test_sign_ed25519_p;
static void *storage_sign_ed25519_s;
static unsigned char *test_sign_ed25519_s;
static void *storage_sign_ed25519_m;
static unsigned char *test_sign_ed25519_m;
static void *storage_sign_ed25519_c;
static unsigned char *test_sign_ed25519_c;
static void *storage_sign_ed25519_t;
static unsigned char *test_sign_ed25519_t;
static void *storage_sign_ed25519_p2;
static unsigned char *test_sign_ed25519_p2;
static void *storage_sign_ed25519_s2;
static unsigned char *test_sign_ed25519_s2;
static void *storage_sign_ed25519_m2;
static unsigned char *test_sign_ed25519_m2;
static void *storage_sign_ed25519_c2;
static unsigned char *test_sign_ed25519_c2;
static void *storage_sign_ed25519_t2;
static unsigned char *test_sign_ed25519_t2;
static void test_sign_ed25519_impl(long long impl) {
unsigned char *p = test_sign_ed25519_p;
unsigned char *s = test_sign_ed25519_s;
unsigned char *m = test_sign_ed25519_m;
unsigned char *c = test_sign_ed25519_c;
unsigned char *t = test_sign_ed25519_t;
unsigned char *p2 = test_sign_ed25519_p2;
unsigned char *s2 = test_sign_ed25519_s2;
unsigned char *m2 = test_sign_ed25519_m2;
unsigned char *c2 = test_sign_ed25519_c2;
unsigned char *t2 = test_sign_ed25519_t2;
unsigned long long plen = crypto_sign_PUBLICKEYBYTES;
unsigned long long slen = crypto_sign_SECRETKEYBYTES;
unsigned long long mlen;
unsigned long long clen;
unsigned long long tlen;
if (targetn && atol(targetn) != impl) return;
crypto_sign_keypair = crypto_sign_ed25519_keypair;
crypto_sign = crypto_sign_ed25519;
crypto_sign_open = crypto_sign_ed25519_open;
for (long long checksumbig = 0; checksumbig < 2; ++checksumbig) {
long long loops = checksumbig ? 64 : 8;
long long maxtest = checksumbig ? 4096 : 128;
if (checksumbig && valgrind) break;
checksum_clear();
for (long long loop = 0; loop < loops; ++loop) {
int result;
mlen = myrandom() % (maxtest + 1);
output_prepare(p2, p, plen);
output_prepare(s2, s, slen);
crypto_sign_keypair(p, s);
public(p, plen);
public(s, slen);
checksum(p, plen);
checksum(s, slen);
output_compare(p2, p, plen, "crypto_sign_keypair");
output_compare(s2, s, slen, "crypto_sign_keypair");
clen = mlen + crypto_sign_BYTES;
output_prepare(c2, c, clen);
input_prepare(m2, m, mlen);
memcpy(s2, s, slen);
double_canary(s2, s, slen);
secret(m, mlen);
secret(s, slen);
crypto_sign(c, &clen, m, mlen, s);
public(m, mlen);
public(s, slen);
public(c, clen);
if (clen < mlen)
fail(
"failure: crypto_sign returns smaller output than input\n");
if (clen > mlen + crypto_sign_BYTES)
fail("failure: crypto_sign returns more than crypto_sign_BYTES "
"extra bytes\n");
checksum(c, clen);
output_compare(c2, c, clen, "crypto_sign");
input_compare(m2, m, mlen, "crypto_sign");
input_compare(s2, s, slen, "crypto_sign");
tlen = clen;
output_prepare(t2, t, tlen);
memcpy(c2, c, clen);
double_canary(c2, c, clen);
memcpy(p2, p, plen);
double_canary(p2, p, plen);
public(c, clen);
public(p, plen);
result = crypto_sign_open(t, &tlen, c, clen, p);
public(&result, sizeof result);
if (result != 0)
fail("failure: crypto_sign_open returns nonzero\n");
public(c, clen);
public(p, plen);
public(t, tlen);
if (tlen != mlen)
fail("failure: crypto_sign_open does not match mlen\n");
if (memcmp(t, m, mlen) != 0)
fail("failure: crypto_sign_open does not match m\n");
checksum(t, tlen);
output_compare(t2, t, clen, "crypto_sign_open");
input_compare(c2, c, clen, "crypto_sign_open");
input_compare(p2, p, plen, "crypto_sign_open");
double_canary(t2, t, tlen);
double_canary(c2, c, clen);
double_canary(p2, p, plen);
public(c2, clen);
public(p2, plen);
result = crypto_sign_open(t2, &tlen, c2, clen, p2);
public(&result, sizeof result);
if (result != 0)
fail("failure: crypto_sign_open returns nonzero\n");
public(c2, clen);
public(p2, plen);
public(t2, tlen);
if (memcmp(t2, t, tlen) != 0)
fail("failure: crypto_sign_open is nondeterministic\n");
double_canary(t2, t, tlen);
double_canary(c2, c, clen);
double_canary(p2, p, plen);
public(c2, clen);
public(p, plen);
result = crypto_sign_open(c2, &tlen, c2, clen, p);
public(&result, sizeof result);
if (result != 0)
fail("failure: crypto_sign_open with c=t overlap returns "
"nonzero\n");
public(c2, tlen);
public(p, plen);
if (memcmp(c2, t, tlen) != 0)
fail("failure: crypto_sign_open does not handle c=t overlap\n");
memcpy(c2, c, clen);
public(c, clen);
public(p2, plen);
result = crypto_sign_open(p2, &tlen, c, clen, p2);
public(&result, sizeof result);
if (result != 0)
fail("failure: crypto_sign_open with p=t overlap returns "
"nonzero\n");
public(p2, tlen);
public(c, clen);
if (memcmp(p2, t, tlen) != 0)
fail("failure: crypto_sign_open does not handle p=t overlap\n");
memcpy(p2, p, plen);
c[myrandom() % clen] += 1 + (myrandom() % 255);
if (crypto_sign_open(t, &tlen, c, clen, p) == 0)
if ((tlen != mlen) || (memcmp(t, m, mlen) != 0))
fail(
"failure: crypto_sign_open allows trivial forgeries\n");
c[myrandom() % clen] += 1 + (myrandom() % 255);
if (crypto_sign_open(t, &tlen, c, clen, p) == 0)
if ((tlen != mlen) || (memcmp(t, m, mlen) != 0))
fail(
"failure: crypto_sign_open allows trivial forgeries\n");
c[myrandom() % clen] += 1 + (myrandom() % 255);
if (crypto_sign_open(t, &tlen, c, clen, p) == 0)
if ((tlen != mlen) || (memcmp(t, m, mlen) != 0))
fail(
"failure: crypto_sign_open allows trivial forgeries\n");
}
checksum_expected(sign_ed25519_checksums[checksumbig]);
}
}
void test_sign_ed25519(void) {
long long maxalloc = 0;
if (targeto && strcmp(targeto, "sign")) return;
if (targetp && strcmp(targetp, "ed25519")) return;
storage_sign_ed25519_p =
callocplus(4096 + crypto_sign_BYTES + crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES);
test_sign_ed25519_p =
aligned(storage_sign_ed25519_p, 4096 + crypto_sign_BYTES +
crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES);
if (4096 + crypto_sign_BYTES + crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES >
maxalloc)
maxalloc = 4096 + crypto_sign_BYTES + crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES;
storage_sign_ed25519_s =
callocplus(4096 + crypto_sign_BYTES + crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES);
test_sign_ed25519_s =
aligned(storage_sign_ed25519_s, 4096 + crypto_sign_BYTES +
crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES);
if (4096 + crypto_sign_BYTES + crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES >
maxalloc)
maxalloc = 4096 + crypto_sign_BYTES + crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES;
storage_sign_ed25519_m =
callocplus(4096 + crypto_sign_BYTES + crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES);
test_sign_ed25519_m =
aligned(storage_sign_ed25519_m, 4096 + crypto_sign_BYTES +
crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES);
if (4096 + crypto_sign_BYTES + crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES >
maxalloc)
maxalloc = 4096 + crypto_sign_BYTES + crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES;
storage_sign_ed25519_c =
callocplus(4096 + crypto_sign_BYTES + crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES);
test_sign_ed25519_c =
aligned(storage_sign_ed25519_c, 4096 + crypto_sign_BYTES +
crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES);
if (4096 + crypto_sign_BYTES + crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES >
maxalloc)
maxalloc = 4096 + crypto_sign_BYTES + crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES;
storage_sign_ed25519_t =
callocplus(4096 + crypto_sign_BYTES + crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES);
test_sign_ed25519_t =
aligned(storage_sign_ed25519_t, 4096 + crypto_sign_BYTES +
crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES);
if (4096 + crypto_sign_BYTES + crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES >
maxalloc)
maxalloc = 4096 + crypto_sign_BYTES + crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES;
storage_sign_ed25519_p2 = callocplus(maxalloc);
test_sign_ed25519_p2 =
aligned(storage_sign_ed25519_p2, 4096 + crypto_sign_BYTES +
crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES);
storage_sign_ed25519_s2 = callocplus(maxalloc);
test_sign_ed25519_s2 =
aligned(storage_sign_ed25519_s2, 4096 + crypto_sign_BYTES +
crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES);
storage_sign_ed25519_m2 = callocplus(maxalloc);
test_sign_ed25519_m2 =
aligned(storage_sign_ed25519_m2, 4096 + crypto_sign_BYTES +
crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES);
storage_sign_ed25519_c2 = callocplus(maxalloc);
test_sign_ed25519_c2 =
aligned(storage_sign_ed25519_c2, 4096 + crypto_sign_BYTES +
crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES);
storage_sign_ed25519_t2 = callocplus(maxalloc);
test_sign_ed25519_t2 =
aligned(storage_sign_ed25519_t2, 4096 + crypto_sign_BYTES +
crypto_sign_PUBLICKEYBYTES +
crypto_sign_SECRETKEYBYTES);
for (long long offset = 0; offset < 2; ++offset) {
if (targetoffset && atol(targetoffset) != offset) continue;
if (offset && valgrind) break;
printf("sign_ed25519 offset %lld\n", offset);
forked(test_sign_ed25519_impl, -1);
++test_sign_ed25519_p;
++test_sign_ed25519_s;
++test_sign_ed25519_m;
++test_sign_ed25519_c;
++test_sign_ed25519_t;
++test_sign_ed25519_p2;
++test_sign_ed25519_s2;
++test_sign_ed25519_m2;
++test_sign_ed25519_c2;
++test_sign_ed25519_t2;
}
free(storage_sign_ed25519_t2);
free(storage_sign_ed25519_c2);
free(storage_sign_ed25519_m2);
free(storage_sign_ed25519_s2);
free(storage_sign_ed25519_p2);
free(storage_sign_ed25519_t);
free(storage_sign_ed25519_c);
free(storage_sign_ed25519_m);
free(storage_sign_ed25519_s);
free(storage_sign_ed25519_p);
}
#undef crypto_sign_SECRETKEYBYTES
#undef crypto_sign_PUBLICKEYBYTES
#undef crypto_sign_BYTES
tinyssh-20250501/_crypto-test_sort_uint32.inc 0000664 0000000 0000000 00000006415 15004722224 0021061 0 ustar 00root root 0000000 0000000 /* ----- sort/uint32, derived from supercop/crypto_sort/try.c */
/*
derived from djb work from lib25519/libntruprime
mj modifications:
- rename files to test-crypto.c and _crypto_<>.<>.inc
- fix compiler warnings
- include crypto.h
- use less rounds for valgrind test
- reformat using clang-format
*/
#include
#include
#include
#include
#include "crypto.h"
#define fail ((ok = 0), printf)
static const char *sort_uint32_checksums[] = {
"83fc714d7acc0375aa6657bd36d3324a6cbc503f68019345651be8a88534c3e2",
"30921a0be2d73a185181f0ec842fa0fa73cd6e958fc03411d435f14a3fc64c89",
};
static void (*crypto_sort)(void *, long long);
#define crypto_sort_BYTES crypto_sort_uint32_BYTES
static void *storage_sort_uint32_x;
static unsigned char *test_sort_uint32_x;
static void *storage_sort_uint32_x2;
static unsigned char *test_sort_uint32_x2;
static void test_sort_uint32_impl(long long impl) {
unsigned char *x = test_sort_uint32_x;
unsigned char *x2 = test_sort_uint32_x2;
long long xlen;
long long xwords;
if (targetn && atol(targetn) != impl) return;
crypto_sort = crypto_sort_uint32;
for (long long checksumbig = 0; checksumbig < 2; ++checksumbig) {
long long loops = checksumbig ? 4096 : 1024;
long long maxtest = checksumbig ? 4096 : 128;
if (checksumbig && valgrind) break;
checksum_clear();
for (long long loop = 0; loop < loops; ++loop) {
xwords = myrandom() % (maxtest + 1);
xlen = xwords * crypto_sort_BYTES;
input_prepare(x2, x, xlen);
endianness(x, xwords, crypto_sort_BYTES);
secret(x, xlen);
crypto_sort(x, xwords);
public(x, xlen);
endianness(x, xwords, crypto_sort_BYTES);
checksum(x, xlen);
output_compare(x2, x, xlen, "crypto_sort");
double_canary(x2, x, xlen);
endianness(x2, xwords, crypto_sort_BYTES);
secret(x2, xlen);
crypto_sort(x2, xwords);
public(x2, xlen);
endianness(x2, xwords, crypto_sort_BYTES);
if (memcmp(x2, x, xlen) != 0)
fail("failure: crypto_sort is nondeterministic\n");
}
checksum_expected(sort_uint32_checksums[checksumbig]);
}
}
void test_sort_uint32(void) {
long long maxalloc = 0;
if (targeto && strcmp(targeto, "sort")) return;
if (targetp && strcmp(targetp, "uint32")) return;
storage_sort_uint32_x = callocplus(crypto_sort_uint32_BYTES * 4096);
test_sort_uint32_x =
aligned(storage_sort_uint32_x, crypto_sort_uint32_BYTES * 4096);
if (crypto_sort_uint32_BYTES * 4096 > maxalloc)
maxalloc = crypto_sort_uint32_BYTES * 4096;
storage_sort_uint32_x2 = callocplus(maxalloc);
test_sort_uint32_x2 =
aligned(storage_sort_uint32_x2, crypto_sort_uint32_BYTES * 4096);
for (long long offset = 0; offset < 1; ++offset) {
if (targetoffset && atol(targetoffset) != offset) continue;
if (offset && valgrind) break;
printf("sort_uint32 offset %lld\n", offset);
forked(test_sort_uint32_impl, -1);
++test_sort_uint32_x;
++test_sort_uint32_x2;
}
free(storage_sort_uint32_x2);
free(storage_sort_uint32_x);
}
#undef crypto_sort_BYTES
tinyssh-20250501/_crypto-test_verify_16.inc 0000664 0000000 0000000 00000004007 15004722224 0020473 0 ustar 00root root 0000000 0000000 /* ----- verify, derived from supercop/crypto_verify/try.c */
/*
derived from djb work from lib25519/libntruprime
mj modifications:
- rename files to test-crypto.c and _crypto_<>.<>.inc
- fix compiler warnings
- include crypto.h
- use less rounds for valgrind test
- reformat using clang-format
*/
#include
#include
#include
#include
#include "crypto.h"
static unsigned char *test_verify_16_x;
static unsigned char *test_verify_16_y;
static void test_verify_16_check(void) {
unsigned char *x = test_verify_16_x;
unsigned char *y = test_verify_16_y;
int r;
secret(x, 16);
secret(y, 16);
r = crypto_verify_16(x, y);
public(x, 16);
public(y, 16);
public(&r, sizeof r);
if (r == 0) {
if (memcmp(x, y, 16)) fail("failure: different strings pass verify\n");
}
else if (r == -1) {
if (!memcmp(x, y, 16)) fail("failure: equal strings fail verify\n");
}
else { fail("failure: weird return value\n"); }
}
void test_verify_16_impl(long long impl) {
unsigned char *x = test_verify_16_x;
unsigned char *y = test_verify_16_y;
if (targetn && atol(targetn) != impl) return;
randombytes(x, 16);
randombytes(y, 16);
test_verify_16_check();
memcpy(y, x, 16);
test_verify_16_check();
y[myrandom() % 16] = myrandom();
test_verify_16_check();
y[myrandom() % 16] = myrandom();
test_verify_16_check();
y[myrandom() % 16] = myrandom();
test_verify_16_check();
}
static void test_verify_16(void) {
if (targeto && strcmp(targeto, "verify")) return;
if (targetp && strcmp(targetp, "16")) return;
test_verify_16_x = callocplus(16);
test_verify_16_y = callocplus(16);
for (long long offset = 0; offset < 2; ++offset) {
if (targetoffset && atol(targetoffset) != offset) continue;
if (offset && valgrind) break;
printf("verify_16 offset %lld\n", offset);
forked(test_verify_16_impl, -1);
++test_verify_16_x;
++test_verify_16_y;
}
}
tinyssh-20250501/_crypto-test_verify_32.inc 0000664 0000000 0000000 00000004007 15004722224 0020471 0 ustar 00root root 0000000 0000000 /* ----- verify, derived from supercop/crypto_verify/try.c */
/*
derived from djb work from lib25519/libntruprime
mj modifications:
- rename files to test-crypto.c and _crypto_<>.<>.inc
- fix compiler warnings
- include crypto.h
- use less rounds for valgrind test
- reformat using clang-format
*/
#include
#include
#include
#include
#include "crypto.h"
static unsigned char *test_verify_32_x;
static unsigned char *test_verify_32_y;
static void test_verify_32_check(void) {
unsigned char *x = test_verify_32_x;
unsigned char *y = test_verify_32_y;
int r;
secret(x, 32);
secret(y, 32);
r = crypto_verify_32(x, y);
public(x, 32);
public(y, 32);
public(&r, sizeof r);
if (r == 0) {
if (memcmp(x, y, 32)) fail("failure: different strings pass verify\n");
}
else if (r == -1) {
if (!memcmp(x, y, 32)) fail("failure: equal strings fail verify\n");
}
else { fail("failure: weird return value\n"); }
}
void test_verify_32_impl(long long impl) {
unsigned char *x = test_verify_32_x;
unsigned char *y = test_verify_32_y;
if (targetn && atol(targetn) != impl) return;
randombytes(x, 32);
randombytes(y, 32);
test_verify_32_check();
memcpy(y, x, 32);
test_verify_32_check();
y[myrandom() % 32] = myrandom();
test_verify_32_check();
y[myrandom() % 32] = myrandom();
test_verify_32_check();
y[myrandom() % 32] = myrandom();
test_verify_32_check();
}
static void test_verify_32(void) {
if (targeto && strcmp(targeto, "verify")) return;
if (targetp && strcmp(targetp, "32")) return;
test_verify_32_x = callocplus(32);
test_verify_32_y = callocplus(32);
for (long long offset = 0; offset < 2; ++offset) {
if (targetoffset && atol(targetoffset) != offset) continue;
if (offset && valgrind) break;
printf("verify_32 offset %lld\n", offset);
forked(test_verify_32_impl, -1);
++test_verify_32_x;
++test_verify_32_y;
}
}
tinyssh-20250501/_tinysshd-printkex.c 0000664 0000000 0000000 00000011010 15004722224 0017454 0 ustar 00root root 0000000 0000000 /*
20141210
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "log.h"
#include "packet.h"
#include "ssh.h"
#include "bug.h"
#include "packetparser.h"
#include "global.h"
static void cleanup(void) { global_purge(); }
__attribute__((noreturn)) static void die_fatal(const char *trouble,
const char *d, const char *fn) {
cleanup();
if (d) {
if (fn)
log_f5(trouble, " ", d, "/", fn);
else
log_f3(trouble, " ", d);
}
else { log_f1(trouble); }
_exit(111);
}
static int packet_kex_receive_(void) {
struct buf *b = &packet.kexrecv;
long long pos = 0;
crypto_uint8 ch;
crypto_uint32 len;
if (!packet_getall(b, SSH_MSG_KEXINIT)) return 0;
/* parse packet */
pos = packetparser_uint8(b->buf, b->len, pos, &ch); /* SSH_MSG_KEXINIT */
if (ch != SSH_MSG_KEXINIT) bug_proto();
pos = packetparser_skip(b->buf, b->len, pos, 16); /* cookie */
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* kex algorithms */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("kex algorithms: ", (char *) b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos,
&len); /* server host key algorithms */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("server host key algorithms: ", (char *) b->buf + pos - len);
pos = packetparser_uint32(
b->buf, b->len, pos, &len); /* encryption algorithms client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("encryption algorithms client to server: ",
(char *) b->buf + pos - len);
pos = packetparser_uint32(
b->buf, b->len, pos, &len); /* encryption algorithms server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("encryption algorithms server to client: ",
(char *) b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos,
&len); /* mac algorithms client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("mac algorithms client to server: ", (char *) b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos,
&len); /* mac algorithms server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("mac algorithms server to client: ", (char *) b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos,
&len); /* compress algorithms client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos,
&len); /* compress algorithms server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos,
&len); /* languages client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos,
&len); /* languages server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint8(b->buf, b->len, pos,
&ch); /* kex first packet follows */
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* reserved */
return 1;
}
int main(int argc, char **argv) {
pid_t pid;
int tochild[2] = {-1, -1};
int fromchild[2] = {-1, -1};
if (argc < 2) _exit(111);
if (!argv[0]) _exit(111);
if (!argv[1]) _exit(111);
++argv;
if (pipe(tochild) == -1) _exit(111);
if (pipe(fromchild) == -1) _exit(111);
pid = fork();
if (pid == -1) _exit(111);
if (pid == 0) {
close(tochild[1]);
close(fromchild[0]);
close(2);
if (dup2(tochild[0], 0) == -1) _exit(111);
if (dup2(fromchild[1], 1) == -1) _exit(111);
execvp(*argv, argv);
_exit(111);
}
close(tochild[0]);
close(fromchild[1]);
close(0);
if (dup2(fromchild[0], 0) == -1) _exit(111);
close(1);
if (dup2(tochild[1], 1) == -1) _exit(111);
signal(SIGPIPE, SIG_IGN);
global_init();
log_init(2, "_tinysshd-printkex", 0, 0);
if (!packet_hello_receive())
die_fatal("unable to receive hello-string", 0, 0);
if (!packet_hello_send()) die_fatal("unable to send hello-string", 0, 0);
if (!packet_kex_receive_())
die_fatal("unable to receive kex-message", 0, 0);
_exit(111);
}
tinyssh-20250501/_tinysshd-speed.c 0000664 0000000 0000000 00000016042 15004722224 0016722 0 ustar 00root root 0000000 0000000 #include
#include
#include
#include "crypto.h"
static unsigned char sk[2560];
static unsigned char pk[2560];
static unsigned char a[16];
static unsigned char n[8];
static unsigned char k[64];
static unsigned char h[64];
static unsigned char space[10240];
static unsigned char m[51200];
static unsigned char sm[51200];
static unsigned long long smlen;
static unsigned long long mlen;
static const char *implementation, *version;
static int flagtimeout;
static void timeout(int x) {
flagtimeout = x = 1;
signal(SIGALRM, timeout);
}
int main(void) {
long long count;
signal(SIGALRM, timeout);
/* randombytes test */
alarm(1);
flagtimeout = 0;
count = 0;
while (!flagtimeout) {
randombytes(space, sizeof space);
++count;
}
printf("randombytes: %lld MB/s (%s)\n", count / 100, randombytes_source());
#ifdef crypto_hash_sha512_IMPLEMENTATION
implementation = crypto_hash_sha512_IMPLEMENTATION;
#else
implementation = "unknown";
#endif
#ifdef crypto_hash_sha512_VERSION
version = crypto_hash_sha512_VERSION;
#else
version = "unknown";
#endif
/* sha512 test */
alarm(1);
flagtimeout = 0;
count = 0;
while (!flagtimeout) {
if (crypto_hash_sha512(h, space, sizeof space) != 0) return 111;
++count;
}
printf("crypto_hash_sha512: %lld MB/s (%s, %s)\n", count / 100,
implementation, version);
#ifdef crypto_hash_sha256_IMPLEMENTATION
implementation = crypto_hash_sha256_IMPLEMENTATION;
#else
implementation = "unknown";
#endif
#ifdef crypto_hash_sha256_VERSION
version = crypto_hash_sha256_VERSION;
#else
version = "unknown";
#endif
/* sha256 test */
alarm(1);
flagtimeout = 0;
count = 0;
while (!flagtimeout) {
if (crypto_hash_sha256(h, space, sizeof space) != 0) return 111;
++count;
}
printf("crypto_hash_sha256: %lld MB/s (%s, %s)\n", count / 100,
implementation, version);
#ifdef crypto_stream_chacha20_IMPLEMENTATION
implementation = crypto_stream_chacha20_IMPLEMENTATION;
#else
implementation = "unknown";
#endif
#ifdef crypto_stream_chacha20_VERSION
version = crypto_stream_chacha20_VERSION;
#else
version = "unknown";
#endif
/* chacha20 test */
alarm(1);
flagtimeout = 0;
count = 0;
while (!flagtimeout) {
if (crypto_stream_chacha20_xor(space, space, sizeof space, n, k) != 0)
return 111;
++count;
}
printf("crypto_stream_chacha20_xor: %lld MB/s (%s, %s)\n", count / 100,
implementation, version);
#ifdef crypto_onetimeauth_poly1305_IMPLEMENTATION
implementation = crypto_onetimeauth_poly1305_IMPLEMENTATION;
#else
implementation = "unknown";
#endif
#ifdef crypto_onetimeauth_poly1305_VERSION
version = crypto_onetimeauth_poly1305_VERSION;
#else
version = "unknown";
#endif
/* onetimeauth test */
alarm(1);
flagtimeout = 0;
count = 0;
while (!flagtimeout) {
if (crypto_onetimeauth_poly1305(a, space, sizeof space, k) != 0)
return 111;
++count;
}
printf("crypto_onetimeauth_poly1305: %lld MB/s (%s, %s)\n", count / 100,
implementation, version);
#ifdef crypto_scalarmult_curve25519_IMPLEMENTATION
implementation = crypto_scalarmult_curve25519_IMPLEMENTATION;
#else
implementation = "unknown";
#endif
#ifdef crypto_scalarmult_curve25519_VERSION
version = crypto_scalarmult_curve25519_VERSION;
#else
version = "unknown";
#endif
/* x25519 test */
randombytes(sk, crypto_scalarmult_curve25519_SCALARBYTES);
crypto_scalarmult_curve25519_base(pk, sk);
alarm(1);
flagtimeout = 0;
count = 0;
while (!flagtimeout) {
if (crypto_scalarmult_curve25519(k, sk, pk) != 0) return 111;
++count;
}
printf("crypto_scalarmult_curve25519: %lld dh/s (%s, %s)\n", count,
implementation, version);
#ifdef crypto_sign_ed25519_IMPLEMENTATION
implementation = crypto_sign_ed25519_IMPLEMENTATION;
#else
implementation = "unknown";
#endif
#ifdef crypto_sign_ed25519_VERSION
version = crypto_sign_ed25519_VERSION;
#else
version = "unknown";
#endif
/* ed25519 test */
alarm(1);
flagtimeout = 0;
count = 0;
while (!flagtimeout) {
if (crypto_sign_ed25519_keypair(pk, sk) != 0) return 111;
++count;
}
printf("crypto_sign_ed25519_keypair: %lld keypairs/s (%s, %s)\n", count,
implementation, version);
alarm(1);
flagtimeout = 0;
count = 0;
while (!flagtimeout) {
if (crypto_sign_ed25519(sm, &smlen, m + crypto_sign_ed25519_BYTES,
sizeof(m) - crypto_sign_ed25519_BYTES, sk) != 0)
return 111;
++count;
}
printf("crypto_sign_ed25519: %lld sigs/s (%s, %s)\n", count, implementation,
version);
alarm(1);
flagtimeout = 0;
count = 0;
while (!flagtimeout) {
if (crypto_sign_ed25519_open(m, &mlen, sm, sizeof sm, pk) != 0)
return 111;
++count;
}
printf("crypto_sign_ed25519_open: %lld sigs/s (%s, %s)\n", count,
implementation, version);
#ifdef crypto_kem_sntrup4591761_IMPLEMENTATION
alarm(1);
flagtimeout = 0;
count = 0;
while (!flagtimeout) {
if (crypto_kem_sntrup4591761_keypair(pk, sk) != 0) return 111;
++count;
}
printf("crypto_kem_sntrup4591761_keypair: %lld keypairs/s (%s)\n", count,
crypto_kem_sntrup4591761_IMPLEMENTATION);
alarm(1);
flagtimeout = 0;
count = 0;
while (!flagtimeout) {
if (crypto_kem_sntrup4591761_enc(c, k, pk) != 0) return 111;
++count;
}
printf("crypto_kem_sntrup4591761_enc: %lld encryptions/s (%s)\n", count,
crypto_kem_sntrup4591761_IMPLEMENTATION);
alarm(1);
flagtimeout = 0;
count = 0;
while (!flagtimeout) {
if (crypto_kem_sntrup4591761_dec(k, c, sk) != 0) return 111;
++count;
}
printf("crypto_kem_sntrup4591761_dec: %lld decryptions/s (%s)\n", count,
crypto_kem_sntrup4591761_IMPLEMENTATION);
#endif
#ifdef crypto_kem_sntrup4591761x25519_IMPLEMENTATION
alarm(1);
flagtimeout = 0;
count = 0;
while (!flagtimeout) {
if (crypto_kem_sntrup4591761x25519_keypair(pk, sk) != 0) return 111;
++count;
}
printf("crypto_kem_sntrup4591761x25519_keypair: %lld keypairs/s (%s)\n",
count, crypto_kem_sntrup4591761x25519_IMPLEMENTATION);
alarm(1);
flagtimeout = 0;
count = 0;
while (!flagtimeout) {
if (crypto_kem_sntrup4591761x25519_enc(c, k, pk) != 0) return 111;
++count;
}
printf("crypto_kem_sntrup4591761x25519_enc: %lld encryptions/s (%s)\n",
count, crypto_kem_sntrup4591761x25519_IMPLEMENTATION);
alarm(1);
flagtimeout = 0;
count = 0;
while (!flagtimeout) {
if (crypto_kem_sntrup4591761x25519_dec(k, c, sk) != 0) return 111;
++count;
}
printf("crypto_kem_sntrup4591761x25519_dec: %lld decryptions/s (%s)\n",
count, crypto_kem_sntrup4591761x25519_IMPLEMENTATION);
#endif
return 0;
}
tinyssh-20250501/_tinysshd-test-hello1.c 0000664 0000000 0000000 00000001710 15004722224 0017757 0 ustar 00root root 0000000 0000000 /*
20160225
Jan Mojzis
Public domain.
*/
#include
#include
#include
int main(int argc, char **argv) {
pid_t pid;
int tochild[2] = {-1, -1};
int fromchild[2] = {-1, -1};
if (argc < 2) _exit(111);
if (!argv[0]) _exit(111);
if (!argv[1]) _exit(111);
++argv;
if (pipe(tochild) == -1) _exit(111);
if (pipe(fromchild) == -1) _exit(111);
pid = fork();
if (pid == -1) _exit(111);
if (pid == 0) {
close(tochild[1]);
close(fromchild[0]);
close(1); /* simulate closed connection */
if (dup2(tochild[0], 0) == -1) _exit(111);
if (dup2(fromchild[1], 1) == -1) _exit(111);
execvp(*argv, argv);
_exit(111);
}
close(tochild[0]);
close(fromchild[1]);
close(0);
if (dup2(fromchild[0], 0) == -1) _exit(111);
close(1);
if (dup2(tochild[1], 1) == -1) _exit(111);
signal(SIGPIPE, SIG_IGN);
_exit(111);
}
tinyssh-20250501/_tinysshd-test-hello2.c 0000664 0000000 0000000 00000003570 15004722224 0017766 0 ustar 00root root 0000000 0000000 /*
20160225
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "log.h"
#include "packet.h"
#include "global.h"
#include "str.h"
#include "writeall.h"
static void cleanup(void) { global_purge(); }
__attribute__((noreturn)) static void die_fatal(const char *trouble,
const char *d, const char *fn) {
cleanup();
if (d) {
if (fn)
log_f5(trouble, " ", d, "/", fn);
else
log_f3(trouble, " ", d);
}
else { log_f1(trouble); }
_exit(111);
}
int main(int argc, char **argv) {
pid_t pid;
int tochild[2] = {-1, -1};
int fromchild[2] = {-1, -1};
const char *message;
long long messagelen;
if (argc < 2) _exit(111);
if (!argv[0]) _exit(111);
if (!argv[1]) _exit(111);
if (!argv[2]) _exit(111);
++argv;
message = *argv;
messagelen = str_len(message);
++argv;
if (pipe(tochild) == -1) _exit(111);
if (pipe(fromchild) == -1) _exit(111);
pid = fork();
if (pid == -1) _exit(111);
if (pid == 0) {
close(tochild[1]);
close(fromchild[0]);
if (dup2(tochild[0], 0) == -1) _exit(111);
if (dup2(fromchild[1], 1) == -1) _exit(111);
execvp(*argv, argv);
_exit(111);
}
close(tochild[0]);
close(fromchild[1]);
close(0);
if (dup2(fromchild[0], 0) == -1) _exit(111);
close(1);
if (dup2(tochild[1], 1) == -1) _exit(111);
signal(SIGPIPE, SIG_IGN);
global_init();
if (!packet_hello_receive())
die_fatal("unable to receive hello-string", 0, 0);
if (messagelen) {
if (writeall(1, message, messagelen) == -1)
die_fatal("unable to write hello-string", 0, 0);
if (writeall(1, "\r\n", 2) == -1)
die_fatal("unable to write hello-string", 0, 0);
}
_exit(111);
}
tinyssh-20250501/_tinysshd-test-kex1.c 0000664 0000000 0000000 00000003252 15004722224 0017446 0 ustar 00root root 0000000 0000000 /*
20160226
20241215 - reformated using clang-format
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "log.h"
#include "packet.h"
#include "ssh.h"
#include "bug.h"
#include "packetparser.h"
#include "global.h"
static void cleanup(void) { global_purge(); }
__attribute__((noreturn)) static void die_fatal(const char *trouble,
const char *d, const char *fn) {
cleanup();
if (d) {
if (fn)
log_f5(trouble, " ", d, "/", fn);
else
log_f3(trouble, " ", d);
}
else { log_f1(trouble); }
_exit(111);
}
int main(int argc, char **argv) {
pid_t pid;
int tochild[2] = {-1, -1};
int fromchild[2] = {-1, -1};
if (argc < 2) _exit(111);
if (!argv[0]) _exit(111);
if (!argv[1]) _exit(111);
++argv;
if (pipe(tochild) == -1) _exit(111);
if (pipe(fromchild) == -1) _exit(111);
pid = fork();
if (pid == -1) _exit(111);
if (pid == 0) {
close(tochild[1]);
close(fromchild[0]);
if (dup2(tochild[0], 0) == -1) _exit(111);
if (dup2(fromchild[1], 1) == -1) _exit(111);
execvp(*argv, argv);
_exit(111);
}
close(tochild[0]);
close(fromchild[1]);
close(0);
if (dup2(fromchild[0], 0) == -1) _exit(111);
close(1);
if (dup2(tochild[1], 1) == -1) _exit(111);
signal(SIGPIPE, SIG_IGN);
global_init();
log_init(2, "_tinysshd-test-kex1", 0, 0);
if (!packet_hello_receive())
die_fatal("unable to receive hello-string", 0, 0);
if (!packet_hello_send()) die_fatal("unable to send hello-string", 0, 0);
_exit(111);
}
tinyssh-20250501/_tinysshd-test-kex2.c 0000664 0000000 0000000 00000013066 15004722224 0017453 0 ustar 00root root 0000000 0000000 /*
20160226
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "log.h"
#include "packet.h"
#include "ssh.h"
#include "bug.h"
#include "packetparser.h"
#include "global.h"
static void cleanup(void) { global_purge(); }
__attribute__((noreturn)) static void die_fatal(const char *trouble,
const char *d, const char *fn) {
cleanup();
if (d) {
if (fn)
log_f5(trouble, " ", d, "/", fn);
else
log_f3(trouble, " ", d);
}
else { log_f1(trouble); }
_exit(111);
}
static int packet_disconnect_(struct buf *b) {
buf_purge(b);
buf_putnum8(b, SSH_MSG_DISCONNECT); /* byte SSH_MSG_DISCONNECT */
buf_putnum32(b, 0); /* uint32 reason code */
buf_putstring(b, "bye"); /* string description in ISO-10646 UTF-8
encoding [RFC3629] */
buf_putstring(b, ""); /* string language tag [RFC3066] */
packet_put(b);
return packet_sendall();
}
#if 0
static int _packet_debug(struct buf *b) {
buf_purge(b);
buf_putnum8(b, SSH_MSG_DEBUG); /* SSH_MSG_DEBUG */
buf_putnum8(b, 1); /* always_display */
buf_putstring(b, "test message"); /* message in ISO-10646 UTF-8 encoding [RFC3629] */
buf_putstring(b, ""); /* language tag [RFC3066] */
packet_put(b);
return packet_sendall();
}
#endif
static int packet_kex_receive_(void) {
struct buf *b = &packet.kexrecv;
long long pos = 0;
crypto_uint8 ch;
crypto_uint32 len;
if (!packet_getall(b, SSH_MSG_KEXINIT)) return 0;
/* parse packet */
pos = packetparser_uint8(b->buf, b->len, pos, &ch); /* SSH_MSG_KEXINIT */
if (ch != SSH_MSG_KEXINIT) bug_proto();
pos = packetparser_skip(b->buf, b->len, pos, 16); /* cookie */
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* kex algorithms */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("kex algorithms: ", (char *) b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos,
&len); /* server host key algorithms */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("server host key algorithms: ", (char *) b->buf + pos - len);
pos = packetparser_uint32(
b->buf, b->len, pos, &len); /* encryption algorithms client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("encryption algorithms client to server: ",
(char *) b->buf + pos - len);
pos = packetparser_uint32(
b->buf, b->len, pos, &len); /* encryption algorithms server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("encryption algorithms server to client: ",
(char *) b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos,
&len); /* mac algorithms client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("mac algorithms client to server: ", (char *) b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos,
&len); /* mac algorithms server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
log_i2("mac algorithms server to client: ", (char *) b->buf + pos - len);
pos = packetparser_uint32(b->buf, b->len, pos,
&len); /* compress algorithms client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos,
&len); /* compress algorithms server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos,
&len); /* languages client to server */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint32(b->buf, b->len, pos,
&len); /* languages server to client */
pos = packetparser_skip(b->buf, b->len, pos, len);
pos = packetparser_uint8(b->buf, b->len, pos,
&ch); /* kex first packet follows */
pos = packetparser_uint32(b->buf, b->len, pos, &len); /* reserved */
return 1;
}
static unsigned char bspace[1024];
static struct buf b;
int main(int argc, char **argv) {
pid_t pid;
int tochild[2] = {-1, -1};
int fromchild[2] = {-1, -1};
if (argc < 2) _exit(111);
if (!argv[0]) _exit(111);
if (!argv[1]) _exit(111);
++argv;
buf_init(&b, bspace, sizeof bspace);
if (pipe(tochild) == -1) _exit(111);
if (pipe(fromchild) == -1) _exit(111);
pid = fork();
if (pid == -1) _exit(111);
if (pid == 0) {
close(tochild[1]);
close(fromchild[0]);
if (dup2(tochild[0], 0) == -1) _exit(111);
if (dup2(fromchild[1], 1) == -1) _exit(111);
execvp(*argv, argv);
_exit(111);
}
close(tochild[0]);
close(fromchild[1]);
close(0);
if (dup2(fromchild[0], 0) == -1) _exit(111);
close(1);
if (dup2(tochild[1], 1) == -1) _exit(111);
signal(SIGPIPE, SIG_IGN);
global_init();
log_init(0, "_tinysshd-test-kex1", 0, 0);
if (!packet_hello_receive())
die_fatal("unable to receive hello-string", 0, 0);
if (!packet_hello_send()) die_fatal("unable to send hello-string", 0, 0);
if (!packet_kex_receive_())
die_fatal("unable to receive kex-message", 0, 0);
if (!packet_disconnect_(&b))
die_fatal("unable to send disconnect-message", 0, 0);
_exit(111);
}
tinyssh-20250501/_tinysshd-unauthenticated.c 0000664 0000000 0000000 00000005130 15004722224 0021003 0 ustar 00root root 0000000 0000000 /*
20141210
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "log.h"
#include "packet.h"
#include "ssh.h"
#include "bug.h"
#include "packetparser.h"
#include "global.h"
static void cleanup(void) { global_purge(); }
__attribute__((noreturn)) static void die_fatal(const char *trouble,
const char *d, const char *fn) {
cleanup();
if (d) {
if (fn)
log_f5(trouble, " ", d, "/", fn);
else
log_f3(trouble, " ", d);
}
else { log_f1(trouble); }
_exit(111);
}
static int packet_debug_(struct buf *b) {
buf_purge(b);
buf_putnum8(b, SSH_MSG_DEBUG); /* SSH_MSG_DEBUG */
buf_putnum8(b, 1); /* always_display */
buf_putstring(
b, "test message"); /* message in ISO-10646 UTF-8 encoding [RFC3629] */
buf_putstring(b, ""); /* language tag [RFC3066] */
packet_put(b);
return packet_sendall();
}
static unsigned char bspace[1024];
static struct buf b;
int main(int argc, char **argv) {
pid_t pid;
int tochild[2] = {-1, -1};
int fromchild[2] = {-1, -1};
long long i;
if (argc < 2) _exit(111);
if (!argv[0]) _exit(111);
if (!argv[1]) _exit(111);
++argv;
buf_init(&b, bspace, sizeof bspace);
if (pipe(tochild) == -1) _exit(111);
if (pipe(fromchild) == -1) _exit(111);
pid = fork();
if (pid == -1) _exit(111);
if (pid == 0) {
close(tochild[1]);
close(fromchild[0]);
close(2);
if (dup2(tochild[0], 0) == -1) _exit(111);
if (dup2(fromchild[1], 1) == -1) _exit(111);
execvp(*argv, argv);
_exit(111);
}
close(tochild[0]);
close(fromchild[1]);
close(0);
if (dup2(fromchild[0], 0) == -1) _exit(111);
close(1);
if (dup2(tochild[1], 1) == -1) _exit(111);
signal(SIGPIPE, SIG_IGN);
global_init();
log_init(1, "_tinysshd-unauthenticated", 0, 0);
if (!packet_hello_receive())
die_fatal("unable to receive hello-string", 0, 0);
if (!packet_hello_send()) die_fatal("unable to send hello-string", 0, 0);
for (i = 1; i < 100 * PACKET_UNAUTHENTICATED_MESSAGES; ++i) {
if (!packet_debug_(&b)) {
if (i < PACKET_UNAUTHENTICATED_MESSAGES)
die_fatal(
"unable to send debug message - parent died too early", 0,
0);
_exit(0); /* limitation works */
}
if (i > PACKET_UNAUTHENTICATED_MESSAGES) usleep(1000); /* XXX */
}
die_fatal("limitation is not working !!!!!!!!!!", 0, 0);
}
tinyssh-20250501/blocking.c 0000664 0000000 0000000 00000000505 15004722224 0015405 0 ustar 00root root 0000000 0000000 /*
taken from nacl-20110221, from from curvecp/blocking.c
- reformated using clang-format
*/
#include
#include "blocking.h"
void blocking_enable(int fd) {
fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_NONBLOCK);
}
void blocking_disable(int fd) {
fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK);
}
tinyssh-20250501/blocking.h 0000664 0000000 0000000 00000000174 15004722224 0015414 0 ustar 00root root 0000000 0000000 #ifndef BLOCKING_H____
#define BLOCKING_H____
extern void blocking_enable(int);
extern void blocking_disable(int);
#endif
tinyssh-20250501/buf.c 0000664 0000000 0000000 00000013716 15004722224 0014401 0 ustar 00root root 0000000 0000000 /*
20140108
20241208 - reformated using clang-format
Jan Mojzis
Public domain.
The 'buf' library holds a string in allocated space.
The string length is limited by allocated memory.
All 'buf_put*' functions checks the limit and if
the string exceeds the limit, 'buf_put*' function
immediately exits with 111 status code.
*/
#include "byte.h"
#include "str.h"
#include "purge.h"
#include "randombytes.h"
#include "crypto_uint32.h"
#include "bug.h"
#include "buf.h"
/*
Initialize 'b' structure.
*/
void buf_init_(const char *fn, unsigned long long line, struct buf *b,
unsigned char *buf, long long alloc) {
if (!b || !buf || alloc <= 0 || alloc > 1073741824) bug_inval_(fn, line);
b->buf = buf;
b->len = 0;
b->alloc = alloc;
purge(b->buf, b->alloc);
}
/*
Remove content of 'b'.
*/
void buf_purge_(const char *fn, unsigned long long line, struct buf *b) {
if (!b || b->len < 0 || b->len > 1073741824 || b->alloc <= 0 ||
b->alloc > 1073741824 || !b->buf)
bug_inval_(fn, line);
purge(b->buf, b->len);
b->len = 0;
}
/*
Retun if 'b' has available space for string of length 'len'.
*/
int buf_ready_(const char *fn, unsigned long long line, struct buf *b,
long long len) {
if (!b || b->len < 0 || b->len > 1073741824 || b->alloc <= 0 ||
b->alloc > 1073741824 || !b->buf || len < 0 || len > 1073741824)
bug_inval_(fn, line);
return (b->len + len < b->alloc);
}
/*
Put string 'x' of length 'len'.
*/
int buf_put_(const char *fn, unsigned long long line, struct buf *b,
const unsigned char *x, long long len) {
if (!b || b->len < 0 || b->len > 1073741824 || b->alloc <= 0 ||
b->alloc > 1073741824 || !b->buf || !x || len < 0 || len > 1073741824)
bug_inval_(fn, line);
if (b->len + len >= b->alloc) bug_nomem_(fn, line);
byte_copy(b->buf + b->len, len, x);
b->len += len;
return 1;
}
/*
Put 0-terminated string 'x'.
*/
int buf_puts_(const char *fn, unsigned long long line, struct buf *b,
const char *x) {
return buf_put_(fn, line, b, (const unsigned char *) x, str_len(x));
}
/*
Put zero bytes of length 'len'.
*/
int buf_putzerobytes_(const char *fn, unsigned long long line, struct buf *b,
long long len) {
if (!b || b->len < 0 || b->len > 1073741824 || b->alloc <= 0 ||
b->alloc > 1073741824 || !b->buf || len < 0 || len > 1073741824)
bug_inval_(fn, line);
if (b->len + len >= b->alloc) bug_nomem_(fn, line);
byte_zero(b->buf + b->len, len);
b->len += len;
return 1;
}
/*
Put random bytes of length 'len'.
*/
int buf_putrandombytes_(const char *fn, unsigned long long line, struct buf *b,
long long len) {
if (!b || b->len < 0 || b->len > 1073741824 || b->alloc <= 0 ||
b->alloc > 1073741824 || !b->buf || len < 0 || len > 1073741824)
bug_inval_(fn, line);
if (b->len + len >= b->alloc) bug_nomem_(fn, line);
randombytes(b->buf + b->len, len);
b->len += len;
return 1;
}
/*
Put padding of length 'len'.
*/
int buf_putpadding_(const char *fn, unsigned long long line, struct buf *b,
long long len) {
if (!b || b->len < 0 || b->len > 1073741824 || b->alloc <= 0 ||
b->alloc > 1073741824 || !b->buf || len < 0 || len > 1073741824)
bug_inval_(fn, line);
if (b->len + len >= b->alloc) bug_nomem_(fn, line);
purge(b->buf + b->len, len);
b->len += len;
return 1;
}
/*
Put 32-bit unsigned integer in big-endian format.
*/
int buf_putnum32_(const char *fn, unsigned long long line, struct buf *b,
crypto_uint32 x) {
unsigned char s[4];
crypto_uint32_store_bigendian(s, x);
return buf_put_(fn, line, b, s, sizeof s);
}
/*
Put 8-bit unsigned integer.
*/
int buf_putnum8_(const char *fn, unsigned long long line, struct buf *b,
crypto_uint8 u) {
return buf_put_(fn, line, b, &u, 1);
}
/*
Put string 'x' of length 'len' and format it as a SSH-string.
*/
int buf_putstringlen_(const char *fn, unsigned long long line, struct buf *b,
const unsigned char *x, long long len) {
if (!buf_putnum32_(fn, line, b, len)) return 0;
return buf_put_(fn, line, b, x, len);
}
/*
Put 0-terminated string 'x' and format it as a SSH-string.
*/
int buf_putstring_(const char *fn, unsigned long long line, struct buf *b,
const char *x) {
return buf_putstringlen_(fn, line, b, (const unsigned char *) x,
str_len(x));
}
/*
Put SSH shared secret (bignum formated into wire format)
*/
int buf_putsharedsecret_(const char *fn, unsigned long long line, struct buf *b,
const unsigned char *x, long long len) {
long long pos;
if (len < 0 || len > 1073741824 || !b || !x) bug_inval_(fn, line);
for (pos = 0; pos < len; ++pos)
if (x[pos]) break;
if (x[pos] & 0x80) {
buf_putnum32_(fn, line, b, len - pos + 1);
buf_putnum8_(fn, line, b, 0);
}
else { buf_putnum32_(fn, line, b, len - pos + 0); }
return buf_put_(fn, line, b, x + pos, len - pos);
}
/*
Put string 'x' of length 'len' and encode it into base64.
*/
static const unsigned char b64chars[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int buf_putbase64_(const char *fn, unsigned long long line, struct buf *b,
const unsigned char *x, long long len) {
long long i;
unsigned long long bits = 0, v = 0;
unsigned char ch;
if (len < 0 || len > 1073741824 || !b || !x) bug_inval_(fn, line);
for (i = 0; i < len; ++i) {
v <<= 8;
v += x[i];
bits += 8;
while (bits > 6) {
ch = b64chars[((v >> (bits - 6)) & 63)];
buf_putnum8_(fn, line, b, ch);
bits -= 6;
}
}
if (bits) {
v <<= (6 - bits);
ch = b64chars[v & 63];
buf_putnum8_(fn, line, b, ch);
}
while (b->len & 3) { buf_putnum8_(fn, line, b, '='); }
return 1;
}
tinyssh-20250501/buf.h 0000664 0000000 0000000 00000006124 15004722224 0014401 0 ustar 00root root 0000000 0000000 /*
20140108
20241208 - reformated using clang-format
Jan Mojzis
Public domain.
*/
#ifndef BUF_H____
#define BUF_H____
#include "crypto_uint8.h"
#include "crypto_uint32.h"
struct buf {
unsigned char *buf;
long long len;
long long alloc;
};
extern void buf_init_(const char *, unsigned long long, struct buf *,
unsigned char *, long long);
extern void buf_purge_(const char *, unsigned long long, struct buf *);
extern int buf_ready_(const char *, unsigned long long, struct buf *,
long long);
extern int buf_put_(const char *, unsigned long long, struct buf *,
const unsigned char *, long long);
extern int buf_puts_(const char *, unsigned long long, struct buf *,
const char *);
extern int buf_putzerobytes_(const char *, unsigned long long, struct buf *,
long long);
extern int buf_putrandombytes_(const char *, unsigned long long, struct buf *,
long long);
extern int buf_putpadding_(const char *, unsigned long long, struct buf *,
long long);
extern int buf_putnum32_(const char *, unsigned long long, struct buf *,
crypto_uint32);
extern int buf_putnum8_(const char *, unsigned long long, struct buf *,
crypto_uint8);
extern int buf_putstringlen_(const char *, unsigned long long, struct buf *,
const unsigned char *, long long);
extern int buf_putstring_(const char *, unsigned long long, struct buf *,
const char *);
extern int buf_putsharedsecret_(const char *, unsigned long long, struct buf *,
const unsigned char *, long long);
extern int buf_putbase64_(const char *, unsigned long long, struct buf *,
const unsigned char *, long long);
#define buf_init(a, b, cc) buf_init_(__FILE__, __LINE__, (a), (b), (cc))
#define buf_purge(a) buf_purge_(__FILE__, __LINE__, (a))
#define buf_ready(a, b) buf_ready_(__FILE__, __LINE__, (a), (b))
#define buf_put(a, b, cc) buf_put_(__FILE__, __LINE__, (a), (b), (cc))
#define buf_puts(a, b) buf_puts_(__FILE__, __LINE__, (a), (b))
#define buf_putzerobytes(a, b) buf_putzerobytes_(__FILE__, __LINE__, (a), (b))
#define buf_putrandombytes(a, b) \
buf_putrandombytes_(__FILE__, __LINE__, (a), (b))
#define buf_putpadding(a, b) buf_putpadding_(__FILE__, __LINE__, (a), (b))
#define buf_putnum32(a, b) buf_putnum32_(__FILE__, __LINE__, (a), (b))
#define buf_putnum8(a, b) buf_putnum8_(__FILE__, __LINE__, (a), (b))
#define buf_putstringlen(a, b, cc) \
buf_putstringlen_(__FILE__, __LINE__, (a), (b), (cc))
#define buf_putstring(a, b) buf_putstring_(__FILE__, __LINE__, (a), (b))
#define buf_putsharedsecret(a, b, cc) \
buf_putsharedsecret_(__FILE__, __LINE__, (a), (b), (cc))
#define buf_putbase64(a, b, cc) \
buf_putbase64_(__FILE__, __LINE__, (a), (b), (cc))
#endif
tinyssh-20250501/bug.h 0000664 0000000 0000000 00000004753 15004722224 0014410 0 ustar 00root root 0000000 0000000 #ifndef BUG_H____
#define BUG_H____
#include
#include "global.h"
#include "e.h"
#include "log.h"
#define bug_(a, b) \
do { \
log_9_(-1, 0, a, b, 0, 0, 0, 0, 0, 0, 0, 0, 0); \
global_die(111); \
} while (0)
#define bug() bug_(__FILE__, __LINE__)
#define bug_nomem() \
do { \
errno = ENOMEM; \
bug(); \
} while (0)
#define bug_proto() \
do { \
errno = EPROTO; \
bug(); \
} while (0)
#define bug_inval() \
do { \
errno = EINVAL; \
bug(); \
} while (0)
#define bug_nomem_(a, b) \
do { \
errno = ENOMEM; \
bug_(a, b); \
} while (0)
#define bug_proto_(a, b) \
do { \
errno = EPROTO; \
bug_(a, b); \
} while (0)
#define bug_inval_(a, b) \
do { \
errno = EINVAL; \
bug_(a, b); \
} while (0)
#endif
tinyssh-20250501/byte.c 0000664 0000000 0000000 00000001306 15004722224 0014560 0 ustar 00root root 0000000 0000000 /*
20241205
*/
#include "crypto_int16.h"
#include "byte.h"
void byte_copy(void *yv, long long ylen, const void *xv) {
long long i;
const char *x = xv;
char *y = yv;
for (i = 0; i < ylen; ++i) y[i] = x[i];
}
int byte_isequal(const void *yv, long long ylen, const void *xv) {
long long i;
const unsigned char *y = yv;
const unsigned char *x = xv;
unsigned char diff = 0;
for (i = 0; i < ylen; ++i) diff |= x[i] ^ y[i];
return crypto_int16_zero_01(diff);
}
void byte_zero(void *yv, long long ylen) {
long long i;
volatile char *y = yv;
for (i = 0; i < ylen; ++i) y[i] = 0;
#ifdef __GNUC__
__asm__ __volatile__("" : : "r"(yv) : "memory");
#endif
}
tinyssh-20250501/byte.h 0000664 0000000 0000000 00000000321 15004722224 0014561 0 ustar 00root root 0000000 0000000 #ifndef BYTE_H____
#define BYTE_H____
extern void byte_zero(void *, long long);
extern void byte_copy(void *, long long, const void *);
extern int byte_isequal(const void *, long long, const void *);
#endif
tinyssh-20250501/channel.c 0000664 0000000 0000000 00000027616 15004722224 0015241 0 ustar 00root root 0000000 0000000 /*
20140124
20241209 - reformated using clang-format
Jan Mojzis
Public domain.
The 'channel' library is used to handle data from/to SSH channel (rfc4254).
*/
#include
#include
#include
#include
#include
#include
#include
extern char *ptsname(int);
#include "byte.h"
#include "bug.h"
#include "newenv.h"
#include "e.h"
#include "purge.h"
#include "connectioninfo.h"
#include "iptostr.h"
#include "porttostr.h"
#include "buf.h"
#include "str.h"
#include "logsys.h"
#include "loginshell.h"
#include "trymlock.h"
#include "limit.h"
#include "channel.h"
/*
1. channel not open: maxpacket == 0, pid == 0
2. channel open: maxpacket != 0, pid == 0
3. child executed: maxpacket != 0, pid > 0, fd[01] != -1
4. child eof: maxpacket != 0, pid > 0, fd[12] == -1
5. child died: maxpacket != 0, pid == -1
*/
struct channel channel = {0};
/*
The 'channel_open' function opens the channel.
It sets 'localwindow' and maxpacket, values obtained from
from SSH_MSG_CHANNEL_OPEN message.
Function also obtaines connection information and sets
environment variables PATH, SSH_CONNECTION and MAIL.
*/
int channel_open(const char *user, crypto_uint32 id, crypto_uint32 remotewindow,
crypto_uint32 maxpacket, crypto_uint32 *localwindow) {
struct buf b = {channel.buf0, 0, CHANNEL_BUFSIZE};
if (!localwindow) bug_inval();
if (!maxpacket) bug_inval();
if (!remotewindow) bug_inval();
if (channel.maxpacket != 0) return 0;
if (channel.pid != 0) return 0;
/* copy user-name */
if (!str_copyn(channel.user, sizeof channel.user, user)) bug_nomem();
/* set id, maxpacket, remotewindow, localwindow */
channel.id = id;
channel.maxpacket = maxpacket;
channel.remotewindow = remotewindow;
channel.localwindow = *localwindow = CHANNEL_BUFSIZE;
/* copy PATH */
if (!newenv_copyenv("PATH")) {
if (!newenv_env("PATH", "/bin:/usr/bin")) return 0;
}
/* create env. SSH_CONNECTION */
connectioninfo(channel.localip, channel.localport, channel.remoteip,
channel.remoteport);
buf_purge(&b);
buf_puts(&b, channel.remoteip);
buf_puts(&b, " ");
buf_puts(&b, channel.remoteport);
buf_puts(&b, " ");
buf_puts(&b, channel.localip);
buf_puts(&b, " ");
buf_puts(&b, channel.localport);
buf_putnum8(&b, 0);
if (!newenv_env("SSH_CONNECTION", (char *) b.buf)) return 0;
#ifdef _PATH_MAILDIR
/* create env. MAIL */
buf_purge(&b);
buf_puts(&b, _PATH_MAILDIR);
buf_puts(&b, "/");
buf_puts(&b, user);
buf_putnum8(&b, 0);
if (!newenv_env("MAIL", (char *) b.buf)) return 0;
#endif
purge(channel.buf0, sizeof channel.buf0);
return 1;
}
/*
The 'channel_openterminal' function opens terminal,
sets environment variable TERM and initial terminal windowsize.
*/
int channel_openterminal(const char *name, crypto_uint32 a, crypto_uint32 b,
crypto_uint32 x, crypto_uint32 y) {
if (channel.maxpacket == 0) bug_proto();
if (channel.pid != 0) bug_proto();
if (channel.flagterminal == 1) bug_proto();
if (!channel_openpty(&channel.master, &channel.slave)) return 0;
if (!newenv_env("TERM", name)) return 0;
channel.flagterminal = 1;
channel.a = a;
channel.b = b;
channel.x = x;
channel.y = y;
return 1;
}
/*
The 'channel_ptyresize' function sets new
terminal windowsize.
*/
void channel_ptyresize(crypto_uint32 a, crypto_uint32 b, crypto_uint32 x,
crypto_uint32 y) {
struct winsize w;
if (channel.maxpacket == 0) bug_proto();
if (channel.pid <= 0) bug_proto();
if (!a && !b && !x && !y) return;
w.ws_col = a;
w.ws_row = b;
w.ws_xpixel = x;
w.ws_ypixel = y;
ioctl(channel.fd0, TIOCSWINSZ, &w);
}
/*
The 'channel_env' adds new environment variable
sent from client.
*/
int channel_env(const char *x, const char *y) {
if (channel.maxpacket == 0) bug_proto();
if (channel.pid != 0) bug_proto();
if (!x || !y) bug_inval();
return newenv_lowenv(x, y);
}
/*
The 'channel_exec' function executes new process.
If terminal is requsted, than users shell is executed,
if exec is requested, than command 'cmd' is executed.
Process is executed under appropriate users UID.
*/
int channel_exec(const char *cmd) {
char *run[4];
char *shell;
char *name;
int fd[3];
char ln[NAME_MAX + 2];
if (channel.maxpacket == 0) bug_proto();
if (channel.pid != 0) bug_proto();
if (channel.flagterminal) {
channel.pid = channel_forkpty(fd, channel.master, channel.slave);
if (channel.pid > 0) {
name = ptsname(fd[0]);
if (!name) bug();
if (!str_copyn(channel.termname, sizeof channel.termname, name))
bug_nomem();
}
}
else { channel.pid = channel_fork(fd); }
if (channel.pid == -1) return 0;
if (channel.pid == 0) {
logsys_login(channel.user, channel.remoteip, 0, 0);
if (!channel_droppriv(channel.user, &shell)) _exit(111);
if (cmd) {
run[0] = shell;
run[1] = (char *) "-c";
run[2] = (char *) cmd;
run[3] = 0;
}
else {
if (!loginshell(ln, sizeof ln, shell)) bug();
run[0] = ln;
run[1] = 0;
}
signal(SIGPIPE, SIG_DFL);
newenv_exec(shell, run);
_exit(111);
}
channel.fd0 = fd[0];
channel.fd1 = fd[1];
channel.fd2 = fd[2];
channel.len0 = 0;
newenv_purge();
if (channel.flagterminal && channel.pid > 0) {
channel_ptyresize(channel.a, channel.b, channel.x, channel.y);
}
return 1;
}
/*
The 'channel_put' function adds data from
client to childs buffer.
*/
void channel_put(unsigned char *buf, long long len) {
if (channel.maxpacket == 0) bug_proto();
if (channel.pid <= 0) bug_proto();
if (channel.fd0 == -1) bug_proto();
if (!buf || len < 0) bug_inval();
if (channel.len0 + len > CHANNEL_BUFSIZE) bug_nomem();
byte_copy(channel.buf0 + channel.len0, len, buf);
channel.len0 += len;
channel.localwindow -= len;
}
/*
The 'channel_puteof' function adds information
that remote side closed standard output.
*/
void channel_puteof(void) {
if (channel.maxpacket == 0) bug_proto();
if (channel.pid == 0) bug_proto();
if (channel.fd0 == -1) bug_proto();
channel.remoteeof = 1;
if (channel.len0 == 0 && !channel.flagterminal) {
close(channel.fd0);
channel.fd0 = -1;
}
}
/*
The 'channel_putisready' function returns
if child is ready accept data.
*/
int channel_putisready(void) {
if (channel.maxpacket == 0) return 0;
if (channel.pid <= 0) return 0;
if (channel.fd0 == -1) return 0;
return (CHANNEL_BUFSIZE > channel.len0);
}
/*
The 'channel_read' function reads
data from childs standard output.
*/
long long channel_read(unsigned char *buf, long long len) {
long long r;
if (channel.maxpacket == 0) bug_proto();
if (channel.pid <= 0) bug_proto();
if (channel.fd1 == -1) bug_proto();
if (!buf || len < 0) bug_inval();
if (channel.remotewindow <= 0) return 0;
r = len;
if (r > 1048576) r = 1048576;
if (r > channel.remotewindow) r = channel.remotewindow;
r = read(channel.fd1, buf, r);
if (r == -1) {
if (errno == EINTR) return 0;
if (errno == EAGAIN) return 0;
if (errno == EWOULDBLOCK) return 0;
}
if (r <= 0) {
channel.fd1 = -1;
return 0;
}
channel.remotewindow -= r;
return r;
}
/*
The 'channel_extendedread' function reads
data from childs error output.
*/
long long channel_extendedread(unsigned char *buf, long long len) {
long long r;
if (channel.maxpacket == 0) bug_proto();
if (channel.pid <= 0) bug_proto();
if (channel.fd2 == -1) bug_proto();
if (!buf || len < 0) bug_inval();
if (channel.remotewindow <= 0) return 0;
r = len;
if (r > 1048576) r = 1048576;
if (r > channel.remotewindow) r = channel.remotewindow;
r = read(channel.fd2, buf, r);
if (r == -1) {
if (errno == EINTR) return 0;
if (errno == EAGAIN) return 0;
if (errno == EWOULDBLOCK) return 0;
}
if (r <= 0) {
channel.fd2 = -1;
return 0;
}
channel.remotewindow -= r;
return r;
}
/*
The 'channel_readisready' function returns
if we can read data from childs standard output.
*/
int channel_readisready(void) {
if (channel.maxpacket == 0 || channel.pid == 0) return 0;
if (channel.fd1 == -1) return 0;
return (channel.remotewindow > 0);
}
/*
The 'channel_extendedreadisready' function returns
if we can read data from childs error output.
*/
int channel_extendedreadisready(void) {
if (channel.maxpacket == 0 || channel.pid == 0) return 0;
if (channel.fd2 == -1) return 0;
return (channel.remotewindow > 0);
}
/*
The 'channel_write' function writes
data to childs standard input.
*/
int channel_write(void) {
long long w;
if (channel.maxpacket == 0) bug_proto();
if (channel.pid <= 0) bug_proto();
if (channel.fd0 == -1) bug_proto();
if (channel.len0 <= 0) return 1;
w = write(channel.fd0, channel.buf0, channel.len0);
if (w == -1) {
if (errno == EINTR) return 1;
if (errno == EAGAIN) return 1;
if (errno == EWOULDBLOCK) return 1;
}
if (w <= 0) {
channel.fd0 = -1;
return 0;
}
byte_copy(channel.buf0, channel.len0 - w, channel.buf0 + w);
purge(channel.buf0 + channel.len0 - w, w);
channel.len0 -= w;
if (channel.remoteeof && channel.len0 == 0 && !channel.flagterminal) {
close(channel.fd0);
channel.fd0 = -1;
}
return 1;
}
/*
The 'channel_writeisready' function returns
if we can write data to childs standard input.
*/
int channel_writeisready(void) {
if (channel.maxpacket == 0) return 0;
if (channel.pid <= 0) return 0;
if (channel.fd0 == -1) return 0;
return (channel.len0 > 0);
}
/*
The 'channel_iseof' function returns
if child closed standard and error output.
*/
int channel_iseof(void) {
if (channel.maxpacket == 0) return 0;
if (channel.pid == 0) return 0;
if (channel.pid == -1) return 1;
return (channel.fd1 == -1 && channel.fd2 == -1);
}
/*
The 'channel_waitnohang' function returns
if child exited or was killed.
*/
int channel_waitnohang(int *s, int *e) {
int r, status;
if (!s || !e) bug_inval();
if (channel.maxpacket == 0) bug_proto();
if (channel.pid <= 0) return 0;
do {
r = waitpid(channel.pid, &status, WNOHANG);
} while (r == -1 && errno == EINTR);
if (r <= 0) return 0;
if (channel.flagterminal) {
logsys_logout(channel.user, channel.remoteip, channel.termname,
channel.pid);
}
if (WIFEXITED(status)) {
*e = WEXITSTATUS(status);
*s = 0;
}
else if (WIFSIGNALED(status)) {
*e = 0;
*s = WTERMSIG(status);
}
else { *e = *s = -1; }
channel.pid = -1;
return 1;
}
/*
Remove sentitive data from allocated memory.
*/
void channel_purge(void) {
purge(&channel, sizeof channel);
trymunlock(&channel, sizeof channel);
}
/*
Initialize channel structure.
*/
void channel_init(void) {
trymlock(&channel, sizeof channel);
purge(&channel, sizeof channel);
channel.maxpacket = 0;
channel.remoteeof = 0;
channel.len0 = 0;
channel.pid = 0;
channel.flagterminal = 0;
channel.master = -1;
channel.slave = -1;
}
int channel_getfd0(void) { return channel.fd0; }
int channel_getfd1(void) { return channel.fd1; }
int channel_getfd2(void) { return channel.fd2; }
long long channel_getlen0(void) { return channel.len0; }
crypto_uint32 channel_getid(void) { return channel.id; }
crypto_uint32 channel_getlocalwindow(void) { return channel.localwindow; }
void channel_incrementremotewindow(crypto_uint32 x) {
channel.remotewindow += x;
}
void channel_incrementlocalwindow(crypto_uint32 x) { channel.localwindow += x; }
tinyssh-20250501/channel.h 0000664 0000000 0000000 00000005310 15004722224 0015231 0 ustar 00root root 0000000 0000000 #ifndef CHANNEL_H____
#define CHANNEL_H____
#include "crypto_uint32.h"
#include "iptostr.h"
#include "porttostr.h"
#include "limit.h"
#define CHANNEL_BUFSIZE 131072
struct channel {
/* channel */
crypto_uint32 maxpacket;
crypto_uint32 id;
crypto_uint32 localwindow;
crypto_uint32 remotewindow;
/* child */
unsigned char buf0[CHANNEL_BUFSIZE];
long long len0;
long long pid;
int fd0;
int fd1;
int fd2;
int status;
/* ip */
char localip[IPTOSTR_LEN];
char localport[PORTTOSTR_LEN];
char remoteip[IPTOSTR_LEN];
char remoteport[PORTTOSTR_LEN];
/* terminal */
char user[LOGIN_NAME_MAX + 1];
char termname[TTY_NAME_MAX + 1];
int flagterminal;
int master;
int slave;
int a;
int b;
int x;
int y;
/* channel */
int remoteeof;
};
extern struct channel channel;
/* channel_drop.c */
extern int channel_droppriv(char *, char **);
/* channel_fork.c */
extern long long channel_fork(int[3]);
/* channel_forkpty.c */
extern long long channel_forkpty(int[3], int, int);
extern int channel_openpty(int *, int *);
/* channel.c */
extern void channel_purge(void);
extern int channel_open(const char *, crypto_uint32, crypto_uint32,
crypto_uint32, crypto_uint32 *);
extern int channel_openterminal(const char *, crypto_uint32, crypto_uint32,
crypto_uint32, crypto_uint32);
extern void channel_ptyresize(crypto_uint32, crypto_uint32, crypto_uint32,
crypto_uint32);
extern int channel_env(const char *, const char *);
extern int channel_exec(const char *);
extern void channel_put(unsigned char *, long long);
extern void channel_puteof(void);
extern int channel_putisready(void);
extern long long channel_read(unsigned char *, long long);
extern long long channel_extendedread(unsigned char *, long long);
extern int channel_readisready(void);
extern int channel_extendedreadisready(void);
extern int channel_write(void);
extern int channel_writeisready(void);
extern int channel_iseof(void);
extern int channel_waitnohang(int *, int *);
extern void channel_purge(void);
extern void channel_init(void);
extern int channel_getfd0(void);
extern int channel_getfd1(void);
extern int channel_getfd2(void);
extern long long channel_getlen0(void);
extern crypto_uint32 channel_getid(void);
extern crypto_uint32 channel_getlocalwindow(void);
extern void channel_incrementremotewindow(crypto_uint32);
extern void channel_incrementlocalwindow(crypto_uint32);
/* channel subsystem.c */
#define CHANNEL_SUBSYSTEM_MAX 64
extern int channel_subsystem_add(const char *);
extern const char *channel_subsystem_get(const char *);
extern void channel_subsystem_log(void);
#endif
tinyssh-20250501/channel_drop.c 0000664 0000000 0000000 00000002000 15004722224 0016241 0 ustar 00root root 0000000 0000000 /*
20140129
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include "dropuidgid.h"
#include "newenv.h"
#include "channel.h"
int channel_droppriv(char *user, char **shell) {
struct passwd *pw;
char *name;
pw = getpwnam(user);
if (!pw) return 0;
if (isatty(0)) {
name = ttyname(0);
if (!name) return 0;
if (!newenv_env("SSH_TTY", name)) return 0;
/* setowner */
if (chown(name, pw->pw_uid, pw->pw_gid) == -1) return 0;
if (chmod(name, 0600) == -1) return 0;
}
/* drop privileges */
if (!dropuidgid(pw->pw_name, pw->pw_uid, pw->pw_gid)) return 0;
if (chdir(pw->pw_dir) == -1) return 0;
if (!newenv_env("HOME", pw->pw_dir)) return 0;
if (!newenv_env("USER", pw->pw_name)) return 0;
if (!newenv_env("LOGNAME", pw->pw_name)) return 0;
if (!newenv_env("LOGIN", pw->pw_name)) return 0;
if (!newenv_env("SHELL", pw->pw_shell)) return 0;
*shell = pw->pw_shell;
return 1;
}
tinyssh-20250501/channel_fork.c 0000664 0000000 0000000 00000002246 15004722224 0016252 0 ustar 00root root 0000000 0000000 /*
20140129
20241209 - reformated using clang-format
Jan Mojzis
Public domain.
*/
#include
#include "blocking.h"
#include "open.h"
#include "channel.h"
/*
The 'channel_fork' function is used to create a new process.
Function creates 3 pipes from/to child:
fd[0] is pipe to childs standard input
fd[1] is pipe from childs standard output
fd[2] is pipe from childs error output
Function returns also childs PID.
*/
long long channel_fork(int fd[3]) {
int pi[2], pa[3], ch[3];
long long i, pid;
for (i = 0; i < 3; ++i) pa[i] = ch[i] = fd[i] = -1;
for (i = 0; i < 3; ++i) {
if (open_pipe(pi) == -1) goto cleanup;
pa[i] = pi[i ? 0 : 1];
ch[i] = pi[i ? 1 : 0];
}
pid = fork();
if (pid == -1) goto cleanup;
if (pid == 0) {
for (i = 0; i < 3; ++i) {
close(pa[i]);
close(i);
blocking_enable(ch[i]);
if (dup(ch[i]) != i) _exit(111);
}
return 0;
}
for (i = 0; i < 3; ++i) {
close(ch[i]);
fd[i] = pa[i];
}
return pid;
cleanup:
for (i = 0; i < 3; ++i) {
close(pa[i]);
close(ch[i]);
}
return -1;
}
tinyssh-20250501/channel_forkpty.c 0000664 0000000 0000000 00000007753 15004722224 0017017 0 ustar 00root root 0000000 0000000 /*
20150212
20241209 - reformated using clang-format
Jan Mojzis
Public domain.
*/
#include
#if defined(sun) || defined(__hpux)
#include
#endif
#include
#include
#include
#include
#include
extern char *ptsname(int);
extern int grantpt(int);
extern int unlockpt(int);
#include "hasopenpty.h"
#ifdef HASOPENPTY
extern int openpty(int *, int *, char *, struct termios *, struct winsize *);
#endif
#include "haslogintty.h"
#ifdef HASLOGINTTY
extern int login_tty(int);
#endif
#include "e.h"
#include "coe.h"
#include "blocking.h"
#include "global.h"
#include "channel.h"
#ifndef HASLOGINTTY
static int login_tty_(int fd) {
char *name;
setsid();
#ifdef TIOCSCTTY
if (ioctl(fd, TIOCSCTTY, (char *) 0) == -1) return -1;
#endif
name = ttyname(fd);
if (!name) return -1;
#ifndef TIOCSCTTY
if (fd != 0) close(0);
if (fd != 1) close(1);
if (fd != 2) close(2);
close(open(name, O_RDWR));
#endif
if (dup2(fd, 0) == -1) return -1;
if (dup2(fd, 1) == -1) return -1;
if (dup2(fd, 2) == -1) return -1;
if (fd > 2) close(fd);
return 0;
}
#endif
#ifndef HASOPENPTY
static int openpty_(int *amaster, int *aslave) {
int master = -1, slave = -1;
char *slave_name;
static const char *fn[] = {"/dev/ptmx", "/dev/ptc", 0};
long long i;
for (i = 0; fn[i]; ++i) {
master = open(fn[i], O_RDWR | O_NOCTTY);
if (master != -1) break;
}
if (master == -1) return -1;
if (grantpt(master) == -1) {
close(master);
return -1;
}
if (unlockpt(master) == -1) {
close(master);
return -1;
}
slave_name = ptsname(master);
if (!slave_name) {
close(master);
return -1;
}
slave = open(slave_name, O_RDWR | O_NOCTTY);
if (slave == -1) {
close(master);
return -1;
}
#if defined(sun) || defined(__hpux)
ioctl(slave, I_PUSH, "ptem");
ioctl(slave, I_PUSH, "ldterm");
#endif
#if defined(sun)
ioctl(slave, I_PUSH, "ttcompat");
#endif
if (amaster) *amaster = master;
if (aslave) *aslave = slave;
return 0;
}
#endif
int channel_openpty(int *amaster, int *aslave) {
#ifdef HASOPENPTY
if (openpty(amaster, aslave, 0, 0, 0) == -1) return 0;
#else
if (openpty_(amaster, aslave) == -1) return 0;
#endif
if (!ttyname(*aslave)) {
close(*amaster);
close(*aslave);
return 0;
}
return 1;
}
/*
The 'channel_forkpty' function is used to create a new process
operating in a pseudoterminal. Function sets 3 integers in 'fd[3]':
fd[0] and fd[1] is pseudoterminal fd
fd[2] is always -1
*/
long long channel_forkpty(int fd[3], int master, int slave) {
long long pid, r;
char ch;
int pi[2];
if (!ttyname(slave)) return -1;
if (pipe(pi) == -1) return -1;
fd[0] = fd[1] = master;
fd[2] = -1;
pid = fork();
switch (pid) {
case -1:
close(pi[0]);
close(pi[1]);
close(slave);
close(master);
return -1;
case 0:
close(master);
close(pi[0]);
#ifdef HASLOGINTTY
if (login_tty(slave) == -1) global_die(111);
#else
if (login_tty_(slave) == -1) global_die(111);
#endif
/* Trigger a read event on the other side of the pipe. */
do { r = write(pi[1], "", 1); } while (r == -1 && errno == EINTR);
close(pi[1]);
return 0;
default:
close(pi[1]);
coe_enable(master);
blocking_disable(master);
/*
Wait until child calls login_tty(slave), so that we can safely
close(slave). Fixes race condition between close(slave) in parent
and login_tty(slave) in child process.
*/
do {
r = read(pi[0], &ch, sizeof ch);
} while (r == -1 && errno == EINTR);
close(pi[0]);
close(slave);
return pid;
}
}
tinyssh-20250501/channel_subsystem.c 0000664 0000000 0000000 00000002073 15004722224 0017345 0 ustar 00root root 0000000 0000000 /*
20150114
20241209 - reformated using clang-format
Jan Mojzis
Public domain.
*/
#include "str.h"
#include "log.h"
#include "e.h"
#include "channel.h"
static long long channel_subsystem_pos = 0;
static const char *channel_subsystem[CHANNEL_SUBSYSTEM_MAX] = {0};
int channel_subsystem_add(const char *x) {
if (channel_subsystem_pos >= CHANNEL_SUBSYSTEM_MAX) return 0;
channel_subsystem[channel_subsystem_pos++] = x;
return 1;
}
const char *channel_subsystem_get(const char *x) {
long long len, i;
if (!x) return 0;
len = str_len(x);
for (i = 0; i < CHANNEL_SUBSYSTEM_MAX; ++i) {
if (!channel_subsystem[i]) break;
if (str_start(channel_subsystem[i], x)) {
if (channel_subsystem[i][len] == '=') {
return channel_subsystem[i] + len + 1;
}
}
}
return 0;
}
void channel_subsystem_log(void) {
long long i;
for (i = 0; i < CHANNEL_SUBSYSTEM_MAX; ++i) {
if (!channel_subsystem[i]) break;
log_d3("subsystem: ", channel_subsystem[i], " registered");
}
}
tinyssh-20250501/cleanup.c 0000664 0000000 0000000 00000000372 15004722224 0015246 0 ustar 00root root 0000000 0000000 #include "cleanup.h"
void cleanup_(void *yv, long long ylen) {
volatile char *y = (volatile char *) yv;
while (ylen > 0) {
*y++ = 0;
--ylen;
}
#ifdef __GNUC__
__asm__ __volatile__("" : : "r"(yv) : "memory");
#endif
}
tinyssh-20250501/cleanup.h 0000664 0000000 0000000 00000000212 15004722224 0015244 0 ustar 00root root 0000000 0000000 #ifndef CLEANUP_H____
#define CLEANUP_H____
extern void cleanup_(void *, long long);
#define cleanup(x) cleanup_((x), sizeof(x))
#endif
tinyssh-20250501/coe.c 0000664 0000000 0000000 00000000533 15004722224 0014364 0 ustar 00root root 0000000 0000000 /*
20241112
*/
#include
#include "coe.h"
/*
The 'coe_enable(fd)' function enables
the close-on-exec flag on a file-descriptor 'fd'.
*/
void coe_enable(int fd) { fcntl(fd, F_SETFD, 1); }
/*
The 'coe_disable(fd)' function disables
the close-on-exec flag on a file-descriptor 'fd'.
*/
void coe_disable(int fd) { fcntl(fd, F_SETFD, 0); }
tinyssh-20250501/coe.h 0000664 0000000 0000000 00000000150 15004722224 0014364 0 ustar 00root root 0000000 0000000 #ifndef COE_H____
#define COE_H____
extern void coe_enable(int);
extern void coe_disable(int);
#endif
tinyssh-20250501/connectioninfo.c 0000664 0000000 0000000 00000007635 15004722224 0016643 0 ustar 00root root 0000000 0000000 /*
20140131
20241215 - reformated using clang-format
Jan Mojzis
Public domain.
*/
#include
#include
#include
#include
#include
#include "e.h"
#include "byte.h"
#include "iptostr.h"
#include "porttostr.h"
#include "env.h"
#include "str.h"
#include "connectioninfo.h"
/*
The connectioninfo_fromfd function gets
informations about TCP connection from
getsockname(), getpeername() libc functions.
*/
static int connectioninfo_fromfd(char *localip, char *localport, char *remoteip,
char *remoteport) {
long long i;
struct sockaddr_storage sa;
socklen_t salen;
int fd = 0;
unsigned char ip[16];
unsigned char port[2];
char *ipstr[2];
char *portstr[2];
int (*op[2])(int, struct sockaddr *, socklen_t *) = {getsockname,
getpeername};
ipstr[0] = localip;
portstr[0] = localport;
ipstr[1] = remoteip;
portstr[1] = remoteport;
for (i = 0; i < 2; ++i) {
salen = sizeof sa;
if (op[i](fd, (struct sockaddr *) &sa, &salen) == -1) return 0;
if (sa.ss_family == PF_INET) {
struct sockaddr_in *sin = (struct sockaddr_in *) &sa;
byte_copy(ip, 12, "\0\0\0\0\0\0\0\0\0\0\377\377");
byte_copy(ip + 12, 4, &sin->sin_addr);
byte_copy(port, 2, &sin->sin_port);
}
#ifdef PF_INET6
else if (sa.ss_family == PF_INET6) {
struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) &sa;
byte_copy(ip, 16, &sin6->sin6_addr);
byte_copy(port, 2, &sin6->sin6_port);
}
#endif
else {
errno = EPROTONOSUPPORT;
return 0;
}
iptostr(ipstr[i], ip);
porttostr(portstr[i], port);
}
return 1;
}
static int env(char *y, long long ylen, const char *e) {
char *x;
x = env_get(e);
if (!x) return 0;
if (!str_copyn(y, ylen, x)) return 0;
return 1;
}
/*
The connectioninfo_fromtcpserverenv function gets
informations about TCP connection from environment.
*/
static int connectioninfo_fromtcpserverenv(char *localip, char *localport,
char *remoteip, char *remoteport) {
if (!env(localip, IPTOSTR_LEN, "TCPLOCALIP")) return 0;
if (!env(localport, PORTTOSTR_LEN, "TCPLOCALPORT")) return 0;
if (!env(remoteip, IPTOSTR_LEN, "TCPREMOTEIP")) return 0;
if (!env(remoteport, PORTTOSTR_LEN, "TCPREMOTEPORT")) return 0;
return 1;
}
/*
The connectioninfo_fromcurvecpserverenv function gets
informations about CurveCP connection from environment.
*/
static int connectioninfo_fromcurvecpserverenv(char *localip, char *localport,
char *remoteip,
char *remoteport) {
if (!env(localip, IPTOSTR_LEN, "CURVECPLOCALIP")) return 0;
if (!env(localport, PORTTOSTR_LEN, "CURVECPLOCALPORT")) return 0;
if (!env(remoteip, IPTOSTR_LEN, "CURVECPREMOTEIP")) return 0;
if (!env(remoteport, PORTTOSTR_LEN, "CURVECPREMOTEPORT")) return 0;
return 1;
}
#define unknown "unknown"
#define port0 "0"
/*
The connectioninfo function gets informations about TCP/CurveCP connection.
*/
void connectioninfo(char *localip, char *localport, char *remoteip,
char *remoteport) {
if (connectioninfo_fromtcpserverenv(localip, localport, remoteip,
remoteport))
return;
if (connectioninfo_fromcurvecpserverenv(localip, localport, remoteip,
remoteport))
return;
if (connectioninfo_fromfd(localip, localport, remoteip, remoteport)) return;
byte_copy(localip, sizeof unknown, unknown);
byte_copy(remoteip, sizeof unknown, unknown);
byte_copy(localport, sizeof port0, port0);
byte_copy(remoteport, sizeof port0, port0);
return;
}
tinyssh-20250501/connectioninfo.h 0000664 0000000 0000000 00000000177 15004722224 0016642 0 ustar 00root root 0000000 0000000 #ifndef CONNECTIONINFO_H____
#define CONNECTIONINFO_H____
extern void connectioninfo(char *, char *, char *, char *);
#endif
tinyssh-20250501/crypto.h 0000664 0000000 0000000 00000001505 15004722224 0015143 0 ustar 00root root 0000000 0000000 /* allways include local versions */
#include "crypto_int16.h"
#include "crypto_int32.h"
#include "crypto_int64.h"
#include "crypto_int8.h"
#include "crypto_uint16.h"
#include "crypto_uint32.h"
#include "crypto_uint64.h"
#include "crypto_uint8.h"
#include "crypto_verify_16.h"
#include "crypto_verify_32.h"
/* include randombytes from librandombytes */
#include "haslibrandombytes.h"
#ifdef HASLIBRANDOMBYTES
#include
#else
#include "randombytes.h"
#endif
/* TODO */
#include "crypto_hash_sha256.h"
#include "crypto_hash_sha512.h"
#include "crypto_kem_sntrup761.h"
#include "crypto_kem_sntrup761x25519.h"
#include "crypto_onetimeauth_poly1305.h"
#include "crypto_scalarmult_curve25519.h"
#include "crypto_dh_x25519.h"
#include "crypto_sign_ed25519.h"
#include "crypto_sort_uint32.h"
#include "crypto_stream_chacha20.h"
tinyssh-20250501/crypto_declassify.h 0000664 0000000 0000000 00000000664 15004722224 0017356 0 ustar 00root root 0000000 0000000 #ifndef crypto_declassify_h
#define crypto_declassify_h
#include "hasvalgrind.h"
#ifdef HASVALGRIND
#include
#define crypto_declassify_uses_valgrind 1
static void crypto_declassify(void *xv, long long xlen) {
VALGRIND_MAKE_MEM_DEFINED(xv, xlen);
}
#else
#define crypto_declassify_uses_valgrind 0
static void crypto_declassify(void *xv, long long xlen) {
(void) xv;
(void) xlen;
}
#endif
#endif
tinyssh-20250501/crypto_dh_x25519.c 0000664 0000000 0000000 00000001556 15004722224 0016554 0 ustar 00root root 0000000 0000000 #include "crypto_dh_x25519.h"
#include "haslib25519.h"
#ifdef HASLIB25519
#include
int crypto_dh_x25519_lib25519(unsigned char *k, const unsigned char *pk,
const unsigned char *sk) {
lib25519_dh_x25519(k, pk, sk);
return 0;
}
int crypto_dh_x25519_lib25519_keypair(unsigned char *pk, unsigned char *sk) {
lib25519_dh_x25519_keypair(pk, sk);
return 0;
}
#else
#include "randombytes.h"
#include "crypto_scalarmult_curve25519.h"
int crypto_dh_x25519_tinyssh(unsigned char *k, const unsigned char *pk,
const unsigned char *sk) {
return crypto_scalarmult_curve25519(k, sk, pk);
}
static const unsigned char basepoint[32] = {9};
int crypto_dh_x25519_tinyssh_keypair(unsigned char *q, unsigned char *n) {
randombytes(n, 32);
return crypto_dh_x25519(q, basepoint, n);
}
#endif
tinyssh-20250501/crypto_dh_x25519.h 0000664 0000000 0000000 00000003551 15004722224 0016556 0 ustar 00root root 0000000 0000000 #ifndef crypto_dh_x25519_H
#define crypto_dh_x25519_H
#include "haslib25519.h"
#ifdef HASLIB25519
#include
#define crypto_dh_x25519_lib25519_BYTES lib25519_dh_x25519_BYTES
#define crypto_dh_x25519_lib25519_PUBLICKEYBYTES \
lib25519_dh_x25519_PUBLICKEYBYTES
#define crypto_dh_x25519_lib25519_SECRETKEYBYTES \
lib25519_dh_x25519_SECRETKEYBYTES
extern int crypto_dh_x25519_lib25519(unsigned char *, const unsigned char *,
const unsigned char *);
extern int crypto_dh_x25519_lib25519_keypair(unsigned char *, unsigned char *);
#define crypto_dh_x25519 crypto_dh_x25519_lib25519
#define crypto_dh_x25519_keypair crypto_dh_x25519_lib25519_keypair
#define crypto_dh_x25519_BYTES crypto_dh_x25519_lib25519_BYTES
#define crypto_dh_x25519_PUBLICKEYBYTES crypto_dh_x25519_lib25519_PUBLICKEYBYTES
#define crypto_dh_x25519_SECRETKEYBYTES crypto_dh_x25519_lib25519_SECRETKEYBYTES
#define crypto_dh_x25519_IMPLEMENTATION "lib25519"
#define crypto_dh_x25519_VERSION lib25519_version
#else
#define crypto_dh_x25519_tinyssh_BYTES 32
#define crypto_dh_x25519_tinyssh_PUBLICKEYBYTES 32
#define crypto_dh_x25519_tinyssh_SECRETKEYBYTES 32
extern int crypto_dh_x25519_tinyssh(unsigned char *, const unsigned char *,
const unsigned char *);
extern int crypto_dh_x25519_tinyssh_keypair(unsigned char *, unsigned char *);
#define crypto_dh_x25519 crypto_dh_x25519_tinyssh
#define crypto_dh_x25519_keypair crypto_dh_x25519_tinyssh_keypair
#define crypto_dh_x25519_BYTES crypto_dh_x25519_tinyssh_BYTES
#define crypto_dh_x25519_PUBLICKEYBYTES crypto_dh_x25519_tinyssh_PUBLICKEYBYTES
#define crypto_dh_x25519_SECRETKEYBYTES crypto_dh_x25519_tinyssh_SECRETKEYBYTES
#define crypto_dh_x25519_IMPLEMENTATION "tinyssh"
#define crypto_dh_x25519_VERSION "-"
#endif
#endif
tinyssh-20250501/crypto_hash_sha256.c 0000664 0000000 0000000 00000005622 15004722224 0017235 0 ustar 00root root 0000000 0000000 /*
20241208
*/
#include "crypto_uint32.h"
#include "crypto_uint64.h"
#include "crypto_hash_sha256.h"
#define R(x, c) (((x) >> (c)) | ((x) << (32 - (c))))
#define Ch(x, y, z) (((x) & (y)) ^ (~(x) & (z)))
#define Maj(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
#define Sigma0(x) (R((x), 2) ^ R((x), 13) ^ R((x), 22))
#define Sigma1(x) (R((x), 6) ^ R((x), 11) ^ R((x), 25))
#define sigma0(x) (R((x), 7) ^ R((x), 18) ^ ((x) >> 3))
#define sigma1(x) (R((x), 17) ^ R((x), 19) ^ ((x) >> 10))
static const crypto_uint32 K[64] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,
0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,
0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,
0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,
0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2};
static void blocks(crypto_uint32 *z, const unsigned char *m,
unsigned long long n) {
crypto_uint32 b[8], a[8], w[64], t;
long long i, j;
for (i = 0; i < 8; ++i) a[i] = z[i];
while (n >= 64) {
for (i = 0; i < 16; ++i) w[i] = crypto_uint32_load_bigendian(m + 4 * i);
for (i = 16; i < 64; ++i)
w[i] =
(sigma1(w[i - 2]) + w[i - 7] + sigma0(w[i - 15]) + w[i - 16]);
for (i = 0; i < 64; ++i) {
for (j = 0; j < 8; ++j) b[j] = a[j];
t = a[7] + Sigma1(a[4]) + Ch(a[4], a[5], a[6]) + K[i] + w[i];
b[7] = t + Sigma0(a[0]) + Maj(a[0], a[1], a[2]);
b[3] += t;
for (j = 0; j < 8; ++j) a[(j + 1) % 8] = b[j];
}
for (i = 0; i < 8; ++i) {
a[i] += z[i];
z[i] = a[i];
}
m += 64;
n -= 64;
}
}
int crypto_hash_sha256_tinyssh(unsigned char *o, const unsigned char *m,
unsigned long long n) {
unsigned long long i;
unsigned char x[128];
unsigned long long b = n;
crypto_uint32 h[8] = {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
blocks(h, m, n);
m += n;
n &= 63;
m -= n;
for (i = 0; i < sizeof x; ++i) x[i] = 0;
for (i = 0; i < n; ++i) x[i] = m[i];
x[n] = 128;
n = 128 - 64 * (n < 56);
crypto_uint64_store_bigendian(x + n - 8, b << 3);
blocks(h, x, n);
for (i = 0; i < 8; ++i) crypto_uint32_store_bigendian(o + 4 * i, h[i]);
return 0;
}
tinyssh-20250501/crypto_hash_sha256.h 0000664 0000000 0000000 00000000714 15004722224 0017237 0 ustar 00root root 0000000 0000000 #ifndef crypto_hash_sha256_H
#define crypto_hash_sha256_H
#define crypto_hash_sha256_tinyssh_BYTES 32
extern int crypto_hash_sha256_tinyssh(unsigned char *, const unsigned char *,
unsigned long long);
#define crypto_hash_sha256 crypto_hash_sha256_tinyssh
#define crypto_hash_sha256_BYTES crypto_hash_sha256_tinyssh_BYTES
#define crypto_hash_sha256_IMPLEMENTATION "tinyssh"
#define crypto_hash_sha256_VERSION "-"
#endif
tinyssh-20250501/crypto_hash_sha512.h 0000664 0000000 0000000 00000001724 15004722224 0017234 0 ustar 00root root 0000000 0000000 #ifndef crypto_hash_sha512_H
#define crypto_hash_sha512_H
#include "haslib25519.h"
#ifndef HASLIB25519
#define crypto_hash_sha512_tinyssh_BYTES 64
extern int crypto_hash_sha512_tinyssh(unsigned char *, const unsigned char *,
unsigned long long);
#define crypto_hash_sha512 crypto_hash_sha512_tinyssh
#define crypto_hash_sha512_BYTES crypto_hash_sha512_tinyssh_BYTES
#define crypto_hash_sha512_IMPLEMENTATION "tinyssh"
#define crypto_hash_sha512_VERSION "-"
#else
#include
#define crypto_hash_sha512_lib25519_BYTES lib25519_hash_sha512_BYTES
extern int crypto_hash_sha512_lib25519(unsigned char *, const unsigned char *,
unsigned long long);
#define crypto_hash_sha512 crypto_hash_sha512_lib25519
#define crypto_hash_sha512_BYTES crypto_hash_sha512_lib25519_BYTES
#define crypto_hash_sha512_IMPLEMENTATION "lib25519"
#define crypto_hash_sha512_VERSION lib25519_version
#endif
#endif
tinyssh-20250501/crypto_hash_sha512_lib25519.c 0000664 0000000 0000000 00000000441 15004722224 0020456 0 ustar 00root root 0000000 0000000 #include "haslib25519.h"
#ifdef HASLIB25519
#include
#include "crypto_hash_sha512.h"
int crypto_hash_sha512_lib25519(unsigned char *o, const unsigned char *m,
unsigned long long n) {
lib25519_hash_sha512(o, m, n);
return 0;
}
#endif
tinyssh-20250501/crypto_hash_sha512_tinyssh.c 0000664 0000000 0000000 00000010361 15004722224 0021005 0 ustar 00root root 0000000 0000000 /*
20241210
- based on tweetnacl 20140427 (http://tweetnacl.cr.yp.to/software.html)
*/
#include "crypto_hash_sha512.h"
#include "haslib25519.h"
#ifndef HASLIB25519
#include "crypto_uint64.h"
#define R(x, c) (((x) >> (c)) ^ ((x) << (64 - (c))))
#define Ch(x, y, z) (((x) & (y)) ^ (~(x) & (z)))
#define Maj(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
#define Sigma0(x) (R((x), 28) ^ R((x), 34) ^ R((x), 39))
#define Sigma1(x) (R((x), 14) ^ R((x), 18) ^ R((x), 41))
#define sigma0(x) (R((x), 1) ^ R((x), 8) ^ ((x) >> 7))
#define sigma1(x) (R((x), 19) ^ R((x), 61) ^ ((x) >> 6))
static const crypto_uint64 K[80] = {
0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL,
0xe9b5dba58189dbbcULL, 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, 0xd807aa98a3030242ULL,
0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL,
0xc19bf174cf692694ULL, 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, 0x2de92c6f592b0275ULL,
0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL,
0xbf597fc7beef0ee4ULL, 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, 0x27b70a8546d22ffcULL,
0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL,
0x92722c851482353bULL, 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, 0xd192e819d6ef5218ULL,
0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL,
0x34b0bcb5e19b48a8ULL, 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, 0x748f82ee5defb2fcULL,
0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL,
0xc67178f2e372532bULL, 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, 0x06f067aa72176fbaULL,
0x0a637dc5a2c898a6ULL, 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL,
0x431d67c49c100d4cULL, 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL};
static void blocks(crypto_uint64 *z, const unsigned char *m, crypto_uint64 n) {
crypto_uint64 b[8], a[8], w[80], t;
long long i, j;
for (i = 0; i < 8; ++i) a[i] = z[i];
while (n >= 128) {
for (i = 0; i < 16; ++i) w[i] = crypto_uint64_load_bigendian(m + 8 * i);
for (i = 16; i < 80; ++i)
w[i] =
(sigma1(w[i - 2]) + w[i - 7] + sigma0(w[i - 15]) + w[i - 16]);
for (i = 0; i < 80; ++i) {
for (j = 0; j < 8; ++j) b[j] = a[j];
t = a[7] + Sigma1(a[4]) + Ch(a[4], a[5], a[6]) + K[i] + w[i];
b[7] = t + Sigma0(a[0]) + Maj(a[0], a[1], a[2]);
b[3] += t;
for (j = 0; j < 8; ++j) a[(j + 1) % 8] = b[j];
}
for (i = 0; i < 8; ++i) {
a[i] += z[i];
z[i] = a[i];
}
m += 128;
n -= 128;
}
}
int crypto_hash_sha512_tinyssh(unsigned char *o, const unsigned char *m,
unsigned long long n) {
unsigned long long i;
unsigned char x[256];
crypto_uint64 b = n;
crypto_uint64 h[8] = {0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL,
0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL,
0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,
0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL};
blocks(h, m, n);
m += n;
n &= 127;
m -= n;
for (i = 0; i < sizeof x; ++i) x[i] = 0;
for (i = 0; i < n; ++i) x[i] = m[i];
x[n] = 128;
n = 256 - 128 * (n < 112);
x[n - 9] = b >> 61;
crypto_uint64_store_bigendian(x + n - 8, b << 3);
blocks(h, x, n);
for (i = 0; i < 8; ++i) crypto_uint64_store_bigendian(o + 8 * i, h[i]);
return 0;
}
#endif
tinyssh-20250501/crypto_kem_sntrup761.h 0000664 0000000 0000000 00000006447 15004722224 0017662 0 ustar 00root root 0000000 0000000 #ifndef crypto_kem_sntrup761_H
#define crypto_kem_sntrup761_H
#include "haslibntruprime.h"
#ifndef HASLIBNTRUPRIME
#define crypto_kem_sntrup761_tinyssh_SECRETKEYBYTES 1763
#define crypto_kem_sntrup761_tinyssh_PUBLICKEYBYTES 1158
#define crypto_kem_sntrup761_tinyssh_CIPHERTEXTBYTES 1039
#define crypto_kem_sntrup761_tinyssh_BYTES 32
extern int crypto_kem_sntrup761_tinyssh_keypair(unsigned char *,
unsigned char *);
extern int crypto_kem_sntrup761_tinyssh_enc(unsigned char *, unsigned char *,
const unsigned char *);
extern int crypto_kem_sntrup761_tinyssh_dec(unsigned char *,
const unsigned char *,
const unsigned char *);
#define crypto_kem_sntrup761_keypair crypto_kem_sntrup761_tinyssh_keypair
#define crypto_kem_sntrup761_enc crypto_kem_sntrup761_tinyssh_enc
#define crypto_kem_sntrup761_dec crypto_kem_sntrup761_tinyssh_dec
#define crypto_kem_sntrup761_SECRETKEYBYTES \
crypto_kem_sntrup761_tinyssh_SECRETKEYBYTES
#define crypto_kem_sntrup761_PUBLICKEYBYTES \
crypto_kem_sntrup761_tinyssh_PUBLICKEYBYTES
#define crypto_kem_sntrup761_CIPHERTEXTBYTES \
crypto_kem_sntrup761_tinyssh_CIPHERTEXTBYTES
#define crypto_kem_sntrup761_BYTES crypto_kem_sntrup761_tinyssh_BYTES
#define crypto_kem_sntrup761_IMPLEMENTATION "tinyssh"
#define crypto_kem_sntrup761_VERSION "-"
#else
#include
#define crypto_kem_sntrup761_libntruprime_SECRETKEYBYTES \
sntrup761_SECRETKEYBYTES
#define crypto_kem_sntrup761_libntruprime_PUBLICKEYBYTES \
sntrup761_PUBLICKEYBYTES
#define crypto_kem_sntrup761_libntruprime_CIPHERTEXTBYTES \
sntrup761_CIPHERTEXTBYTES
#define crypto_kem_sntrup761_libntruprime_BYTES sntrup761_BYTES
extern int crypto_kem_sntrup761_libntruprime_keypair(unsigned char *,
unsigned char *);
extern int crypto_kem_sntrup761_libntruprime_enc(unsigned char *,
unsigned char *,
const unsigned char *);
extern int crypto_kem_sntrup761_libntruprime_dec(unsigned char *,
const unsigned char *,
const unsigned char *);
#define crypto_kem_sntrup761_keypair crypto_kem_sntrup761_libntruprime_keypair
#define crypto_kem_sntrup761_enc crypto_kem_sntrup761_libntruprime_enc
#define crypto_kem_sntrup761_dec crypto_kem_sntrup761_libntruprime_dec
#define crypto_kem_sntrup761_SECRETKEYBYTES \
crypto_kem_sntrup761_libntruprime_SECRETKEYBYTES
#define crypto_kem_sntrup761_PUBLICKEYBYTES \
crypto_kem_sntrup761_libntruprime_PUBLICKEYBYTES
#define crypto_kem_sntrup761_CIPHERTEXTBYTES \
crypto_kem_sntrup761_libntruprime_CIPHERTEXTBYTES
#define crypto_kem_sntrup761_BYTES crypto_kem_sntrup761_libntruprime_BYTES
#define crypto_kem_sntrup761_IMPLEMENTATION "libntruprime"
#define crypto_kem_sntrup761_VERSION "-"
#endif
#endif
tinyssh-20250501/crypto_kem_sntrup761_libntruprime.c 0000664 0000000 0000000 00000001334 15004722224 0022437 0 ustar 00root root 0000000 0000000 #include "haslibntruprime.h"
#ifdef HASLIBNTRUPRIME
#include
#include "crypto_kem_sntrup761.h"
int crypto_kem_sntrup761_libntruprime_keypair(unsigned char *pk,
unsigned char *sk) {
sntrup761_keypair(pk, sk);
return 0;
}
int crypto_kem_sntrup761_libntruprime_enc(unsigned char *c, unsigned char *k,
const unsigned char *pk) {
sntrup761_enc(c, k, pk);
return 0;
}
int crypto_kem_sntrup761_libntruprime_dec(unsigned char *k,
const unsigned char *c,
const unsigned char *sk) {
sntrup761_dec(k, c, sk);
return 0;
}
#endif
tinyssh-20250501/crypto_kem_sntrup761_tinyssh.c 0000664 0000000 0000000 00000070233 15004722224 0021430 0 ustar 00root root 0000000 0000000 #include "crypto_kem_sntrup761.h"
#include "haslibntruprime.h"
#ifndef HASLIBNTRUPRIME
/*
Original code: supercop-20210125/crypto_kem/sntrup761/ref
Modifications (Jan Mojzis):
- source code merged into single file
- crypto_kem renamed to crypto_kem_sntrup761_tinyssh
- crypto_declassify added
*/
/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
#include
#include "crypto_uint64.h"
#include "crypto_uint32.h"
#include "crypto_uint16.h"
#include "crypto_int32.h"
#include "crypto_int16.h"
#include "crypto_int8.h"
#include "randombytes.h"
#include "crypto_verify_32.h"
#include "crypto_sort_uint32.h"
#include "crypto_hash_sha512.h"
#include "crypto_declassify.h"
#define uint64 crypto_uint64
#define uint32 crypto_uint32
#define uint16 crypto_uint16
#define int32 crypto_int32
#define int16 crypto_int16
#define int8 crypto_int8
/* uint32.c */
/*
CPU division instruction typically takes time depending on x.
This software is designed to take time independent of x.
Time still varies depending on m; user must ensure that m is constant.
Time also varies on CPUs where multiplication is variable-time.
There could be more CPU issues.
There could also be compiler issues.
*/
static void uint32_divmod_uint14(uint32 *q, uint16 *r, uint32 x, uint16 m) {
uint32 v = 0x80000000;
uint32 qpart;
uint32 mask;
v /= m;
/* caller guarantees m > 0 */
/* caller guarantees m < 16384 */
/* vm <= 2^31 <= vm+m-1 */
/* xvm <= 2^31 x <= xvm+x(m-1) */
*q = 0;
qpart = (x * (uint64) v) >> 31;
/* 2^31 qpart <= xv <= 2^31 qpart + 2^31-1 */
/* 2^31 qpart m <= xvm <= 2^31 qpart m + (2^31-1)m */
/* 2^31 qpart m <= 2^31 x <= 2^31 qpart m + (2^31-1)m + x(m-1) */
/* 0 <= 2^31 newx <= (2^31-1)m + x(m-1) */
/* 0 <= newx <= (1-1/2^31)m + x(m-1)/2^31 */
/* 0 <= newx <= (1-1/2^31)(2^14-1) + (2^32-1)((2^14-1)-1)/2^31 */
x -= qpart * m;
*q += qpart;
/* x <= 49146 */
qpart = (x * (uint64) v) >> 31;
/* 0 <= newx <= (1-1/2^31)m + x(m-1)/2^31 */
/* 0 <= newx <= m + 49146(2^14-1)/2^31 */
/* 0 <= newx <= m + 0.4 */
/* 0 <= newx <= m */
x -= qpart * m;
*q += qpart;
/* x <= m */
x -= m;
*q += 1;
mask = -(x >> 31);
x += mask & (uint32) m;
*q += mask;
/* x < m */
*r = x;
}
uint32 uint32_div_uint14(uint32 x, uint16 m) {
uint32 q;
uint16 r;
uint32_divmod_uint14(&q, &r, x, m);
return q;
}
uint16 uint32_mod_uint14(uint32 x, uint16 m) {
uint32 q;
uint16 r;
uint32_divmod_uint14(&q, &r, x, m);
return r;
}
/* int32.c */
static void int32_divmod_uint14(int32 *q, uint16 *r, int32 x, uint16 m) {
uint32 uq, uq2;
uint16 ur, ur2;
uint32 mask;
uint32_divmod_uint14(&uq, &ur, 0x80000000 + (uint32) x, m);
uint32_divmod_uint14(&uq2, &ur2, 0x80000000, m);
ur -= ur2;
uq -= uq2;
mask = -(uint32) (ur >> 15);
ur += mask & m;
uq += mask;
*r = ur;
*q = uq;
}
int32 int32_div_uint14(int32 x, uint16 m) {
int32 q;
uint16 r;
int32_divmod_uint14(&q, &r, x, m);
return q;
}
uint16 int32_mod_uint14(int32 x, uint16 m) {
int32 q;
uint16 r;
int32_divmod_uint14(&q, &r, x, m);
return r;
}
/* paramsmenu.h */
/* pick one of these three: */
#define SIZE761
#undef SIZE653
#undef SIZE857
/* pick one of these two: */
#define SNTRUP /* Streamlined NTRU Prime */
#undef LPR /* NTRU LPRime */
/* params.h */
#ifndef params_H
#define params_H
/* menu of parameter choices: */
/* what the menu means: */
#if defined(SIZE761)
#define p 761
#define q 4591
#define Rounded_bytes 1007
#ifndef LPR
#define Rq_bytes 1158
#define w 286
#else
#define w 250
#define tau0 2156
#define tau1 114
#define tau2 2007
#define tau3 287
#endif
#elif defined(SIZE653)
#define p 653
#define q 4621
#define Rounded_bytes 865
#ifndef LPR
#define Rq_bytes 994
#define w 288
#else
#define w 252
#define tau0 2175
#define tau1 113
#define tau2 2031
#define tau3 290
#endif
#elif defined(SIZE857)
#define p 857
#define q 5167
#define Rounded_bytes 1152
#ifndef LPR
#define Rq_bytes 1322
#define w 322
#else
#define w 281
#define tau0 2433
#define tau1 101
#define tau2 2265
#define tau3 324
#endif
#else
#error "no parameter set defined"
#endif
#ifdef LPR
#define I 256
#endif
#endif
/* Decode.c */
static void Decode(uint16 *out, const unsigned char *S, const uint16 *M,
long long len) {
if (len == 1) {
if (M[0] == 1)
*out = 0;
else if (M[0] <= 256)
*out = uint32_mod_uint14(S[0], M[0]);
else
*out = uint32_mod_uint14(S[0] + (((uint16) S[1]) << 8), M[0]);
}
if (len > 1) {
uint16 R2[(len + 1) / 2];
uint16 M2[(len + 1) / 2];
uint16 bottomr[len / 2];
uint32 bottomt[len / 2];
long long i;
for (i = 0; i < len - 1; i += 2) {
uint32 m = M[i] * (uint32) M[i + 1];
if (m > 256 * 16383) {
bottomt[i / 2] = 256 * 256;
bottomr[i / 2] = S[0] + 256 * S[1];
S += 2;
M2[i / 2] = (((m + 255) >> 8) + 255) >> 8;
}
else if (m >= 16384) {
bottomt[i / 2] = 256;
bottomr[i / 2] = S[0];
S += 1;
M2[i / 2] = (m + 255) >> 8;
}
else {
bottomt[i / 2] = 1;
bottomr[i / 2] = 0;
M2[i / 2] = m;
}
}
if (i < len) M2[i / 2] = M[i];
Decode(R2, S, M2, (len + 1) / 2);
for (i = 0; i < len - 1; i += 2) {
uint32 r = bottomr[i / 2];
uint32 r1;
uint16 r0;
r += bottomt[i / 2] * R2[i / 2];
uint32_divmod_uint14(&r1, &r0, r, M[i]);
r1 = uint32_mod_uint14(
r1, M[i + 1]); /* only needed for invalid inputs */
*out++ = r0;
*out++ = r1;
}
if (i < len) *out++ = R2[i / 2];
}
}
/* Encode.c */
/* 0 <= R[i] < M[i] < 16384 */
static void Encode(unsigned char *out, const uint16 *R, const uint16 *M,
long long len) {
if (len == 1) {
uint16 r = R[0];
uint16 m = M[0];
while (m > 1) {
*out++ = r;
r >>= 8;
m = (m + 255) >> 8;
}
}
if (len > 1) {
uint16 R2[(len + 1) / 2];
uint16 M2[(len + 1) / 2];
long long i;
for (i = 0; i < len - 1; i += 2) {
uint32 m0 = M[i];
uint32 r = R[i] + R[i + 1] * m0;
uint32 m = M[i + 1] * m0;
while (m >= 16384) {
*out++ = r;
r >>= 8;
m = (m + 255) >> 8;
}
R2[i / 2] = r;
M2[i / 2] = m;
}
if (i < len) {
R2[i / 2] = R[i];
M2[i / 2] = M[i];
}
Encode(out, R2, M2, (len + 1) / 2);
}
}
/* kem.c */
#ifdef LPR
#endif
/* ----- masks */
#ifndef LPR
/* return -1 if x!=0; else return 0 */
static int int16_nonzero_mask(int16 x) {
uint16 u = x; /* 0, else 1...65535 */
uint32 v = u; /* 0, else 1...65535 */
v = -v; /* 0, else 2^32-65535...2^32-1 */
v >>= 31; /* 0, else 1 */
return -v; /* 0, else -1 */
}
#endif
/* return -1 if x<0; otherwise return 0 */
static int int16_negative_mask(int16 x) {
uint16 u = x;
u >>= 15;
return -(int) u;
/* alternative with gcc -fwrapv: */
/* x>>15 compiles to CPU's arithmetic right shift */
}
/* ----- arithmetic mod 3 */
typedef int8 small;
/* F3 is always represented as -1,0,1 */
/* so ZZ_fromF3 is a no-op */
/* x must not be close to top int16 */
static small F3_freeze(int16 x) { return int32_mod_uint14(x + 1, 3) - 1; }
/* ----- arithmetic mod q */
#define q12 ((q - 1) / 2)
typedef int16 Fq;
/* always represented as -q12...q12 */
/* so ZZ_fromFq is a no-op */
/* x must not be close to top int32 */
static Fq Fq_freeze(int32 x) { return int32_mod_uint14(x + q12, q) - q12; }
#ifndef LPR
static Fq Fq_recip(Fq a1) {
int i = 1;
Fq ai = a1;
while (i < q - 2) {
ai = Fq_freeze(a1 * (int32) ai);
i += 1;
}
return ai;
}
#endif
/* ----- Top and Right */
#ifdef LPR
#define tau 16
static int8 Top(Fq C) { return (tau1 * (int32) (C + tau0) + 16384) >> 15; }
static Fq Right(int8 T) { return Fq_freeze(tau3 * (int32) T - tau2); }
#endif
/* ----- small polynomials */
#ifndef LPR
/* 0 if Weightw_is(r), else -1 */
static int Weightw_mask(small *r) {
int weight = 0;
int i;
for (i = 0; i < p; ++i) weight += r[i] & 1;
return int16_nonzero_mask(weight - w);
}
/* R3_fromR(R_fromRq(r)) */
static void R3_fromRq(small *out, const Fq *r) {
int i;
for (i = 0; i < p; ++i) out[i] = F3_freeze(r[i]);
}
/* h = f*g in the ring R3 */
static void R3_mult(small *h, const small *f, const small *g) {
small fg[p + p - 1];
small result;
int i, j;
for (i = 0; i < p; ++i) {
result = 0;
for (j = 0; j <= i; ++j) result = F3_freeze(result + f[j] * g[i - j]);
fg[i] = result;
}
for (i = p; i < p + p - 1; ++i) {
result = 0;
for (j = i - p + 1; j < p; ++j)
result = F3_freeze(result + f[j] * g[i - j]);
fg[i] = result;
}
for (i = p + p - 2; i >= p; --i) {
fg[i - p] = F3_freeze(fg[i - p] + fg[i]);
fg[i - p + 1] = F3_freeze(fg[i - p + 1] + fg[i]);
}
for (i = 0; i < p; ++i) h[i] = fg[i];
}
/* returns 0 if recip succeeded; else -1 */
static int R3_recip(small *out, const small *in) {
small f[p + 1], g[p + 1], v[p + 1], r[p + 1];
int i, loop, delta;
int sign, swap, t;
for (i = 0; i < p + 1; ++i) v[i] = 0;
for (i = 0; i < p + 1; ++i) r[i] = 0;
r[0] = 1;
for (i = 0; i < p; ++i) f[i] = 0;
f[0] = 1;
f[p - 1] = f[p] = -1;
for (i = 0; i < p; ++i) g[p - 1 - i] = in[i];
g[p] = 0;
delta = 1;
for (loop = 0; loop < 2 * p - 1; ++loop) {
for (i = p; i > 0; --i) v[i] = v[i - 1];
v[0] = 0;
sign = -g[0] * f[0];
swap = int16_negative_mask(-delta) & int16_nonzero_mask(g[0]);
delta ^= swap & (delta ^ -delta);
delta += 1;
for (i = 0; i < p + 1; ++i) {
t = swap & (f[i] ^ g[i]);
f[i] ^= t;
g[i] ^= t;
t = swap & (v[i] ^ r[i]);
v[i] ^= t;
r[i] ^= t;
}
for (i = 0; i < p + 1; ++i) g[i] = F3_freeze(g[i] + sign * f[i]);
for (i = 0; i < p + 1; ++i) r[i] = F3_freeze(r[i] + sign * v[i]);
for (i = 0; i < p; ++i) g[i] = g[i + 1];
g[p] = 0;
}
sign = f[0];
for (i = 0; i < p; ++i) out[i] = sign * v[p - 1 - i];
return int16_nonzero_mask(delta);
}
#endif
/* ----- polynomials mod q */
/* h = f*g in the ring Rq */
static void Rq_mult_small(Fq *h, const Fq *f, const small *g) {
Fq fg[p + p - 1];
Fq result;
int i, j;
for (i = 0; i < p; ++i) {
result = 0;
for (j = 0; j <= i; ++j)
result = Fq_freeze(result + f[j] * (int32) g[i - j]);
fg[i] = result;
}
for (i = p; i < p + p - 1; ++i) {
result = 0;
for (j = i - p + 1; j < p; ++j)
result = Fq_freeze(result + f[j] * (int32) g[i - j]);
fg[i] = result;
}
for (i = p + p - 2; i >= p; --i) {
fg[i - p] = Fq_freeze(fg[i - p] + fg[i]);
fg[i - p + 1] = Fq_freeze(fg[i - p + 1] + fg[i]);
}
for (i = 0; i < p; ++i) h[i] = fg[i];
}
#ifndef LPR
/* h = 3f in Rq */
static void Rq_mult3(Fq *h, const Fq *f) {
int i;
for (i = 0; i < p; ++i) h[i] = Fq_freeze(3 * f[i]);
}
/* out = 1/(3*in) in Rq */
/* returns 0 if recip succeeded; else -1 */
static int Rq_recip3(Fq *out, const small *in) {
Fq f[p + 1], g[p + 1], v[p + 1], r[p + 1];
int i, loop, delta;
int swap, t;
int32 f0, g0;
Fq scale;
for (i = 0; i < p + 1; ++i) v[i] = 0;
for (i = 0; i < p + 1; ++i) r[i] = 0;
r[0] = Fq_recip(3);
for (i = 0; i < p; ++i) f[i] = 0;
f[0] = 1;
f[p - 1] = f[p] = -1;
for (i = 0; i < p; ++i) g[p - 1 - i] = in[i];
g[p] = 0;
delta = 1;
for (loop = 0; loop < 2 * p - 1; ++loop) {
for (i = p; i > 0; --i) v[i] = v[i - 1];
v[0] = 0;
swap = int16_negative_mask(-delta) & int16_nonzero_mask(g[0]);
delta ^= swap & (delta ^ -delta);
delta += 1;
for (i = 0; i < p + 1; ++i) {
t = swap & (f[i] ^ g[i]);
f[i] ^= t;
g[i] ^= t;
t = swap & (v[i] ^ r[i]);
v[i] ^= t;
r[i] ^= t;
}
f0 = f[0];
g0 = g[0];
for (i = 0; i < p + 1; ++i) g[i] = Fq_freeze(f0 * g[i] - g0 * f[i]);
for (i = 0; i < p + 1; ++i) r[i] = Fq_freeze(f0 * r[i] - g0 * v[i]);
for (i = 0; i < p; ++i) g[i] = g[i + 1];
g[p] = 0;
}
scale = Fq_recip(f[0]);
for (i = 0; i < p; ++i) out[i] = Fq_freeze(scale * (int32) v[p - 1 - i]);
return int16_nonzero_mask(delta);
}
#endif
/* ----- rounded polynomials mod q */
static void Round(Fq *out, const Fq *a) {
int i;
for (i = 0; i < p; ++i) out[i] = a[i] - F3_freeze(a[i]);
}
/* ----- sorting to generate short polynomial */
static void Short_fromlist(small *out, const uint32 *in) {
uint32 L[p];
int i;
for (i = 0; i < w; ++i) L[i] = in[i] & (uint32) -2;
for (i = w; i < p; ++i) L[i] = (in[i] & (uint32) -3) | 1;
crypto_sort_uint32(L, p);
for (i = 0; i < p; ++i) out[i] = (L[i] & 3) - 1;
}
/* ----- underlying hash function */
#define Hash_bytes 32
/* e.g., b = 0 means out = Hash0(in) */
static void Hash_prefix(unsigned char *out, int b, const unsigned char *in,
int inlen) {
unsigned char x[inlen + 1];
unsigned char h[64];
int i;
x[0] = b;
for (i = 0; i < inlen; ++i) x[i + 1] = in[i];
crypto_hash_sha512(h, x, inlen + 1);
for (i = 0; i < 32; ++i) out[i] = h[i];
}
/* ----- higher-level randomness */
static uint32 urandom32(void) {
unsigned char c[4];
uint32 out[4];
randombytes(c, 4);
out[0] = (uint32) c[0];
out[1] = ((uint32) c[1]) << 8;
out[2] = ((uint32) c[2]) << 16;
out[3] = ((uint32) c[3]) << 24;
return out[0] + out[1] + out[2] + out[3];
}
static void Short_random(small *out) {
uint32 L[p];
int i;
for (i = 0; i < p; ++i) L[i] = urandom32();
Short_fromlist(out, L);
}
#ifndef LPR
static void Small_random(small *out) {
int i;
for (i = 0; i < p; ++i)
out[i] = (((urandom32() & 0x3fffffff) * 3) >> 30) - 1;
}
#endif
/* ----- Streamlined NTRU Prime Core */
#ifndef LPR
/* h,(f,ginv) = KeyGen() */
static void KeyGen(Fq *h, small *f, small *ginv) {
small g[p];
Fq finv[p];
for (;;) {
int result;
Small_random(g);
result = R3_recip(ginv, g);
crypto_declassify(&result, sizeof result);
if (result == 0) break;
}
Short_random(f);
Rq_recip3(finv, f); /* always works */
Rq_mult_small(h, finv, g);
}
/* c = Encrypt(r,h) */
static void Encrypt(Fq *c, const small *r, const Fq *h) {
Fq hr[p];
Rq_mult_small(hr, h, r);
Round(c, hr);
}
/* r = Decrypt(c,(f,ginv)) */
static void Decrypt(small *r, const Fq *c, const small *f, const small *ginv) {
Fq cf[p];
Fq cf3[p];
small e[p];
small ev[p];
int mask;
int i;
Rq_mult_small(cf, c, f);
Rq_mult3(cf3, cf);
R3_fromRq(e, cf3);
R3_mult(ev, e, ginv);
mask = Weightw_mask(ev); /* 0 if weight w, else -1 */
for (i = 0; i < w; ++i) r[i] = ((ev[i] ^ 1) & ~mask) ^ 1;
for (i = w; i < p; ++i) r[i] = ev[i] & ~mask;
}
#endif
/* ----- NTRU LPRime Core */
#ifdef LPR
/* (G,A),a = KeyGen(G); leaves G unchanged */
static void KeyGen(Fq *A, small *a, const Fq *G) {
Fq aG[p];
Short_random(a);
Rq_mult_small(aG, G, a);
Round(A, aG);
}
/* B,T = Encrypt(r,(G,A),b) */
static void Encrypt(Fq *B, int8 *T, const int8 *r, const Fq *G, const Fq *A,
const small *b) {
Fq bG[p];
Fq bA[p];
int i;
Rq_mult_small(bG, G, b);
Round(B, bG);
Rq_mult_small(bA, A, b);
for (i = 0; i < I; ++i) T[i] = Top(Fq_freeze(bA[i] + r[i] * q12));
}
/* r = Decrypt((B,T),a) */
static void Decrypt(int8 *r, const Fq *B, const int8 *T, const small *a) {
Fq aB[p];
int i;
Rq_mult_small(aB, B, a);
for (i = 0; i < I; ++i)
r[i] = -int16_negative_mask(Fq_freeze(Right(T[i]) - aB[i] + 4 * w + 1));
}
#endif
/* ----- encoding I-bit inputs */
#ifdef LPR
#define Inputs_bytes (I / 8)
typedef int8 Inputs[I]; /* passed by reference */
static void Inputs_encode(unsigned char *s, const Inputs r) {
int i;
for (i = 0; i < Inputs_bytes; ++i) s[i] = 0;
for (i = 0; i < I; ++i) s[i >> 3] |= r[i] << (i & 7);
}
#endif
/* ----- Expand */
#ifdef LPR
static const unsigned char aes_nonce[16] = {0};
static void Expand(uint32 *L, const unsigned char *k) {
int i;
crypto_stream_aes256ctr((unsigned char *) L, 4 * p, aes_nonce, k);
for (i = 0; i < p; ++i) {
uint32 L0 = ((unsigned char *) L)[4 * i];
uint32 L1 = ((unsigned char *) L)[4 * i + 1];
uint32 L2 = ((unsigned char *) L)[4 * i + 2];
uint32 L3 = ((unsigned char *) L)[4 * i + 3];
L[i] = L0 + (L1 << 8) + (L2 << 16) + (L3 << 24);
}
}
#endif
/* ----- Seeds */
#ifdef LPR
#define Seeds_bytes 32
static void Seeds_random(unsigned char *s) { randombytes(s, Seeds_bytes); }
#endif
/* ----- Generator, HashShort */
#ifdef LPR
/* G = Generator(k) */
static void Generator(Fq *G, const unsigned char *k) {
uint32 L[p];
int i;
Expand(L, k);
for (i = 0; i < p; ++i) G[i] = uint32_mod_uint14(L[i], q) - q12;
}
/* out = HashShort(r) */
static void HashShort(small *out, const Inputs r) {
unsigned char s[Inputs_bytes];
unsigned char h[Hash_bytes];
uint32 L[p];
Inputs_encode(s, r);
Hash_prefix(h, 5, s, sizeof s);
Expand(L, h);
Short_fromlist(out, L);
}
#endif
/* ----- NTRU LPRime Expand */
#ifdef LPR
/* (S,A),a = XKeyGen() */
static void XKeyGen(unsigned char *S, Fq *A, small *a) {
Fq G[p];
Seeds_random(S);
Generator(G, S);
KeyGen(A, a, G);
}
/* B,T = XEncrypt(r,(S,A)) */
static void XEncrypt(Fq *B, int8 *T, const int8 *r, const unsigned char *S,
const Fq *A) {
Fq G[p];
small b[p];
Generator(G, S);
HashShort(b, r);
Encrypt(B, T, r, G, A, b);
}
#define XDecrypt Decrypt
#endif
/* ----- encoding small polynomials (including short polynomials) */
#define Small_bytes ((p + 3) / 4)
/* these are the only functions that rely on p mod 4 = 1 */
static void Small_encode(unsigned char *s, const small *f) {
small x;
int i;
for (i = 0; i < p / 4; ++i) {
x = *f++ + 1;
x += (*f++ + 1) << 2;
x += (*f++ + 1) << 4;
x += (*f++ + 1) << 6;
*s++ = x;
}
x = *f++ + 1;
*s++ = x;
}
static void Small_decode(small *f, const unsigned char *s) {
unsigned char x;
int i;
for (i = 0; i < p / 4; ++i) {
x = *s++;
*f++ = ((small) (x & 3)) - 1;
x >>= 2;
*f++ = ((small) (x & 3)) - 1;
x >>= 2;
*f++ = ((small) (x & 3)) - 1;
x >>= 2;
*f++ = ((small) (x & 3)) - 1;
}
x = *s++;
*f++ = ((small) (x & 3)) - 1;
}
/* ----- encoding general polynomials */
#ifndef LPR
static void Rq_encode(unsigned char *s, const Fq *r) {
uint16 R[p], M[p];
int i;
for (i = 0; i < p; ++i) R[i] = r[i] + q12;
for (i = 0; i < p; ++i) M[i] = q;
Encode(s, R, M, p);
}
static void Rq_decode(Fq *r, const unsigned char *s) {
uint16 R[p], M[p];
int i;
for (i = 0; i < p; ++i) M[i] = q;
Decode(R, s, M, p);
for (i = 0; i < p; ++i) r[i] = ((Fq) R[i]) - q12;
}
#endif
/* ----- encoding rounded polynomials */
static void Rounded_encode(unsigned char *s, const Fq *r) {
uint16 R[p], M[p];
int i;
for (i = 0; i < p; ++i) R[i] = ((r[i] + q12) * 10923) >> 15;
for (i = 0; i < p; ++i) M[i] = (q + 2) / 3;
Encode(s, R, M, p);
}
static void Rounded_decode(Fq *r, const unsigned char *s) {
uint16 R[p], M[p];
int i;
for (i = 0; i < p; ++i) M[i] = (q + 2) / 3;
Decode(R, s, M, p);
for (i = 0; i < p; ++i) r[i] = R[i] * 3 - q12;
}
/* ----- encoding top polynomials */
#ifdef LPR
#define Top_bytes (I / 2)
static void Top_encode(unsigned char *s, const int8 *T) {
int i;
for (i = 0; i < Top_bytes; ++i) s[i] = T[2 * i] + (T[2 * i + 1] << 4);
}
static void Top_decode(int8 *T, const unsigned char *s) {
int i;
for (i = 0; i < Top_bytes; ++i) {
T[2 * i] = s[i] & 15;
T[2 * i + 1] = s[i] >> 4;
}
}
#endif
/* ----- Streamlined NTRU Prime Core plus encoding */
#ifndef LPR
typedef small Inputs[p]; /* passed by reference */
#define Inputs_random Short_random
#define Inputs_encode Small_encode
#define Inputs_bytes Small_bytes
#define Ciphertexts_bytes Rounded_bytes
#define SecretKeys_bytes (2 * Small_bytes)
#define PublicKeys_bytes Rq_bytes
/* pk,sk = ZKeyGen() */
static void ZKeyGen(unsigned char *pk, unsigned char *sk) {
Fq h[p];
small f[p], v[p];
KeyGen(h, f, v);
Rq_encode(pk, h);
Small_encode(sk, f);
sk += Small_bytes;
Small_encode(sk, v);
}
/* C = ZEncrypt(r,pk) */
static void ZEncrypt(unsigned char *C, const Inputs r,
const unsigned char *pk) {
Fq h[p];
Fq c[p];
Rq_decode(h, pk);
Encrypt(c, r, h);
Rounded_encode(C, c);
}
/* r = ZDecrypt(C,sk) */
static void ZDecrypt(Inputs r, const unsigned char *C,
const unsigned char *sk) {
small f[p], v[p];
Fq c[p];
Small_decode(f, sk);
sk += Small_bytes;
Small_decode(v, sk);
Rounded_decode(c, C);
Decrypt(r, c, f, v);
}
#endif
/* ----- NTRU LPRime Expand plus encoding */
#ifdef LPR
#define Ciphertexts_bytes (Rounded_bytes + Top_bytes)
#define SecretKeys_bytes Small_bytes
#define PublicKeys_bytes (Seeds_bytes + Rounded_bytes)
static void Inputs_random(Inputs r) {
unsigned char s[Inputs_bytes];
int i;
randombytes(s, sizeof s);
for (i = 0; i < I; ++i) r[i] = 1 & (s[i >> 3] >> (i & 7));
}
/* pk,sk = ZKeyGen() */
static void ZKeyGen(unsigned char *pk, unsigned char *sk) {
Fq A[p];
small a[p];
XKeyGen(pk, A, a);
pk += Seeds_bytes;
Rounded_encode(pk, A);
Small_encode(sk, a);
}
/* c = ZEncrypt(r,pk) */
static void ZEncrypt(unsigned char *c, const Inputs r,
const unsigned char *pk) {
Fq A[p];
Fq B[p];
int8 T[I];
Rounded_decode(A, pk + Seeds_bytes);
XEncrypt(B, T, r, pk, A);
Rounded_encode(c, B);
c += Rounded_bytes;
Top_encode(c, T);
}
/* r = ZDecrypt(C,sk) */
static void ZDecrypt(Inputs r, const unsigned char *c,
const unsigned char *sk) {
small a[p];
Fq B[p];
int8 T[I];
Small_decode(a, sk);
Rounded_decode(B, c);
Top_decode(T, c + Rounded_bytes);
XDecrypt(r, B, T, a);
}
#endif
/* ----- confirmation hash */
#define Confirm_bytes 32
/* h = HashConfirm(r,pk,cache); cache is Hash4(pk) */
static void HashConfirm(unsigned char *h, const unsigned char *r,
const unsigned char *pk, const unsigned char *cache) {
(void) pk;
#ifndef LPR
unsigned char x[Hash_bytes * 2];
int i;
Hash_prefix(x, 3, r, Inputs_bytes);
for (i = 0; i < Hash_bytes; ++i) x[Hash_bytes + i] = cache[i];
#else
unsigned char x[Inputs_bytes + Hash_bytes];
int i;
for (i = 0; i < Inputs_bytes; ++i) x[i] = r[i];
for (i = 0; i < Hash_bytes; ++i) x[Inputs_bytes + i] = cache[i];
#endif
Hash_prefix(h, 2, x, sizeof x);
}
/* ----- session-key hash */
/* k = HashSession(b,y,z) */
static void HashSession(unsigned char *k, int b, const unsigned char *y,
const unsigned char *z) {
#ifndef LPR
unsigned char x[Hash_bytes + Ciphertexts_bytes + Confirm_bytes];
int i;
Hash_prefix(x, 3, y, Inputs_bytes);
for (i = 0; i < Ciphertexts_bytes + Confirm_bytes; ++i)
x[Hash_bytes + i] = z[i];
#else
unsigned char x[Inputs_bytes + Ciphertexts_bytes + Confirm_bytes];
int i;
for (i = 0; i < Inputs_bytes; ++i) x[i] = y[i];
for (i = 0; i < Ciphertexts_bytes + Confirm_bytes; ++i)
x[Inputs_bytes + i] = z[i];
#endif
Hash_prefix(k, b, x, sizeof x);
}
/* ----- Streamlined NTRU Prime and NTRU LPRime */
/* pk,sk = KEM_KeyGen() */
static void KEM_KeyGen(unsigned char *pk, unsigned char *sk) {
int i;
ZKeyGen(pk, sk);
sk += SecretKeys_bytes;
for (i = 0; i < PublicKeys_bytes; ++i) *sk++ = pk[i];
randombytes(sk, Inputs_bytes);
sk += Inputs_bytes;
Hash_prefix(sk, 4, pk, PublicKeys_bytes);
}
/* c,r_enc = Hide(r,pk,cache); cache is Hash4(pk) */
static void Hide(unsigned char *c, unsigned char *r_enc, const Inputs r,
const unsigned char *pk, const unsigned char *cache) {
Inputs_encode(r_enc, r);
ZEncrypt(c, r, pk);
c += Ciphertexts_bytes;
HashConfirm(c, r_enc, pk, cache);
}
/* c,k = Encap(pk) */
static void Encap(unsigned char *c, unsigned char *k, const unsigned char *pk) {
Inputs r;
unsigned char r_enc[Inputs_bytes];
unsigned char cache[Hash_bytes];
Hash_prefix(cache, 4, pk, PublicKeys_bytes);
Inputs_random(r);
Hide(c, r_enc, r, pk, cache);
HashSession(k, 1, r_enc, c);
}
/* 0 if matching ciphertext+confirm, else -1 */
static int Ciphertexts_diff_mask(const unsigned char *c,
const unsigned char *c2) {
uint16 differentbits = 0;
int len = Ciphertexts_bytes + Confirm_bytes;
while (len-- > 0) differentbits |= (*c++) ^ (*c2++);
return crypto_int16_nonzero_mask(differentbits);
}
/* k = Decap(c,sk) */
static void Decap(unsigned char *k, const unsigned char *c,
const unsigned char *sk) {
const unsigned char *pk = sk + SecretKeys_bytes;
const unsigned char *rho = pk + PublicKeys_bytes;
const unsigned char *cache = rho + Inputs_bytes;
Inputs r;
unsigned char r_enc[Inputs_bytes];
unsigned char cnew[Ciphertexts_bytes + Confirm_bytes];
int mask;
int i;
ZDecrypt(r, c, sk);
Hide(cnew, r_enc, r, pk, cache);
mask = Ciphertexts_diff_mask(c, cnew);
for (i = 0; i < Inputs_bytes; ++i) r_enc[i] ^= mask & (r_enc[i] ^ rho[i]);
HashSession(k, 1 + mask, r_enc, c);
}
/* ----- crypto_kem_sntrup761_tinyssh API */
int crypto_kem_sntrup761_tinyssh_keypair(unsigned char *pk, unsigned char *sk) {
KEM_KeyGen(pk, sk);
return 0;
}
int crypto_kem_sntrup761_tinyssh_enc(unsigned char *c, unsigned char *k,
const unsigned char *pk) {
Encap(c, k, pk);
return 0;
}
int crypto_kem_sntrup761_tinyssh_dec(unsigned char *k, const unsigned char *c,
const unsigned char *sk) {
Decap(k, c, sk);
return 0;
}
#if 0
Script used to merge into single the file:
#!/ bin / sh
rm crypto_kem_sntrup761.c || :
(
cd "$1"
echo '/*'
echo 'Original code: supercop-20210125/crypto_kem/sntrup761/ref'
echo 'Modifications (Jan Mojzis):'
echo '- source code merged into single file'
echo '- crypto_kem renamed to crypto_kem_sntrup761_tinyssh'
echo '*/'
echo
echo '/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */'
echo
echo '#include '
echo '#include "crypto_uint64.h"'
echo '#include "crypto_uint32.h"'
echo '#include "crypto_uint16.h"'
echo '#include "crypto_int32.h"'
echo '#include "crypto_int16.h"'
echo '#include "crypto_int8.h"'
echo '#include "randombytes.h"'
echo '#include "crypto_verify_32.h"'
echo '#include "crypto_sort_uint32.h"'
echo '#include "crypto_hash_sha512.h"'
echo '#include "crypto_kem_sntrup761.h"'
echo ''
echo '#define uint64 crypto_uint64'
echo '#define uint32 crypto_uint32'
echo '#define uint16 crypto_uint16'
echo '#define int32 crypto_int32'
echo '#define int16 crypto_int16'
echo '#define int8 crypto_int8'
echo
(
for f in uint32.c int32.c paramsmenu.h params.h Decode.c Encode.c; do
echo "/* ${f} */"
cat "${f}" | sed 's/^void /static void /' | sed 's/^int16 /static int16 /'
echo
done | grep -v '#include'
)
(
echo '/* kem.c */'
cat kem.c
echo
) | grep -v '#include' | sed 's/crypto_kem/crypto_kem_sntrup761_tinyssh/g'
echo
echo '#if 0'
echo 'Script used to merge into single the file:'
echo
cat $0
echo
echo '#endif'
) > crypto_kem_sntrup761.c.tmp
mv -f crypto_kem_sntrup761.c.tmp crypto_kem_sntrup761.c
#endif
#endif
tinyssh-20250501/crypto_kem_sntrup761x25519.c 0000664 0000000 0000000 00000004123 15004722224 0020440 0 ustar 00root root 0000000 0000000 /*
20210314
20241211 - reformated using clang-format
20241215 - scalarmult_curve25519 -> dh_x25519
Jan Mojzis
Public domain.
*/
#include "cleanup.h"
#include "crypto_hash_sha512.h"
#include "crypto_dh_x25519.h"
#include "crypto_kem_sntrup761.h"
#include "crypto_kem_sntrup761x25519.h"
int crypto_kem_sntrup761x25519_tinyssh_enc(unsigned char *c, unsigned char *k,
const unsigned char *pk) {
unsigned char onetimesk[crypto_dh_x25519_SECRETKEYBYTES];
unsigned char buf[crypto_kem_sntrup761_BYTES + crypto_dh_x25519_BYTES];
/* sntrup761 */
crypto_kem_sntrup761_enc(c, buf, pk);
pk += crypto_kem_sntrup761_PUBLICKEYBYTES;
c += crypto_kem_sntrup761_CIPHERTEXTBYTES;
/* x25519 */
crypto_dh_x25519_keypair(/*onetimepk*/ c, onetimesk);
crypto_dh_x25519(buf + crypto_kem_sntrup761_BYTES, pk, onetimesk);
/* hash together sntrup459176 KEM-key and x25519 shared secret */
crypto_hash_sha512(k, buf, sizeof buf);
/* cleanup */
cleanup(buf);
cleanup(onetimesk);
return 0;
}
int crypto_kem_sntrup761x25519_tinyssh_dec(unsigned char *k,
const unsigned char *c,
const unsigned char *sk) {
unsigned char buf[crypto_kem_sntrup761_BYTES + crypto_dh_x25519_BYTES];
/* sntrup761 */
crypto_kem_sntrup761_dec(buf, c, sk);
sk += crypto_kem_sntrup761_SECRETKEYBYTES;
c += crypto_kem_sntrup761_CIPHERTEXTBYTES;
/* x25519 */
crypto_dh_x25519(buf + crypto_kem_sntrup761_BYTES, c, sk);
/* hash together sntrup459176 KEM-key and x25519 shared secret */
crypto_hash_sha512(k, buf, sizeof buf);
/* cleanup */
cleanup(buf);
return 0;
}
int crypto_kem_sntrup761x25519_tinyssh_keypair(unsigned char *pk,
unsigned char *sk) {
/* sntrup761 */
crypto_kem_sntrup761_keypair(pk, sk);
/* x25519 */
crypto_dh_x25519_keypair(pk + crypto_kem_sntrup761_PUBLICKEYBYTES,
sk + crypto_kem_sntrup761_SECRETKEYBYTES);
return 0;
}
tinyssh-20250501/crypto_kem_sntrup761x25519.h 0000664 0000000 0000000 00000003426 15004722224 0020452 0 ustar 00root root 0000000 0000000 #ifndef crypto_kem_sntrup761x25519_H
#define crypto_kem_sntrup761x25519_H
#define crypto_kem_sntrup761x25519_tinyssh_SECRETKEYBYTES 1795
#define crypto_kem_sntrup761x25519_tinyssh_PUBLICKEYBYTES 1190
#define crypto_kem_sntrup761x25519_tinyssh_CIPHERTEXTBYTES 1071
#define crypto_kem_sntrup761x25519_tinyssh_BYTES 64
extern int crypto_kem_sntrup761x25519_tinyssh_keypair(unsigned char *,
unsigned char *);
extern int crypto_kem_sntrup761x25519_tinyssh_enc(unsigned char *,
unsigned char *,
const unsigned char *);
extern int crypto_kem_sntrup761x25519_tinyssh_dec(unsigned char *,
const unsigned char *,
const unsigned char *);
#define crypto_kem_sntrup761x25519_keypair \
crypto_kem_sntrup761x25519_tinyssh_keypair
#define crypto_kem_sntrup761x25519_enc crypto_kem_sntrup761x25519_tinyssh_enc
#define crypto_kem_sntrup761x25519_dec crypto_kem_sntrup761x25519_tinyssh_dec
#define crypto_kem_sntrup761x25519_SECRETKEYBYTES \
crypto_kem_sntrup761x25519_tinyssh_SECRETKEYBYTES
#define crypto_kem_sntrup761x25519_PUBLICKEYBYTES \
crypto_kem_sntrup761x25519_tinyssh_PUBLICKEYBYTES
#define crypto_kem_sntrup761x25519_CIPHERTEXTBYTES \
crypto_kem_sntrup761x25519_tinyssh_CIPHERTEXTBYTES
#define crypto_kem_sntrup761x25519_BYTES \
crypto_kem_sntrup761x25519_tinyssh_BYTES
#define crypto_kem_sntrup761x25519_IMPLEMENTATION "tinyssh"
#define crypto_kem_sntrup761x25519_VERSION "-"
#endif
tinyssh-20250501/crypto_onetimeauth_poly1305.h 0000664 0000000 0000000 00000005216 15004722224 0021124 0 ustar 00root root 0000000 0000000 #ifndef crypto_onetimeauth_poly1305_H
#define crypto_onetimeauth_poly1305_H
#include "haslib1305.h"
#ifndef HASLIB1305
#define crypto_onetimeauth_poly1305_tinyssh_BYTES 16
#define crypto_onetimeauth_poly1305_tinyssh_KEYBYTES 32
extern int crypto_onetimeauth_poly1305_tinyssh(unsigned char *,
const unsigned char *,
unsigned long long,
const unsigned char *);
extern int crypto_onetimeauth_poly1305_tinyssh_verify(const unsigned char *,
const unsigned char *,
unsigned long long,
const unsigned char *);
#define crypto_onetimeauth_poly1305 crypto_onetimeauth_poly1305_tinyssh
#define crypto_onetimeauth_poly1305_verify \
crypto_onetimeauth_poly1305_tinyssh_verify
#define crypto_onetimeauth_poly1305_BYTES \
crypto_onetimeauth_poly1305_tinyssh_BYTES
#define crypto_onetimeauth_poly1305_KEYBYTES \
crypto_onetimeauth_poly1305_tinyssh_KEYBYTES
#define crypto_onetimeauth_poly1305_IMPLEMENTATION "tinyssh"
#define crypto_onetimeauth_poly1305_VERSION "-"
#else
#include
#define crypto_onetimeauth_poly1305_lib1305_BYTES poly1305_BYTES
#define crypto_onetimeauth_poly1305_lib1305_KEYBYTES poly1305_KEYBYTES
extern int crypto_onetimeauth_poly1305_lib1305(unsigned char *,
const unsigned char *,
unsigned long long,
const unsigned char *);
extern int crypto_onetimeauth_poly1305_lib1305_verify(const unsigned char *,
const unsigned char *,
unsigned long long,
const unsigned char *);
#define crypto_onetimeauth_poly1305 crypto_onetimeauth_poly1305_lib1305
#define crypto_onetimeauth_poly1305_verify \
crypto_onetimeauth_poly1305_lib1305_verify
#define crypto_onetimeauth_poly1305_BYTES \
crypto_onetimeauth_poly1305_lib1305_BYTES
#define crypto_onetimeauth_poly1305_KEYBYTES \
crypto_onetimeauth_poly1305_lib1305_KEYBYTES
#define crypto_onetimeauth_poly1305_IMPLEMENTATION "lib1305"
#define crypto_onetimeauth_poly1305_VERSION "-"
#endif
#endif
tinyssh-20250501/crypto_onetimeauth_poly1305_lib1305.c 0000664 0000000 0000000 00000001407 15004722224 0022254 0 ustar 00root root 0000000 0000000 #include "haslib1305.h"
#ifdef HASLIB1305
#include
#include "crypto_onetimeauth_poly1305.h"
int crypto_onetimeauth_poly1305_lib1305(unsigned char *a,
const unsigned char *m,
unsigned long long n,
const unsigned char *k) {
poly1305(a, m, (unsigned long long) n, k);
return 0;
}
int crypto_onetimeauth_poly1305_lib1305_verify(const unsigned char *a,
const unsigned char *m,
unsigned long long n,
const unsigned char *k) {
return poly1305_verify(a, m, (unsigned long long) n, k);
}
#endif
tinyssh-20250501/crypto_onetimeauth_poly1305_tinyssh.c 0000664 0000000 0000000 00000013126 15004722224 0022677 0 ustar 00root root 0000000 0000000 /*
20250126
*/
/*
Based on poly1305-donna (https://github.com/floodyberry/poly1305-donna)
- modified for NaCl API
- switched to cryptoint
*/
#include "crypto_onetimeauth_poly1305.h"
#include "haslib1305.h"
#ifndef HASLIB1305
#include "crypto_int16.h"
#include "crypto_uint32.h"
#include "crypto_uint64.h"
/* clang-format off */
int crypto_onetimeauth_poly1305_tinyssh(unsigned char *o,
const unsigned char *m,
unsigned long long n,
const unsigned char *k) {
crypto_uint32 h0, h1, h2, h3, h4;
crypto_uint32 r0, r1, r2, r3, r4;
crypto_uint32 s1, s2, s3, s4;
crypto_uint64 d0, d1, d2, d3, d4;
crypto_uint32 c, mask;
crypto_uint64 f;
crypto_uint64 i;
/* r &= 0xffffffc0ffffffc0ffffffc0fffffff */
r0 = (crypto_uint32_load(k + 0) ) & 0x3ffffff;
r1 = (crypto_uint32_load(k + 3) >> 2) & 0x3ffff03;
r2 = (crypto_uint32_load(k + 6) >> 4) & 0x3ffc0ff;
r3 = (crypto_uint32_load(k + 9) >> 6) & 0x3f03fff;
r4 = (crypto_uint32_load(k + 12) >> 8) & 0x00fffff;
s1 = r1 * 5;
s2 = r2 * 5;
s3 = r3 * 5;
s4 = r4 * 5;
/* h = 0 */
h0 = h1 = h2 = h3 = h4 = 0;
while (n > 0) {
/* h += m[i] */
if (n >= 16) {
h0 += (crypto_uint32_load(m ) ) & 0x3ffffff;
h1 += (crypto_uint32_load(m + 3) >> 2) & 0x3ffffff;
h2 += (crypto_uint32_load(m + 6) >> 4) & 0x3ffffff;
h3 += (crypto_uint32_load(m + 9) >> 6) & 0x3ffffff;
h4 += (crypto_uint32_load(m + 12) >> 8) | 16777216;
m += 16;
n -= 16;
}
else {
unsigned char mm[16];
for (i = 0; i < 16; ++i) mm[i] = 0;
for (i = 0; i < n; ++i) mm[i] = m[i];
mm[i] = 1;
h0 += (crypto_uint32_load(mm ) ) & 0x3ffffff;
h1 += (crypto_uint32_load(mm + 3) >> 2) & 0x3ffffff;
h2 += (crypto_uint32_load(mm + 6) >> 4) & 0x3ffffff;
h3 += (crypto_uint32_load(mm + 9) >> 6) & 0x3ffffff;
h4 += (crypto_uint32_load(mm + 12) >> 8);
n = 0;
}
/* h *= r */
d0 = ((crypto_uint64)h0 * r0) + ((crypto_uint64)h1 * s4) + ((crypto_uint64)h2 * s3) + ((crypto_uint64)h3 * s2) + ((crypto_uint64)h4 * s1);
d1 = ((crypto_uint64)h0 * r1) + ((crypto_uint64)h1 * r0) + ((crypto_uint64)h2 * s4) + ((crypto_uint64)h3 * s3) + ((crypto_uint64)h4 * s2);
d2 = ((crypto_uint64)h0 * r2) + ((crypto_uint64)h1 * r1) + ((crypto_uint64)h2 * r0) + ((crypto_uint64)h3 * s4) + ((crypto_uint64)h4 * s3);
d3 = ((crypto_uint64)h0 * r3) + ((crypto_uint64)h1 * r2) + ((crypto_uint64)h2 * r1) + ((crypto_uint64)h3 * r0) + ((crypto_uint64)h4 * s4);
d4 = ((crypto_uint64)h0 * r4) + ((crypto_uint64)h1 * r3) + ((crypto_uint64)h2 * r2) + ((crypto_uint64)h3 * r1) + ((crypto_uint64)h4 * r0);
/* (partial) h %= p */
c = (crypto_uint32)(d0 >> 26); h0 = (crypto_uint32)d0 & 0x3ffffff;
d1 += c; c = (crypto_uint32)(d1 >> 26); h1 = (crypto_uint32)d1 & 0x3ffffff;
d2 += c; c = (crypto_uint32)(d2 >> 26); h2 = (crypto_uint32)d2 & 0x3ffffff;
d3 += c; c = (crypto_uint32)(d3 >> 26); h3 = (crypto_uint32)d3 & 0x3ffffff;
d4 += c; c = (crypto_uint32)(d4 >> 26); h4 = (crypto_uint32)d4 & 0x3ffffff;
h0 += c * 5; c = (h0 >> 26); h0 = h0 & 0x3ffffff;
h1 += c;
}
/* fully carry h */
c = h1 >> 26; h1 = h1 & 0x3ffffff;
h2 += c; c = h2 >> 26; h2 = h2 & 0x3ffffff;
h3 += c; c = h3 >> 26; h3 = h3 & 0x3ffffff;
h4 += c; c = h4 >> 26; h4 = h4 & 0x3ffffff;
h0 += c * 5; c = h0 >> 26; h0 = h0 & 0x3ffffff;
h1 += c;
/* compute h + -p */
r0 = h0 + 5; c = r0 >> 26; r0 &= 0x3ffffff;
r1 = h1 + c; c = r1 >> 26; r1 &= 0x3ffffff;
r2 = h2 + c; c = r2 >> 26; r2 &= 0x3ffffff;
r3 = h3 + c; c = r3 >> 26; r3 &= 0x3ffffff;
r4 = h4 + c - (1 << 26);
/* select h if h < p, or h + -p if h >= p */
mask = crypto_uint32_topbit_01(r4);
mask -= 1;
r0 ^= h0;
r1 ^= h1;
r2 ^= h2;
r3 ^= h3;
r4 ^= h4;
h0 ^= mask & r0;
h1 ^= mask & r1;
h2 ^= mask & r2;
h3 ^= mask & r3;
h4 ^= mask & r4;
/* h = h % (2^128) */
h0 = ((h0 ) | (h1 << 26)) & 0xffffffff;
h1 = ((h1 >> 6) | (h2 << 20)) & 0xffffffff;
h2 = ((h2 >> 12) | (h3 << 14)) & 0xffffffff;
h3 = ((h3 >> 18) | (h4 << 8)) & 0xffffffff;
/* mac = (h + pad) % (2^128) */
f = (crypto_uint64)h0 + crypto_uint32_load(k + 16) ; h0 = (crypto_uint32)f;
f = (crypto_uint64)h1 + crypto_uint32_load(k + 20) + (f >> 32); h1 = (crypto_uint32)f;
f = (crypto_uint64)h2 + crypto_uint32_load(k + 24) + (f >> 32); h2 = (crypto_uint32)f;
f = (crypto_uint64)h3 + crypto_uint32_load(k + 28) + (f >> 32); h3 = (crypto_uint32)f;
crypto_uint32_store(o + 0, h0);
crypto_uint32_store(o + 4, h1);
crypto_uint32_store(o + 8, h2);
crypto_uint32_store(o + 12, h3);
return 0;
}
int crypto_onetimeauth_poly1305_tinyssh_verify(const unsigned char *h,
const unsigned char *in,
unsigned long long l,
const unsigned char *k) {
unsigned char correct[16];
crypto_int16 d = 0;
long long i;
crypto_onetimeauth_poly1305(correct, in, l, k);
for (i = 0; i < 16; ++i) d |= correct[i] ^ h[i];
return crypto_int16_nonzero_mask(d);
}
/* clang-format on */
#endif
tinyssh-20250501/crypto_scalarmult_curve25519.c 0000664 0000000 0000000 00000003704 15004722224 0021202 0 ustar 00root root 0000000 0000000 #include "cleanup.h"
#include "fe25519.h"
#include "crypto_uint8.h"
#include "crypto_scalarmult_curve25519.h"
int crypto_scalarmult_curve25519_tinyssh(unsigned char *q,
const unsigned char *n,
const unsigned char *p) {
unsigned char e[32];
fe x1, x2, z2, x3, z3, tmp0, tmp1;
long long i;
int pos;
crypto_uint32 swap, b;
for (i = 0; i < 32; ++i) e[i] = n[i];
e[0] &= 248;
e[31] &= 127;
e[31] |= 64;
fe25519_frombytes(x1, p);
fe_1(x2);
fe_0(z2);
fe_copy(x3, x1);
fe_1(z3);
swap = 0;
for (pos = 254; pos >= 0; --pos) {
b = crypto_uint8_bitmod_01(e[pos / 8], pos);
swap ^= b;
fe_cswap(x2, x3, swap);
fe_cswap(z2, z3, swap);
swap = b;
fe25519_sub(tmp0, x3, z3);
fe25519_sub(tmp1, x2, z2);
fe25519_add(x2, x2, z2);
fe25519_add(z2, x3, z3);
fe25519_mul(z3, tmp0, x2);
fe25519_mul(z2, z2, tmp1);
fe25519_sq(tmp0, tmp1);
fe25519_sq(tmp1, x2);
fe25519_add(x3, z3, z2);
fe25519_sub(z2, z3, z2);
fe25519_mul(x2, tmp1, tmp0);
fe25519_sub(tmp1, tmp1, tmp0);
fe25519_sq(z2, z2);
fe25519_mul121666(z3, tmp1);
fe25519_sq(x3, x3);
fe25519_add(tmp0, tmp0, z3);
fe25519_mul(z3, x1, z2);
fe25519_mul(z2, tmp1, tmp0);
}
fe_cswap(x2, x3, swap);
fe_cswap(z2, z3, swap);
fe25519_inv(z2, z2);
fe25519_mul(x2, x2, z2);
fe25519_tobytes(q, x2);
cleanup(e);
cleanup(tmp0);
cleanup(tmp1);
cleanup(x1);
cleanup(x2);
cleanup(x3);
cleanup(z2);
cleanup(z3);
return 0;
}
static const unsigned char basepoint[32] = {9};
int crypto_scalarmult_curve25519_tinyssh_base(unsigned char *q,
const unsigned char *n) {
return crypto_scalarmult_curve25519_tinyssh(q, n, basepoint);
}
tinyssh-20250501/crypto_scalarmult_curve25519.h 0000664 0000000 0000000 00000002153 15004722224 0021204 0 ustar 00root root 0000000 0000000 #ifndef crypto_scalarmult_curve25519_H
#define crypto_scalarmult_curve25519_H
#define crypto_scalarmult_curve25519_tinyssh_BYTES 32
#define crypto_scalarmult_curve25519_tinyssh_SCALARBYTES 32
extern int crypto_scalarmult_curve25519_tinyssh(unsigned char *,
const unsigned char *,
const unsigned char *);
extern int crypto_scalarmult_curve25519_tinyssh_base(unsigned char *,
const unsigned char *);
#define crypto_scalarmult_curve25519 crypto_scalarmult_curve25519_tinyssh
#define crypto_scalarmult_curve25519_base \
crypto_scalarmult_curve25519_tinyssh_base
#define crypto_scalarmult_curve25519_BYTES \
crypto_scalarmult_curve25519_tinyssh_BYTES
#define crypto_scalarmult_curve25519_SCALARBYTES \
crypto_scalarmult_curve25519_tinyssh_SCALARBYTES
#define crypto_scalarmult_curve25519_IMPLEMENTATION "tinyssh"
#define crypto_scalarmult_curve25519_VERSION "-"
#endif
tinyssh-20250501/crypto_sign_ed25519.h 0000664 0000000 0000000 00000006357 15004722224 0017253 0 ustar 00root root 0000000 0000000 #ifndef crypto_sign_ed25519_H
#define crypto_sign_ed25519_H
#include "haslib25519.h"
#ifndef HASLIB25519
#define crypto_sign_ed25519_tinyssh_SECRETKEYBYTES 64
#define crypto_sign_ed25519_tinyssh_PUBLICKEYBYTES 32
#define crypto_sign_ed25519_tinyssh_BYTES 64
extern int crypto_sign_ed25519_tinyssh(unsigned char *, unsigned long long *,
const unsigned char *,
unsigned long long,
const unsigned char *);
extern int crypto_sign_ed25519_tinyssh_open(unsigned char *,
unsigned long long *,
const unsigned char *,
unsigned long long,
const unsigned char *);
extern int crypto_sign_ed25519_tinyssh_keypair(unsigned char *,
unsigned char *);
#define crypto_sign_ed25519 crypto_sign_ed25519_tinyssh
#define crypto_sign_ed25519_open crypto_sign_ed25519_tinyssh_open
#define crypto_sign_ed25519_keypair crypto_sign_ed25519_tinyssh_keypair
#define crypto_sign_ed25519_BYTES crypto_sign_ed25519_tinyssh_BYTES
#define crypto_sign_ed25519_PUBLICKEYBYTES \
crypto_sign_ed25519_tinyssh_PUBLICKEYBYTES
#define crypto_sign_ed25519_SECRETKEYBYTES \
crypto_sign_ed25519_tinyssh_SECRETKEYBYTES
#define crypto_sign_ed25519_IMPLEMENTATION "tinyssh"
#define crypto_sign_ed25519_VERSION "-"
#else
#include
#define crypto_sign_ed25519_lib25519_SECRETKEYBYTES \
lib25519_sign_ed25519_SECRETKEYBYTES
#define crypto_sign_ed25519_lib25519_PUBLICKEYBYTES \
lib25519_sign_ed25519_PUBLICKEYBYTES
#define crypto_sign_ed25519_lib25519_BYTES lib25519_sign_ed25519_BYTES
extern int crypto_sign_ed25519_lib25519(unsigned char *, unsigned long long *,
const unsigned char *,
unsigned long long,
const unsigned char *);
extern int crypto_sign_ed25519_lib25519_open(unsigned char *,
unsigned long long *,
const unsigned char *,
unsigned long long,
const unsigned char *);
extern int crypto_sign_ed25519_lib25519_keypair(unsigned char *,
unsigned char *);
#define crypto_sign_ed25519 crypto_sign_ed25519_lib25519
#define crypto_sign_ed25519_open crypto_sign_ed25519_lib25519_open
#define crypto_sign_ed25519_keypair crypto_sign_ed25519_lib25519_keypair
#define crypto_sign_ed25519_BYTES crypto_sign_ed25519_lib25519_BYTES
#define crypto_sign_ed25519_PUBLICKEYBYTES \
crypto_sign_ed25519_lib25519_PUBLICKEYBYTES
#define crypto_sign_ed25519_SECRETKEYBYTES \
crypto_sign_ed25519_lib25519_SECRETKEYBYTES
#define crypto_sign_ed25519_IMPLEMENTATION "lib25519"
#define crypto_sign_ed25519_VERSION lib25519_version
#endif
#endif
tinyssh-20250501/crypto_sign_ed25519_lib25519.c 0000664 0000000 0000000 00000002061 15004722224 0020466 0 ustar 00root root 0000000 0000000 #include "haslib25519.h"
#ifdef HASLIB25519
#include
#include "crypto_sign_ed25519.h"
int crypto_sign_ed25519_lib25519(unsigned char *sm, unsigned long long *smlen,
const unsigned char *m, unsigned long long n,
const unsigned char *skorig) {
long long llsmlen;
lib25519_sign_ed25519(sm, &llsmlen, m, n, skorig);
*smlen = (unsigned long long) llsmlen;
return 0;
}
int crypto_sign_ed25519_lib25519_open(unsigned char *m,
unsigned long long *mlen,
const unsigned char *sm,
unsigned long long n,
const unsigned char *pk) {
long long llmlen;
int ret;
ret = lib25519_sign_ed25519_open(m, &llmlen, sm, n, pk);
*mlen = (unsigned long long) llmlen;
return ret;
}
int crypto_sign_ed25519_lib25519_keypair(unsigned char *pk, unsigned char *sk) {
lib25519_sign_ed25519_keypair(pk, sk);
return 0;
}
#endif
tinyssh-20250501/crypto_sign_ed25519_tinyssh.c 0000664 0000000 0000000 00000007111 15004722224 0021014 0 ustar 00root root 0000000 0000000 #include "crypto_sign_ed25519.h"
#include "haslib25519.h"
#ifndef HASLIB25519
#include "randombytes.h"
#include "cleanup.h"
#include "crypto_hash_sha512.h"
#include "crypto_verify_32.h"
#include "ge25519.h"
#include "sc25519.h"
int crypto_sign_ed25519_tinyssh(unsigned char *sm, unsigned long long *smlen,
const unsigned char *m, unsigned long long n,
const unsigned char *skorig) {
long long i;
unsigned char nonce[64], hram[64], sk[96], pk[32];
ge25519 R;
/* copy public key*/
for (i = 31; i >= 0; --i) pk[i] = skorig[i + 32];
/* compute secret key from seed sk = H(skorig), H = sha512 */
crypto_hash_sha512(sk, skorig, 32);
sk[0] &= 248;
sk[31] &= 63;
sk[31] |= 64;
randombytes(sk + 64, 32);
crypto_hash_sha512(sk + 32, sk + 32, 64);
/* copy m to sm, copy secret key */
*smlen = n + 64;
for (i = n - 1; i >= 0; --i) sm[i + 64] = m[i];
for (i = 31; i >= 0; --i) sm[i + 32] = sk[i + 32];
/* get pseudorandom nonce = H(sk2, m) */
crypto_hash_sha512(nonce, sm + 32, n + 32);
sc25519_reduce(nonce);
/* copy pk to sm */
for (i = 31; i >= 0; --i) sm[i + 32] = pk[i];
/* compute R */
ge25519_scalarmult_base(R, nonce);
ge25519_tobytes(sm, R);
/* calculate hram = H(r, a, m) */
crypto_hash_sha512(hram, sm, n + 64);
sc25519_reduce(hram);
/* compute S */
sc25519_muladd(sm + 32, hram, sk, nonce);
/* cleanup */
cleanup(nonce);
cleanup(hram);
cleanup(sk);
cleanup(pk);
cleanup(R);
return 0;
}
int crypto_sign_ed25519_tinyssh_open(unsigned char *m, unsigned long long *mlen,
const unsigned char *sm,
unsigned long long n,
const unsigned char *pk) {
unsigned long long i;
long long j;
unsigned char pkcopy[32], rcopy[32], scopy[32], hram[64], rcheck[32];
ge25519 R, S, A;
int ret = -1;
/* check input */
if (n < 64) goto fail;
if (sm[63] & 224) goto fail;
/* unpack pk */
if (ge25519_frombytes_negate_vartime(A, pk) != 0) goto fail;
/* copy pk, r, s */
for (i = 0; i < 32; ++i) pkcopy[i] = pk[i];
for (i = 0; i < 32; ++i) rcopy[i] = sm[i];
for (i = 0; i < 32; ++i) scopy[i] = sm[i + 32];
/* copy sm to m and copy pk to m */
for (j = n - 1; j >= 0; --j) m[j] = sm[j];
for (i = 0; i < 32; ++i) m[i + 32] = pkcopy[i];
/* calculate hram = H(r, a, m) */
crypto_hash_sha512(hram, m, n);
sc25519_reduce(hram);
/* compute R */
ge25519_scalarmult(A, A, hram);
ge25519_scalarmult_base(S, scopy);
ge25519_add(R, S, A);
/* check R */
ge25519_tobytes(rcheck, R);
if (crypto_verify_32(rcheck, rcopy) != 0) goto fail;
/* copy message */
n -= 64;
*mlen = n;
for (i = 0; i < n; ++i) m[i] = m[i + 64];
for (i = 0; i < 64; ++i) m[i + n] = 0;
ret = 0;
goto cleanup;
fail:
for (i = 0; i < n; ++i) m[i] = 0;
cleanup:
cleanup(pkcopy);
cleanup(rcopy);
cleanup(scopy);
cleanup(hram);
cleanup(rcheck);
cleanup(R);
cleanup(S);
cleanup(A);
return ret;
}
int crypto_sign_ed25519_tinyssh_keypair(unsigned char *pk, unsigned char *sk) {
unsigned char h[64];
ge25519 A;
long long i;
randombytes(sk, 32);
crypto_hash_sha512(h, sk, 32);
h[0] &= 248;
h[31] &= 63;
h[31] |= 64;
ge25519_scalarmult_base(A, h);
ge25519_tobytes(pk, A);
for (i = 31; i >= 0; --i) sk[i + 32] = pk[i];
cleanup(h);
cleanup(A);
return 0;
}
#endif
tinyssh-20250501/crypto_sort_uint32.c 0000664 0000000 0000000 00000001464 15004722224 0017415 0 ustar 00root root 0000000 0000000 #include "crypto_uint32.h"
#include "crypto_sort_uint32.h"
static void minmax(crypto_uint32 *x, crypto_uint32 *y) {
crypto_uint32 xi = *x;
crypto_uint32 yi = *y;
crypto_uint32 xy = xi ^ yi;
crypto_uint32 c = yi - xi;
c ^= xy & (c ^ yi ^ 0x80000000);
c >>= 31;
c &= 1;
c = -c;
c &= xy;
*x = xi ^ c;
*y = yi ^ c;
}
void crypto_sort_uint32_tinyssh(void *xv, long long n) {
long long top, p, q, i;
crypto_uint32 *x = xv;
if (n < 2) return;
top = 1;
while (top < n - top) top += top;
for (p = top; p > 0; p >>= 1) {
for (i = 0; i < n - p; ++i)
if (!(i & p)) minmax(x + i, x + i + p);
for (q = top; q > p; q >>= 1)
for (i = 0; i < n - q; ++i)
if (!(i & p)) minmax(x + i + p, x + i + q);
}
}
tinyssh-20250501/crypto_sort_uint32.h 0000664 0000000 0000000 00000000575 15004722224 0017424 0 ustar 00root root 0000000 0000000 #ifndef crypto_sort_uint32_H
#define crypto_sort_uint32_H
#define crypto_sort_uint32_tinyssh_BYTES 4
extern void crypto_sort_uint32_tinyssh(void *, long long);
#define crypto_sort_uint32 crypto_sort_uint32_tinyssh
#define crypto_sort_uint32_BYTES crypto_sort_uint32_tinyssh_BYTES
#define crypto_sort_uint32_IMPLEMENTATION "tinyssh"
#define crypto_sort_uint32_VERSION "-"
#endif
tinyssh-20250501/crypto_stream_chacha20.c 0000664 0000000 0000000 00000016252 15004722224 0020147 0 ustar 00root root 0000000 0000000 /*
20241112
*/
#include
#include "crypto_stream_chacha20.h"
static inline uint32_t unpack32(const unsigned char *x) {
uint32_t u0 = ((uint32_t) x[0]);
uint32_t u1 = ((uint32_t) x[1]) << 8;
uint32_t u2 = ((uint32_t) x[2]) << 16;
uint32_t u3 = ((uint32_t) x[3]) << 24;
return u0 ^ u1 ^ u2 ^ u3;
}
static inline void pack32(unsigned char *x, uint32_t u) {
x[0] = (unsigned char) (u);
x[1] = (unsigned char) (u >> 8);
x[2] = (unsigned char) (u >> 16);
x[3] = (unsigned char) (u >> 24);
}
#define ROTATE(x, c) ((x) << (c)) ^ ((x) >> (32 - (c)))
#define QUARTERROUND(a, b, c, d) \
a += b; \
d = ROTATE(d ^ a, 16); \
c += d; \
b = ROTATE(b ^ c, 12); \
a += b; \
d = ROTATE(d ^ a, 8); \
c += d; \
b = ROTATE(b ^ c, 7);
#define TWOROUNDS() \
QUARTERROUND(x0, x4, x8, x12) \
QUARTERROUND(x1, x5, x9, x13) \
QUARTERROUND(x2, x6, x10, x14) \
QUARTERROUND(x3, x7, x11, x15) \
QUARTERROUND(x0, x5, x10, x15) \
QUARTERROUND(x1, x6, x11, x12) \
QUARTERROUND(x2, x7, x8, x13) \
QUARTERROUND(x3, x4, x9, x14)
#define XORBLOCK(o, i) \
x0 = s0; \
x1 = s1; \
x2 = s2; \
x3 = s3; \
x4 = k0; \
x5 = k1; \
x6 = k2; \
x7 = k3; \
x8 = k4; \
x9 = k5; \
x10 = k6; \
x11 = k7; \
x12 = n0; \
x13 = n1; \
x14 = n2; \
x15 = n3; \
\
TWOROUNDS() /* round 1, 2 */ \
TWOROUNDS() /* round 3, 4 */ \
TWOROUNDS() /* round 5, 6 */ \
TWOROUNDS() /* round 7, 8 */ \
TWOROUNDS() /* round 9, 10 */ \
TWOROUNDS() /* round 11, 12 */ \
TWOROUNDS() /* round 13, 14 */ \
TWOROUNDS() /* round 15, 16 */ \
TWOROUNDS() /* round 17, 18 */ \
TWOROUNDS() /* round 19, 20 */ \
\
pack32(o, (x0 + s0) ^ unpack32(i)); \
pack32(o + 4, (x1 + s1) ^ unpack32(i + 4)); \
pack32(o + 8, (x2 + s2) ^ unpack32(i + 8)); \
pack32(o + 12, (x3 + s3) ^ unpack32(i + 12)); \
pack32(o + 16, (x4 + k0) ^ unpack32(i + 16)); \
pack32(o + 20, (x5 + k1) ^ unpack32(i + 20)); \
pack32(o + 24, (x6 + k2) ^ unpack32(i + 24)); \
pack32(o + 28, (x7 + k3) ^ unpack32(i + 28)); \
pack32(o + 32, (x8 + k4) ^ unpack32(i + 32)); \
pack32(o + 36, (x9 + k5) ^ unpack32(i + 36)); \
pack32(o + 40, (x10 + k6) ^ unpack32(i + 40)); \
pack32(o + 44, (x11 + k7) ^ unpack32(i + 44)); \
pack32(o + 48, (x12 + n0) ^ unpack32(i + 48)); \
pack32(o + 52, (x13 + n1) ^ unpack32(i + 52)); \
pack32(o + 56, (x14 + n2) ^ unpack32(i + 56)); \
pack32(o + 60, (x15 + n3) ^ unpack32(i + 60))
int crypto_stream_chacha20_tinyssh_xor(unsigned char *c, const unsigned char *m,
unsigned long long l,
const unsigned char *n,
const unsigned char *k) {
register uint32_t x0, x1, x2, x3, x4, x5, x6, x7;
register uint32_t x8, x9, x10, x11, x12, x13, x14, x15;
uint32_t k0 = unpack32(k);
uint32_t k1 = unpack32(k + 4);
uint32_t k2 = unpack32(k + 8);
uint32_t k3 = unpack32(k + 12);
uint32_t k4 = unpack32(k + 16);
uint32_t k5 = unpack32(k + 20);
uint32_t k6 = unpack32(k + 24);
uint32_t k7 = unpack32(k + 28);
uint32_t n0 = 0;
uint32_t n1 = 0;
uint32_t n2 = unpack32(n);
uint32_t n3 = unpack32(n + 4);
uint32_t s0 = 0x61707865;
uint32_t s1 = 0x3320646E;
uint32_t s2 = 0x79622D32;
uint32_t s3 = 0x6B206574;
uint64_t u = 0;
if (!l) return 0;
while (l >= 64) {
XORBLOCK(c, m);
n0 = (uint32_t) ++u;
n1 = u >> 32;
l -= 64;
c += 64;
m += 64;
}
if (l) {
unsigned char b[64] = {0};
unsigned long long j;
for (j = 0; j < l; ++j) b[j] = m[j];
XORBLOCK(b, b);
for (j = 0; j < l; ++j) c[j] = b[j];
}
return 0;
}
int crypto_stream_chacha20_tinyssh(unsigned char *c, unsigned long long l,
const unsigned char *n,
const unsigned char *k) {
unsigned long long j;
unsigned char ncopy[8], kcopy[32];
for (j = 0; j < 32; ++j) kcopy[j] = k[j];
for (j = 0; j < 8; ++j) ncopy[j] = n[j];
for (j = 0; j < l; ++j) c[j] = 0;
return crypto_stream_chacha20_tinyssh_xor(c, c, l, ncopy, kcopy);
}
tinyssh-20250501/crypto_stream_chacha20.h 0000664 0000000 0000000 00000002214 15004722224 0020145 0 ustar 00root root 0000000 0000000 #ifndef crypto_stream_chacha20_H
#define crypto_stream_chacha20_H
#define crypto_stream_chacha20_tinyssh_KEYBYTES 32
#define crypto_stream_chacha20_tinyssh_NONCEBYTES 8
extern int crypto_stream_chacha20_tinyssh(unsigned char *, unsigned long long,
const unsigned char *,
const unsigned char *);
extern int crypto_stream_chacha20_tinyssh_xor(unsigned char *,
const unsigned char *,
unsigned long long,
const unsigned char *,
const unsigned char *);
#define crypto_stream_chacha20 crypto_stream_chacha20_tinyssh
#define crypto_stream_chacha20_xor crypto_stream_chacha20_tinyssh_xor
#define crypto_stream_chacha20_KEYBYTES crypto_stream_chacha20_tinyssh_KEYBYTES
#define crypto_stream_chacha20_NONCEBYTES \
crypto_stream_chacha20_tinyssh_NONCEBYTES
#define crypto_stream_chacha20_IMPLEMENTATION "tinyssh"
#define crypto_stream_chacha20_VERSION "-"
#endif
tinyssh-20250501/crypto_verify_16.c 0000664 0000000 0000000 00000000446 15004722224 0017033 0 ustar 00root root 0000000 0000000 #include "crypto_int16.h"
#include "crypto_verify_16.h"
int crypto_verify_16_tinyssh(const unsigned char *x, const unsigned char *y) {
crypto_int16 d = 0;
long long i;
for (i = 0; i < crypto_verify_16_BYTES; ++i) { d |= x[i] ^ y[i]; }
return crypto_int16_nonzero_mask(d);
}
tinyssh-20250501/crypto_verify_16.h 0000664 0000000 0000000 00000000650 15004722224 0017035 0 ustar 00root root 0000000 0000000 #ifndef crypto_verify_16_H
#define crypto_verify_16_H
#define crypto_verify_16_tinyssh_BYTES 16
extern int crypto_verify_16_tinyssh(const unsigned char *,
const unsigned char *);
#define crypto_verify_16 crypto_verify_16_tinyssh
#define crypto_verify_16_BYTES crypto_verify_16_tinyssh_BYTES
#define crypto_verify_16_IMPLEMENTATION "tinyssh"
#define crypto_verify_16_VERSION "-"
#endif
tinyssh-20250501/crypto_verify_32.c 0000664 0000000 0000000 00000000446 15004722224 0017031 0 ustar 00root root 0000000 0000000 #include "crypto_int16.h"
#include "crypto_verify_32.h"
int crypto_verify_32_tinyssh(const unsigned char *x, const unsigned char *y) {
crypto_int16 d = 0;
long long i;
for (i = 0; i < crypto_verify_32_BYTES; ++i) { d |= x[i] ^ y[i]; }
return crypto_int16_nonzero_mask(d);
}
tinyssh-20250501/crypto_verify_32.h 0000664 0000000 0000000 00000000650 15004722224 0017033 0 ustar 00root root 0000000 0000000 #ifndef crypto_verify_32_H
#define crypto_verify_32_H
#define crypto_verify_32_tinyssh_BYTES 32
extern int crypto_verify_32_tinyssh(const unsigned char *,
const unsigned char *);
#define crypto_verify_32 crypto_verify_32_tinyssh
#define crypto_verify_32_BYTES crypto_verify_32_tinyssh_BYTES
#define crypto_verify_32_IMPLEMENTATION "tinyssh"
#define crypto_verify_32_VERSION "-"
#endif
tinyssh-20250501/cryptoint/ 0000775 0000000 0000000 00000000000 15004722224 0015504 5 ustar 00root root 0000000 0000000 tinyssh-20250501/cryptoint/LICENSE 0000664 0000000 0000000 00000000552 15004722224 0016513 0 ustar 00root root 0000000 0000000 The files in this directory are hereby placed into the public domain.
[SPDX-License-Identifier](https://spdx.dev/ids/):
[LicenseRef-PD-hp](https://cr.yp.to/spdx.html)
OR
[CC0-1.0](https://spdx.org/licenses/CC0-1.0.html)
OR
[0BSD](https://spdx.org/licenses/0BSD.html)
OR
[MIT-0](https://spdx.org/licenses/MIT-0.html)
OR
[MIT](https://spdx.org/licenses/MIT.html)
tinyssh-20250501/cryptoint/README 0000664 0000000 0000000 00000024336 15004722224 0016374 0 ustar 00root root 0000000 0000000 cryptoint 20250414
D. J. Bernstein
## Introduction
cryptoint is an almost-header-only library providing functions for
comparisons, bit extractions, etc. on `{int,uint}{8,16,32,64}`, while
trying to protect against compilers introducing timing variations.
Advantages over previous library functions for basic constant-time
operations:
* cryptoint provides more functions.
* cryptoint provides better protection against current compiler
"optimizations". (This does not mean the protection is a guarantee.
Make sure to apply further tests such as TIMECOP to the compiled code.)
* All cryptoint functions, after compilation with some common compilers
for some common architectures, have been verified using
[saferewrite](https://pqsrc.cr.yp.to/downloads.html)
to match reference implementations for all inputs.
Often applications have their own ad-hoc constant-time code. Advantages
of rewriting those to use the centralized cryptoint functions:
* More likely to generate code that's
[actually constant-time](https://blog.cr.yp.to/20240803-clang.html).
* Less code to fix in response to whatever further damage is caused by
compiler "optimizations".
* Often less CPU time, although it's rare for this to matter.
* Better testing.
cryptoint is used inside
[SUPERCOP](https://bench.cr.yp.to/supercop.html),
[lib25519](https://lib25519.cr.yp.to),
[libmceliece](https://lib.mceliece.org),
[libntruprime](https://libntruprime.cr.yp.to),
and
[OpenSSH](https://github.com/openssh/openssh-portable/blob/master/sntrup761.c).
## Usage
To use (e.g.) `crypto_int64` in your own package, simply copy
`crypto_int64.h` and `int64_optblocker.c` into that package. Compilation
recommendations:
* Use `gcc` or `clang`. (Porting to other compilers should be a simple
matter of compiling with `-D__attribute__(x)=`; however, tests have
been carried out only with `gcc` and `clang`.)
* Compile all code with `-fwrapv`. (This disables some compiler
"optimizations" that often trigger bugs in integer arithmetic. These
"optimizations" have very little effect on performance.)
* Compile `*optblocker.c` separately: don't manually merge
`*optblocker.c` into other files; don't use the `-flto` option in
compiling `*optblocker.c`.
`crypto_{int,uint}64.h` define types `crypto_{int,uint}64` and the
following API functions:
| usage | meaning |
| ----- | ----- |
| `z = crypto_{int,uint}64_load(ptr)` | little-endian load |
| `crypto_{int,uint}64_store(ptr,z)` | little-endian store |
| `z = crypto_{int,uint}64_load_bigendian(ptr)` | big-endian load |
| `crypto_{int,uint}64_store_bigendian(ptr,z)` | big-endian store |
| `z = crypto_int64_positive_mask(x)` | `z = -(x > 0) |
| `z = crypto_int64_positive_01(x)` | `z = (x > 0) |
| `z = crypto_int64_negative_mask(x)` | `z = -(x < 0) |
| `z = crypto_int64_negative_01(x)` | `z = (x < 0) |
| `z = crypto_int64_topbit_mask(x)` | `z = -(x < 0) |
| `z = crypto_int64_topbit_01(x)` | `z = (x < 0) |
| `z = crypto_uint64_topbit_mask(x)` | `z = -(x >> 63) |
| `z = crypto_uint64_topbit_01(x)` | `z = (x >> 63) |
| `z = crypto_{int,uint}64_nonzero_mask(x)` | `z = -(x != 0) |
| `z = crypto_{int,uint}64_nonzero_01(x)` | `z = (x != 0) |
| `z = crypto_{int,uint}64_zero_mask(x)` | `z = -(x == 0) |
| `z = crypto_{int,uint}64_zero_01(x)` | `z = (x == 0) |
| `z = crypto_{int,uint}64_unequal_mask(x,y)` | `z = -(x != y) |
| `z = crypto_{int,uint}64_unequal_01(x,y)` | `z = (x != y) |
| `z = crypto_{int,uint}64_equal_mask(x,y)` | `z = -(x == y) |
| `z = crypto_{int,uint}64_equal_01(x,y)` | `z = (x == y) |
| `z = crypto_{int,uint}64_smaller_mask(x,y)` | `z = -(x < y) |
| `z = crypto_{int,uint}64_smaller_01(x,y)` | `z = (x < y) |
| `z = crypto_{int,uint}64_leq_mask(x,y)` | `z = -(x <= y) |
| `z = crypto_{int,uint}64_leq_01(x,y)` | `z = (x <= y) |
| `z = crypto_{int,uint}64_min(x,y)` | `z = (x < y) ? x : y` |
| `z = crypto_{int,uint}64_max(x,y)` | `z = (x > y) ? x : y` |
| `crypto_{int,uint}64_minmax(&x,&y)` | in-place `(x,y) = (min,max)` |
| `z = crypto_{int,uint}64_bottombit_mask(x)` | `z = -(x & 1) |
| `z = crypto_{int,uint}64_bottombit_01(x)` | `z = (x & 1) |
| `z = crypto_{int,uint}64_shlmod(x,j)` | `z = x << (j&63)` |
| `z = crypto_{int,uint}64_shrmod(x,j)` | `z = x >> (j&63)` |
| `z = crypto_{int,uint}64_bitmod_mask(x,j)` | `z = -((x >> (j&63)) & 1)` |
| `z = crypto_{int,uint}64_bitmod_01(x,j)` | `z = ((x >> (j&63)) & 1)` |
| `z = crypto_{int,uint}64_ones_num(x)` | `z =` number of bits set in `x` (0 through 64) |
| `z = crypto_{int,uint}64_bottomzeros_num(x)` | `z =` number of low-order 0 bits in `x` (0 through 64) |
There are also `bitinrangepublicpos` functions tested by `test.c` and
used internally. These are not part of the API; use `bitmod` instead.
Notes on the split between `mask` functions and `01` functions:
* The `01` functions are aligned with C's convention of representing
true as `1` and false as `0`. For example, `x < y` in C, like
`x < y ? 1 : 0`, means `1` if `x` is smaller than `y`, else `0`. You
can replace this with `crypto_int64_smaller_01(x,y)` if `x` and `y`
are 64-bit signed integers.
* The `mask` functions are aligned with a convention of representing
true as `-1` and false as `0`, which works well with logic
instructions. For example, you can rewrite the variable-time code
`x < y ? u : v` (meaning `u` if `x < y`, else `v`) as
`v ^ ((u ^ v) & crypto_int64_smaller_mask(x,y))`. For comparison,
`v + (u - v) * crypto_int64_smaller_01(x,y)` would rely on
multiplication taking constant time, but on some platforms
multiplication takes variable time.
Beware that the `mask` convention, like any other use of negative
integers, isn't compatible with unsigned integer extension. For example,
conversion from `uint8` to `uint64` will convert `-1` to `255` rather
than to `-1`. This is an argument for using `int` rather than `uint`. On
the other hand, C allows compilers to damage the correctness of `int`
code in various ways that aren't allowed for `uint`. Compiling with
`-fwrapv`, as recommended above, disables some of that damage.
## Internals
cryptoint has two main defenses against timing variations being
introduced by compiler "optimizations".
The first defense is `optblocker`, which is a global `volatile` variable
containing 0. The usage of `optblocker` in cryptoint is designed to
systematically hide 1-bit data paths from compilers.
The second defense is assembly. This would be safest as separate `.s`
files, but the usability constraint of having only two files per size
(one `.h` file, one `optblocker.c` file) forces cryptoint to use inline
assembly instead. Currently cryptoint has assembly implementations of
various functions for
* `amd64` (64-bit AMD and Intel, aka `x86_64`),
* `arm64` (64-bit ARM, aka `aarch64`),
* `arm32` (32-bit ARM, not in Thumb mode), and
* `sparc32` (32-bit SPARC, still used in space applications).
These are selected automatically for `gcc` and `clang` using tests for
`__GNUC__`, `__x86_64__`, etc. Other platforms fall back automatically
to portable code using `optblocker`.
From an auditing perspective, reviewing cryptoint means checking code
for many different functions, and the usage of assembly makes this work
more difficult:
* Assembly implementations are separate for each size, and separate
for each targeted platform: e.g., `crypto_int*_negative_mask` has
not just portable code but also 16 assembly implementations (4
sizes for each of `amd64`, `arm64`, `arm32`, `sparc32`).
* Assembly is generally less readable than C, making bugs more
likely to escape the notice of authors and reviewers. Assembly also
depends on quirks of the targeted instruction sets.
* Inline assembly has its own quirks, with a more complicated
interface than the function ABI.
cryptoint takes the following steps to reduce the risk of bugs:
* cryptoint includes a new `readasm` tool that generates inline assembly
from an easier-to-read format. (See `functions` for the source code in
this format; `crypto*.h` are automatically generated.) This improves
auditability. Also, the converter generates register annotations,
avoiding some common classes of inline-assembly bugs.
* All cryptoint functions are subjected to a battery of conventional
unit tests via `cryptoint/test.c` in SUPERCOP. Various functions are
also indirectly tested via tests of implementations that use cryptoint.
* All cryptoint functions are also integrated into saferewrite, which,
after compilation, uses symbolic execution and Z3 to check equivalence
to reference implementations. This has been run with various compilers
for `amd64`, `arm64`, `arm32`, `mips64`, `sparc32`, and `x86`; see
`saferewrite-results`.
## Implementation notes
The portable version of `SIGNED_negative_mask` could instead use
`X >>= (N-1) ^ SIGNED_optblocker`.
The use of `optblocker` inside `bitinrangepublicpos` is meant to protect
against the compiler causing trouble if `S` is a compile-time constant
`63` (or in general 1 below the width), although this is unnecessary for
the current applications of `bitinrangepublicpos`.
The assembly implementations of `shlmod` and `shrmod` assume that shift
instructions take constant time. The portable implementation does not
make this assumption. This is important: for example, compilers for
32-bit platforms will typically produce `int64` shift code that takes
different time for different shift distances.
Various assembly implementations assume that conditional instructions,
such as conditional moves, take constant time.
The `amd64` implementation of `TYPE_nonzero_01` could use `set` instead
of `cmov`.
There are more ways to implement `TYPE_ones_num`. The ending could use
`*0x...10101`, but this would rely on multiplication instructions taking
constant time, which, as noted above, isn't true on some platforms. For
`__SSE4_2__` one could use `popcnt`. For `arm64` one could use `cnt` for
`cssc`, or NEON `cnt`.
For `TYPE_bottomzeros_num`, one could use `tzcnt` for `amd64` with
`bmi1`, or `ctz` for `arm64` with `cssc`.
tinyssh-20250501/cryptoint/autogen 0000775 0000000 0000000 00000000072 15004722224 0017073 0 ustar 00root root 0000000 0000000 #!/bin/sh
./create.py
./specialize.py
rm -rf __pycache__
tinyssh-20250501/cryptoint/create.py 0000775 0000000 0000000 00000005167 15004722224 0017335 0 ustar 00root root 0000000 0000000 #!/usr/bin/env python3
vars = 'k','l','p','q','r','s','x','y','z'
with open('version') as f:
version = f.read().strip()
# ===== top
csh = f'''/* auto-generated: cd cryptoint; ./autogen */
/* {version} */
#ifndef crypto_intN_h
#define crypto_intN_h
#include
#define crypto_intN intN_t
#define crypto_intN_unsigned uintN_t
#define crypto_intN_optblocker namespace_intN_optblocker
extern volatile crypto_intN crypto_intN_optblocker;
'''
cuh = f'''/* auto-generated: cd cryptoint; ./autogen */
/* {version} */
#ifndef crypto_uintN_h
#define crypto_uintN_h
#include
#define crypto_uintN uintN_t
#define crypto_uintN_signed intN_t
#define crypto_uintN_signed_optblocker namespace_uintN_signed_optblocker
extern volatile crypto_uintN_signed crypto_uintN_signed_optblocker;
'''
# ===== functions
functions = []
with open('functions') as f:
which,fun = 'both',None
for line in f:
if fun is None:
if line.startswith('#'): continue
if line.strip() == '': continue
if line.strip() == 'SIGNED:':
which = 'signed'
continue
if line.strip() == 'UNSIGNED:':
which = 'unsigned'
continue
fun = ''
fun += line
if line.strip() == '}':
functions += [(which,fun)]
which,fun = 'both',None
for which,fun in functions:
if which in ('both','signed'):
data = fun
data = data.replace('TYPE','crypto_intN')
data = data.replace('UNSIGNED','crypto_intN_unsigned')
data = data.replace('SIGNED','crypto_intN')
for v in vars:
data = data.replace(v.upper(),'crypto_intN_'+v)
csh += '__attribute__((unused))\n'
csh += 'static inline\n'
csh += data
csh += '\n'
if which in ('both','unsigned'):
data = fun
data = data.replace('TYPE','crypto_uintN')
data = data.replace('UNSIGNED','crypto_uintN')
data = data.replace('SIGNED','crypto_uintN_signed')
for v in vars:
data = data.replace(v.upper(),'crypto_uintN_'+v)
cuh += '__attribute__((unused))\n'
cuh += 'static inline\n'
cuh += data
cuh += '\n'
# ===== bottom
csh += '''#endif
'''
cuh += '''#endif
'''
# ===== ship it
with open('crypto_intN.h','w') as f:
f.write(csh)
with open('crypto_uintN.h','w') as f:
f.write(cuh)
with open('intN_optblocker.c','w') as f:
f.write(f'''/* auto-generated: cd cryptoint; ./autogen */
/* {version} */
#include "crypto_intN.h"
volatile crypto_intN crypto_intN_optblocker = 0;
''')
with open('uintN_optblocker.c','w') as f:
f.write(f'''/* auto-generated: cd cryptoint; ./autogen */
/* {version} */
#include "crypto_uintN.h"
volatile crypto_uintN_signed crypto_uintN_signed_optblocker = 0;
''')
tinyssh-20250501/cryptoint/crypto_int16.h 0000664 0000000 0000000 00000064724 15004722224 0020233 0 ustar 00root root 0000000 0000000 /* auto-generated: cd cryptoint; ./autogen */
/* cryptoint 20250414 */
#ifndef crypto_int16_h
#define crypto_int16_h
#include
#define crypto_int16 int16_t
#define crypto_int16_unsigned uint16_t
#define crypto_int16_optblocker tinyssh_int16_optblocker
extern volatile crypto_int16 crypto_int16_optblocker;
__attribute__((unused))
static inline
crypto_int16 crypto_int16_load(const unsigned char *crypto_int16_s) {
crypto_int16 crypto_int16_z = 0;
crypto_int16_z |= ((crypto_int16) (*crypto_int16_s++)) << 0;
crypto_int16_z |= ((crypto_int16) (*crypto_int16_s++)) << 8;
return crypto_int16_z;
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_load_bigendian(const unsigned char *crypto_int16_s) {
crypto_int16 crypto_int16_z = 0;
crypto_int16_z |= ((crypto_int16) (*crypto_int16_s++)) << 8;
crypto_int16_z |= ((crypto_int16) (*crypto_int16_s++)) << 0;
return crypto_int16_z;
}
__attribute__((unused))
static inline
void crypto_int16_store(unsigned char *crypto_int16_s,crypto_int16 crypto_int16_x) {
*crypto_int16_s++ = crypto_int16_x >> 0;
*crypto_int16_s++ = crypto_int16_x >> 8;
}
__attribute__((unused))
static inline
void crypto_int16_store_bigendian(unsigned char *crypto_int16_s,crypto_int16 crypto_int16_x) {
*crypto_int16_s++ = crypto_int16_x >> 8;
*crypto_int16_s++ = crypto_int16_x >> 0;
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_negative_mask(crypto_int16 crypto_int16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarw $15,%0" : "+r"(crypto_int16_x) : : "cc");
return crypto_int16_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_y;
__asm__ ("sbfx %w0,%w1,15,1" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
return crypto_int16_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int16 crypto_int16_y;
__asm__ ("sxth %0,%1\n asr %0,%0,#31" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
return crypto_int16_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int16 crypto_int16_y;
__asm__ ("sll %1,16,%0\n sra %0,31,%0" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
return crypto_int16_y;
#else
crypto_int16_x >>= 16-6;
crypto_int16_x += crypto_int16_optblocker;
crypto_int16_x >>= 5;
return crypto_int16_x;
#endif
}
__attribute__((unused))
static inline
crypto_int16_unsigned crypto_int16_unsigned_topbit_01(crypto_int16_unsigned crypto_int16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrw $15,%0" : "+r"(crypto_int16_x) : : "cc");
return crypto_int16_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16_unsigned crypto_int16_y;
__asm__ ("ubfx %w0,%w1,15,1" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
return crypto_int16_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int16 crypto_int16_y;
__asm__ ("uxth %0,%1\n lsr %0,%0,#15" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
return crypto_int16_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int16_unsigned crypto_int16_y;
__asm__ ("sll %1,16,%0\n srl %0,16,%0\n srl %0,15,%0" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
return crypto_int16_y;
#else
crypto_int16_x >>= 16-6;
crypto_int16_x += crypto_int16_optblocker;
crypto_int16_x >>= 5;
return crypto_int16_x;
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_negative_01(crypto_int16 crypto_int16_x) {
return crypto_int16_unsigned_topbit_01(crypto_int16_x);
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_topbit_mask(crypto_int16 crypto_int16_x) {
return crypto_int16_negative_mask(crypto_int16_x);
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_topbit_01(crypto_int16 crypto_int16_x) {
return crypto_int16_unsigned_topbit_01(crypto_int16_x);
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_bottombit_mask(crypto_int16 crypto_int16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andw $1,%0" : "+r"(crypto_int16_x) : : "cc");
return -crypto_int16_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_y;
__asm__ ("sbfx %w0,%w1,0,1" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
return crypto_int16_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int16 crypto_int16_y;
__asm__ ("and %0,%1,#1\n neg %0,%0" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
return crypto_int16_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int16 crypto_int16_y;
__asm__ ("and %1,1,%0\n neg %0,%0" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
return crypto_int16_y;
#else
crypto_int16_x &= 1 + crypto_int16_optblocker;
return -crypto_int16_x;
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_bottombit_01(crypto_int16 crypto_int16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andw $1,%0" : "+r"(crypto_int16_x) : : "cc");
return crypto_int16_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_y;
__asm__ ("ubfx %w0,%w1,0,1" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
return crypto_int16_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int16 crypto_int16_y;
__asm__ ("and %0,%1,#1" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
return crypto_int16_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int16 crypto_int16_y;
__asm__ ("and %1,1,%0" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
return crypto_int16_y;
#else
crypto_int16_x &= 1 + crypto_int16_optblocker;
return crypto_int16_x;
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_bitinrangepublicpos_mask(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarw %%cl,%0" : "+r"(crypto_int16_x) : "c"(crypto_int16_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("sxth %w0,%w0\n asr %w0,%w0,%w1" : "+&r"(crypto_int16_x) : "r"(crypto_int16_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %0,%0,#15\n sxth %1,%1\n asr %1,%1,%0" : "+&r"(crypto_int16_s), "+r"(crypto_int16_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("and %0,15,%0\n sra %1,%0,%1" : "+&r"(crypto_int16_s), "+r"(crypto_int16_x) : : );
#else
crypto_int16_x >>= crypto_int16_s ^ crypto_int16_optblocker;
#endif
return crypto_int16_bottombit_mask(crypto_int16_x);
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_bitinrangepublicpos_01(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarw %%cl,%0" : "+r"(crypto_int16_x) : "c"(crypto_int16_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("sxth %w0,%w0\n asr %w0,%w0,%w1" : "+&r"(crypto_int16_x) : "r"(crypto_int16_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %0,%0,#15\n sxth %1,%1\n asr %1,%1,%0" : "+&r"(crypto_int16_s), "+r"(crypto_int16_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("and %0,15,%0\n sra %1,%0,%1" : "+&r"(crypto_int16_s), "+r"(crypto_int16_x) : : );
#else
crypto_int16_x >>= crypto_int16_s ^ crypto_int16_optblocker;
#endif
return crypto_int16_bottombit_01(crypto_int16_x);
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_shlmod(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_s) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16_s &= 15;
__asm__ ("shlw %%cl,%0" : "+r"(crypto_int16_x) : "c"(crypto_int16_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16_s &= 15;
__asm__ ("and %w0,%w0,65535\n lsl %w0,%w0,%w1" : "+&r"(crypto_int16_x) : "r"(crypto_int16_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int16_s &= 15;
__asm__ ("lsl %0,%0,%1\n sxth %0,%0" : "+r"(crypto_int16_x) : "r"(crypto_int16_s) : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int16_s &= 15; crypto_int16_s += 16;
__asm__ ("sll %0,%1,%0\n sra %0,16,%0" : "+r"(crypto_int16_x) : "r"(crypto_int16_s) : );
#else
int crypto_int16_k, crypto_int16_l;
for (crypto_int16_l = 0,crypto_int16_k = 1;crypto_int16_k < 16;++crypto_int16_l,crypto_int16_k *= 2)
crypto_int16_x ^= (crypto_int16_x ^ (crypto_int16_x << crypto_int16_k)) & crypto_int16_bitinrangepublicpos_mask(crypto_int16_s,crypto_int16_l);
#endif
return crypto_int16_x;
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_shrmod(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_s) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16_s &= 15;
__asm__ ("sarw %%cl,%0" : "+r"(crypto_int16_x) : "c"(crypto_int16_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16_s &= 15;
__asm__ ("sxth %w0,%w0\n asr %w0,%w0,%w1" : "+&r"(crypto_int16_x) : "r"(crypto_int16_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int16_s &= 15;
__asm__ ("sxth %0,%0\n asr %0,%0,%1" : "+&r"(crypto_int16_x) : "r"(crypto_int16_s) : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int16_s &= 15;
__asm__ ("sra %0,%1,%0" : "+r"(crypto_int16_x) : "r"(crypto_int16_s) : );
#else
int crypto_int16_k, crypto_int16_l;
for (crypto_int16_l = 0,crypto_int16_k = 1;crypto_int16_k < 16;++crypto_int16_l,crypto_int16_k *= 2)
crypto_int16_x ^= (crypto_int16_x ^ (crypto_int16_x >> crypto_int16_k)) & crypto_int16_bitinrangepublicpos_mask(crypto_int16_s,crypto_int16_l);
#endif
return crypto_int16_x;
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_bitmod_mask(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_s) {
crypto_int16_x = crypto_int16_shrmod(crypto_int16_x,crypto_int16_s);
return crypto_int16_bottombit_mask(crypto_int16_x);
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_bitmod_01(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_s) {
crypto_int16_x = crypto_int16_shrmod(crypto_int16_x,crypto_int16_s);
return crypto_int16_bottombit_01(crypto_int16_x);
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_nonzero_mask(crypto_int16 crypto_int16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 crypto_int16_q,crypto_int16_z;
__asm__ ("xorw %0,%0\n movw $-1,%1\n testw %2,%2\n cmovnew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_z;
__asm__ ("tst %w1,65535\n csetm %w0,ne" : "=r"(crypto_int16_z) : "r"(crypto_int16_x) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("uxth %0,%0\n cmp %0,#0\n movne %0,#-1" : "+r"(crypto_int16_x) : : "cc");
return crypto_int16_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int16 crypto_int16_z;
__asm__ ("sll %0,16,%0\n srl %0,16,%0\n cmp %%g0,%0\n subx %%g0,0,%1" : "+r"(crypto_int16_x), "=r"(crypto_int16_z) : : "cc");
return crypto_int16_z;
#else
crypto_int16_x |= -crypto_int16_x;
return crypto_int16_negative_mask(crypto_int16_x);
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_nonzero_01(crypto_int16 crypto_int16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 crypto_int16_q,crypto_int16_z;
__asm__ ("xorw %0,%0\n movw $1,%1\n testw %2,%2\n cmovnew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_z;
__asm__ ("tst %w1,65535\n cset %w0,ne" : "=r"(crypto_int16_z) : "r"(crypto_int16_x) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("uxth %0,%0\n cmp %0,#0\n movne %0,#1" : "+r"(crypto_int16_x) : : "cc");
return crypto_int16_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int16 crypto_int16_z;
__asm__ ("sll %0,16,%0\n srl %0,16,%0\n cmp %%g0,%0\n addx %%g0,0,%1" : "+r"(crypto_int16_x), "=r"(crypto_int16_z) : : "cc");
return crypto_int16_z;
#else
crypto_int16_x |= -crypto_int16_x;
return crypto_int16_unsigned_topbit_01(crypto_int16_x);
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_positive_mask(crypto_int16 crypto_int16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 crypto_int16_q,crypto_int16_z;
__asm__ ("xorw %0,%0\n movw $-1,%1\n testw %2,%2\n cmovgw %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_z;
__asm__ ("sxth %w0,%w1\n cmp %w0,0\n csetm %w0,gt" : "=r"(crypto_int16_z) : "r"(crypto_int16_x) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int16 crypto_int16_z;
__asm__ ("sll %1,16,%0\n sra %0,31,%0\n sub %0,%1,%0\n sra %0,31,%0" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x) : );
return crypto_int16_z;
#else
crypto_int16 crypto_int16_z = -crypto_int16_x;
crypto_int16_z ^= crypto_int16_x & crypto_int16_z;
return crypto_int16_negative_mask(crypto_int16_z);
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_positive_01(crypto_int16 crypto_int16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 crypto_int16_q,crypto_int16_z;
__asm__ ("xorw %0,%0\n movw $1,%1\n testw %2,%2\n cmovgw %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_z;
__asm__ ("sxth %w0,%w1\n cmp %w0,0\n cset %w0,gt" : "=r"(crypto_int16_z) : "r"(crypto_int16_x) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int16 crypto_int16_z;
__asm__ ("sll %1,16,%0\n sra %0,31,%0\n sub %0,%1,%0\n srl %0,31,%0" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x) : );
return crypto_int16_z;
#else
crypto_int16 crypto_int16_z = -crypto_int16_x;
crypto_int16_z ^= crypto_int16_x & crypto_int16_z;
return crypto_int16_unsigned_topbit_01(crypto_int16_z);
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_zero_mask(crypto_int16 crypto_int16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 crypto_int16_q,crypto_int16_z;
__asm__ ("xorw %0,%0\n movw $-1,%1\n testw %2,%2\n cmovew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_z;
__asm__ ("tst %w1,65535\n csetm %w0,eq" : "=r"(crypto_int16_z) : "r"(crypto_int16_x) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int16 crypto_int16_z;
__asm__ ("sll %0,16,%0\n srl %0,16,%0\n cmp %%g0,%0\n addx %%g0,-1,%1" : "+r"(crypto_int16_x), "=r"(crypto_int16_z) : : "cc");
return crypto_int16_z;
#else
return ~crypto_int16_nonzero_mask(crypto_int16_x);
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_zero_01(crypto_int16 crypto_int16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 crypto_int16_q,crypto_int16_z;
__asm__ ("xorw %0,%0\n movw $1,%1\n testw %2,%2\n cmovew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_z;
__asm__ ("tst %w1,65535\n cset %w0,eq" : "=r"(crypto_int16_z) : "r"(crypto_int16_x) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int16 crypto_int16_z;
__asm__ ("sll %0,16,%0\n srl %0,16,%0\n cmp %%g0,%0\n subx %%g0,-1,%1" : "+r"(crypto_int16_x), "=r"(crypto_int16_z) : : "cc");
return crypto_int16_z;
#else
return 1-crypto_int16_nonzero_01(crypto_int16_x);
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_unequal_mask(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 crypto_int16_q,crypto_int16_z;
__asm__ ("xorw %0,%0\n movw $-1,%1\n cmpw %3,%2\n cmovnew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_z;
__asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n csetm %w0,ne" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#else
return crypto_int16_nonzero_mask(crypto_int16_x ^ crypto_int16_y);
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_unequal_01(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 crypto_int16_q,crypto_int16_z;
__asm__ ("xorw %0,%0\n movw $1,%1\n cmpw %3,%2\n cmovnew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_z;
__asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n cset %w0,ne" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#else
return crypto_int16_nonzero_01(crypto_int16_x ^ crypto_int16_y);
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_equal_mask(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 crypto_int16_q,crypto_int16_z;
__asm__ ("xorw %0,%0\n movw $-1,%1\n cmpw %3,%2\n cmovew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_z;
__asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n csetm %w0,eq" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#else
return crypto_int16_zero_mask(crypto_int16_x ^ crypto_int16_y);
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_equal_01(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 crypto_int16_q,crypto_int16_z;
__asm__ ("xorw %0,%0\n movw $1,%1\n cmpw %3,%2\n cmovew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_z;
__asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n cset %w0,eq" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#else
return crypto_int16_zero_01(crypto_int16_x ^ crypto_int16_y);
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_min(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("cmpw %1,%0\n cmovgw %1,%0" : "+r"(crypto_int16_x) : "r"(crypto_int16_y) : "cc");
return crypto_int16_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("sxth %w0,%w0\n cmp %w0,%w1,sxth\n csel %w0,%w0,%w1,lt" : "+&r"(crypto_int16_x) : "r"(crypto_int16_y) : "cc");
return crypto_int16_x;
#else
crypto_int16 crypto_int16_r = crypto_int16_y ^ crypto_int16_x;
crypto_int16 crypto_int16_z = crypto_int16_y - crypto_int16_x;
crypto_int16_z ^= crypto_int16_r & (crypto_int16_z ^ crypto_int16_y);
crypto_int16_z = crypto_int16_negative_mask(crypto_int16_z);
crypto_int16_z &= crypto_int16_r;
return crypto_int16_x ^ crypto_int16_z;
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_max(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("cmpw %1,%0\n cmovlw %1,%0" : "+r"(crypto_int16_x) : "r"(crypto_int16_y) : "cc");
return crypto_int16_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("sxth %w0,%w0\n cmp %w0,%w1,sxth\n csel %w0,%w1,%w0,lt" : "+&r"(crypto_int16_x) : "r"(crypto_int16_y) : "cc");
return crypto_int16_x;
#else
crypto_int16 crypto_int16_r = crypto_int16_y ^ crypto_int16_x;
crypto_int16 crypto_int16_z = crypto_int16_y - crypto_int16_x;
crypto_int16_z ^= crypto_int16_r & (crypto_int16_z ^ crypto_int16_y);
crypto_int16_z = crypto_int16_negative_mask(crypto_int16_z);
crypto_int16_z &= crypto_int16_r;
return crypto_int16_y ^ crypto_int16_z;
#endif
}
__attribute__((unused))
static inline
void crypto_int16_minmax(crypto_int16 *crypto_int16_p,crypto_int16 *crypto_int16_q) {
crypto_int16 crypto_int16_x = *crypto_int16_p;
crypto_int16 crypto_int16_y = *crypto_int16_q;
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 crypto_int16_z;
__asm__ ("cmpw %2,%1\n movw %1,%0\n cmovgw %2,%1\n cmovgw %0,%2" : "=&r"(crypto_int16_z), "+&r"(crypto_int16_x), "+r"(crypto_int16_y) : : "cc");
*crypto_int16_p = crypto_int16_x;
*crypto_int16_q = crypto_int16_y;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_r, crypto_int16_s;
__asm__ ("sxth %w0,%w0\n cmp %w0,%w3,sxth\n csel %w1,%w0,%w3,lt\n csel %w2,%w3,%w0,lt" : "+&r"(crypto_int16_x), "=&r"(crypto_int16_r), "=r"(crypto_int16_s) : "r"(crypto_int16_y) : "cc");
*crypto_int16_p = crypto_int16_r;
*crypto_int16_q = crypto_int16_s;
#else
crypto_int16 crypto_int16_r = crypto_int16_y ^ crypto_int16_x;
crypto_int16 crypto_int16_z = crypto_int16_y - crypto_int16_x;
crypto_int16_z ^= crypto_int16_r & (crypto_int16_z ^ crypto_int16_y);
crypto_int16_z = crypto_int16_negative_mask(crypto_int16_z);
crypto_int16_z &= crypto_int16_r;
crypto_int16_x ^= crypto_int16_z;
crypto_int16_y ^= crypto_int16_z;
*crypto_int16_p = crypto_int16_x;
*crypto_int16_q = crypto_int16_y;
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_smaller_mask(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 crypto_int16_q,crypto_int16_z;
__asm__ ("xorw %0,%0\n movw $-1,%1\n cmpw %3,%2\n cmovlw %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_z;
__asm__ ("sxth %w0,%w1\n cmp %w0,%w2,sxth\n csetm %w0,lt" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#else
crypto_int16 crypto_int16_r = crypto_int16_x ^ crypto_int16_y;
crypto_int16 crypto_int16_z = crypto_int16_x - crypto_int16_y;
crypto_int16_z ^= crypto_int16_r & (crypto_int16_z ^ crypto_int16_x);
return crypto_int16_negative_mask(crypto_int16_z);
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_smaller_01(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 crypto_int16_q,crypto_int16_z;
__asm__ ("xorw %0,%0\n movw $1,%1\n cmpw %3,%2\n cmovlw %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_z;
__asm__ ("sxth %w0,%w1\n cmp %w0,%w2,sxth\n cset %w0,lt" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#else
crypto_int16 crypto_int16_r = crypto_int16_x ^ crypto_int16_y;
crypto_int16 crypto_int16_z = crypto_int16_x - crypto_int16_y;
crypto_int16_z ^= crypto_int16_r & (crypto_int16_z ^ crypto_int16_x);
return crypto_int16_unsigned_topbit_01(crypto_int16_z);
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_leq_mask(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 crypto_int16_q,crypto_int16_z;
__asm__ ("xorw %0,%0\n movw $-1,%1\n cmpw %3,%2\n cmovlew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_z;
__asm__ ("sxth %w0,%w1\n cmp %w0,%w2,sxth\n csetm %w0,le" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#else
return ~crypto_int16_smaller_mask(crypto_int16_y,crypto_int16_x);
#endif
}
__attribute__((unused))
static inline
crypto_int16 crypto_int16_leq_01(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 crypto_int16_q,crypto_int16_z;
__asm__ ("xorw %0,%0\n movw $1,%1\n cmpw %3,%2\n cmovlew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int16 crypto_int16_z;
__asm__ ("sxth %w0,%w1\n cmp %w0,%w2,sxth\n cset %w0,le" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
return crypto_int16_z;
#else
return 1-crypto_int16_smaller_01(crypto_int16_y,crypto_int16_x);
#endif
}
__attribute__((unused))
static inline
int crypto_int16_ones_num(crypto_int16 crypto_int16_x) {
crypto_int16_unsigned crypto_int16_y = crypto_int16_x;
const crypto_int16 C0 = 0x5555;
const crypto_int16 C1 = 0x3333;
const crypto_int16 C2 = 0x0f0f;
crypto_int16_y -= ((crypto_int16_y >> 1) & C0);
crypto_int16_y = (crypto_int16_y & C1) + ((crypto_int16_y >> 2) & C1);
crypto_int16_y = (crypto_int16_y + (crypto_int16_y >> 4)) & C2;
crypto_int16_y = (crypto_int16_y + (crypto_int16_y >> 8)) & 0xff;
return crypto_int16_y;
}
__attribute__((unused))
static inline
int crypto_int16_bottomzeros_num(crypto_int16 crypto_int16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int16 fallback = 16;
__asm__ ("bsfw %0,%0\n cmovew %1,%0" : "+&r"(crypto_int16_x) : "r"(fallback) : "cc");
return crypto_int16_x;
#elif defined(__GNUC__) && defined(__aarch64__)
int64_t crypto_int16_y;
__asm__ ("orr %w0,%w1,-65536\n rbit %w0,%w0\n clz %w0,%w0" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
return crypto_int16_y;
#else
crypto_int16 crypto_int16_y = crypto_int16_x ^ (crypto_int16_x-1);
crypto_int16_y = ((crypto_int16) crypto_int16_y) >> 1;
crypto_int16_y &= ~(crypto_int16_x & (((crypto_int16) 1) << (16-1)));
return crypto_int16_ones_num(crypto_int16_y);
#endif
}
#endif
tinyssh-20250501/cryptoint/crypto_int32.h 0000664 0000000 0000000 00000064043 15004722224 0020223 0 ustar 00root root 0000000 0000000 /* auto-generated: cd cryptoint; ./autogen */
/* cryptoint 20250414 */
#ifndef crypto_int32_h
#define crypto_int32_h
#include
#define crypto_int32 int32_t
#define crypto_int32_unsigned uint32_t
#define crypto_int32_optblocker tinyssh_int32_optblocker
extern volatile crypto_int32 crypto_int32_optblocker;
__attribute__((unused))
static inline
crypto_int32 crypto_int32_load(const unsigned char *crypto_int32_s) {
crypto_int32 crypto_int32_z = 0;
crypto_int32_z |= ((crypto_int32) (*crypto_int32_s++)) << 0;
crypto_int32_z |= ((crypto_int32) (*crypto_int32_s++)) << 8;
crypto_int32_z |= ((crypto_int32) (*crypto_int32_s++)) << 16;
crypto_int32_z |= ((crypto_int32) (*crypto_int32_s++)) << 24;
return crypto_int32_z;
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_load_bigendian(const unsigned char *crypto_int32_s) {
crypto_int32 crypto_int32_z = 0;
crypto_int32_z |= ((crypto_int32) (*crypto_int32_s++)) << 24;
crypto_int32_z |= ((crypto_int32) (*crypto_int32_s++)) << 16;
crypto_int32_z |= ((crypto_int32) (*crypto_int32_s++)) << 8;
crypto_int32_z |= ((crypto_int32) (*crypto_int32_s++)) << 0;
return crypto_int32_z;
}
__attribute__((unused))
static inline
void crypto_int32_store(unsigned char *crypto_int32_s,crypto_int32 crypto_int32_x) {
*crypto_int32_s++ = crypto_int32_x >> 0;
*crypto_int32_s++ = crypto_int32_x >> 8;
*crypto_int32_s++ = crypto_int32_x >> 16;
*crypto_int32_s++ = crypto_int32_x >> 24;
}
__attribute__((unused))
static inline
void crypto_int32_store_bigendian(unsigned char *crypto_int32_s,crypto_int32 crypto_int32_x) {
*crypto_int32_s++ = crypto_int32_x >> 24;
*crypto_int32_s++ = crypto_int32_x >> 16;
*crypto_int32_s++ = crypto_int32_x >> 8;
*crypto_int32_s++ = crypto_int32_x >> 0;
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_negative_mask(crypto_int32 crypto_int32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarl $31,%0" : "+r"(crypto_int32_x) : : "cc");
return crypto_int32_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_y;
__asm__ ("asr %w0,%w1,31" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
return crypto_int32_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int32 crypto_int32_y;
__asm__ ("asr %0,%1,#31" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
return crypto_int32_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int32 crypto_int32_y;
__asm__ ("sra %1,31,%0" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
return crypto_int32_y;
#else
crypto_int32_x >>= 32-6;
crypto_int32_x += crypto_int32_optblocker;
crypto_int32_x >>= 5;
return crypto_int32_x;
#endif
}
__attribute__((unused))
static inline
crypto_int32_unsigned crypto_int32_unsigned_topbit_01(crypto_int32_unsigned crypto_int32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrl $31,%0" : "+r"(crypto_int32_x) : : "cc");
return crypto_int32_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32_unsigned crypto_int32_y;
__asm__ ("lsr %w0,%w1,31" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
return crypto_int32_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int32 crypto_int32_y;
__asm__ ("lsr %0,%1,#31" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
return crypto_int32_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int32_unsigned crypto_int32_y;
__asm__ ("srl %1,31,%0" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
return crypto_int32_y;
#else
crypto_int32_x >>= 32-6;
crypto_int32_x += crypto_int32_optblocker;
crypto_int32_x >>= 5;
return crypto_int32_x;
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_negative_01(crypto_int32 crypto_int32_x) {
return crypto_int32_unsigned_topbit_01(crypto_int32_x);
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_topbit_mask(crypto_int32 crypto_int32_x) {
return crypto_int32_negative_mask(crypto_int32_x);
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_topbit_01(crypto_int32 crypto_int32_x) {
return crypto_int32_unsigned_topbit_01(crypto_int32_x);
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_bottombit_mask(crypto_int32 crypto_int32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andl $1,%0" : "+r"(crypto_int32_x) : : "cc");
return -crypto_int32_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_y;
__asm__ ("sbfx %w0,%w1,0,1" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
return crypto_int32_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int32 crypto_int32_y;
__asm__ ("and %0,%1,#1\n neg %0,%0" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
return crypto_int32_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int32 crypto_int32_y;
__asm__ ("and %1,1,%0\n neg %0,%0" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
return crypto_int32_y;
#else
crypto_int32_x &= 1 + crypto_int32_optblocker;
return -crypto_int32_x;
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_bottombit_01(crypto_int32 crypto_int32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andl $1,%0" : "+r"(crypto_int32_x) : : "cc");
return crypto_int32_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_y;
__asm__ ("ubfx %w0,%w1,0,1" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
return crypto_int32_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int32 crypto_int32_y;
__asm__ ("and %0,%1,#1" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
return crypto_int32_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int32 crypto_int32_y;
__asm__ ("and %1,1,%0" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
return crypto_int32_y;
#else
crypto_int32_x &= 1 + crypto_int32_optblocker;
return crypto_int32_x;
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_bitinrangepublicpos_mask(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarl %%cl,%0" : "+r"(crypto_int32_x) : "c"(crypto_int32_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("asr %w0,%w0,%w1" : "+r"(crypto_int32_x) : "r"(crypto_int32_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %0,%0,#31\n asr %1,%1,%0" : "+&r"(crypto_int32_s), "+r"(crypto_int32_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("sra %0,%1,%0" : "+r"(crypto_int32_x) : "r"(crypto_int32_s) : );
#else
crypto_int32_x >>= crypto_int32_s ^ crypto_int32_optblocker;
#endif
return crypto_int32_bottombit_mask(crypto_int32_x);
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_bitinrangepublicpos_01(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarl %%cl,%0" : "+r"(crypto_int32_x) : "c"(crypto_int32_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("asr %w0,%w0,%w1" : "+r"(crypto_int32_x) : "r"(crypto_int32_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %0,%0,#31\n asr %1,%1,%0" : "+&r"(crypto_int32_s), "+r"(crypto_int32_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("sra %0,%1,%0" : "+r"(crypto_int32_x) : "r"(crypto_int32_s) : );
#else
crypto_int32_x >>= crypto_int32_s ^ crypto_int32_optblocker;
#endif
return crypto_int32_bottombit_01(crypto_int32_x);
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_shlmod(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shll %%cl,%0" : "+r"(crypto_int32_x) : "c"(crypto_int32_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("lsl %w0,%w0,%w1" : "+r"(crypto_int32_x) : "r"(crypto_int32_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int32_s &= 31;
__asm__ ("lsl %0,%0,%1" : "+r"(crypto_int32_x) : "r"(crypto_int32_s) : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("sll %0,%1,%0" : "+r"(crypto_int32_x) : "r"(crypto_int32_s) : );
#else
int crypto_int32_k, crypto_int32_l;
for (crypto_int32_l = 0,crypto_int32_k = 1;crypto_int32_k < 32;++crypto_int32_l,crypto_int32_k *= 2)
crypto_int32_x ^= (crypto_int32_x ^ (crypto_int32_x << crypto_int32_k)) & crypto_int32_bitinrangepublicpos_mask(crypto_int32_s,crypto_int32_l);
#endif
return crypto_int32_x;
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_shrmod(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarl %%cl,%0" : "+r"(crypto_int32_x) : "c"(crypto_int32_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("asr %w0,%w0,%w1" : "+r"(crypto_int32_x) : "r"(crypto_int32_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int32_s &= 31;
__asm__ ("asr %0,%0,%1" : "+r"(crypto_int32_x) : "r"(crypto_int32_s) : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("sra %0,%1,%0" : "+r"(crypto_int32_x) : "r"(crypto_int32_s) : );
#else
int crypto_int32_k, crypto_int32_l;
for (crypto_int32_l = 0,crypto_int32_k = 1;crypto_int32_k < 32;++crypto_int32_l,crypto_int32_k *= 2)
crypto_int32_x ^= (crypto_int32_x ^ (crypto_int32_x >> crypto_int32_k)) & crypto_int32_bitinrangepublicpos_mask(crypto_int32_s,crypto_int32_l);
#endif
return crypto_int32_x;
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_bitmod_mask(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_s) {
crypto_int32_x = crypto_int32_shrmod(crypto_int32_x,crypto_int32_s);
return crypto_int32_bottombit_mask(crypto_int32_x);
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_bitmod_01(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_s) {
crypto_int32_x = crypto_int32_shrmod(crypto_int32_x,crypto_int32_s);
return crypto_int32_bottombit_01(crypto_int32_x);
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_nonzero_mask(crypto_int32 crypto_int32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 crypto_int32_q,crypto_int32_z;
__asm__ ("xorl %0,%0\n movl $-1,%1\n testl %2,%2\n cmovnel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %w1,0\n csetm %w0,ne" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("cmp %0,#0\n movne %0,#-1" : "+r"(crypto_int32_x) : : "cc");
return crypto_int32_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %%g0,%1\n subx %%g0,0,%0" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#else
crypto_int32_x |= -crypto_int32_x;
return crypto_int32_negative_mask(crypto_int32_x);
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_nonzero_01(crypto_int32 crypto_int32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 crypto_int32_q,crypto_int32_z;
__asm__ ("xorl %0,%0\n movl $1,%1\n testl %2,%2\n cmovnel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %w1,0\n cset %w0,ne" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("cmp %0,#0\n movne %0,#1" : "+r"(crypto_int32_x) : : "cc");
return crypto_int32_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %%g0,%1\n addx %%g0,0,%0" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#else
crypto_int32_x |= -crypto_int32_x;
return crypto_int32_unsigned_topbit_01(crypto_int32_x);
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_positive_mask(crypto_int32 crypto_int32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 crypto_int32_q,crypto_int32_z;
__asm__ ("xorl %0,%0\n movl $-1,%1\n testl %2,%2\n cmovgl %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %w1,0\n csetm %w0,gt" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int32 crypto_int32_z;
__asm__ ("sra %1,31,%0\n sub %0,%1,%0\n sra %0,31,%0" : "=&r"(crypto_int32_z) : "r"(crypto_int32_x) : );
return crypto_int32_z;
#else
crypto_int32 crypto_int32_z = -crypto_int32_x;
crypto_int32_z ^= crypto_int32_x & crypto_int32_z;
return crypto_int32_negative_mask(crypto_int32_z);
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_positive_01(crypto_int32 crypto_int32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 crypto_int32_q,crypto_int32_z;
__asm__ ("xorl %0,%0\n movl $1,%1\n testl %2,%2\n cmovgl %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %w1,0\n cset %w0,gt" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int32 crypto_int32_z;
__asm__ ("sra %1,31,%0\n sub %0,%1,%0\n srl %0,31,%0" : "=&r"(crypto_int32_z) : "r"(crypto_int32_x) : );
return crypto_int32_z;
#else
crypto_int32 crypto_int32_z = -crypto_int32_x;
crypto_int32_z ^= crypto_int32_x & crypto_int32_z;
return crypto_int32_unsigned_topbit_01(crypto_int32_z);
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_zero_mask(crypto_int32 crypto_int32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 crypto_int32_q,crypto_int32_z;
__asm__ ("xorl %0,%0\n movl $-1,%1\n testl %2,%2\n cmovel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %w1,0\n csetm %w0,eq" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %%g0,%1\n addx %%g0,-1,%0" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#else
return ~crypto_int32_nonzero_mask(crypto_int32_x);
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_zero_01(crypto_int32 crypto_int32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 crypto_int32_q,crypto_int32_z;
__asm__ ("xorl %0,%0\n movl $1,%1\n testl %2,%2\n cmovel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %w1,0\n cset %w0,eq" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %%g0,%1\n subx %%g0,-1,%0" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
return crypto_int32_z;
#else
return 1-crypto_int32_nonzero_01(crypto_int32_x);
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_unequal_mask(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 crypto_int32_q,crypto_int32_z;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpl %3,%2\n cmovnel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %w1,%w2\n csetm %w0,ne" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#else
return crypto_int32_nonzero_mask(crypto_int32_x ^ crypto_int32_y);
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_unequal_01(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 crypto_int32_q,crypto_int32_z;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpl %3,%2\n cmovnel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %w1,%w2\n cset %w0,ne" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#else
return crypto_int32_nonzero_01(crypto_int32_x ^ crypto_int32_y);
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_equal_mask(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 crypto_int32_q,crypto_int32_z;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpl %3,%2\n cmovel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %w1,%w2\n csetm %w0,eq" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#else
return crypto_int32_zero_mask(crypto_int32_x ^ crypto_int32_y);
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_equal_01(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 crypto_int32_q,crypto_int32_z;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpl %3,%2\n cmovel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %w1,%w2\n cset %w0,eq" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#else
return crypto_int32_zero_01(crypto_int32_x ^ crypto_int32_y);
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_min(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("cmpl %1,%0\n cmovgl %1,%0" : "+r"(crypto_int32_x) : "r"(crypto_int32_y) : "cc");
return crypto_int32_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("cmp %w0,%w1\n csel %w0,%w0,%w1,lt" : "+r"(crypto_int32_x) : "r"(crypto_int32_y) : "cc");
return crypto_int32_x;
#else
crypto_int32 crypto_int32_r = crypto_int32_y ^ crypto_int32_x;
crypto_int32 crypto_int32_z = crypto_int32_y - crypto_int32_x;
crypto_int32_z ^= crypto_int32_r & (crypto_int32_z ^ crypto_int32_y);
crypto_int32_z = crypto_int32_negative_mask(crypto_int32_z);
crypto_int32_z &= crypto_int32_r;
return crypto_int32_x ^ crypto_int32_z;
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_max(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("cmpl %1,%0\n cmovll %1,%0" : "+r"(crypto_int32_x) : "r"(crypto_int32_y) : "cc");
return crypto_int32_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("cmp %w0,%w1\n csel %w0,%w1,%w0,lt" : "+r"(crypto_int32_x) : "r"(crypto_int32_y) : "cc");
return crypto_int32_x;
#else
crypto_int32 crypto_int32_r = crypto_int32_y ^ crypto_int32_x;
crypto_int32 crypto_int32_z = crypto_int32_y - crypto_int32_x;
crypto_int32_z ^= crypto_int32_r & (crypto_int32_z ^ crypto_int32_y);
crypto_int32_z = crypto_int32_negative_mask(crypto_int32_z);
crypto_int32_z &= crypto_int32_r;
return crypto_int32_y ^ crypto_int32_z;
#endif
}
__attribute__((unused))
static inline
void crypto_int32_minmax(crypto_int32 *crypto_int32_p,crypto_int32 *crypto_int32_q) {
crypto_int32 crypto_int32_x = *crypto_int32_p;
crypto_int32 crypto_int32_y = *crypto_int32_q;
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 crypto_int32_z;
__asm__ ("cmpl %2,%1\n movl %1,%0\n cmovgl %2,%1\n cmovgl %0,%2" : "=&r"(crypto_int32_z), "+&r"(crypto_int32_x), "+r"(crypto_int32_y) : : "cc");
*crypto_int32_p = crypto_int32_x;
*crypto_int32_q = crypto_int32_y;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_r, crypto_int32_s;
__asm__ ("cmp %w2,%w3\n csel %w0,%w2,%w3,lt\n csel %w1,%w3,%w2,lt" : "=&r"(crypto_int32_r), "=r"(crypto_int32_s) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
*crypto_int32_p = crypto_int32_r;
*crypto_int32_q = crypto_int32_s;
#else
crypto_int32 crypto_int32_r = crypto_int32_y ^ crypto_int32_x;
crypto_int32 crypto_int32_z = crypto_int32_y - crypto_int32_x;
crypto_int32_z ^= crypto_int32_r & (crypto_int32_z ^ crypto_int32_y);
crypto_int32_z = crypto_int32_negative_mask(crypto_int32_z);
crypto_int32_z &= crypto_int32_r;
crypto_int32_x ^= crypto_int32_z;
crypto_int32_y ^= crypto_int32_z;
*crypto_int32_p = crypto_int32_x;
*crypto_int32_q = crypto_int32_y;
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_smaller_mask(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 crypto_int32_q,crypto_int32_z;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpl %3,%2\n cmovll %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %w1,%w2\n csetm %w0,lt" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#else
crypto_int32 crypto_int32_r = crypto_int32_x ^ crypto_int32_y;
crypto_int32 crypto_int32_z = crypto_int32_x - crypto_int32_y;
crypto_int32_z ^= crypto_int32_r & (crypto_int32_z ^ crypto_int32_x);
return crypto_int32_negative_mask(crypto_int32_z);
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_smaller_01(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 crypto_int32_q,crypto_int32_z;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpl %3,%2\n cmovll %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %w1,%w2\n cset %w0,lt" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#else
crypto_int32 crypto_int32_r = crypto_int32_x ^ crypto_int32_y;
crypto_int32 crypto_int32_z = crypto_int32_x - crypto_int32_y;
crypto_int32_z ^= crypto_int32_r & (crypto_int32_z ^ crypto_int32_x);
return crypto_int32_unsigned_topbit_01(crypto_int32_z);
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_leq_mask(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 crypto_int32_q,crypto_int32_z;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpl %3,%2\n cmovlel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %w1,%w2\n csetm %w0,le" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#else
return ~crypto_int32_smaller_mask(crypto_int32_y,crypto_int32_x);
#endif
}
__attribute__((unused))
static inline
crypto_int32 crypto_int32_leq_01(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 crypto_int32_q,crypto_int32_z;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpl %3,%2\n cmovlel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int32 crypto_int32_z;
__asm__ ("cmp %w1,%w2\n cset %w0,le" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
return crypto_int32_z;
#else
return 1-crypto_int32_smaller_01(crypto_int32_y,crypto_int32_x);
#endif
}
__attribute__((unused))
static inline
int crypto_int32_ones_num(crypto_int32 crypto_int32_x) {
crypto_int32_unsigned crypto_int32_y = crypto_int32_x;
const crypto_int32 C0 = 0x55555555;
const crypto_int32 C1 = 0x33333333;
const crypto_int32 C2 = 0x0f0f0f0f;
crypto_int32_y -= ((crypto_int32_y >> 1) & C0);
crypto_int32_y = (crypto_int32_y & C1) + ((crypto_int32_y >> 2) & C1);
crypto_int32_y = (crypto_int32_y + (crypto_int32_y >> 4)) & C2;
crypto_int32_y += crypto_int32_y >> 8;
crypto_int32_y = (crypto_int32_y + (crypto_int32_y >> 16)) & 0xff;
return crypto_int32_y;
}
__attribute__((unused))
static inline
int crypto_int32_bottomzeros_num(crypto_int32 crypto_int32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int32 fallback = 32;
__asm__ ("bsfl %0,%0\n cmovel %1,%0" : "+&r"(crypto_int32_x) : "r"(fallback) : "cc");
return crypto_int32_x;
#elif defined(__GNUC__) && defined(__aarch64__)
int64_t crypto_int32_y;
__asm__ ("rbit %w0,%w1\n clz %w0,%w0" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
return crypto_int32_y;
#else
crypto_int32 crypto_int32_y = crypto_int32_x ^ (crypto_int32_x-1);
crypto_int32_y = ((crypto_int32) crypto_int32_y) >> 1;
crypto_int32_y &= ~(crypto_int32_x & (((crypto_int32) 1) << (32-1)));
return crypto_int32_ones_num(crypto_int32_y);
#endif
}
#endif
tinyssh-20250501/cryptoint/crypto_int64.h 0000664 0000000 0000000 00000071523 15004722224 0020231 0 ustar 00root root 0000000 0000000 /* auto-generated: cd cryptoint; ./autogen */
/* cryptoint 20250414 */
#ifndef crypto_int64_h
#define crypto_int64_h
#include
#define crypto_int64 int64_t
#define crypto_int64_unsigned uint64_t
#define crypto_int64_optblocker tinyssh_int64_optblocker
extern volatile crypto_int64 crypto_int64_optblocker;
__attribute__((unused))
static inline
crypto_int64 crypto_int64_load(const unsigned char *crypto_int64_s) {
crypto_int64 crypto_int64_z = 0;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 0;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 8;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 16;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 24;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 32;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 40;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 48;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 56;
return crypto_int64_z;
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_load_bigendian(const unsigned char *crypto_int64_s) {
crypto_int64 crypto_int64_z = 0;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 56;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 48;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 40;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 32;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 24;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 16;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 8;
crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 0;
return crypto_int64_z;
}
__attribute__((unused))
static inline
void crypto_int64_store(unsigned char *crypto_int64_s,crypto_int64 crypto_int64_x) {
*crypto_int64_s++ = crypto_int64_x >> 0;
*crypto_int64_s++ = crypto_int64_x >> 8;
*crypto_int64_s++ = crypto_int64_x >> 16;
*crypto_int64_s++ = crypto_int64_x >> 24;
*crypto_int64_s++ = crypto_int64_x >> 32;
*crypto_int64_s++ = crypto_int64_x >> 40;
*crypto_int64_s++ = crypto_int64_x >> 48;
*crypto_int64_s++ = crypto_int64_x >> 56;
}
__attribute__((unused))
static inline
void crypto_int64_store_bigendian(unsigned char *crypto_int64_s,crypto_int64 crypto_int64_x) {
*crypto_int64_s++ = crypto_int64_x >> 56;
*crypto_int64_s++ = crypto_int64_x >> 48;
*crypto_int64_s++ = crypto_int64_x >> 40;
*crypto_int64_s++ = crypto_int64_x >> 32;
*crypto_int64_s++ = crypto_int64_x >> 24;
*crypto_int64_s++ = crypto_int64_x >> 16;
*crypto_int64_s++ = crypto_int64_x >> 8;
*crypto_int64_s++ = crypto_int64_x >> 0;
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_negative_mask(crypto_int64 crypto_int64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarq $63,%0" : "+r"(crypto_int64_x) : : "cc");
return crypto_int64_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_y;
__asm__ ("asr %0,%1,63" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
return crypto_int64_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int64 crypto_int64_y;
__asm__ ("asr %Q0,%R1,#31\n mov %R0,%Q0" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
return crypto_int64_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int64 crypto_int64_y;
__asm__ ("sra %H1,31,%L0\n mov %L0,%H0" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
return crypto_int64_y;
#else
crypto_int64_x >>= 64-6;
crypto_int64_x += crypto_int64_optblocker;
crypto_int64_x >>= 5;
return crypto_int64_x;
#endif
}
__attribute__((unused))
static inline
crypto_int64_unsigned crypto_int64_unsigned_topbit_01(crypto_int64_unsigned crypto_int64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrq $63,%0" : "+r"(crypto_int64_x) : : "cc");
return crypto_int64_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64_unsigned crypto_int64_y;
__asm__ ("lsr %0,%1,63" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
return crypto_int64_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int64 crypto_int64_y;
__asm__ ("lsr %Q0,%R1,#31\n mov %R0,#0" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
return crypto_int64_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int64_unsigned crypto_int64_y;
__asm__ ("srl %H1,31,%L0\n mov 0,%H0" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
return crypto_int64_y;
#else
crypto_int64_x >>= 64-6;
crypto_int64_x += crypto_int64_optblocker;
crypto_int64_x >>= 5;
return crypto_int64_x;
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_negative_01(crypto_int64 crypto_int64_x) {
return crypto_int64_unsigned_topbit_01(crypto_int64_x);
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_topbit_mask(crypto_int64 crypto_int64_x) {
return crypto_int64_negative_mask(crypto_int64_x);
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_topbit_01(crypto_int64 crypto_int64_x) {
return crypto_int64_unsigned_topbit_01(crypto_int64_x);
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_bottombit_mask(crypto_int64 crypto_int64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andq $1,%0" : "+r"(crypto_int64_x) : : "cc");
return -crypto_int64_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_y;
__asm__ ("sbfx %0,%1,0,1" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
return crypto_int64_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int64 crypto_int64_y;
__asm__ ("and %Q0,%Q1,#1\n neg %Q0,%Q0\n mov %R0,%Q0" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
return crypto_int64_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int64 crypto_int64_y;
__asm__ ("and %L1,1,%L0\n neg %L0,%L0\n mov %L0,%H0" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
return crypto_int64_y;
#else
crypto_int64_x &= 1 + crypto_int64_optblocker;
return -crypto_int64_x;
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_bottombit_01(crypto_int64 crypto_int64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andq $1,%0" : "+r"(crypto_int64_x) : : "cc");
return crypto_int64_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_y;
__asm__ ("ubfx %0,%1,0,1" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
return crypto_int64_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int64 crypto_int64_y;
__asm__ ("and %Q0,%Q1,#1\n mov %R0,#0" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
return crypto_int64_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int64 crypto_int64_y;
__asm__ ("and %L1,1,%L0\n mov 0,%H0" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
return crypto_int64_y;
#else
crypto_int64_x &= 1 + crypto_int64_optblocker;
return crypto_int64_x;
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_bitinrangepublicpos_mask(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarq %%cl,%0" : "+r"(crypto_int64_x) : "c"(crypto_int64_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("asr %0,%0,%1" : "+r"(crypto_int64_x) : "r"(crypto_int64_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %Q0,%Q0,#63\n lsr %Q1,%Q1,%Q0\n rsb %R0,%Q0,#32\n orr %Q1,%Q1,%R1,lsl %R0\n subs %R0,%Q0,#32\n orrhs %Q1,%Q1,%R1,asr %R0\n asr %R1,%R1,%Q0" : "+&r"(crypto_int64_s), "+r"(crypto_int64_x) : : "cc");
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int64 crypto_int64_y, crypto_int64_z;
__asm__ ("not %L0,%H0\n sll %L0,26,%H1\n sll %H3,1,%L1\n srl %L3,%L0,%L2\n sll %L1,%H0,%L1\n sra %H3,%L0,%H2\n sra %H1,31,%H1\n or %L2,%L1,%L2\n xor %L2,%H2,%L1\n and %H1,%L1,%L1\n sra %H2,%H1,%H3\n xor %L2,%L1,%L3" : "+&r"(crypto_int64_s), "=&r"(crypto_int64_z), "=&r"(crypto_int64_y), "+r"(crypto_int64_x) : : );
#else
crypto_int64_x >>= crypto_int64_s ^ crypto_int64_optblocker;
#endif
return crypto_int64_bottombit_mask(crypto_int64_x);
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_bitinrangepublicpos_01(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarq %%cl,%0" : "+r"(crypto_int64_x) : "c"(crypto_int64_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("asr %0,%0,%1" : "+r"(crypto_int64_x) : "r"(crypto_int64_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %Q0,%Q0,#63\n lsr %Q1,%Q1,%Q0\n rsb %R0,%Q0,#32\n orr %Q1,%Q1,%R1,lsl %R0\n subs %R0,%Q0,#32\n orrhs %Q1,%Q1,%R1,asr %R0\n asr %R1,%R1,%Q0" : "+&r"(crypto_int64_s), "+r"(crypto_int64_x) : : "cc");
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int64 crypto_int64_y, crypto_int64_z;
__asm__ ("not %L0,%H0\n sll %L0,26,%H1\n sll %H3,1,%L1\n srl %L3,%L0,%L2\n sll %L1,%H0,%L1\n sra %H3,%L0,%H2\n sra %H1,31,%H1\n or %L2,%L1,%L2\n xor %L2,%H2,%L1\n and %H1,%L1,%L1\n sra %H2,%H1,%H3\n xor %L2,%L1,%L3" : "+&r"(crypto_int64_s), "=&r"(crypto_int64_z), "=&r"(crypto_int64_y), "+r"(crypto_int64_x) : : );
#else
crypto_int64_x >>= crypto_int64_s ^ crypto_int64_optblocker;
#endif
return crypto_int64_bottombit_01(crypto_int64_x);
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_shlmod(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shlq %%cl,%0" : "+r"(crypto_int64_x) : "c"(crypto_int64_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("lsl %0,%0,%1" : "+r"(crypto_int64_x) : "r"(crypto_int64_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %Q0,%Q0,#63\n lsl %R1,%R1,%Q0\n sub %R0,%Q0,#32\n orr %R1,%R1,%Q1,lsl %R0\n rsb %R0,%Q0,#32\n orr %R1,%R1,%Q1,lsr %R0\n lsl %Q1,%Q1,%Q0" : "+&r"(crypto_int64_s), "+r"(crypto_int64_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int64 crypto_int64_y, crypto_int64_z;
__asm__ ("not %L0,%H0\n sll %L0,26,%H1\n srl %L3,1,%L1\n sll %L3,%L0,%L2\n srl %L1,%H0,%L1\n sll %H3,%L0,%H2\n sra %H1,31,%H1\n or %H2,%L1,%H2\n xor %L2,%H2,%L1\n and %H1,%L2,%L3\n and %H1,%L1,%L1\n xor %L3,%L2,%L3\n xor %H2,%L1,%H3" : "+&r"(crypto_int64_s), "=&r"(crypto_int64_z), "=&r"(crypto_int64_y), "+r"(crypto_int64_x) : : );
#else
int crypto_int64_k, crypto_int64_l;
for (crypto_int64_l = 0,crypto_int64_k = 1;crypto_int64_k < 64;++crypto_int64_l,crypto_int64_k *= 2)
crypto_int64_x ^= (crypto_int64_x ^ (crypto_int64_x << crypto_int64_k)) & crypto_int64_bitinrangepublicpos_mask(crypto_int64_s,crypto_int64_l);
#endif
return crypto_int64_x;
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_shrmod(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarq %%cl,%0" : "+r"(crypto_int64_x) : "c"(crypto_int64_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("asr %0,%0,%1" : "+r"(crypto_int64_x) : "r"(crypto_int64_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %Q0,%Q0,#63\n lsr %Q1,%Q1,%Q0\n rsb %R0,%Q0,#32\n orr %Q1,%Q1,%R1,lsl %R0\n subs %R0,%Q0,#32\n orrhs %Q1,%Q1,%R1,asr %R0\n asr %R1,%R1,%Q0" : "+&r"(crypto_int64_s), "+r"(crypto_int64_x) : : "cc");
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int64 crypto_int64_y, crypto_int64_z;
__asm__ ("not %L0,%H0\n sll %L0,26,%H1\n sll %H3,1,%L1\n srl %L3,%L0,%L2\n sll %L1,%H0,%L1\n sra %H3,%L0,%H2\n sra %H1,31,%H1\n or %L2,%L1,%L2\n xor %L2,%H2,%L1\n and %H1,%L1,%L1\n sra %H2,%H1,%H3\n xor %L2,%L1,%L3" : "+&r"(crypto_int64_s), "=&r"(crypto_int64_z), "=&r"(crypto_int64_y), "+r"(crypto_int64_x) : : );
#else
int crypto_int64_k, crypto_int64_l;
for (crypto_int64_l = 0,crypto_int64_k = 1;crypto_int64_k < 64;++crypto_int64_l,crypto_int64_k *= 2)
crypto_int64_x ^= (crypto_int64_x ^ (crypto_int64_x >> crypto_int64_k)) & crypto_int64_bitinrangepublicpos_mask(crypto_int64_s,crypto_int64_l);
#endif
return crypto_int64_x;
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_bitmod_mask(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_s) {
crypto_int64_x = crypto_int64_shrmod(crypto_int64_x,crypto_int64_s);
return crypto_int64_bottombit_mask(crypto_int64_x);
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_bitmod_01(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_s) {
crypto_int64_x = crypto_int64_shrmod(crypto_int64_x,crypto_int64_s);
return crypto_int64_bottombit_01(crypto_int64_x);
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_nonzero_mask(crypto_int64 crypto_int64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 crypto_int64_q,crypto_int64_z;
__asm__ ("xorq %0,%0\n movq $-1,%1\n testq %2,%2\n cmovneq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_z;
__asm__ ("cmp %1,0\n csetm %0,ne" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("orrs %Q0,%Q0,%R0\n movne %Q0,#-1\n mov %R0,%Q0" : "+r"(crypto_int64_x) : : "cc");
return crypto_int64_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int64 crypto_int64_z;
__asm__ ("or %L1,%H1,%L0\n cmp %%g0,%L0\n subx %%g0,0,%L0\n mov %L0,%H0" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#else
crypto_int64_x |= -crypto_int64_x;
return crypto_int64_negative_mask(crypto_int64_x);
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_nonzero_01(crypto_int64 crypto_int64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 crypto_int64_q,crypto_int64_z;
__asm__ ("xorq %0,%0\n movq $1,%1\n testq %2,%2\n cmovneq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_z;
__asm__ ("cmp %1,0\n cset %0,ne" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("orrs %Q0,%Q0,%R0\n movne %Q0,#1\n mov %R0,#0" : "+r"(crypto_int64_x) : : "cc");
return crypto_int64_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int64 crypto_int64_z;
__asm__ ("or %L1,%H1,%L0\n cmp %%g0,%L0\n addx %%g0,0,%L0\n mov 0,%H0" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#else
crypto_int64_x |= -crypto_int64_x;
return crypto_int64_unsigned_topbit_01(crypto_int64_x);
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_positive_mask(crypto_int64 crypto_int64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 crypto_int64_q,crypto_int64_z;
__asm__ ("xorq %0,%0\n movq $-1,%1\n testq %2,%2\n cmovgq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_z;
__asm__ ("cmp %1,0\n csetm %0,gt" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int64 crypto_int64_z;
__asm__ ("sra %H1,31,%L0\n subcc %L0,%L1,%H0\n subx %L0,%H1,%H0\n sra %H0,31,%H0\n mov %H0,%L0" : "=&r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#else
crypto_int64 crypto_int64_z = -crypto_int64_x;
crypto_int64_z ^= crypto_int64_x & crypto_int64_z;
return crypto_int64_negative_mask(crypto_int64_z);
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_positive_01(crypto_int64 crypto_int64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 crypto_int64_q,crypto_int64_z;
__asm__ ("xorq %0,%0\n movq $1,%1\n testq %2,%2\n cmovgq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_z;
__asm__ ("cmp %1,0\n cset %0,gt" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int64 crypto_int64_z;
__asm__ ("sra %H1,31,%H0\n subcc %H0,%L1,%L0\n subx %H0,%H1,%L0\n srl %L0,31,%L0\n mov 0,%H0" : "=&r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#else
crypto_int64 crypto_int64_z = -crypto_int64_x;
crypto_int64_z ^= crypto_int64_x & crypto_int64_z;
return crypto_int64_unsigned_topbit_01(crypto_int64_z);
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_zero_mask(crypto_int64 crypto_int64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 crypto_int64_q,crypto_int64_z;
__asm__ ("xorq %0,%0\n movq $-1,%1\n testq %2,%2\n cmoveq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_z;
__asm__ ("cmp %1,0\n csetm %0,eq" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int64 crypto_int64_z;
__asm__ ("or %L1,%H1,%L0\n cmp %%g0,%L0\n addx %%g0,-1,%L0\n mov %L0,%H0" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#else
return ~crypto_int64_nonzero_mask(crypto_int64_x);
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_zero_01(crypto_int64 crypto_int64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 crypto_int64_q,crypto_int64_z;
__asm__ ("xorq %0,%0\n movq $1,%1\n testq %2,%2\n cmoveq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_z;
__asm__ ("cmp %1,0\n cset %0,eq" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int64 crypto_int64_z;
__asm__ ("or %L1,%H1,%L0\n cmp %%g0,%L0\n subx %%g0,-1,%L0\n mov 0,%H0" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
return crypto_int64_z;
#else
return 1-crypto_int64_nonzero_01(crypto_int64_x);
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_unequal_mask(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 crypto_int64_q,crypto_int64_z;
__asm__ ("xorq %0,%0\n movq $-1,%1\n cmpq %3,%2\n cmovneq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_z;
__asm__ ("cmp %1,%2\n csetm %0,ne" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#else
return crypto_int64_nonzero_mask(crypto_int64_x ^ crypto_int64_y);
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_unequal_01(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 crypto_int64_q,crypto_int64_z;
__asm__ ("xorq %0,%0\n movq $1,%1\n cmpq %3,%2\n cmovneq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_z;
__asm__ ("cmp %1,%2\n cset %0,ne" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#else
return crypto_int64_nonzero_01(crypto_int64_x ^ crypto_int64_y);
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_equal_mask(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 crypto_int64_q,crypto_int64_z;
__asm__ ("xorq %0,%0\n movq $-1,%1\n cmpq %3,%2\n cmoveq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_z;
__asm__ ("cmp %1,%2\n csetm %0,eq" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#else
return crypto_int64_zero_mask(crypto_int64_x ^ crypto_int64_y);
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_equal_01(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 crypto_int64_q,crypto_int64_z;
__asm__ ("xorq %0,%0\n movq $1,%1\n cmpq %3,%2\n cmoveq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_z;
__asm__ ("cmp %1,%2\n cset %0,eq" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#else
return crypto_int64_zero_01(crypto_int64_x ^ crypto_int64_y);
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_min(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("cmpq %1,%0\n cmovgq %1,%0" : "+r"(crypto_int64_x) : "r"(crypto_int64_y) : "cc");
return crypto_int64_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("cmp %0,%1\n csel %0,%0,%1,lt" : "+r"(crypto_int64_x) : "r"(crypto_int64_y) : "cc");
return crypto_int64_x;
#else
crypto_int64 crypto_int64_r = crypto_int64_y ^ crypto_int64_x;
crypto_int64 crypto_int64_z = crypto_int64_y - crypto_int64_x;
crypto_int64_z ^= crypto_int64_r & (crypto_int64_z ^ crypto_int64_y);
crypto_int64_z = crypto_int64_negative_mask(crypto_int64_z);
crypto_int64_z &= crypto_int64_r;
return crypto_int64_x ^ crypto_int64_z;
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_max(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("cmpq %1,%0\n cmovlq %1,%0" : "+r"(crypto_int64_x) : "r"(crypto_int64_y) : "cc");
return crypto_int64_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("cmp %0,%1\n csel %0,%1,%0,lt" : "+r"(crypto_int64_x) : "r"(crypto_int64_y) : "cc");
return crypto_int64_x;
#else
crypto_int64 crypto_int64_r = crypto_int64_y ^ crypto_int64_x;
crypto_int64 crypto_int64_z = crypto_int64_y - crypto_int64_x;
crypto_int64_z ^= crypto_int64_r & (crypto_int64_z ^ crypto_int64_y);
crypto_int64_z = crypto_int64_negative_mask(crypto_int64_z);
crypto_int64_z &= crypto_int64_r;
return crypto_int64_y ^ crypto_int64_z;
#endif
}
__attribute__((unused))
static inline
void crypto_int64_minmax(crypto_int64 *crypto_int64_p,crypto_int64 *crypto_int64_q) {
crypto_int64 crypto_int64_x = *crypto_int64_p;
crypto_int64 crypto_int64_y = *crypto_int64_q;
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 crypto_int64_z;
__asm__ ("cmpq %2,%1\n movq %1,%0\n cmovgq %2,%1\n cmovgq %0,%2" : "=&r"(crypto_int64_z), "+&r"(crypto_int64_x), "+r"(crypto_int64_y) : : "cc");
*crypto_int64_p = crypto_int64_x;
*crypto_int64_q = crypto_int64_y;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_r, crypto_int64_s;
__asm__ ("cmp %2,%3\n csel %0,%2,%3,lt\n csel %1,%3,%2,lt" : "=&r"(crypto_int64_r), "=r"(crypto_int64_s) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
*crypto_int64_p = crypto_int64_r;
*crypto_int64_q = crypto_int64_s;
#else
crypto_int64 crypto_int64_r = crypto_int64_y ^ crypto_int64_x;
crypto_int64 crypto_int64_z = crypto_int64_y - crypto_int64_x;
crypto_int64_z ^= crypto_int64_r & (crypto_int64_z ^ crypto_int64_y);
crypto_int64_z = crypto_int64_negative_mask(crypto_int64_z);
crypto_int64_z &= crypto_int64_r;
crypto_int64_x ^= crypto_int64_z;
crypto_int64_y ^= crypto_int64_z;
*crypto_int64_p = crypto_int64_x;
*crypto_int64_q = crypto_int64_y;
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_smaller_mask(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 crypto_int64_q,crypto_int64_z;
__asm__ ("xorq %0,%0\n movq $-1,%1\n cmpq %3,%2\n cmovlq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_z;
__asm__ ("cmp %1,%2\n csetm %0,lt" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#else
crypto_int64 crypto_int64_r = crypto_int64_x ^ crypto_int64_y;
crypto_int64 crypto_int64_z = crypto_int64_x - crypto_int64_y;
crypto_int64_z ^= crypto_int64_r & (crypto_int64_z ^ crypto_int64_x);
return crypto_int64_negative_mask(crypto_int64_z);
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_smaller_01(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 crypto_int64_q,crypto_int64_z;
__asm__ ("xorq %0,%0\n movq $1,%1\n cmpq %3,%2\n cmovlq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_z;
__asm__ ("cmp %1,%2\n cset %0,lt" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#else
crypto_int64 crypto_int64_r = crypto_int64_x ^ crypto_int64_y;
crypto_int64 crypto_int64_z = crypto_int64_x - crypto_int64_y;
crypto_int64_z ^= crypto_int64_r & (crypto_int64_z ^ crypto_int64_x);
return crypto_int64_unsigned_topbit_01(crypto_int64_z);
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_leq_mask(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 crypto_int64_q,crypto_int64_z;
__asm__ ("xorq %0,%0\n movq $-1,%1\n cmpq %3,%2\n cmovleq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_z;
__asm__ ("cmp %1,%2\n csetm %0,le" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#else
return ~crypto_int64_smaller_mask(crypto_int64_y,crypto_int64_x);
#endif
}
__attribute__((unused))
static inline
crypto_int64 crypto_int64_leq_01(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 crypto_int64_q,crypto_int64_z;
__asm__ ("xorq %0,%0\n movq $1,%1\n cmpq %3,%2\n cmovleq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int64 crypto_int64_z;
__asm__ ("cmp %1,%2\n cset %0,le" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
return crypto_int64_z;
#else
return 1-crypto_int64_smaller_01(crypto_int64_y,crypto_int64_x);
#endif
}
__attribute__((unused))
static inline
int crypto_int64_ones_num(crypto_int64 crypto_int64_x) {
crypto_int64_unsigned crypto_int64_y = crypto_int64_x;
const crypto_int64 C0 = 0x5555555555555555;
const crypto_int64 C1 = 0x3333333333333333;
const crypto_int64 C2 = 0x0f0f0f0f0f0f0f0f;
crypto_int64_y -= ((crypto_int64_y >> 1) & C0);
crypto_int64_y = (crypto_int64_y & C1) + ((crypto_int64_y >> 2) & C1);
crypto_int64_y = (crypto_int64_y + (crypto_int64_y >> 4)) & C2;
crypto_int64_y += crypto_int64_y >> 8;
crypto_int64_y += crypto_int64_y >> 16;
crypto_int64_y = (crypto_int64_y + (crypto_int64_y >> 32)) & 0xff;
return crypto_int64_y;
}
__attribute__((unused))
static inline
int crypto_int64_bottomzeros_num(crypto_int64 crypto_int64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int64 fallback = 64;
__asm__ ("bsfq %0,%0\n cmoveq %1,%0" : "+&r"(crypto_int64_x) : "r"(fallback) : "cc");
return crypto_int64_x;
#elif defined(__GNUC__) && defined(__aarch64__)
int64_t crypto_int64_y;
__asm__ ("rbit %0,%1\n clz %0,%0" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
return crypto_int64_y;
#else
crypto_int64 crypto_int64_y = crypto_int64_x ^ (crypto_int64_x-1);
crypto_int64_y = ((crypto_int64) crypto_int64_y) >> 1;
crypto_int64_y &= ~(crypto_int64_x & (((crypto_int64) 1) << (64-1)));
return crypto_int64_ones_num(crypto_int64_y);
#endif
}
#endif
tinyssh-20250501/cryptoint/crypto_int8.h 0000664 0000000 0000000 00000066631 15004722224 0020153 0 ustar 00root root 0000000 0000000 /* auto-generated: cd cryptoint; ./autogen */
/* cryptoint 20250414 */
#ifndef crypto_int8_h
#define crypto_int8_h
#include
#define crypto_int8 int8_t
#define crypto_int8_unsigned uint8_t
#define crypto_int8_optblocker tinyssh_int8_optblocker
extern volatile crypto_int8 crypto_int8_optblocker;
__attribute__((unused))
static inline
crypto_int8 crypto_int8_load(const unsigned char *crypto_int8_s) {
crypto_int8 crypto_int8_z = 0;
crypto_int8_z |= ((crypto_int8) (*crypto_int8_s++)) << 0;
return crypto_int8_z;
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_load_bigendian(const unsigned char *crypto_int8_s) {
crypto_int8 crypto_int8_z = 0;
crypto_int8_z |= ((crypto_int8) (*crypto_int8_s++)) << 0;
return crypto_int8_z;
}
__attribute__((unused))
static inline
void crypto_int8_store(unsigned char *crypto_int8_s,crypto_int8 crypto_int8_x) {
*crypto_int8_s++ = crypto_int8_x >> 0;
}
__attribute__((unused))
static inline
void crypto_int8_store_bigendian(unsigned char *crypto_int8_s,crypto_int8 crypto_int8_x) {
*crypto_int8_s++ = crypto_int8_x >> 0;
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_negative_mask(crypto_int8 crypto_int8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarb $7,%0" : "+r"(crypto_int8_x) : : "cc");
return crypto_int8_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_y;
__asm__ ("sbfx %w0,%w1,7,1" : "=r"(crypto_int8_y) : "r"(crypto_int8_x) : );
return crypto_int8_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int8 crypto_int8_y;
__asm__ ("sxtb %0,%1\n asr %0,%0,#31" : "=r"(crypto_int8_y) : "r"(crypto_int8_x) : );
return crypto_int8_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int8 crypto_int8_y;
__asm__ ("sll %1,24,%0\n sra %0,31,%0" : "=r"(crypto_int8_y) : "r"(crypto_int8_x) : );
return crypto_int8_y;
#else
crypto_int8_x >>= 8-6;
crypto_int8_x += crypto_int8_optblocker;
crypto_int8_x >>= 5;
return crypto_int8_x;
#endif
}
__attribute__((unused))
static inline
crypto_int8_unsigned crypto_int8_unsigned_topbit_01(crypto_int8_unsigned crypto_int8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrb $7,%0" : "+r"(crypto_int8_x) : : "cc");
return crypto_int8_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8_unsigned crypto_int8_y;
__asm__ ("ubfx %w0,%w1,7,1" : "=r"(crypto_int8_y) : "r"(crypto_int8_x) : );
return crypto_int8_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int8 crypto_int8_y;
__asm__ ("uxtb %0,%1\n lsr %0,%0,#7" : "=r"(crypto_int8_y) : "r"(crypto_int8_x) : );
return crypto_int8_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int8_unsigned crypto_int8_y;
__asm__ ("and %1,255,%0\n srl %0,7,%0" : "=r"(crypto_int8_y) : "r"(crypto_int8_x) : );
return crypto_int8_y;
#else
crypto_int8_x >>= 8-6;
crypto_int8_x += crypto_int8_optblocker;
crypto_int8_x >>= 5;
return crypto_int8_x;
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_negative_01(crypto_int8 crypto_int8_x) {
return crypto_int8_unsigned_topbit_01(crypto_int8_x);
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_topbit_mask(crypto_int8 crypto_int8_x) {
return crypto_int8_negative_mask(crypto_int8_x);
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_topbit_01(crypto_int8 crypto_int8_x) {
return crypto_int8_unsigned_topbit_01(crypto_int8_x);
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_bottombit_mask(crypto_int8 crypto_int8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andb $1,%0" : "+r"(crypto_int8_x) : : "cc");
return -crypto_int8_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_y;
__asm__ ("sbfx %w0,%w1,0,1" : "=r"(crypto_int8_y) : "r"(crypto_int8_x) : );
return crypto_int8_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int8 crypto_int8_y;
__asm__ ("and %0,%1,#1\n neg %0,%0" : "=r"(crypto_int8_y) : "r"(crypto_int8_x) : );
return crypto_int8_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int8 crypto_int8_y;
__asm__ ("and %1,1,%0\n neg %0,%0" : "=r"(crypto_int8_y) : "r"(crypto_int8_x) : );
return crypto_int8_y;
#else
crypto_int8_x &= 1 + crypto_int8_optblocker;
return -crypto_int8_x;
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_bottombit_01(crypto_int8 crypto_int8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andb $1,%0" : "+r"(crypto_int8_x) : : "cc");
return crypto_int8_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_y;
__asm__ ("ubfx %w0,%w1,0,1" : "=r"(crypto_int8_y) : "r"(crypto_int8_x) : );
return crypto_int8_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int8 crypto_int8_y;
__asm__ ("and %0,%1,#1" : "=r"(crypto_int8_y) : "r"(crypto_int8_x) : );
return crypto_int8_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int8 crypto_int8_y;
__asm__ ("and %1,1,%0" : "=r"(crypto_int8_y) : "r"(crypto_int8_x) : );
return crypto_int8_y;
#else
crypto_int8_x &= 1 + crypto_int8_optblocker;
return crypto_int8_x;
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_bitinrangepublicpos_mask(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarb %%cl,%0" : "+r"(crypto_int8_x) : "c"(crypto_int8_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("sxtb %w0,%w0\n asr %w0,%w0,%w1" : "+&r"(crypto_int8_x) : "r"(crypto_int8_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %0,%0,#7\n sxtb %1,%1\n asr %1,%1,%0" : "+&r"(crypto_int8_s), "+r"(crypto_int8_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("and %0,7,%0\n sra %1,%0,%1" : "+&r"(crypto_int8_s), "+r"(crypto_int8_x) : : );
#else
crypto_int8_x >>= crypto_int8_s ^ crypto_int8_optblocker;
#endif
return crypto_int8_bottombit_mask(crypto_int8_x);
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_bitinrangepublicpos_01(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarb %%cl,%0" : "+r"(crypto_int8_x) : "c"(crypto_int8_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("sxtb %w0,%w0\n asr %w0,%w0,%w1" : "+&r"(crypto_int8_x) : "r"(crypto_int8_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %0,%0,#7\n sxtb %1,%1\n asr %1,%1,%0" : "+&r"(crypto_int8_s), "+r"(crypto_int8_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("and %0,7,%0\n sra %1,%0,%1" : "+&r"(crypto_int8_s), "+r"(crypto_int8_x) : : );
#else
crypto_int8_x >>= crypto_int8_s ^ crypto_int8_optblocker;
#endif
return crypto_int8_bottombit_01(crypto_int8_x);
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_shlmod(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_s) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8_s &= 7;
__asm__ ("shlb %%cl,%0" : "+r"(crypto_int8_x) : "c"(crypto_int8_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8_s &= 7;
__asm__ ("and %w0,%w0,255\n lsl %w0,%w0,%w1" : "+&r"(crypto_int8_x) : "r"(crypto_int8_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int8_s &= 7;
__asm__ ("lsl %0,%0,%1\n sxtb %0,%0" : "+r"(crypto_int8_x) : "r"(crypto_int8_s) : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int8_s &= 7; crypto_int8_s += 24;
__asm__ ("sll %0,%1,%0\n sra %0,24,%0" : "+r"(crypto_int8_x) : "r"(crypto_int8_s) : );
#else
int crypto_int8_k, crypto_int8_l;
for (crypto_int8_l = 0,crypto_int8_k = 1;crypto_int8_k < 8;++crypto_int8_l,crypto_int8_k *= 2)
crypto_int8_x ^= (crypto_int8_x ^ (crypto_int8_x << crypto_int8_k)) & crypto_int8_bitinrangepublicpos_mask(crypto_int8_s,crypto_int8_l);
#endif
return crypto_int8_x;
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_shrmod(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_s) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8_s &= 7;
__asm__ ("sarb %%cl,%0" : "+r"(crypto_int8_x) : "c"(crypto_int8_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8_s &= 7;
__asm__ ("sxtb %w0,%w0\n asr %w0,%w0,%w1" : "+&r"(crypto_int8_x) : "r"(crypto_int8_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_int8_s &= 7;
__asm__ ("sxtb %0,%0\n asr %0,%0,%1" : "+&r"(crypto_int8_x) : "r"(crypto_int8_s) : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int8_s &= 7;
__asm__ ("sra %0,%1,%0" : "+r"(crypto_int8_x) : "r"(crypto_int8_s) : );
#else
int crypto_int8_k, crypto_int8_l;
for (crypto_int8_l = 0,crypto_int8_k = 1;crypto_int8_k < 8;++crypto_int8_l,crypto_int8_k *= 2)
crypto_int8_x ^= (crypto_int8_x ^ (crypto_int8_x >> crypto_int8_k)) & crypto_int8_bitinrangepublicpos_mask(crypto_int8_s,crypto_int8_l);
#endif
return crypto_int8_x;
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_bitmod_mask(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_s) {
crypto_int8_x = crypto_int8_shrmod(crypto_int8_x,crypto_int8_s);
return crypto_int8_bottombit_mask(crypto_int8_x);
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_bitmod_01(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_s) {
crypto_int8_x = crypto_int8_shrmod(crypto_int8_x,crypto_int8_s);
return crypto_int8_bottombit_01(crypto_int8_x);
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_nonzero_mask(crypto_int8 crypto_int8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8 crypto_int8_z;
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_q32,crypto_int8_z32;
__asm__ ("xorl %0,%0\n movl $-1,%1\n testb %b2,%b2\n cmovnel %1,%0" : "=&r"(crypto_int8_z32), "=&r"(crypto_int8_q32) : "q"(crypto_int8_x32) : "cc");
crypto_int8_z = crypto_int8_z32;
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_z;
__asm__ ("tst %w1,255\n csetm %w0,ne" : "=r"(crypto_int8_z) : "r"(crypto_int8_x) : "cc");
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("uxtb %0,%0\n cmp %0,#0\n movne %0,#-1" : "+r"(crypto_int8_x) : : "cc");
return crypto_int8_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int8 crypto_int8_z;
__asm__ ("and %0,255,%0\n cmp %%g0,%0\n subx %%g0,0,%1" : "+r"(crypto_int8_x), "=r"(crypto_int8_z) : : "cc");
return crypto_int8_z;
#else
crypto_int8_x |= -crypto_int8_x;
return crypto_int8_negative_mask(crypto_int8_x);
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_nonzero_01(crypto_int8 crypto_int8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8 crypto_int8_z;
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_q32,crypto_int8_z32;
__asm__ ("xorl %0,%0\n movl $1,%1\n testb %b2,%b2\n cmovnel %1,%0" : "=&r"(crypto_int8_z32), "=&r"(crypto_int8_q32) : "q"(crypto_int8_x32) : "cc");
crypto_int8_z = crypto_int8_z32;
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_z;
__asm__ ("tst %w1,255\n cset %w0,ne" : "=r"(crypto_int8_z) : "r"(crypto_int8_x) : "cc");
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("uxtb %0,%0\n cmp %0,#0\n movne %0,#1" : "+r"(crypto_int8_x) : : "cc");
return crypto_int8_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int8 crypto_int8_z;
__asm__ ("and %0,255,%0\n cmp %%g0,%0\n addx %%g0,0,%1" : "+r"(crypto_int8_x), "=r"(crypto_int8_z) : : "cc");
return crypto_int8_z;
#else
crypto_int8_x |= -crypto_int8_x;
return crypto_int8_unsigned_topbit_01(crypto_int8_x);
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_positive_mask(crypto_int8 crypto_int8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8 crypto_int8_z;
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_q32,crypto_int8_z32;
__asm__ ("xorl %0,%0\n movl $-1,%1\n testb %b2,%b2\n cmovgl %1,%0" : "=&r"(crypto_int8_z32), "=&r"(crypto_int8_q32) : "q"(crypto_int8_x32) : "cc");
crypto_int8_z = crypto_int8_z32;
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_z;
__asm__ ("sxtb %w0,%w1\n cmp %w0,0\n csetm %w0,gt" : "=r"(crypto_int8_z) : "r"(crypto_int8_x) : "cc");
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int8 crypto_int8_z;
__asm__ ("sll %1,24,%0\n sra %0,31,%0\n sub %0,%1,%0\n sra %0,31,%0" : "=&r"(crypto_int8_z) : "r"(crypto_int8_x) : );
return crypto_int8_z;
#else
crypto_int8 crypto_int8_z = -crypto_int8_x;
crypto_int8_z ^= crypto_int8_x & crypto_int8_z;
return crypto_int8_negative_mask(crypto_int8_z);
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_positive_01(crypto_int8 crypto_int8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8 crypto_int8_z;
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_q32,crypto_int8_z32;
__asm__ ("xorl %0,%0\n movl $1,%1\n testb %b2,%b2\n cmovgl %1,%0" : "=&r"(crypto_int8_z32), "=&r"(crypto_int8_q32) : "q"(crypto_int8_x32) : "cc");
crypto_int8_z = crypto_int8_z32;
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_z;
__asm__ ("sxtb %w0,%w1\n cmp %w0,0\n cset %w0,gt" : "=r"(crypto_int8_z) : "r"(crypto_int8_x) : "cc");
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int8 crypto_int8_z;
__asm__ ("sll %1,24,%0\n sra %0,31,%0\n sub %0,%1,%0\n srl %0,31,%0" : "=&r"(crypto_int8_z) : "r"(crypto_int8_x) : );
return crypto_int8_z;
#else
crypto_int8 crypto_int8_z = -crypto_int8_x;
crypto_int8_z ^= crypto_int8_x & crypto_int8_z;
return crypto_int8_unsigned_topbit_01(crypto_int8_z);
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_zero_mask(crypto_int8 crypto_int8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8 crypto_int8_z;
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_q32,crypto_int8_z32;
__asm__ ("xorl %0,%0\n movl $-1,%1\n testb %b2,%b2\n cmovel %1,%0" : "=&r"(crypto_int8_z32), "=&r"(crypto_int8_q32) : "q"(crypto_int8_x32) : "cc");
crypto_int8_z = crypto_int8_z32;
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_z;
__asm__ ("tst %w1,255\n csetm %w0,eq" : "=r"(crypto_int8_z) : "r"(crypto_int8_x) : "cc");
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int8 crypto_int8_z;
__asm__ ("and %0,255,%0\n cmp %%g0,%0\n addx %%g0,-1,%1" : "+r"(crypto_int8_x), "=r"(crypto_int8_z) : : "cc");
return crypto_int8_z;
#else
return ~crypto_int8_nonzero_mask(crypto_int8_x);
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_zero_01(crypto_int8 crypto_int8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8 crypto_int8_z;
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_q32,crypto_int8_z32;
__asm__ ("xorl %0,%0\n movl $1,%1\n testb %b2,%b2\n cmovel %1,%0" : "=&r"(crypto_int8_z32), "=&r"(crypto_int8_q32) : "q"(crypto_int8_x32) : "cc");
crypto_int8_z = crypto_int8_z32;
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_z;
__asm__ ("tst %w1,255\n cset %w0,eq" : "=r"(crypto_int8_z) : "r"(crypto_int8_x) : "cc");
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_int8 crypto_int8_z;
__asm__ ("and %0,255,%0\n cmp %%g0,%0\n subx %%g0,-1,%1" : "+r"(crypto_int8_x), "=r"(crypto_int8_z) : : "cc");
return crypto_int8_z;
#else
return 1-crypto_int8_nonzero_01(crypto_int8_x);
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_unequal_mask(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8 crypto_int8_z;
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_y32 = crypto_int8_y,crypto_int8_q32,crypto_int8_z32;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpb %b3,%b2\n cmovnel %1,%0" : "=&r"(crypto_int8_z32), "=&r"(crypto_int8_q32) : "q"(crypto_int8_x32), "q"(crypto_int8_y32) : "cc");
crypto_int8_z = crypto_int8_z32;
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_z;
__asm__ ("and %w0,%w1,255\n cmp %w0,%w2,uxtb\n csetm %w0,ne" : "=&r"(crypto_int8_z) : "r"(crypto_int8_x), "r"(crypto_int8_y) : "cc");
return crypto_int8_z;
#else
return crypto_int8_nonzero_mask(crypto_int8_x ^ crypto_int8_y);
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_unequal_01(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8 crypto_int8_z;
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_y32 = crypto_int8_y,crypto_int8_q32,crypto_int8_z32;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpb %b3,%b2\n cmovnel %1,%0" : "=&r"(crypto_int8_z32), "=&r"(crypto_int8_q32) : "q"(crypto_int8_x32), "q"(crypto_int8_y32) : "cc");
crypto_int8_z = crypto_int8_z32;
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_z;
__asm__ ("and %w0,%w1,255\n cmp %w0,%w2,uxtb\n cset %w0,ne" : "=&r"(crypto_int8_z) : "r"(crypto_int8_x), "r"(crypto_int8_y) : "cc");
return crypto_int8_z;
#else
return crypto_int8_nonzero_01(crypto_int8_x ^ crypto_int8_y);
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_equal_mask(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8 crypto_int8_z;
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_y32 = crypto_int8_y,crypto_int8_q32,crypto_int8_z32;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpb %b3,%b2\n cmovel %1,%0" : "=&r"(crypto_int8_z32), "=&r"(crypto_int8_q32) : "q"(crypto_int8_x32), "q"(crypto_int8_y32) : "cc");
crypto_int8_z = crypto_int8_z32;
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_z;
__asm__ ("and %w0,%w1,255\n cmp %w0,%w2,uxtb\n csetm %w0,eq" : "=&r"(crypto_int8_z) : "r"(crypto_int8_x), "r"(crypto_int8_y) : "cc");
return crypto_int8_z;
#else
return crypto_int8_zero_mask(crypto_int8_x ^ crypto_int8_y);
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_equal_01(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8 crypto_int8_z;
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_y32 = crypto_int8_y,crypto_int8_q32,crypto_int8_z32;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpb %b3,%b2\n cmovel %1,%0" : "=&r"(crypto_int8_z32), "=&r"(crypto_int8_q32) : "q"(crypto_int8_x32), "q"(crypto_int8_y32) : "cc");
crypto_int8_z = crypto_int8_z32;
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_z;
__asm__ ("and %w0,%w1,255\n cmp %w0,%w2,uxtb\n cset %w0,eq" : "=&r"(crypto_int8_z) : "r"(crypto_int8_x), "r"(crypto_int8_y) : "cc");
return crypto_int8_z;
#else
return crypto_int8_zero_01(crypto_int8_x ^ crypto_int8_y);
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_min(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_y32 = crypto_int8_y;
__asm__ ("cmpb %b1,%b0\n cmovgl %1,%0" : "+q"(crypto_int8_x32) : "q"(crypto_int8_y32) : "cc");
crypto_int8_x = crypto_int8_x32;
return crypto_int8_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("sxtb %w0,%w0\n cmp %w0,%w1,sxtb\n csel %w0,%w0,%w1,lt" : "+&r"(crypto_int8_x) : "r"(crypto_int8_y) : "cc");
return crypto_int8_x;
#else
crypto_int8 crypto_int8_r = crypto_int8_y ^ crypto_int8_x;
crypto_int8 crypto_int8_z = crypto_int8_y - crypto_int8_x;
crypto_int8_z ^= crypto_int8_r & (crypto_int8_z ^ crypto_int8_y);
crypto_int8_z = crypto_int8_negative_mask(crypto_int8_z);
crypto_int8_z &= crypto_int8_r;
return crypto_int8_x ^ crypto_int8_z;
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_max(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_y32 = crypto_int8_y;
__asm__ ("cmpb %b1,%b0\n cmovll %1,%0" : "+q"(crypto_int8_x32) : "q"(crypto_int8_y32) : "cc");
crypto_int8_x = crypto_int8_x32;
return crypto_int8_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("sxtb %w0,%w0\n cmp %w0,%w1,sxtb\n csel %w0,%w1,%w0,lt" : "+&r"(crypto_int8_x) : "r"(crypto_int8_y) : "cc");
return crypto_int8_x;
#else
crypto_int8 crypto_int8_r = crypto_int8_y ^ crypto_int8_x;
crypto_int8 crypto_int8_z = crypto_int8_y - crypto_int8_x;
crypto_int8_z ^= crypto_int8_r & (crypto_int8_z ^ crypto_int8_y);
crypto_int8_z = crypto_int8_negative_mask(crypto_int8_z);
crypto_int8_z &= crypto_int8_r;
return crypto_int8_y ^ crypto_int8_z;
#endif
}
__attribute__((unused))
static inline
void crypto_int8_minmax(crypto_int8 *crypto_int8_p,crypto_int8 *crypto_int8_q) {
crypto_int8 crypto_int8_x = *crypto_int8_p;
crypto_int8 crypto_int8_y = *crypto_int8_q;
#if defined(__GNUC__) && defined(__x86_64__)
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_y32 = crypto_int8_y,crypto_int8_z32;
__asm__ ("cmpb %b2,%b1\n movl %1,%0\n cmovgl %2,%1\n cmovgl %0,%2" : "=&r"(crypto_int8_z32), "+&q"(crypto_int8_x32), "+q"(crypto_int8_y32) : : "cc");
crypto_int8_x = crypto_int8_x32; crypto_int8_y = crypto_int8_y32;
*crypto_int8_p = crypto_int8_x;
*crypto_int8_q = crypto_int8_y;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_r, crypto_int8_s;
__asm__ ("sxtb %w0,%w0\n cmp %w0,%w3,sxtb\n csel %w1,%w0,%w3,lt\n csel %w2,%w3,%w0,lt" : "+&r"(crypto_int8_x), "=&r"(crypto_int8_r), "=r"(crypto_int8_s) : "r"(crypto_int8_y) : "cc");
*crypto_int8_p = crypto_int8_r;
*crypto_int8_q = crypto_int8_s;
#else
crypto_int8 crypto_int8_r = crypto_int8_y ^ crypto_int8_x;
crypto_int8 crypto_int8_z = crypto_int8_y - crypto_int8_x;
crypto_int8_z ^= crypto_int8_r & (crypto_int8_z ^ crypto_int8_y);
crypto_int8_z = crypto_int8_negative_mask(crypto_int8_z);
crypto_int8_z &= crypto_int8_r;
crypto_int8_x ^= crypto_int8_z;
crypto_int8_y ^= crypto_int8_z;
*crypto_int8_p = crypto_int8_x;
*crypto_int8_q = crypto_int8_y;
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_smaller_mask(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8 crypto_int8_z;
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_y32 = crypto_int8_y,crypto_int8_q32,crypto_int8_z32;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpb %b3,%b2\n cmovll %1,%0" : "=&r"(crypto_int8_z32), "=&r"(crypto_int8_q32) : "q"(crypto_int8_x32), "q"(crypto_int8_y32) : "cc");
crypto_int8_z = crypto_int8_z32;
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_z;
__asm__ ("sxtb %w0,%w1\n cmp %w0,%w2,sxtb\n csetm %w0,lt" : "=&r"(crypto_int8_z) : "r"(crypto_int8_x), "r"(crypto_int8_y) : "cc");
return crypto_int8_z;
#else
crypto_int8 crypto_int8_r = crypto_int8_x ^ crypto_int8_y;
crypto_int8 crypto_int8_z = crypto_int8_x - crypto_int8_y;
crypto_int8_z ^= crypto_int8_r & (crypto_int8_z ^ crypto_int8_x);
return crypto_int8_negative_mask(crypto_int8_z);
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_smaller_01(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8 crypto_int8_z;
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_y32 = crypto_int8_y,crypto_int8_q32,crypto_int8_z32;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpb %b3,%b2\n cmovll %1,%0" : "=&r"(crypto_int8_z32), "=&r"(crypto_int8_q32) : "q"(crypto_int8_x32), "q"(crypto_int8_y32) : "cc");
crypto_int8_z = crypto_int8_z32;
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_z;
__asm__ ("sxtb %w0,%w1\n cmp %w0,%w2,sxtb\n cset %w0,lt" : "=&r"(crypto_int8_z) : "r"(crypto_int8_x), "r"(crypto_int8_y) : "cc");
return crypto_int8_z;
#else
crypto_int8 crypto_int8_r = crypto_int8_x ^ crypto_int8_y;
crypto_int8 crypto_int8_z = crypto_int8_x - crypto_int8_y;
crypto_int8_z ^= crypto_int8_r & (crypto_int8_z ^ crypto_int8_x);
return crypto_int8_unsigned_topbit_01(crypto_int8_z);
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_leq_mask(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8 crypto_int8_z;
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_y32 = crypto_int8_y,crypto_int8_q32,crypto_int8_z32;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpb %b3,%b2\n cmovlel %1,%0" : "=&r"(crypto_int8_z32), "=&r"(crypto_int8_q32) : "q"(crypto_int8_x32), "q"(crypto_int8_y32) : "cc");
crypto_int8_z = crypto_int8_z32;
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_z;
__asm__ ("sxtb %w0,%w1\n cmp %w0,%w2,sxtb\n csetm %w0,le" : "=&r"(crypto_int8_z) : "r"(crypto_int8_x), "r"(crypto_int8_y) : "cc");
return crypto_int8_z;
#else
return ~crypto_int8_smaller_mask(crypto_int8_y,crypto_int8_x);
#endif
}
__attribute__((unused))
static inline
crypto_int8 crypto_int8_leq_01(crypto_int8 crypto_int8_x,crypto_int8 crypto_int8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_int8 crypto_int8_z;
int32_t crypto_int8_x32 = crypto_int8_x,crypto_int8_y32 = crypto_int8_y,crypto_int8_q32,crypto_int8_z32;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpb %b3,%b2\n cmovlel %1,%0" : "=&r"(crypto_int8_z32), "=&r"(crypto_int8_q32) : "q"(crypto_int8_x32), "q"(crypto_int8_y32) : "cc");
crypto_int8_z = crypto_int8_z32;
return crypto_int8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_int8 crypto_int8_z;
__asm__ ("sxtb %w0,%w1\n cmp %w0,%w2,sxtb\n cset %w0,le" : "=&r"(crypto_int8_z) : "r"(crypto_int8_x), "r"(crypto_int8_y) : "cc");
return crypto_int8_z;
#else
return 1-crypto_int8_smaller_01(crypto_int8_y,crypto_int8_x);
#endif
}
__attribute__((unused))
static inline
int crypto_int8_ones_num(crypto_int8 crypto_int8_x) {
crypto_int8_unsigned crypto_int8_y = crypto_int8_x;
const crypto_int8 C0 = 0x55;
const crypto_int8 C1 = 0x33;
const crypto_int8 C2 = 0x0f;
crypto_int8_y -= ((crypto_int8_y >> 1) & C0);
crypto_int8_y = (crypto_int8_y & C1) + ((crypto_int8_y >> 2) & C1);
crypto_int8_y = (crypto_int8_y + (crypto_int8_y >> 4)) & C2;
return crypto_int8_y;
}
__attribute__((unused))
static inline
int crypto_int8_bottomzeros_num(crypto_int8 crypto_int8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
int32_t fallback = 8;
int32_t crypto_int8_x32 = crypto_int8_x;
__asm__ ("bsfl %0,%0\n cmovel %1,%0" : "+&r"(crypto_int8_x32) : "r"(fallback) : "cc");
crypto_int8_x = crypto_int8_x32;
return crypto_int8_x;
#elif defined(__GNUC__) && defined(__aarch64__)
int64_t crypto_int8_y;
__asm__ ("orr %w0,%w1,-256\n rbit %w0,%w0\n clz %w0,%w0" : "=r"(crypto_int8_y) : "r"(crypto_int8_x) : );
return crypto_int8_y;
#else
crypto_int8 crypto_int8_y = crypto_int8_x ^ (crypto_int8_x-1);
crypto_int8_y = ((crypto_int8) crypto_int8_y) >> 1;
crypto_int8_y &= ~(crypto_int8_x & (((crypto_int8) 1) << (8-1)));
return crypto_int8_ones_num(crypto_int8_y);
#endif
}
#endif
tinyssh-20250501/cryptoint/crypto_intN.h 0000664 0000000 0000000 00000206360 15004722224 0020174 0 ustar 00root root 0000000 0000000 /* auto-generated: cd cryptoint; ./autogen */
/* cryptoint 20250414 */
#ifndef crypto_intN_h
#define crypto_intN_h
#include
#define crypto_intN intN_t
#define crypto_intN_unsigned uintN_t
#define crypto_intN_optblocker namespace_intN_optblocker
extern volatile crypto_intN crypto_intN_optblocker;
__attribute__((unused))
static inline
crypto_intN crypto_intN_load(const unsigned char *crypto_intN_s) {
crypto_intN crypto_intN_z = 0;
int crypto_intN_k;
for (crypto_intN_k = 0;crypto_intN_k < N;crypto_intN_k += 8)
crypto_intN_z |= ((crypto_intN) (*crypto_intN_s++)) << crypto_intN_k;
return crypto_intN_z;
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_load_bigendian(const unsigned char *crypto_intN_s) {
crypto_intN crypto_intN_z = 0;
int crypto_intN_k;
for (crypto_intN_k = N - 8;crypto_intN_k >= 0;crypto_intN_k -= 8)
crypto_intN_z |= ((crypto_intN) (*crypto_intN_s++)) << crypto_intN_k;
return crypto_intN_z;
}
__attribute__((unused))
static inline
void crypto_intN_store(unsigned char *crypto_intN_s,crypto_intN crypto_intN_x) {
int crypto_intN_k;
for (crypto_intN_k = 0;crypto_intN_k < N;crypto_intN_k += 8)
*crypto_intN_s++ = crypto_intN_x >> crypto_intN_k;
}
__attribute__((unused))
static inline
void crypto_intN_store_bigendian(unsigned char *crypto_intN_s,crypto_intN crypto_intN_x) {
int crypto_intN_k;
for (crypto_intN_k = N - 8;crypto_intN_k >= 0;crypto_intN_k -= 8)
*crypto_intN_s++ = crypto_intN_x >> crypto_intN_k;
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_negative_mask(crypto_intN crypto_intN_x) {
#if amd64
8: readasm("amd64; int8 crypto_intN_x; crypto_intN_x signed>>= 7");
16: readasm("amd64; int16 crypto_intN_x; crypto_intN_x signed>>= 15");
32: readasm("amd64; int32 crypto_intN_x; crypto_intN_x signed>>= 31");
64: readasm("amd64; int64 crypto_intN_x; crypto_intN_x signed>>= 63");
return crypto_intN_x;
#elif arm64
crypto_intN crypto_intN_y;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y; crypto_intN_y = -(1 & (crypto_intN_x unsigned>> 7))");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y; crypto_intN_y = -(1 & (crypto_intN_x unsigned>> 15))");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x signed>> 31");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x signed>> 63");
return crypto_intN_y;
#elif arm32
crypto_intN crypto_intN_y;
8: readasm("arm32; int8 crypto_intN_x crypto_intN_y; crypto_intN_y = (int8) crypto_intN_x; crypto_intN_y = crypto_intN_y signed>> 31");
16: readasm("arm32; int16 crypto_intN_x crypto_intN_y; crypto_intN_y = (int16) crypto_intN_x; crypto_intN_y = crypto_intN_y signed>> 31");
32: readasm("arm32; int32 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x signed>> 31");
64: readasm("arm32; int64 crypto_intN_x crypto_intN_y; crypto_intN_y.lo = crypto_intN_x.hi signed>> 31; crypto_intN_y.hi = crypto_intN_y.lo");
return crypto_intN_y;
#elif sparc32
crypto_intN crypto_intN_y;
8: readasm("sparc32; int8 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x << 24; crypto_intN_y = crypto_intN_y signed>> 31");
16: readasm("sparc32; int16 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x << 16; crypto_intN_y = crypto_intN_y signed>> 31");
32: readasm("sparc32; int32 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x signed>> 31");
64: readasm("sparc32; int64 crypto_intN_x crypto_intN_y; crypto_intN_y.lo = crypto_intN_x.hi signed>> 31; crypto_intN_y.hi = crypto_intN_y.lo");
return crypto_intN_y;
#else
crypto_intN_x >>= N-6;
crypto_intN_x += crypto_intN_optblocker;
crypto_intN_x >>= 5;
return crypto_intN_x;
#endif
}
__attribute__((unused))
static inline
crypto_intN_unsigned crypto_intN_unsigned_topbit_01(crypto_intN_unsigned crypto_intN_x) {
#if amd64
8: readasm("amd64; int8 crypto_intN_x; crypto_intN_x unsigned>>= 7");
16: readasm("amd64; int16 crypto_intN_x; crypto_intN_x unsigned>>= 15");
32: readasm("amd64; int32 crypto_intN_x; crypto_intN_x unsigned>>= 31");
64: readasm("amd64; int64 crypto_intN_x; crypto_intN_x unsigned>>= 63");
return crypto_intN_x;
#elif arm64
crypto_intN_unsigned crypto_intN_y;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y; crypto_intN_y = 1 & (crypto_intN_x unsigned>> 7)");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y; crypto_intN_y = 1 & (crypto_intN_x unsigned>> 15)");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x unsigned>> 31");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x unsigned>> 63");
return crypto_intN_y;
#elif arm32
crypto_intN crypto_intN_y;
8: readasm("arm32; int8 crypto_intN_x crypto_intN_y; crypto_intN_y = (uint8) crypto_intN_x; crypto_intN_y = crypto_intN_y unsigned>> 7");
16: readasm("arm32; int16 crypto_intN_x crypto_intN_y; crypto_intN_y = (uint16) crypto_intN_x; crypto_intN_y = crypto_intN_y unsigned>> 15");
32: readasm("arm32; int32 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x unsigned>> 31");
64: readasm("arm32; int64 crypto_intN_x crypto_intN_y; crypto_intN_y.lo = crypto_intN_x.hi unsigned>> 31; crypto_intN_y.hi = 0");
return crypto_intN_y;
#elif sparc32
crypto_intN_unsigned crypto_intN_y;
8: readasm("sparc32; int8 crypto_intN_x crypto_intN_y; crypto_intN_y = (uint8) crypto_intN_x; crypto_intN_y = crypto_intN_y unsigned>> 7");
16: readasm("sparc32; int16 crypto_intN_x crypto_intN_y; crypto_intN_y = (uint16) crypto_intN_x; crypto_intN_y = crypto_intN_y unsigned>> 15");
32: readasm("sparc32; int32 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x unsigned>> 31");
64: readasm("sparc32; int64 crypto_intN_x crypto_intN_y; crypto_intN_y.lo = crypto_intN_x.hi unsigned>> 31; crypto_intN_y.hi = 0");
return crypto_intN_y;
#else
crypto_intN_x >>= N-6;
crypto_intN_x += crypto_intN_optblocker;
crypto_intN_x >>= 5;
return crypto_intN_x;
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_negative_01(crypto_intN crypto_intN_x) {
return crypto_intN_unsigned_topbit_01(crypto_intN_x);
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_topbit_mask(crypto_intN crypto_intN_x) {
return crypto_intN_negative_mask(crypto_intN_x);
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_topbit_01(crypto_intN crypto_intN_x) {
return crypto_intN_unsigned_topbit_01(crypto_intN_x);
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_bottombit_mask(crypto_intN crypto_intN_x) {
#if amd64
8: readasm("amd64; int8 crypto_intN_x; crypto_intN_x &= 1");
16: readasm("amd64; int16 crypto_intN_x; crypto_intN_x &= 1");
32: readasm("amd64; int32 crypto_intN_x; crypto_intN_x &= 1");
64: readasm("amd64; int64 crypto_intN_x; crypto_intN_x &= 1");
return -crypto_intN_x;
#elif arm64
crypto_intN crypto_intN_y;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y; crypto_intN_y = -(1 & (crypto_intN_x unsigned>> 0))");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y; crypto_intN_y = -(1 & (crypto_intN_x unsigned>> 0))");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y; crypto_intN_y = -(1 & (crypto_intN_x unsigned>> 0))");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y; crypto_intN_y = -(1 & (crypto_intN_x unsigned>> 0))");
return crypto_intN_y;
#elif arm32
crypto_intN crypto_intN_y;
8: readasm("arm32; int8 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x & 1; crypto_intN_y = -crypto_intN_y");
16: readasm("arm32; int16 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x & 1; crypto_intN_y = -crypto_intN_y");
32: readasm("arm32; int32 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x & 1; crypto_intN_y = -crypto_intN_y");
64: readasm("arm32; int64 crypto_intN_x crypto_intN_y; crypto_intN_y.lo = crypto_intN_x.lo & 1; crypto_intN_y.lo = -crypto_intN_y.lo; crypto_intN_y.hi = crypto_intN_y.lo");
return crypto_intN_y;
#elif sparc32
crypto_intN crypto_intN_y;
8: readasm("sparc32; int8 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x & 1; crypto_intN_y = -crypto_intN_y");
16: readasm("sparc32; int16 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x & 1; crypto_intN_y = -crypto_intN_y");
32: readasm("sparc32; int32 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x & 1; crypto_intN_y = -crypto_intN_y");
64: readasm("sparc32; int64 crypto_intN_x crypto_intN_y; crypto_intN_y.lo = crypto_intN_x.lo & 1; crypto_intN_y.lo = -crypto_intN_y.lo; crypto_intN_y.hi = crypto_intN_y.lo");
return crypto_intN_y;
#else
crypto_intN_x &= 1 + crypto_intN_optblocker;
return -crypto_intN_x;
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_bottombit_01(crypto_intN crypto_intN_x) {
#if amd64
8: readasm("amd64; int8 crypto_intN_x; crypto_intN_x &= 1");
16: readasm("amd64; int16 crypto_intN_x; crypto_intN_x &= 1");
32: readasm("amd64; int32 crypto_intN_x; crypto_intN_x &= 1");
64: readasm("amd64; int64 crypto_intN_x; crypto_intN_x &= 1");
return crypto_intN_x;
#elif arm64
crypto_intN crypto_intN_y;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y; crypto_intN_y = 1 & (crypto_intN_x unsigned>> 0)");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y; crypto_intN_y = 1 & (crypto_intN_x unsigned>> 0)");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y; crypto_intN_y = 1 & (crypto_intN_x unsigned>> 0)");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y; crypto_intN_y = 1 & (crypto_intN_x unsigned>> 0)");
return crypto_intN_y;
#elif arm32
crypto_intN crypto_intN_y;
8: readasm("arm32; int8 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x & 1");
16: readasm("arm32; int16 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x & 1");
32: readasm("arm32; int32 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x & 1");
64: readasm("arm32; int64 crypto_intN_x crypto_intN_y; crypto_intN_y.lo = crypto_intN_x.lo & 1; crypto_intN_y.hi = 0");
return crypto_intN_y;
#elif sparc32
crypto_intN crypto_intN_y;
8: readasm("sparc32; int8 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x & 1");
16: readasm("sparc32; int16 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x & 1");
32: readasm("sparc32; int32 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x & 1");
64: readasm("sparc32; int64 crypto_intN_x crypto_intN_y; crypto_intN_y.lo = crypto_intN_x.lo & 1; crypto_intN_y.hi = 0");
return crypto_intN_y;
#else
crypto_intN_x &= 1 + crypto_intN_optblocker;
return crypto_intN_x;
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_bitinrangepublicpos_mask(crypto_intN crypto_intN_x,crypto_intN crypto_intN_s) {
#if amd64
8: readasm("amd64; int8 crypto_intN_x crypto_intN_s; crypto_intN_x signed>>= crypto_intN_s");
16: readasm("amd64; int16 crypto_intN_x crypto_intN_s; crypto_intN_x signed>>= crypto_intN_s");
32: readasm("amd64; int32 crypto_intN_x crypto_intN_s; crypto_intN_x signed>>= crypto_intN_s");
64: readasm("amd64; int64 crypto_intN_x crypto_intN_s; crypto_intN_x signed>>= crypto_intN_s");
#elif arm64
8: readasm("arm64; int8 crypto_intN_x crypto_intN_s; crypto_intN_x = (int8) crypto_intN_x; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_s; crypto_intN_x = (int16) crypto_intN_x; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
#elif arm32
8: readasm("arm32; int8 crypto_intN_x crypto_intN_s; crypto_intN_s = crypto_intN_s & 7; crypto_intN_x = (int8) crypto_intN_x; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
16: readasm("arm32; int16 crypto_intN_x crypto_intN_s; crypto_intN_s = crypto_intN_s & 15; crypto_intN_x = (int16) crypto_intN_x; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
32: readasm("arm32; int32 crypto_intN_x crypto_intN_s; crypto_intN_s = crypto_intN_s & 31; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
64: readasm("arm32; int64 crypto_intN_x crypto_intN_s; crypto_intN_s.lo = crypto_intN_s.lo & 63; crypto_intN_x.lo = crypto_intN_x.lo unsigned>> crypto_intN_s.lo; crypto_intN_s.hi = 32 - crypto_intN_s.lo; crypto_intN_x.lo = crypto_intN_x.lo | (crypto_intN_x.hi << crypto_intN_s.hi); flags, crypto_intN_s.hi = crypto_intN_s.lo - 32; crypto_intN_x.lo = crypto_intN_x.lo | (crypto_intN_x.hi signed>> crypto_intN_s.hi) if unsigned>=; crypto_intN_x.hi = crypto_intN_x.hi signed>> crypto_intN_s.lo");
#elif sparc32
8: readasm("sparc32; int8 crypto_intN_x crypto_intN_s; crypto_intN_s = crypto_intN_s & 7; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
16: readasm("sparc32; int16 crypto_intN_x crypto_intN_s; crypto_intN_s = crypto_intN_s & 15; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
32: readasm("sparc32; int32 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
64: crypto_intN crypto_intN_y, crypto_intN_z;
64: readasm("sparc32; int64 crypto_intN_x crypto_intN_y crypto_intN_z crypto_intN_s; crypto_intN_s.hi = ~crypto_intN_s.lo; crypto_intN_z.hi = crypto_intN_s.lo << 26; crypto_intN_z.lo = crypto_intN_x.hi << 1; crypto_intN_y.lo = crypto_intN_x.lo unsigned>> crypto_intN_s.lo; crypto_intN_z.lo = crypto_intN_z.lo << crypto_intN_s.hi; crypto_intN_y.hi = crypto_intN_x.hi signed>> crypto_intN_s.lo; crypto_intN_z.hi = crypto_intN_z.hi signed>> 31; crypto_intN_y.lo = crypto_intN_y.lo | crypto_intN_z.lo; crypto_intN_z.lo = crypto_intN_y.lo ^ crypto_intN_y.hi; crypto_intN_z.lo = crypto_intN_z.hi & crypto_intN_z.lo; crypto_intN_x.hi = crypto_intN_y.hi signed>> crypto_intN_z.hi; crypto_intN_x.lo = crypto_intN_y.lo ^ crypto_intN_z.lo");
#else
crypto_intN_x >>= crypto_intN_s ^ crypto_intN_optblocker;
#endif
return crypto_intN_bottombit_mask(crypto_intN_x);
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_bitinrangepublicpos_01(crypto_intN crypto_intN_x,crypto_intN crypto_intN_s) {
#if amd64
8: readasm("amd64; int8 crypto_intN_x crypto_intN_s; crypto_intN_x signed>>= crypto_intN_s");
16: readasm("amd64; int16 crypto_intN_x crypto_intN_s; crypto_intN_x signed>>= crypto_intN_s");
32: readasm("amd64; int32 crypto_intN_x crypto_intN_s; crypto_intN_x signed>>= crypto_intN_s");
64: readasm("amd64; int64 crypto_intN_x crypto_intN_s; crypto_intN_x signed>>= crypto_intN_s");
#elif arm64
8: readasm("arm64; int8 crypto_intN_x crypto_intN_s; crypto_intN_x = (int8) crypto_intN_x; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_s; crypto_intN_x = (int16) crypto_intN_x; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
#elif arm32
8: readasm("arm32; int8 crypto_intN_x crypto_intN_s; crypto_intN_s = crypto_intN_s & 7; crypto_intN_x = (int8) crypto_intN_x; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
16: readasm("arm32; int16 crypto_intN_x crypto_intN_s; crypto_intN_s = crypto_intN_s & 15; crypto_intN_x = (int16) crypto_intN_x; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
32: readasm("arm32; int32 crypto_intN_x crypto_intN_s; crypto_intN_s = crypto_intN_s & 31; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
64: readasm("arm32; int64 crypto_intN_x crypto_intN_s; crypto_intN_s.lo = crypto_intN_s.lo & 63; crypto_intN_x.lo = crypto_intN_x.lo unsigned>> crypto_intN_s.lo; crypto_intN_s.hi = 32 - crypto_intN_s.lo; crypto_intN_x.lo = crypto_intN_x.lo | (crypto_intN_x.hi << crypto_intN_s.hi); flags, crypto_intN_s.hi = crypto_intN_s.lo - 32; crypto_intN_x.lo = crypto_intN_x.lo | (crypto_intN_x.hi signed>> crypto_intN_s.hi) if unsigned>=; crypto_intN_x.hi = crypto_intN_x.hi signed>> crypto_intN_s.lo");
#elif sparc32
8: readasm("sparc32; int8 crypto_intN_x crypto_intN_s; crypto_intN_s = crypto_intN_s & 7; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
16: readasm("sparc32; int16 crypto_intN_x crypto_intN_s; crypto_intN_s = crypto_intN_s & 15; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
32: readasm("sparc32; int32 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
64: crypto_intN crypto_intN_y, crypto_intN_z;
64: readasm("sparc32; int64 crypto_intN_x crypto_intN_y crypto_intN_z crypto_intN_s; crypto_intN_s.hi = ~crypto_intN_s.lo; crypto_intN_z.hi = crypto_intN_s.lo << 26; crypto_intN_z.lo = crypto_intN_x.hi << 1; crypto_intN_y.lo = crypto_intN_x.lo unsigned>> crypto_intN_s.lo; crypto_intN_z.lo = crypto_intN_z.lo << crypto_intN_s.hi; crypto_intN_y.hi = crypto_intN_x.hi signed>> crypto_intN_s.lo; crypto_intN_z.hi = crypto_intN_z.hi signed>> 31; crypto_intN_y.lo = crypto_intN_y.lo | crypto_intN_z.lo; crypto_intN_z.lo = crypto_intN_y.lo ^ crypto_intN_y.hi; crypto_intN_z.lo = crypto_intN_z.hi & crypto_intN_z.lo; crypto_intN_x.hi = crypto_intN_y.hi signed>> crypto_intN_z.hi; crypto_intN_x.lo = crypto_intN_y.lo ^ crypto_intN_z.lo");
#else
crypto_intN_x >>= crypto_intN_s ^ crypto_intN_optblocker;
#endif
return crypto_intN_bottombit_01(crypto_intN_x);
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_shlmod(crypto_intN crypto_intN_x,crypto_intN crypto_intN_s) {
#if amd64
8: crypto_intN_s &= 7;
8: readasm("amd64; int8 crypto_intN_x crypto_intN_s; crypto_intN_x <<= crypto_intN_s");
16: crypto_intN_s &= 15;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_s; crypto_intN_x <<= crypto_intN_s");
32: readasm("amd64; int32 crypto_intN_x crypto_intN_s; crypto_intN_x <<= crypto_intN_s");
64: readasm("amd64; int64 crypto_intN_x crypto_intN_s; crypto_intN_x <<= crypto_intN_s");
#elif arm64
8: crypto_intN_s &= 7;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_s; crypto_intN_x = (uint8) crypto_intN_x; crypto_intN_x = crypto_intN_x << crypto_intN_s");
16: crypto_intN_s &= 15;
16: readasm("arm64; int16 crypto_intN_x crypto_intN_s; crypto_intN_x = (uint16) crypto_intN_x; crypto_intN_x = crypto_intN_x << crypto_intN_s");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x << crypto_intN_s");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x << crypto_intN_s");
#elif arm32
8: crypto_intN_s &= 7;
8: readasm("arm32; int8 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x << crypto_intN_s; crypto_intN_x = (int8) crypto_intN_x");
16: crypto_intN_s &= 15;
16: readasm("arm32; int16 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x << crypto_intN_s; crypto_intN_x = (int16) crypto_intN_x");
32: crypto_intN_s &= 31;
32: readasm("arm32; int32 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x << crypto_intN_s");
64: readasm("arm32; int64 crypto_intN_x crypto_intN_s; crypto_intN_s.lo = crypto_intN_s.lo & 63; crypto_intN_x.hi = crypto_intN_x.hi << crypto_intN_s.lo; crypto_intN_s.hi = crypto_intN_s.lo - 32; crypto_intN_x.hi = crypto_intN_x.hi | (crypto_intN_x.lo << crypto_intN_s.hi); crypto_intN_s.hi = 32 - crypto_intN_s.lo; crypto_intN_x.hi = crypto_intN_x.hi | (crypto_intN_x.lo unsigned>> crypto_intN_s.hi); crypto_intN_x.lo = crypto_intN_x.lo << crypto_intN_s.lo");
#elif sparc32
8: crypto_intN_s &= 7; crypto_intN_s += 24;
8: readasm("sparc32; int8 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x << crypto_intN_s; crypto_intN_x = crypto_intN_x signed>> 24");
16: crypto_intN_s &= 15; crypto_intN_s += 16;
16: readasm("sparc32; int16 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x << crypto_intN_s; crypto_intN_x = crypto_intN_x signed>> 16");
32: readasm("sparc32; int32 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x << crypto_intN_s");
64: crypto_intN crypto_intN_y, crypto_intN_z;
64: readasm("sparc32; int64 crypto_intN_x crypto_intN_y crypto_intN_z crypto_intN_s; crypto_intN_s.hi = ~crypto_intN_s.lo; crypto_intN_z.hi = crypto_intN_s.lo << 26; crypto_intN_z.lo = crypto_intN_x.lo unsigned>> 1; crypto_intN_y.lo = crypto_intN_x.lo << crypto_intN_s.lo; crypto_intN_z.lo = crypto_intN_z.lo unsigned>> crypto_intN_s.hi; crypto_intN_y.hi = crypto_intN_x.hi << crypto_intN_s.lo; crypto_intN_z.hi = crypto_intN_z.hi signed>> 31; crypto_intN_y.hi = crypto_intN_y.hi | crypto_intN_z.lo; crypto_intN_z.lo = crypto_intN_y.lo ^ crypto_intN_y.hi; crypto_intN_x.lo = crypto_intN_z.hi & crypto_intN_y.lo; crypto_intN_z.lo = crypto_intN_z.hi & crypto_intN_z.lo; crypto_intN_x.lo = crypto_intN_x.lo ^ crypto_intN_y.lo; crypto_intN_x.hi = crypto_intN_y.hi ^ crypto_intN_z.lo");
#else
int crypto_intN_k, crypto_intN_l;
for (crypto_intN_l = 0,crypto_intN_k = 1;crypto_intN_k < N;++crypto_intN_l,crypto_intN_k *= 2)
crypto_intN_x ^= (crypto_intN_x ^ (crypto_intN_x << crypto_intN_k)) & crypto_intN_bitinrangepublicpos_mask(crypto_intN_s,crypto_intN_l);
#endif
return crypto_intN_x;
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_shrmod(crypto_intN crypto_intN_x,crypto_intN crypto_intN_s) {
#if amd64
8: crypto_intN_s &= 7;
8: readasm("amd64; int8 crypto_intN_x crypto_intN_s; crypto_intN_x signed>>= crypto_intN_s");
16: crypto_intN_s &= 15;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_s; crypto_intN_x signed>>= crypto_intN_s");
32: readasm("amd64; int32 crypto_intN_x crypto_intN_s; crypto_intN_x signed>>= crypto_intN_s");
64: readasm("amd64; int64 crypto_intN_x crypto_intN_s; crypto_intN_x signed>>= crypto_intN_s");
#elif arm64
8: crypto_intN_s &= 7;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_s; crypto_intN_x = (int8) crypto_intN_x; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
16: crypto_intN_s &= 15;
16: readasm("arm64; int16 crypto_intN_x crypto_intN_s; crypto_intN_x = (int16) crypto_intN_x; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
#elif arm32
8: crypto_intN_s &= 7;
8: readasm("arm32; int8 crypto_intN_x crypto_intN_s; crypto_intN_x = (int8) crypto_intN_x; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
16: crypto_intN_s &= 15;
16: readasm("arm32; int16 crypto_intN_x crypto_intN_s; crypto_intN_x = (int16) crypto_intN_x; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
32: crypto_intN_s &= 31;
32: readasm("arm32; int32 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
64: readasm("arm32; int64 crypto_intN_x crypto_intN_s; crypto_intN_s.lo = crypto_intN_s.lo & 63; crypto_intN_x.lo = crypto_intN_x.lo unsigned>> crypto_intN_s.lo; crypto_intN_s.hi = 32 - crypto_intN_s.lo; crypto_intN_x.lo = crypto_intN_x.lo | (crypto_intN_x.hi << crypto_intN_s.hi); flags, crypto_intN_s.hi = crypto_intN_s.lo - 32; crypto_intN_x.lo = crypto_intN_x.lo | (crypto_intN_x.hi signed>> crypto_intN_s.hi) if unsigned>=; crypto_intN_x.hi = crypto_intN_x.hi signed>> crypto_intN_s.lo");
#elif sparc32
8: crypto_intN_s &= 7;
8: readasm("sparc32; int8 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
16: crypto_intN_s &= 15;
16: readasm("sparc32; int16 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
32: readasm("sparc32; int32 crypto_intN_x crypto_intN_s; crypto_intN_x = crypto_intN_x signed>> crypto_intN_s");
64: crypto_intN crypto_intN_y, crypto_intN_z;
64: readasm("sparc32; int64 crypto_intN_x crypto_intN_y crypto_intN_z crypto_intN_s; crypto_intN_s.hi = ~crypto_intN_s.lo; crypto_intN_z.hi = crypto_intN_s.lo << 26; crypto_intN_z.lo = crypto_intN_x.hi << 1; crypto_intN_y.lo = crypto_intN_x.lo unsigned>> crypto_intN_s.lo; crypto_intN_z.lo = crypto_intN_z.lo << crypto_intN_s.hi; crypto_intN_y.hi = crypto_intN_x.hi signed>> crypto_intN_s.lo; crypto_intN_z.hi = crypto_intN_z.hi signed>> 31; crypto_intN_y.lo = crypto_intN_y.lo | crypto_intN_z.lo; crypto_intN_z.lo = crypto_intN_y.lo ^ crypto_intN_y.hi; crypto_intN_z.lo = crypto_intN_z.hi & crypto_intN_z.lo; crypto_intN_x.hi = crypto_intN_y.hi signed>> crypto_intN_z.hi; crypto_intN_x.lo = crypto_intN_y.lo ^ crypto_intN_z.lo");
#else
int crypto_intN_k, crypto_intN_l;
for (crypto_intN_l = 0,crypto_intN_k = 1;crypto_intN_k < N;++crypto_intN_l,crypto_intN_k *= 2)
crypto_intN_x ^= (crypto_intN_x ^ (crypto_intN_x >> crypto_intN_k)) & crypto_intN_bitinrangepublicpos_mask(crypto_intN_s,crypto_intN_l);
#endif
return crypto_intN_x;
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_bitmod_mask(crypto_intN crypto_intN_x,crypto_intN crypto_intN_s) {
crypto_intN_x = crypto_intN_shrmod(crypto_intN_x,crypto_intN_s);
return crypto_intN_bottombit_mask(crypto_intN_x);
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_bitmod_01(crypto_intN crypto_intN_x,crypto_intN crypto_intN_s) {
crypto_intN_x = crypto_intN_shrmod(crypto_intN_x,crypto_intN_s);
return crypto_intN_bottombit_01(crypto_intN_x);
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_nonzero_mask(crypto_intN crypto_intN_x) {
#if amd64
8: crypto_intN crypto_intN_z;
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_q32,crypto_intN_z32;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_q32 crypto_intN_z32; crypto_intN_z32 = 0; crypto_intN_q32 = -1; crypto_intN_x32 & (int8) crypto_intN_x32; crypto_intN_z32 = crypto_intN_q32 if !=");
8: crypto_intN_z = crypto_intN_z32;
16: crypto_intN crypto_intN_q,crypto_intN_z;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if !=");
32: crypto_intN crypto_intN_q,crypto_intN_z;
32: readasm("amd64; int32 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if !=");
64: crypto_intN crypto_intN_q,crypto_intN_z;
64: readasm("amd64; int64 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if !=");
return crypto_intN_z;
#elif arm64
crypto_intN crypto_intN_z;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_z; crypto_intN_x & 255; crypto_intN_z = -1 if != else 0");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_z; crypto_intN_x & 65535; crypto_intN_z = -1 if != else 0");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_z; crypto_intN_x - 0; crypto_intN_z = -1 if != else 0");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_z; crypto_intN_x - 0; crypto_intN_z = -1 if != else 0");
return crypto_intN_z;
#elif arm32
8: readasm("arm32; int8 crypto_intN_x; crypto_intN_x = (uint8) crypto_intN_x; crypto_intN_x - 0; crypto_intN_x = -1 if !=");
16: readasm("arm32; int16 crypto_intN_x; crypto_intN_x = (uint16) crypto_intN_x; crypto_intN_x - 0; crypto_intN_x = -1 if !=");
32: readasm("arm32; int32 crypto_intN_x; crypto_intN_x - 0; crypto_intN_x = -1 if !=");
64: readasm("arm32; int64 crypto_intN_x; flags, crypto_intN_x.lo = crypto_intN_x.lo | crypto_intN_x.hi; crypto_intN_x.lo = -1 if !=; crypto_intN_x.hi = crypto_intN_x.lo");
return crypto_intN_x;
#elif sparc32
crypto_intN crypto_intN_z;
8: readasm("sparc32; int8 crypto_intN_x crypto_intN_z; crypto_intN_x = (uint8) crypto_intN_x; 0 - crypto_intN_x; crypto_intN_z = -carry");
16: readasm("sparc32; int16 crypto_intN_x crypto_intN_z; crypto_intN_x = (uint16) crypto_intN_x; 0 - crypto_intN_x; crypto_intN_z = -carry");
32: readasm("sparc32; int32 crypto_intN_x crypto_intN_z; 0 - crypto_intN_x; crypto_intN_z = -carry");
64: readasm("sparc32; int64 crypto_intN_x crypto_intN_z; crypto_intN_z.lo = crypto_intN_x.lo | crypto_intN_x.hi; 0 - crypto_intN_z.lo; crypto_intN_z.lo = -carry; crypto_intN_z.hi = crypto_intN_z.lo");
return crypto_intN_z;
#else
crypto_intN_x |= -crypto_intN_x;
return crypto_intN_negative_mask(crypto_intN_x);
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_nonzero_01(crypto_intN crypto_intN_x) {
#if amd64
8: crypto_intN crypto_intN_z;
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_q32,crypto_intN_z32;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_q32 crypto_intN_z32; crypto_intN_z32 = 0; crypto_intN_q32 = 1; crypto_intN_x32 & (int8) crypto_intN_x32; crypto_intN_z32 = crypto_intN_q32 if !=");
8: crypto_intN_z = crypto_intN_z32;
16: crypto_intN crypto_intN_q,crypto_intN_z;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if !=");
32: crypto_intN crypto_intN_q,crypto_intN_z;
32: readasm("amd64; int32 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if !=");
64: crypto_intN crypto_intN_q,crypto_intN_z;
64: readasm("amd64; int64 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if !=");
return crypto_intN_z;
#elif arm64
crypto_intN crypto_intN_z;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_z; crypto_intN_x & 255; crypto_intN_z = 1 if != else 0");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_z; crypto_intN_x & 65535; crypto_intN_z = 1 if != else 0");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_z; crypto_intN_x - 0; crypto_intN_z = 1 if != else 0");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_z; crypto_intN_x - 0; crypto_intN_z = 1 if != else 0");
return crypto_intN_z;
#elif arm32
8: readasm("arm32; int8 crypto_intN_x; crypto_intN_x = (uint8) crypto_intN_x; crypto_intN_x - 0; crypto_intN_x = 1 if !=");
16: readasm("arm32; int16 crypto_intN_x; crypto_intN_x = (uint16) crypto_intN_x; crypto_intN_x - 0; crypto_intN_x = 1 if !=");
32: readasm("arm32; int32 crypto_intN_x; crypto_intN_x - 0; crypto_intN_x = 1 if !=");
64: readasm("arm32; int64 crypto_intN_x; flags, crypto_intN_x.lo = crypto_intN_x.lo | crypto_intN_x.hi; crypto_intN_x.lo = 1 if !=; crypto_intN_x.hi = 0");
return crypto_intN_x;
#elif sparc32
crypto_intN crypto_intN_z;
8: readasm("sparc32; int8 crypto_intN_x crypto_intN_z; crypto_intN_x = (uint8) crypto_intN_x; 0 - crypto_intN_x; crypto_intN_z = carry");
16: readasm("sparc32; int16 crypto_intN_x crypto_intN_z; crypto_intN_x = (uint16) crypto_intN_x; 0 - crypto_intN_x; crypto_intN_z = carry");
32: readasm("sparc32; int32 crypto_intN_x crypto_intN_z; 0 - crypto_intN_x; crypto_intN_z = carry");
64: readasm("sparc32; int64 crypto_intN_x crypto_intN_z; crypto_intN_z.lo = crypto_intN_x.lo | crypto_intN_x.hi; 0 - crypto_intN_z.lo; crypto_intN_z.lo = carry; crypto_intN_z.hi = 0");
return crypto_intN_z;
#else
crypto_intN_x |= -crypto_intN_x;
return crypto_intN_unsigned_topbit_01(crypto_intN_x);
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_positive_mask(crypto_intN crypto_intN_x) {
#if amd64
8: crypto_intN crypto_intN_z;
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_q32,crypto_intN_z32;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_q32 crypto_intN_z32; crypto_intN_z32 = 0; crypto_intN_q32 = -1; crypto_intN_x32 & (int8) crypto_intN_x32; crypto_intN_z32 = crypto_intN_q32 if signed>");
8: crypto_intN_z = crypto_intN_z32;
16: crypto_intN crypto_intN_q,crypto_intN_z;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if signed>");
32: crypto_intN crypto_intN_q,crypto_intN_z;
32: readasm("amd64; int32 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if signed>");
64: crypto_intN crypto_intN_q,crypto_intN_z;
64: readasm("amd64; int64 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if signed>");
return crypto_intN_z;
#elif arm64
crypto_intN crypto_intN_z;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_z; crypto_intN_z = (int8) crypto_intN_x; crypto_intN_z - 0; crypto_intN_z = -1 if signed> else 0");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_z; crypto_intN_z = (int16) crypto_intN_x; crypto_intN_z - 0; crypto_intN_z = -1 if signed> else 0");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_z; crypto_intN_x - 0; crypto_intN_z = -1 if signed> else 0");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_z; crypto_intN_x - 0; crypto_intN_z = -1 if signed> else 0");
return crypto_intN_z;
#elif sparc32
crypto_intN crypto_intN_z;
8: readasm("sparc32; int8 crypto_intN_x crypto_intN_z; crypto_intN_z = crypto_intN_x << 24; crypto_intN_z = crypto_intN_z signed>> 31; crypto_intN_z = crypto_intN_z - crypto_intN_x; crypto_intN_z = crypto_intN_z signed>> 31");
16: readasm("sparc32; int16 crypto_intN_x crypto_intN_z; crypto_intN_z = crypto_intN_x << 16; crypto_intN_z = crypto_intN_z signed>> 31; crypto_intN_z = crypto_intN_z - crypto_intN_x; crypto_intN_z = crypto_intN_z signed>> 31");
32: readasm("sparc32; int32 crypto_intN_x crypto_intN_z; crypto_intN_z = crypto_intN_x signed>> 31; crypto_intN_z = crypto_intN_z - crypto_intN_x; crypto_intN_z = crypto_intN_z signed>> 31");
64: readasm("sparc32; int64 crypto_intN_x crypto_intN_z; crypto_intN_z.lo = crypto_intN_x.hi signed>> 31; carry, crypto_intN_z.hi = crypto_intN_z.lo - crypto_intN_x.lo; crypto_intN_z.hi = crypto_intN_z.lo - crypto_intN_x.hi - carry; crypto_intN_z.hi = crypto_intN_z.hi signed>> 31; crypto_intN_z.lo = crypto_intN_z.hi");
return crypto_intN_z;
#else
crypto_intN crypto_intN_z = -crypto_intN_x;
crypto_intN_z ^= crypto_intN_x & crypto_intN_z;
return crypto_intN_negative_mask(crypto_intN_z);
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_positive_01(crypto_intN crypto_intN_x) {
#if amd64
8: crypto_intN crypto_intN_z;
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_q32,crypto_intN_z32;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_q32 crypto_intN_z32; crypto_intN_z32 = 0; crypto_intN_q32 = 1; crypto_intN_x32 & (int8) crypto_intN_x32; crypto_intN_z32 = crypto_intN_q32 if signed>");
8: crypto_intN_z = crypto_intN_z32;
16: crypto_intN crypto_intN_q,crypto_intN_z;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if signed>");
32: crypto_intN crypto_intN_q,crypto_intN_z;
32: readasm("amd64; int32 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if signed>");
64: crypto_intN crypto_intN_q,crypto_intN_z;
64: readasm("amd64; int64 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if signed>");
return crypto_intN_z;
#elif arm64
crypto_intN crypto_intN_z;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_z; crypto_intN_z = (int8) crypto_intN_x; crypto_intN_z - 0; crypto_intN_z = 1 if signed> else 0");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_z; crypto_intN_z = (int16) crypto_intN_x; crypto_intN_z - 0; crypto_intN_z = 1 if signed> else 0");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_z; crypto_intN_x - 0; crypto_intN_z = 1 if signed> else 0");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_z; crypto_intN_x - 0; crypto_intN_z = 1 if signed> else 0");
return crypto_intN_z;
#elif sparc32
crypto_intN crypto_intN_z;
8: readasm("sparc32; int8 crypto_intN_x crypto_intN_z; crypto_intN_z = crypto_intN_x << 24; crypto_intN_z = crypto_intN_z signed>> 31; crypto_intN_z = crypto_intN_z - crypto_intN_x; crypto_intN_z = crypto_intN_z unsigned>> 31");
16: readasm("sparc32; int16 crypto_intN_x crypto_intN_z; crypto_intN_z = crypto_intN_x << 16; crypto_intN_z = crypto_intN_z signed>> 31; crypto_intN_z = crypto_intN_z - crypto_intN_x; crypto_intN_z = crypto_intN_z unsigned>> 31");
32: readasm("sparc32; int32 crypto_intN_x crypto_intN_z; crypto_intN_z = crypto_intN_x signed>> 31; crypto_intN_z = crypto_intN_z - crypto_intN_x; crypto_intN_z = crypto_intN_z unsigned>> 31");
64: readasm("sparc32; int64 crypto_intN_x crypto_intN_z; crypto_intN_z.hi = crypto_intN_x.hi signed>> 31; carry, crypto_intN_z.lo = crypto_intN_z.hi - crypto_intN_x.lo; crypto_intN_z.lo = crypto_intN_z.hi - crypto_intN_x.hi - carry; crypto_intN_z.lo = crypto_intN_z.lo unsigned>> 31; crypto_intN_z.hi = 0");
return crypto_intN_z;
#else
crypto_intN crypto_intN_z = -crypto_intN_x;
crypto_intN_z ^= crypto_intN_x & crypto_intN_z;
return crypto_intN_unsigned_topbit_01(crypto_intN_z);
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_zero_mask(crypto_intN crypto_intN_x) {
#if amd64
8: crypto_intN crypto_intN_z;
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_q32,crypto_intN_z32;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_q32 crypto_intN_z32; crypto_intN_z32 = 0; crypto_intN_q32 = -1; crypto_intN_x32 & (int8) crypto_intN_x32; crypto_intN_z32 = crypto_intN_q32 if =");
8: crypto_intN_z = crypto_intN_z32;
16: crypto_intN crypto_intN_q,crypto_intN_z;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if =");
32: crypto_intN crypto_intN_q,crypto_intN_z;
32: readasm("amd64; int32 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if =");
64: crypto_intN crypto_intN_q,crypto_intN_z;
64: readasm("amd64; int64 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if =");
return crypto_intN_z;
#elif arm64
crypto_intN crypto_intN_z;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_z; crypto_intN_x & 255; crypto_intN_z = -1 if = else 0");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_z; crypto_intN_x & 65535; crypto_intN_z = -1 if = else 0");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_z; crypto_intN_x - 0; crypto_intN_z = -1 if = else 0");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_z; crypto_intN_x - 0; crypto_intN_z = -1 if = else 0");
return crypto_intN_z;
#elif sparc32
crypto_intN crypto_intN_z;
8: readasm("sparc32; int8 crypto_intN_x crypto_intN_z; crypto_intN_x = (uint8) crypto_intN_x; 0 - crypto_intN_x; crypto_intN_z = carry - 1");
16: readasm("sparc32; int16 crypto_intN_x crypto_intN_z; crypto_intN_x = (uint16) crypto_intN_x; 0 - crypto_intN_x; crypto_intN_z = carry - 1");
32: readasm("sparc32; int32 crypto_intN_x crypto_intN_z; 0 - crypto_intN_x; crypto_intN_z = carry - 1");
64: readasm("sparc32; int64 crypto_intN_x crypto_intN_z; crypto_intN_z.lo = crypto_intN_x.lo | crypto_intN_x.hi; 0 - crypto_intN_z.lo; crypto_intN_z.lo = carry - 1; crypto_intN_z.hi = crypto_intN_z.lo");
return crypto_intN_z;
#else
return ~crypto_intN_nonzero_mask(crypto_intN_x);
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_zero_01(crypto_intN crypto_intN_x) {
#if amd64
8: crypto_intN crypto_intN_z;
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_q32,crypto_intN_z32;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_q32 crypto_intN_z32; crypto_intN_z32 = 0; crypto_intN_q32 = 1; crypto_intN_x32 & (int8) crypto_intN_x32; crypto_intN_z32 = crypto_intN_q32 if =");
8: crypto_intN_z = crypto_intN_z32;
16: crypto_intN crypto_intN_q,crypto_intN_z;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if =");
32: crypto_intN crypto_intN_q,crypto_intN_z;
32: readasm("amd64; int32 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if =");
64: crypto_intN crypto_intN_q,crypto_intN_z;
64: readasm("amd64; int64 crypto_intN_x crypto_intN_q crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x & crypto_intN_x; crypto_intN_z = crypto_intN_q if =");
return crypto_intN_z;
#elif arm64
crypto_intN crypto_intN_z;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_z; crypto_intN_x & 255; crypto_intN_z = 1 if = else 0");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_z; crypto_intN_x & 65535; crypto_intN_z = 1 if = else 0");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_z; crypto_intN_x - 0; crypto_intN_z = 1 if = else 0");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_z; crypto_intN_x - 0; crypto_intN_z = 1 if = else 0");
return crypto_intN_z;
#elif sparc32
crypto_intN crypto_intN_z;
8: readasm("sparc32; int8 crypto_intN_x crypto_intN_z; crypto_intN_x = (uint8) crypto_intN_x; 0 - crypto_intN_x; crypto_intN_z = 1 - carry");
16: readasm("sparc32; int16 crypto_intN_x crypto_intN_z; crypto_intN_x = (uint16) crypto_intN_x; 0 - crypto_intN_x; crypto_intN_z = 1 - carry");
32: readasm("sparc32; int32 crypto_intN_x crypto_intN_z; 0 - crypto_intN_x; crypto_intN_z = 1 - carry");
64: readasm("sparc32; int64 crypto_intN_x crypto_intN_z; crypto_intN_z.lo = crypto_intN_x.lo | crypto_intN_x.hi; 0 - crypto_intN_z.lo; crypto_intN_z.lo = 1 - carry; crypto_intN_z.hi = 0");
return crypto_intN_z;
#else
return 1-crypto_intN_nonzero_01(crypto_intN_x);
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_unequal_mask(crypto_intN crypto_intN_x,crypto_intN crypto_intN_y) {
#if amd64
8: crypto_intN crypto_intN_z;
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_y32 = crypto_intN_y,crypto_intN_q32,crypto_intN_z32;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_q32 crypto_intN_y32 crypto_intN_z32; crypto_intN_z32 = 0; crypto_intN_q32 = -1; crypto_intN_x32 - (int8) crypto_intN_y32; crypto_intN_z32 = crypto_intN_q32 if !=");
8: crypto_intN_z = crypto_intN_z32;
16: crypto_intN crypto_intN_q,crypto_intN_z;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if !=");
32: crypto_intN crypto_intN_q,crypto_intN_z;
32: readasm("amd64; int32 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if !=");
64: crypto_intN crypto_intN_q,crypto_intN_z;
64: readasm("amd64; int64 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if !=");
return crypto_intN_z;
#elif arm64
crypto_intN crypto_intN_z;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (uint8) crypto_intN_x; crypto_intN_z - (uint8) crypto_intN_y; crypto_intN_z = -1 if != else 0");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (uint16) crypto_intN_x; crypto_intN_z - (uint16) crypto_intN_y; crypto_intN_z = -1 if != else 0");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = -1 if != else 0");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = -1 if != else 0");
return crypto_intN_z;
#else
return crypto_intN_nonzero_mask(crypto_intN_x ^ crypto_intN_y);
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_unequal_01(crypto_intN crypto_intN_x,crypto_intN crypto_intN_y) {
#if amd64
8: crypto_intN crypto_intN_z;
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_y32 = crypto_intN_y,crypto_intN_q32,crypto_intN_z32;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_q32 crypto_intN_y32 crypto_intN_z32; crypto_intN_z32 = 0; crypto_intN_q32 = 1; crypto_intN_x32 - (int8) crypto_intN_y32; crypto_intN_z32 = crypto_intN_q32 if !=");
8: crypto_intN_z = crypto_intN_z32;
16: crypto_intN crypto_intN_q,crypto_intN_z;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if !=");
32: crypto_intN crypto_intN_q,crypto_intN_z;
32: readasm("amd64; int32 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if !=");
64: crypto_intN crypto_intN_q,crypto_intN_z;
64: readasm("amd64; int64 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if !=");
return crypto_intN_z;
#elif arm64
crypto_intN crypto_intN_z;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (uint8) crypto_intN_x; crypto_intN_z - (uint8) crypto_intN_y; crypto_intN_z = 1 if != else 0");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (uint16) crypto_intN_x; crypto_intN_z - (uint16) crypto_intN_y; crypto_intN_z = 1 if != else 0");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = 1 if != else 0");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = 1 if != else 0");
return crypto_intN_z;
#else
return crypto_intN_nonzero_01(crypto_intN_x ^ crypto_intN_y);
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_equal_mask(crypto_intN crypto_intN_x,crypto_intN crypto_intN_y) {
#if amd64
8: crypto_intN crypto_intN_z;
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_y32 = crypto_intN_y,crypto_intN_q32,crypto_intN_z32;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_q32 crypto_intN_y32 crypto_intN_z32; crypto_intN_z32 = 0; crypto_intN_q32 = -1; crypto_intN_x32 - (int8) crypto_intN_y32; crypto_intN_z32 = crypto_intN_q32 if =");
8: crypto_intN_z = crypto_intN_z32;
16: crypto_intN crypto_intN_q,crypto_intN_z;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if =");
32: crypto_intN crypto_intN_q,crypto_intN_z;
32: readasm("amd64; int32 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if =");
64: crypto_intN crypto_intN_q,crypto_intN_z;
64: readasm("amd64; int64 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if =");
return crypto_intN_z;
#elif arm64
crypto_intN crypto_intN_z;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (uint8) crypto_intN_x; crypto_intN_z - (uint8) crypto_intN_y; crypto_intN_z = -1 if = else 0");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (uint16) crypto_intN_x; crypto_intN_z - (uint16) crypto_intN_y; crypto_intN_z = -1 if = else 0");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = -1 if = else 0");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = -1 if = else 0");
return crypto_intN_z;
#else
return crypto_intN_zero_mask(crypto_intN_x ^ crypto_intN_y);
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_equal_01(crypto_intN crypto_intN_x,crypto_intN crypto_intN_y) {
#if amd64
8: crypto_intN crypto_intN_z;
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_y32 = crypto_intN_y,crypto_intN_q32,crypto_intN_z32;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_q32 crypto_intN_y32 crypto_intN_z32; crypto_intN_z32 = 0; crypto_intN_q32 = 1; crypto_intN_x32 - (int8) crypto_intN_y32; crypto_intN_z32 = crypto_intN_q32 if =");
8: crypto_intN_z = crypto_intN_z32;
16: crypto_intN crypto_intN_q,crypto_intN_z;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if =");
32: crypto_intN crypto_intN_q,crypto_intN_z;
32: readasm("amd64; int32 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if =");
64: crypto_intN crypto_intN_q,crypto_intN_z;
64: readasm("amd64; int64 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if =");
return crypto_intN_z;
#elif arm64
crypto_intN crypto_intN_z;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (uint8) crypto_intN_x; crypto_intN_z - (uint8) crypto_intN_y; crypto_intN_z = 1 if = else 0");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (uint16) crypto_intN_x; crypto_intN_z - (uint16) crypto_intN_y; crypto_intN_z = 1 if = else 0");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = 1 if = else 0");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = 1 if = else 0");
return crypto_intN_z;
#else
return crypto_intN_zero_01(crypto_intN_x ^ crypto_intN_y);
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_min(crypto_intN crypto_intN_x,crypto_intN crypto_intN_y) {
#if amd64
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_y32 = crypto_intN_y;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_y32; crypto_intN_x32 - (int8) crypto_intN_y32; crypto_intN_x32 = crypto_intN_y32 if signed>");
8: crypto_intN_x = crypto_intN_x32;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_y; crypto_intN_x - crypto_intN_y; crypto_intN_x = crypto_intN_y if signed>");
32: readasm("amd64; int32 crypto_intN_x crypto_intN_y; crypto_intN_x - crypto_intN_y; crypto_intN_x = crypto_intN_y if signed>");
64: readasm("amd64; int64 crypto_intN_x crypto_intN_y; crypto_intN_x - crypto_intN_y; crypto_intN_x = crypto_intN_y if signed>");
return crypto_intN_x;
#elif arm64
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y; crypto_intN_x = (int8) crypto_intN_x; crypto_intN_x - (int8) crypto_intN_y; crypto_intN_x = crypto_intN_x if signed< else crypto_intN_y");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y; crypto_intN_x = (int16) crypto_intN_x; crypto_intN_x - (int16) crypto_intN_y; crypto_intN_x = crypto_intN_x if signed< else crypto_intN_y");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y; crypto_intN_x - crypto_intN_y; crypto_intN_x = crypto_intN_x if signed< else crypto_intN_y");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y; crypto_intN_x - crypto_intN_y; crypto_intN_x = crypto_intN_x if signed< else crypto_intN_y");
return crypto_intN_x;
#else
crypto_intN crypto_intN_r = crypto_intN_y ^ crypto_intN_x;
crypto_intN crypto_intN_z = crypto_intN_y - crypto_intN_x;
crypto_intN_z ^= crypto_intN_r & (crypto_intN_z ^ crypto_intN_y);
crypto_intN_z = crypto_intN_negative_mask(crypto_intN_z);
crypto_intN_z &= crypto_intN_r;
return crypto_intN_x ^ crypto_intN_z;
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_max(crypto_intN crypto_intN_x,crypto_intN crypto_intN_y) {
#if amd64
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_y32 = crypto_intN_y;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_y32; crypto_intN_x32 - (int8) crypto_intN_y32; crypto_intN_x32 = crypto_intN_y32 if signed<");
8: crypto_intN_x = crypto_intN_x32;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_y; crypto_intN_x - crypto_intN_y; crypto_intN_x = crypto_intN_y if signed<");
32: readasm("amd64; int32 crypto_intN_x crypto_intN_y; crypto_intN_x - crypto_intN_y; crypto_intN_x = crypto_intN_y if signed<");
64: readasm("amd64; int64 crypto_intN_x crypto_intN_y; crypto_intN_x - crypto_intN_y; crypto_intN_x = crypto_intN_y if signed<");
return crypto_intN_x;
#elif arm64
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y; crypto_intN_x = (int8) crypto_intN_x; crypto_intN_x - (int8) crypto_intN_y; crypto_intN_x = crypto_intN_y if signed< else crypto_intN_x");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y; crypto_intN_x = (int16) crypto_intN_x; crypto_intN_x - (int16) crypto_intN_y; crypto_intN_x = crypto_intN_y if signed< else crypto_intN_x");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y; crypto_intN_x - crypto_intN_y; crypto_intN_x = crypto_intN_y if signed< else crypto_intN_x");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y; crypto_intN_x - crypto_intN_y; crypto_intN_x = crypto_intN_y if signed< else crypto_intN_x");
return crypto_intN_x;
#else
crypto_intN crypto_intN_r = crypto_intN_y ^ crypto_intN_x;
crypto_intN crypto_intN_z = crypto_intN_y - crypto_intN_x;
crypto_intN_z ^= crypto_intN_r & (crypto_intN_z ^ crypto_intN_y);
crypto_intN_z = crypto_intN_negative_mask(crypto_intN_z);
crypto_intN_z &= crypto_intN_r;
return crypto_intN_y ^ crypto_intN_z;
#endif
}
__attribute__((unused))
static inline
void crypto_intN_minmax(crypto_intN *crypto_intN_p,crypto_intN *crypto_intN_q) {
crypto_intN crypto_intN_x = *crypto_intN_p;
crypto_intN crypto_intN_y = *crypto_intN_q;
#if amd64
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_y32 = crypto_intN_y,crypto_intN_z32;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_y32 crypto_intN_z32; crypto_intN_x32 - (int8) crypto_intN_y32; crypto_intN_z32 = crypto_intN_x32; crypto_intN_x32 = crypto_intN_y32 if signed>; crypto_intN_y32 = crypto_intN_z32 if signed>");
8: crypto_intN_x = crypto_intN_x32; crypto_intN_y = crypto_intN_y32;
16: crypto_intN crypto_intN_z;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_x; crypto_intN_x = crypto_intN_y if signed>; crypto_intN_y = crypto_intN_z if signed>");
32: crypto_intN crypto_intN_z;
32: readasm("amd64; int32 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_x; crypto_intN_x = crypto_intN_y if signed>; crypto_intN_y = crypto_intN_z if signed>");
64: crypto_intN crypto_intN_z;
64: readasm("amd64; int64 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_x; crypto_intN_x = crypto_intN_y if signed>; crypto_intN_y = crypto_intN_z if signed>");
*crypto_intN_p = crypto_intN_x;
*crypto_intN_q = crypto_intN_y;
#elif arm64
crypto_intN crypto_intN_r, crypto_intN_s;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y crypto_intN_r crypto_intN_s; crypto_intN_x = (int8) crypto_intN_x; crypto_intN_x - (int8) crypto_intN_y; crypto_intN_r = crypto_intN_x if signed< else crypto_intN_y; crypto_intN_s = crypto_intN_y if signed< else crypto_intN_x");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y crypto_intN_r crypto_intN_s; crypto_intN_x = (int16) crypto_intN_x; crypto_intN_x - (int16) crypto_intN_y; crypto_intN_r = crypto_intN_x if signed< else crypto_intN_y; crypto_intN_s = crypto_intN_y if signed< else crypto_intN_x");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y crypto_intN_r crypto_intN_s; crypto_intN_x - crypto_intN_y; crypto_intN_r = crypto_intN_x if signed< else crypto_intN_y; crypto_intN_s = crypto_intN_y if signed< else crypto_intN_x");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y crypto_intN_r crypto_intN_s; crypto_intN_x - crypto_intN_y; crypto_intN_r = crypto_intN_x if signed< else crypto_intN_y; crypto_intN_s = crypto_intN_y if signed< else crypto_intN_x");
*crypto_intN_p = crypto_intN_r;
*crypto_intN_q = crypto_intN_s;
#else
crypto_intN crypto_intN_r = crypto_intN_y ^ crypto_intN_x;
crypto_intN crypto_intN_z = crypto_intN_y - crypto_intN_x;
crypto_intN_z ^= crypto_intN_r & (crypto_intN_z ^ crypto_intN_y);
crypto_intN_z = crypto_intN_negative_mask(crypto_intN_z);
crypto_intN_z &= crypto_intN_r;
crypto_intN_x ^= crypto_intN_z;
crypto_intN_y ^= crypto_intN_z;
*crypto_intN_p = crypto_intN_x;
*crypto_intN_q = crypto_intN_y;
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_smaller_mask(crypto_intN crypto_intN_x,crypto_intN crypto_intN_y) {
#if amd64
8: crypto_intN crypto_intN_z;
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_y32 = crypto_intN_y,crypto_intN_q32,crypto_intN_z32;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_q32 crypto_intN_y32 crypto_intN_z32; crypto_intN_z32 = 0; crypto_intN_q32 = -1; crypto_intN_x32 - (int8) crypto_intN_y32; crypto_intN_z32 = crypto_intN_q32 if signed<");
8: crypto_intN_z = crypto_intN_z32;
16: crypto_intN crypto_intN_q,crypto_intN_z;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if signed<");
32: crypto_intN crypto_intN_q,crypto_intN_z;
32: readasm("amd64; int32 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if signed<");
64: crypto_intN crypto_intN_q,crypto_intN_z;
64: readasm("amd64; int64 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if signed<");
return crypto_intN_z;
#elif arm64
crypto_intN crypto_intN_z;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (int8) crypto_intN_x; crypto_intN_z - (int8) crypto_intN_y; crypto_intN_z = -1 if signed< else 0");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (int16) crypto_intN_x; crypto_intN_z - (int16) crypto_intN_y; crypto_intN_z = -1 if signed< else 0");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = -1 if signed< else 0");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = -1 if signed< else 0");
return crypto_intN_z;
#else
crypto_intN crypto_intN_r = crypto_intN_x ^ crypto_intN_y;
crypto_intN crypto_intN_z = crypto_intN_x - crypto_intN_y;
crypto_intN_z ^= crypto_intN_r & (crypto_intN_z ^ crypto_intN_x);
return crypto_intN_negative_mask(crypto_intN_z);
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_smaller_01(crypto_intN crypto_intN_x,crypto_intN crypto_intN_y) {
#if amd64
8: crypto_intN crypto_intN_z;
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_y32 = crypto_intN_y,crypto_intN_q32,crypto_intN_z32;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_q32 crypto_intN_y32 crypto_intN_z32; crypto_intN_z32 = 0; crypto_intN_q32 = 1; crypto_intN_x32 - (int8) crypto_intN_y32; crypto_intN_z32 = crypto_intN_q32 if signed<");
8: crypto_intN_z = crypto_intN_z32;
16: crypto_intN crypto_intN_q,crypto_intN_z;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if signed<");
32: crypto_intN crypto_intN_q,crypto_intN_z;
32: readasm("amd64; int32 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if signed<");
64: crypto_intN crypto_intN_q,crypto_intN_z;
64: readasm("amd64; int64 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if signed<");
return crypto_intN_z;
#elif arm64
crypto_intN crypto_intN_z;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (int8) crypto_intN_x; crypto_intN_z - (int8) crypto_intN_y; crypto_intN_z = 1 if signed< else 0");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (int16) crypto_intN_x; crypto_intN_z - (int16) crypto_intN_y; crypto_intN_z = 1 if signed< else 0");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = 1 if signed< else 0");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = 1 if signed< else 0");
return crypto_intN_z;
#else
crypto_intN crypto_intN_r = crypto_intN_x ^ crypto_intN_y;
crypto_intN crypto_intN_z = crypto_intN_x - crypto_intN_y;
crypto_intN_z ^= crypto_intN_r & (crypto_intN_z ^ crypto_intN_x);
return crypto_intN_unsigned_topbit_01(crypto_intN_z);
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_leq_mask(crypto_intN crypto_intN_x,crypto_intN crypto_intN_y) {
#if amd64
8: crypto_intN crypto_intN_z;
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_y32 = crypto_intN_y,crypto_intN_q32,crypto_intN_z32;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_q32 crypto_intN_y32 crypto_intN_z32; crypto_intN_z32 = 0; crypto_intN_q32 = -1; crypto_intN_x32 - (int8) crypto_intN_y32; crypto_intN_z32 = crypto_intN_q32 if signed<=");
8: crypto_intN_z = crypto_intN_z32;
16: crypto_intN crypto_intN_q,crypto_intN_z;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if signed<=");
32: crypto_intN crypto_intN_q,crypto_intN_z;
32: readasm("amd64; int32 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if signed<=");
64: crypto_intN crypto_intN_q,crypto_intN_z;
64: readasm("amd64; int64 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = -1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if signed<=");
return crypto_intN_z;
#elif arm64
crypto_intN crypto_intN_z;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (int8) crypto_intN_x; crypto_intN_z - (int8) crypto_intN_y; crypto_intN_z = -1 if signed<= else 0");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (int16) crypto_intN_x; crypto_intN_z - (int16) crypto_intN_y; crypto_intN_z = -1 if signed<= else 0");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = -1 if signed<= else 0");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = -1 if signed<= else 0");
return crypto_intN_z;
#else
return ~crypto_intN_smaller_mask(crypto_intN_y,crypto_intN_x);
#endif
}
__attribute__((unused))
static inline
crypto_intN crypto_intN_leq_01(crypto_intN crypto_intN_x,crypto_intN crypto_intN_y) {
#if amd64
8: crypto_intN crypto_intN_z;
8: int32_t crypto_intN_x32 = crypto_intN_x,crypto_intN_y32 = crypto_intN_y,crypto_intN_q32,crypto_intN_z32;
8: readasm("amd64; int32 crypto_intN_x32 crypto_intN_q32 crypto_intN_y32 crypto_intN_z32; crypto_intN_z32 = 0; crypto_intN_q32 = 1; crypto_intN_x32 - (int8) crypto_intN_y32; crypto_intN_z32 = crypto_intN_q32 if signed<=");
8: crypto_intN_z = crypto_intN_z32;
16: crypto_intN crypto_intN_q,crypto_intN_z;
16: readasm("amd64; int16 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if signed<=");
32: crypto_intN crypto_intN_q,crypto_intN_z;
32: readasm("amd64; int32 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if signed<=");
64: crypto_intN crypto_intN_q,crypto_intN_z;
64: readasm("amd64; int64 crypto_intN_x crypto_intN_q crypto_intN_y crypto_intN_z; crypto_intN_z = 0; crypto_intN_q = 1; crypto_intN_x - crypto_intN_y; crypto_intN_z = crypto_intN_q if signed<=");
return crypto_intN_z;
#elif arm64
crypto_intN crypto_intN_z;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (int8) crypto_intN_x; crypto_intN_z - (int8) crypto_intN_y; crypto_intN_z = 1 if signed<= else 0");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_z = (int16) crypto_intN_x; crypto_intN_z - (int16) crypto_intN_y; crypto_intN_z = 1 if signed<= else 0");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = 1 if signed<= else 0");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y crypto_intN_z; crypto_intN_x - crypto_intN_y; crypto_intN_z = 1 if signed<= else 0");
return crypto_intN_z;
#else
return 1-crypto_intN_smaller_01(crypto_intN_y,crypto_intN_x);
#endif
}
__attribute__((unused))
static inline
int crypto_intN_ones_num(crypto_intN crypto_intN_x) {
crypto_intN_unsigned crypto_intN_y = crypto_intN_x;
8: const crypto_intN C0 = 0x55;
16: const crypto_intN C0 = 0x5555;
32: const crypto_intN C0 = 0x55555555;
64: const crypto_intN C0 = 0x5555555555555555;
8: const crypto_intN C1 = 0x33;
16: const crypto_intN C1 = 0x3333;
32: const crypto_intN C1 = 0x33333333;
64: const crypto_intN C1 = 0x3333333333333333;
8: const crypto_intN C2 = 0x0f;
16: const crypto_intN C2 = 0x0f0f;
32: const crypto_intN C2 = 0x0f0f0f0f;
64: const crypto_intN C2 = 0x0f0f0f0f0f0f0f0f;
crypto_intN_y -= ((crypto_intN_y >> 1) & C0);
crypto_intN_y = (crypto_intN_y & C1) + ((crypto_intN_y >> 2) & C1);
crypto_intN_y = (crypto_intN_y + (crypto_intN_y >> 4)) & C2;
16: crypto_intN_y = (crypto_intN_y + (crypto_intN_y >> 8)) & 0xff;
32: crypto_intN_y += crypto_intN_y >> 8;
32: crypto_intN_y = (crypto_intN_y + (crypto_intN_y >> 16)) & 0xff;
64: crypto_intN_y += crypto_intN_y >> 8;
64: crypto_intN_y += crypto_intN_y >> 16;
64: crypto_intN_y = (crypto_intN_y + (crypto_intN_y >> 32)) & 0xff;
return crypto_intN_y;
}
__attribute__((unused))
static inline
int crypto_intN_bottomzeros_num(crypto_intN crypto_intN_x) {
#if amd64
8: int32_t fallback = N;
8: int32_t crypto_intN_x32 = crypto_intN_x;
8: readasm("amd64; int32 crypto_intN_x32 fallback; crypto_intN_x32 = numbottomzeros_tricky crypto_intN_x32; crypto_intN_x32 = fallback if =");
8: crypto_intN_x = crypto_intN_x32;
16: crypto_intN fallback = N;
16: readasm("amd64; int16 crypto_intN_x fallback; crypto_intN_x = numbottomzeros_tricky crypto_intN_x; crypto_intN_x = fallback if =");
32: crypto_intN fallback = N;
32: readasm("amd64; int32 crypto_intN_x fallback; crypto_intN_x = numbottomzeros_tricky crypto_intN_x; crypto_intN_x = fallback if =");
64: crypto_intN fallback = N;
64: readasm("amd64; int64 crypto_intN_x fallback; crypto_intN_x = numbottomzeros_tricky crypto_intN_x; crypto_intN_x = fallback if =");
return crypto_intN_x;
#elif arm64
int64_t crypto_intN_y;
8: readasm("arm64; int8 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x | -256; crypto_intN_y = bitrev32 crypto_intN_y; crypto_intN_y = numbottomzeros crypto_intN_y");
16: readasm("arm64; int16 crypto_intN_x crypto_intN_y; crypto_intN_y = crypto_intN_x | -65536; crypto_intN_y = bitrev32 crypto_intN_y; crypto_intN_y = numbottomzeros crypto_intN_y");
32: readasm("arm64; int32 crypto_intN_x crypto_intN_y; crypto_intN_y = bitrev32 crypto_intN_x; crypto_intN_y = numbottomzeros crypto_intN_y");
64: readasm("arm64; int64 crypto_intN_x crypto_intN_y; crypto_intN_y = bitrev64 crypto_intN_x; crypto_intN_y = numbottomzeros crypto_intN_y");
return crypto_intN_y;
#else
crypto_intN crypto_intN_y = crypto_intN_x ^ (crypto_intN_x-1);
crypto_intN_y = ((crypto_intN) crypto_intN_y) >> 1;
crypto_intN_y &= ~(crypto_intN_x & (((crypto_intN) 1) << (N-1)));
return crypto_intN_ones_num(crypto_intN_y);
#endif
}
#endif
tinyssh-20250501/cryptoint/crypto_uint16.h 0000664 0000000 0000000 00000062452 15004722224 0020414 0 ustar 00root root 0000000 0000000 /* auto-generated: cd cryptoint; ./autogen */
/* cryptoint 20250414 */
#ifndef crypto_uint16_h
#define crypto_uint16_h
#include
#define crypto_uint16 uint16_t
#define crypto_uint16_signed int16_t
#define crypto_uint16_signed_optblocker tinyssh_uint16_signed_optblocker
extern volatile crypto_uint16_signed crypto_uint16_signed_optblocker;
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_load(const unsigned char *crypto_uint16_s) {
crypto_uint16 crypto_uint16_z = 0;
crypto_uint16_z |= ((crypto_uint16) (*crypto_uint16_s++)) << 0;
crypto_uint16_z |= ((crypto_uint16) (*crypto_uint16_s++)) << 8;
return crypto_uint16_z;
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_load_bigendian(const unsigned char *crypto_uint16_s) {
crypto_uint16 crypto_uint16_z = 0;
crypto_uint16_z |= ((crypto_uint16) (*crypto_uint16_s++)) << 8;
crypto_uint16_z |= ((crypto_uint16) (*crypto_uint16_s++)) << 0;
return crypto_uint16_z;
}
__attribute__((unused))
static inline
void crypto_uint16_store(unsigned char *crypto_uint16_s,crypto_uint16 crypto_uint16_x) {
*crypto_uint16_s++ = crypto_uint16_x >> 0;
*crypto_uint16_s++ = crypto_uint16_x >> 8;
}
__attribute__((unused))
static inline
void crypto_uint16_store_bigendian(unsigned char *crypto_uint16_s,crypto_uint16 crypto_uint16_x) {
*crypto_uint16_s++ = crypto_uint16_x >> 8;
*crypto_uint16_s++ = crypto_uint16_x >> 0;
}
__attribute__((unused))
static inline
crypto_uint16_signed crypto_uint16_signed_negative_mask(crypto_uint16_signed crypto_uint16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarw $15,%0" : "+r"(crypto_uint16_x) : : "cc");
return crypto_uint16_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16_signed crypto_uint16_y;
__asm__ ("sbfx %w0,%w1,15,1" : "=r"(crypto_uint16_y) : "r"(crypto_uint16_x) : );
return crypto_uint16_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint16_signed crypto_uint16_y;
__asm__ ("sxth %0,%1\n asr %0,%0,#31" : "=r"(crypto_uint16_y) : "r"(crypto_uint16_x) : );
return crypto_uint16_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint16_signed crypto_uint16_y;
__asm__ ("sll %1,16,%0\n sra %0,31,%0" : "=r"(crypto_uint16_y) : "r"(crypto_uint16_x) : );
return crypto_uint16_y;
#else
crypto_uint16_x >>= 16-6;
crypto_uint16_x += crypto_uint16_signed_optblocker;
crypto_uint16_x >>= 5;
return crypto_uint16_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_topbit_01(crypto_uint16 crypto_uint16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrw $15,%0" : "+r"(crypto_uint16_x) : : "cc");
return crypto_uint16_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_y;
__asm__ ("ubfx %w0,%w1,15,1" : "=r"(crypto_uint16_y) : "r"(crypto_uint16_x) : );
return crypto_uint16_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint16_signed crypto_uint16_y;
__asm__ ("uxth %0,%1\n lsr %0,%0,#15" : "=r"(crypto_uint16_y) : "r"(crypto_uint16_x) : );
return crypto_uint16_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint16 crypto_uint16_y;
__asm__ ("sll %1,16,%0\n srl %0,16,%0\n srl %0,15,%0" : "=r"(crypto_uint16_y) : "r"(crypto_uint16_x) : );
return crypto_uint16_y;
#else
crypto_uint16_x >>= 16-6;
crypto_uint16_x += crypto_uint16_signed_optblocker;
crypto_uint16_x >>= 5;
return crypto_uint16_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_topbit_mask(crypto_uint16 crypto_uint16_x) {
return crypto_uint16_signed_negative_mask(crypto_uint16_x);
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_bottombit_mask(crypto_uint16 crypto_uint16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andw $1,%0" : "+r"(crypto_uint16_x) : : "cc");
return -crypto_uint16_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_y;
__asm__ ("sbfx %w0,%w1,0,1" : "=r"(crypto_uint16_y) : "r"(crypto_uint16_x) : );
return crypto_uint16_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint16 crypto_uint16_y;
__asm__ ("and %0,%1,#1\n neg %0,%0\n uxth %0,%0" : "=r"(crypto_uint16_y) : "r"(crypto_uint16_x) : );
return crypto_uint16_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint16 crypto_uint16_y;
__asm__ ("and %1,1,%0\n neg %0,%0\n sll %0,16,%0\n srl %0,16,%0" : "=r"(crypto_uint16_y) : "r"(crypto_uint16_x) : );
return crypto_uint16_y;
#else
crypto_uint16_x &= 1 + crypto_uint16_signed_optblocker;
return -crypto_uint16_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_bottombit_01(crypto_uint16 crypto_uint16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andw $1,%0" : "+r"(crypto_uint16_x) : : "cc");
return crypto_uint16_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_y;
__asm__ ("ubfx %w0,%w1,0,1" : "=r"(crypto_uint16_y) : "r"(crypto_uint16_x) : );
return crypto_uint16_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint16 crypto_uint16_y;
__asm__ ("and %0,%1,#1" : "=r"(crypto_uint16_y) : "r"(crypto_uint16_x) : );
return crypto_uint16_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint16 crypto_uint16_y;
__asm__ ("and %1,1,%0" : "=r"(crypto_uint16_y) : "r"(crypto_uint16_x) : );
return crypto_uint16_y;
#else
crypto_uint16_x &= 1 + crypto_uint16_signed_optblocker;
return crypto_uint16_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_bitinrangepublicpos_mask(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrw %%cl,%0" : "+r"(crypto_uint16_x) : "c"(crypto_uint16_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("and %w0,%w0,65535\n lsr %w0,%w0,%w1" : "+&r"(crypto_uint16_x) : "r"(crypto_uint16_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %0,%0,#15\n uxth %1,%1\n lsr %1,%1,%0" : "+&r"(crypto_uint16_s), "+r"(crypto_uint16_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("and %0,15,%0\n srl %1,%0,%1" : "+&r"(crypto_uint16_s), "+r"(crypto_uint16_x) : : );
#else
crypto_uint16_x >>= crypto_uint16_s ^ crypto_uint16_signed_optblocker;
#endif
return crypto_uint16_bottombit_mask(crypto_uint16_x);
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_bitinrangepublicpos_01(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrw %%cl,%0" : "+r"(crypto_uint16_x) : "c"(crypto_uint16_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("and %w0,%w0,65535\n lsr %w0,%w0,%w1" : "+&r"(crypto_uint16_x) : "r"(crypto_uint16_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %0,%0,#15\n uxth %1,%1\n lsr %1,%1,%0" : "+&r"(crypto_uint16_s), "+r"(crypto_uint16_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("and %0,15,%0\n srl %1,%0,%1" : "+&r"(crypto_uint16_s), "+r"(crypto_uint16_x) : : );
#else
crypto_uint16_x >>= crypto_uint16_s ^ crypto_uint16_signed_optblocker;
#endif
return crypto_uint16_bottombit_01(crypto_uint16_x);
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_shlmod(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_s) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16_s &= 15;
__asm__ ("shlw %%cl,%0" : "+r"(crypto_uint16_x) : "c"(crypto_uint16_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16_s &= 15;
__asm__ ("and %w0,%w0,65535\n lsl %w0,%w0,%w1" : "+&r"(crypto_uint16_x) : "r"(crypto_uint16_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint16_s &= 15;
__asm__ ("lsl %0,%0,%1\n uxth %0,%0" : "+r"(crypto_uint16_x) : "r"(crypto_uint16_s) : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint16_s &= 15;
__asm__ ("sll %0,%1,%0\n sll %0,16,%0\n srl %0,16,%0" : "+r"(crypto_uint16_x) : "r"(crypto_uint16_s) : );
#else
int crypto_uint16_k, crypto_uint16_l;
for (crypto_uint16_l = 0,crypto_uint16_k = 1;crypto_uint16_k < 16;++crypto_uint16_l,crypto_uint16_k *= 2)
crypto_uint16_x ^= (crypto_uint16_x ^ (crypto_uint16_x << crypto_uint16_k)) & crypto_uint16_bitinrangepublicpos_mask(crypto_uint16_s,crypto_uint16_l);
#endif
return crypto_uint16_x;
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_shrmod(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_s) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16_s &= 15;
__asm__ ("shrw %%cl,%0" : "+r"(crypto_uint16_x) : "c"(crypto_uint16_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16_s &= 15;
__asm__ ("and %w0,%w0,65535\n lsr %w0,%w0,%w1" : "+&r"(crypto_uint16_x) : "r"(crypto_uint16_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint16_s &= 15;
__asm__ ("uxth %0,%0\n lsr %0,%0,%1" : "+&r"(crypto_uint16_x) : "r"(crypto_uint16_s) : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint16_s &= 15;
__asm__ ("srl %0,%1,%0" : "+r"(crypto_uint16_x) : "r"(crypto_uint16_s) : );
#else
int crypto_uint16_k, crypto_uint16_l;
for (crypto_uint16_l = 0,crypto_uint16_k = 1;crypto_uint16_k < 16;++crypto_uint16_l,crypto_uint16_k *= 2)
crypto_uint16_x ^= (crypto_uint16_x ^ (crypto_uint16_x >> crypto_uint16_k)) & crypto_uint16_bitinrangepublicpos_mask(crypto_uint16_s,crypto_uint16_l);
#endif
return crypto_uint16_x;
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_bitmod_mask(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_s) {
crypto_uint16_x = crypto_uint16_shrmod(crypto_uint16_x,crypto_uint16_s);
return crypto_uint16_bottombit_mask(crypto_uint16_x);
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_bitmod_01(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_s) {
crypto_uint16_x = crypto_uint16_shrmod(crypto_uint16_x,crypto_uint16_s);
return crypto_uint16_bottombit_01(crypto_uint16_x);
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_nonzero_mask(crypto_uint16 crypto_uint16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16 crypto_uint16_q,crypto_uint16_z;
__asm__ ("xorw %0,%0\n movw $-1,%1\n testw %2,%2\n cmovnew %1,%0" : "=&r"(crypto_uint16_z), "=&r"(crypto_uint16_q) : "r"(crypto_uint16_x) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_z;
__asm__ ("tst %w1,65535\n csetm %w0,ne" : "=r"(crypto_uint16_z) : "r"(crypto_uint16_x) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("uxth %0,%0\n cmp %0,#0\n movne %0,#-1" : "+r"(crypto_uint16_x) : : "cc");
return crypto_uint16_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint16 crypto_uint16_z;
__asm__ ("sll %0,16,%0\n srl %0,16,%0\n cmp %%g0,%0\n subx %%g0,0,%1" : "+r"(crypto_uint16_x), "=r"(crypto_uint16_z) : : "cc");
return crypto_uint16_z;
#else
crypto_uint16_x |= -crypto_uint16_x;
return crypto_uint16_signed_negative_mask(crypto_uint16_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_nonzero_01(crypto_uint16 crypto_uint16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16 crypto_uint16_q,crypto_uint16_z;
__asm__ ("xorw %0,%0\n movw $1,%1\n testw %2,%2\n cmovnew %1,%0" : "=&r"(crypto_uint16_z), "=&r"(crypto_uint16_q) : "r"(crypto_uint16_x) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_z;
__asm__ ("tst %w1,65535\n cset %w0,ne" : "=r"(crypto_uint16_z) : "r"(crypto_uint16_x) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("uxth %0,%0\n cmp %0,#0\n movne %0,#1" : "+r"(crypto_uint16_x) : : "cc");
return crypto_uint16_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint16 crypto_uint16_z;
__asm__ ("sll %0,16,%0\n srl %0,16,%0\n cmp %%g0,%0\n addx %%g0,0,%1" : "+r"(crypto_uint16_x), "=r"(crypto_uint16_z) : : "cc");
return crypto_uint16_z;
#else
crypto_uint16_x |= -crypto_uint16_x;
return crypto_uint16_topbit_01(crypto_uint16_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_zero_mask(crypto_uint16 crypto_uint16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16 crypto_uint16_q,crypto_uint16_z;
__asm__ ("xorw %0,%0\n movw $-1,%1\n testw %2,%2\n cmovew %1,%0" : "=&r"(crypto_uint16_z), "=&r"(crypto_uint16_q) : "r"(crypto_uint16_x) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_z;
__asm__ ("tst %w1,65535\n csetm %w0,eq" : "=r"(crypto_uint16_z) : "r"(crypto_uint16_x) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint16 crypto_uint16_z;
__asm__ ("sll %0,16,%0\n srl %0,16,%0\n cmp %%g0,%0\n addx %%g0,-1,%1" : "+r"(crypto_uint16_x), "=r"(crypto_uint16_z) : : "cc");
return crypto_uint16_z;
#else
return ~crypto_uint16_nonzero_mask(crypto_uint16_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_zero_01(crypto_uint16 crypto_uint16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16 crypto_uint16_q,crypto_uint16_z;
__asm__ ("xorw %0,%0\n movw $1,%1\n testw %2,%2\n cmovew %1,%0" : "=&r"(crypto_uint16_z), "=&r"(crypto_uint16_q) : "r"(crypto_uint16_x) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_z;
__asm__ ("tst %w1,65535\n cset %w0,eq" : "=r"(crypto_uint16_z) : "r"(crypto_uint16_x) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint16 crypto_uint16_z;
__asm__ ("sll %0,16,%0\n srl %0,16,%0\n cmp %%g0,%0\n subx %%g0,-1,%1" : "+r"(crypto_uint16_x), "=r"(crypto_uint16_z) : : "cc");
return crypto_uint16_z;
#else
return 1-crypto_uint16_nonzero_01(crypto_uint16_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_unequal_mask(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16 crypto_uint16_q,crypto_uint16_z;
__asm__ ("xorw %0,%0\n movw $-1,%1\n cmpw %3,%2\n cmovnew %1,%0" : "=&r"(crypto_uint16_z), "=&r"(crypto_uint16_q) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_z;
__asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n csetm %w0,ne" : "=&r"(crypto_uint16_z) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#else
return crypto_uint16_nonzero_mask(crypto_uint16_x ^ crypto_uint16_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_unequal_01(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16 crypto_uint16_q,crypto_uint16_z;
__asm__ ("xorw %0,%0\n movw $1,%1\n cmpw %3,%2\n cmovnew %1,%0" : "=&r"(crypto_uint16_z), "=&r"(crypto_uint16_q) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_z;
__asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n cset %w0,ne" : "=&r"(crypto_uint16_z) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#else
return crypto_uint16_nonzero_01(crypto_uint16_x ^ crypto_uint16_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_equal_mask(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16 crypto_uint16_q,crypto_uint16_z;
__asm__ ("xorw %0,%0\n movw $-1,%1\n cmpw %3,%2\n cmovew %1,%0" : "=&r"(crypto_uint16_z), "=&r"(crypto_uint16_q) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_z;
__asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n csetm %w0,eq" : "=&r"(crypto_uint16_z) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#else
return crypto_uint16_zero_mask(crypto_uint16_x ^ crypto_uint16_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_equal_01(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16 crypto_uint16_q,crypto_uint16_z;
__asm__ ("xorw %0,%0\n movw $1,%1\n cmpw %3,%2\n cmovew %1,%0" : "=&r"(crypto_uint16_z), "=&r"(crypto_uint16_q) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_z;
__asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n cset %w0,eq" : "=&r"(crypto_uint16_z) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#else
return crypto_uint16_zero_01(crypto_uint16_x ^ crypto_uint16_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_min(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("cmpw %1,%0\n cmovaw %1,%0" : "+r"(crypto_uint16_x) : "r"(crypto_uint16_y) : "cc");
return crypto_uint16_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("and %w0,%w0,65535\n cmp %w0,%w1,uxth\n csel %w0,%w0,%w1,lo" : "+&r"(crypto_uint16_x) : "r"(crypto_uint16_y) : "cc");
return crypto_uint16_x;
#else
crypto_uint16 crypto_uint16_r = crypto_uint16_y ^ crypto_uint16_x;
crypto_uint16 crypto_uint16_z = crypto_uint16_y - crypto_uint16_x;
crypto_uint16_z ^= crypto_uint16_r & (crypto_uint16_z ^ crypto_uint16_y ^ (((crypto_uint16) 1) << (16-1)));
crypto_uint16_z = crypto_uint16_signed_negative_mask(crypto_uint16_z);
crypto_uint16_z &= crypto_uint16_r;
return crypto_uint16_x ^ crypto_uint16_z;
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_max(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("cmpw %1,%0\n cmovbw %1,%0" : "+r"(crypto_uint16_x) : "r"(crypto_uint16_y) : "cc");
return crypto_uint16_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("and %w0,%w0,65535\n cmp %w0,%w1,uxth\n csel %w0,%w1,%w0,lo" : "+&r"(crypto_uint16_x) : "r"(crypto_uint16_y) : "cc");
return crypto_uint16_x;
#else
crypto_uint16 crypto_uint16_r = crypto_uint16_y ^ crypto_uint16_x;
crypto_uint16 crypto_uint16_z = crypto_uint16_y - crypto_uint16_x;
crypto_uint16_z ^= crypto_uint16_r & (crypto_uint16_z ^ crypto_uint16_y ^ (((crypto_uint16) 1) << (16-1)));
crypto_uint16_z = crypto_uint16_signed_negative_mask(crypto_uint16_z);
crypto_uint16_z &= crypto_uint16_r;
return crypto_uint16_y ^ crypto_uint16_z;
#endif
}
__attribute__((unused))
static inline
void crypto_uint16_minmax(crypto_uint16 *crypto_uint16_p,crypto_uint16 *crypto_uint16_q) {
crypto_uint16 crypto_uint16_x = *crypto_uint16_p;
crypto_uint16 crypto_uint16_y = *crypto_uint16_q;
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16 crypto_uint16_z;
__asm__ ("cmpw %2,%1\n movw %1,%0\n cmovaw %2,%1\n cmovaw %0,%2" : "=&r"(crypto_uint16_z), "+&r"(crypto_uint16_x), "+r"(crypto_uint16_y) : : "cc");
*crypto_uint16_p = crypto_uint16_x;
*crypto_uint16_q = crypto_uint16_y;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_r, crypto_uint16_s;
__asm__ ("and %w0,%w0,65535\n cmp %w0,%w3,uxth\n csel %w1,%w0,%w3,lo\n csel %w2,%w3,%w0,lo" : "+&r"(crypto_uint16_x), "=&r"(crypto_uint16_r), "=r"(crypto_uint16_s) : "r"(crypto_uint16_y) : "cc");
*crypto_uint16_p = crypto_uint16_r;
*crypto_uint16_q = crypto_uint16_s;
#else
crypto_uint16 crypto_uint16_r = crypto_uint16_y ^ crypto_uint16_x;
crypto_uint16 crypto_uint16_z = crypto_uint16_y - crypto_uint16_x;
crypto_uint16_z ^= crypto_uint16_r & (crypto_uint16_z ^ crypto_uint16_y ^ (((crypto_uint16) 1) << (16-1)));
crypto_uint16_z = crypto_uint16_signed_negative_mask(crypto_uint16_z);
crypto_uint16_z &= crypto_uint16_r;
crypto_uint16_x ^= crypto_uint16_z;
crypto_uint16_y ^= crypto_uint16_z;
*crypto_uint16_p = crypto_uint16_x;
*crypto_uint16_q = crypto_uint16_y;
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_smaller_mask(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16 crypto_uint16_q,crypto_uint16_z;
__asm__ ("xorw %0,%0\n movw $-1,%1\n cmpw %3,%2\n cmovbw %1,%0" : "=&r"(crypto_uint16_z), "=&r"(crypto_uint16_q) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_z;
__asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n csetm %w0,lo" : "=&r"(crypto_uint16_z) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#else
crypto_uint16 crypto_uint16_r = crypto_uint16_x ^ crypto_uint16_y;
crypto_uint16 crypto_uint16_z = crypto_uint16_x - crypto_uint16_y;
crypto_uint16_z ^= crypto_uint16_r & (crypto_uint16_z ^ crypto_uint16_x ^ (((crypto_uint16) 1) << (16-1)));
return crypto_uint16_signed_negative_mask(crypto_uint16_z);
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_smaller_01(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16 crypto_uint16_q,crypto_uint16_z;
__asm__ ("xorw %0,%0\n movw $1,%1\n cmpw %3,%2\n cmovbw %1,%0" : "=&r"(crypto_uint16_z), "=&r"(crypto_uint16_q) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_z;
__asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n cset %w0,lo" : "=&r"(crypto_uint16_z) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#else
crypto_uint16 crypto_uint16_r = crypto_uint16_x ^ crypto_uint16_y;
crypto_uint16 crypto_uint16_z = crypto_uint16_x - crypto_uint16_y;
crypto_uint16_z ^= crypto_uint16_r & (crypto_uint16_z ^ crypto_uint16_x ^ (((crypto_uint16) 1) << (16-1)));
return crypto_uint16_topbit_01(crypto_uint16_z);
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_leq_mask(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16 crypto_uint16_q,crypto_uint16_z;
__asm__ ("xorw %0,%0\n movw $-1,%1\n cmpw %3,%2\n cmovbew %1,%0" : "=&r"(crypto_uint16_z), "=&r"(crypto_uint16_q) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_z;
__asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n csetm %w0,ls" : "=&r"(crypto_uint16_z) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#else
return ~crypto_uint16_smaller_mask(crypto_uint16_y,crypto_uint16_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint16 crypto_uint16_leq_01(crypto_uint16 crypto_uint16_x,crypto_uint16 crypto_uint16_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16 crypto_uint16_q,crypto_uint16_z;
__asm__ ("xorw %0,%0\n movw $1,%1\n cmpw %3,%2\n cmovbew %1,%0" : "=&r"(crypto_uint16_z), "=&r"(crypto_uint16_q) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint16 crypto_uint16_z;
__asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n cset %w0,ls" : "=&r"(crypto_uint16_z) : "r"(crypto_uint16_x), "r"(crypto_uint16_y) : "cc");
return crypto_uint16_z;
#else
return 1-crypto_uint16_smaller_01(crypto_uint16_y,crypto_uint16_x);
#endif
}
__attribute__((unused))
static inline
int crypto_uint16_ones_num(crypto_uint16 crypto_uint16_x) {
crypto_uint16 crypto_uint16_y = crypto_uint16_x;
const crypto_uint16 C0 = 0x5555;
const crypto_uint16 C1 = 0x3333;
const crypto_uint16 C2 = 0x0f0f;
crypto_uint16_y -= ((crypto_uint16_y >> 1) & C0);
crypto_uint16_y = (crypto_uint16_y & C1) + ((crypto_uint16_y >> 2) & C1);
crypto_uint16_y = (crypto_uint16_y + (crypto_uint16_y >> 4)) & C2;
crypto_uint16_y = (crypto_uint16_y + (crypto_uint16_y >> 8)) & 0xff;
return crypto_uint16_y;
}
__attribute__((unused))
static inline
int crypto_uint16_bottomzeros_num(crypto_uint16 crypto_uint16_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint16 fallback = 16;
__asm__ ("bsfw %0,%0\n cmovew %1,%0" : "+&r"(crypto_uint16_x) : "r"(fallback) : "cc");
return crypto_uint16_x;
#elif defined(__GNUC__) && defined(__aarch64__)
int64_t crypto_uint16_y;
__asm__ ("orr %w0,%w1,-65536\n rbit %w0,%w0\n clz %w0,%w0" : "=r"(crypto_uint16_y) : "r"(crypto_uint16_x) : );
return crypto_uint16_y;
#else
crypto_uint16 crypto_uint16_y = crypto_uint16_x ^ (crypto_uint16_x-1);
crypto_uint16_y = ((crypto_uint16_signed) crypto_uint16_y) >> 1;
crypto_uint16_y &= ~(crypto_uint16_x & (((crypto_uint16) 1) << (16-1)));
return crypto_uint16_ones_num(crypto_uint16_y);
#endif
}
#endif
tinyssh-20250501/cryptoint/crypto_uint32.h 0000664 0000000 0000000 00000061557 15004722224 0020417 0 ustar 00root root 0000000 0000000 /* auto-generated: cd cryptoint; ./autogen */
/* cryptoint 20250414 */
#ifndef crypto_uint32_h
#define crypto_uint32_h
#include
#define crypto_uint32 uint32_t
#define crypto_uint32_signed int32_t
#define crypto_uint32_signed_optblocker tinyssh_uint32_signed_optblocker
extern volatile crypto_uint32_signed crypto_uint32_signed_optblocker;
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_load(const unsigned char *crypto_uint32_s) {
crypto_uint32 crypto_uint32_z = 0;
crypto_uint32_z |= ((crypto_uint32) (*crypto_uint32_s++)) << 0;
crypto_uint32_z |= ((crypto_uint32) (*crypto_uint32_s++)) << 8;
crypto_uint32_z |= ((crypto_uint32) (*crypto_uint32_s++)) << 16;
crypto_uint32_z |= ((crypto_uint32) (*crypto_uint32_s++)) << 24;
return crypto_uint32_z;
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_load_bigendian(const unsigned char *crypto_uint32_s) {
crypto_uint32 crypto_uint32_z = 0;
crypto_uint32_z |= ((crypto_uint32) (*crypto_uint32_s++)) << 24;
crypto_uint32_z |= ((crypto_uint32) (*crypto_uint32_s++)) << 16;
crypto_uint32_z |= ((crypto_uint32) (*crypto_uint32_s++)) << 8;
crypto_uint32_z |= ((crypto_uint32) (*crypto_uint32_s++)) << 0;
return crypto_uint32_z;
}
__attribute__((unused))
static inline
void crypto_uint32_store(unsigned char *crypto_uint32_s,crypto_uint32 crypto_uint32_x) {
*crypto_uint32_s++ = crypto_uint32_x >> 0;
*crypto_uint32_s++ = crypto_uint32_x >> 8;
*crypto_uint32_s++ = crypto_uint32_x >> 16;
*crypto_uint32_s++ = crypto_uint32_x >> 24;
}
__attribute__((unused))
static inline
void crypto_uint32_store_bigendian(unsigned char *crypto_uint32_s,crypto_uint32 crypto_uint32_x) {
*crypto_uint32_s++ = crypto_uint32_x >> 24;
*crypto_uint32_s++ = crypto_uint32_x >> 16;
*crypto_uint32_s++ = crypto_uint32_x >> 8;
*crypto_uint32_s++ = crypto_uint32_x >> 0;
}
__attribute__((unused))
static inline
crypto_uint32_signed crypto_uint32_signed_negative_mask(crypto_uint32_signed crypto_uint32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarl $31,%0" : "+r"(crypto_uint32_x) : : "cc");
return crypto_uint32_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32_signed crypto_uint32_y;
__asm__ ("asr %w0,%w1,31" : "=r"(crypto_uint32_y) : "r"(crypto_uint32_x) : );
return crypto_uint32_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint32_signed crypto_uint32_y;
__asm__ ("asr %0,%1,#31" : "=r"(crypto_uint32_y) : "r"(crypto_uint32_x) : );
return crypto_uint32_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint32_signed crypto_uint32_y;
__asm__ ("sra %1,31,%0" : "=r"(crypto_uint32_y) : "r"(crypto_uint32_x) : );
return crypto_uint32_y;
#else
crypto_uint32_x >>= 32-6;
crypto_uint32_x += crypto_uint32_signed_optblocker;
crypto_uint32_x >>= 5;
return crypto_uint32_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_topbit_01(crypto_uint32 crypto_uint32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrl $31,%0" : "+r"(crypto_uint32_x) : : "cc");
return crypto_uint32_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_y;
__asm__ ("lsr %w0,%w1,31" : "=r"(crypto_uint32_y) : "r"(crypto_uint32_x) : );
return crypto_uint32_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint32_signed crypto_uint32_y;
__asm__ ("lsr %0,%1,#31" : "=r"(crypto_uint32_y) : "r"(crypto_uint32_x) : );
return crypto_uint32_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint32 crypto_uint32_y;
__asm__ ("srl %1,31,%0" : "=r"(crypto_uint32_y) : "r"(crypto_uint32_x) : );
return crypto_uint32_y;
#else
crypto_uint32_x >>= 32-6;
crypto_uint32_x += crypto_uint32_signed_optblocker;
crypto_uint32_x >>= 5;
return crypto_uint32_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_topbit_mask(crypto_uint32 crypto_uint32_x) {
return crypto_uint32_signed_negative_mask(crypto_uint32_x);
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_bottombit_mask(crypto_uint32 crypto_uint32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andl $1,%0" : "+r"(crypto_uint32_x) : : "cc");
return -crypto_uint32_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_y;
__asm__ ("sbfx %w0,%w1,0,1" : "=r"(crypto_uint32_y) : "r"(crypto_uint32_x) : );
return crypto_uint32_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint32 crypto_uint32_y;
__asm__ ("and %0,%1,#1\n neg %0,%0" : "=r"(crypto_uint32_y) : "r"(crypto_uint32_x) : );
return crypto_uint32_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint32 crypto_uint32_y;
__asm__ ("and %1,1,%0\n neg %0,%0" : "=r"(crypto_uint32_y) : "r"(crypto_uint32_x) : );
return crypto_uint32_y;
#else
crypto_uint32_x &= 1 + crypto_uint32_signed_optblocker;
return -crypto_uint32_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_bottombit_01(crypto_uint32 crypto_uint32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andl $1,%0" : "+r"(crypto_uint32_x) : : "cc");
return crypto_uint32_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_y;
__asm__ ("ubfx %w0,%w1,0,1" : "=r"(crypto_uint32_y) : "r"(crypto_uint32_x) : );
return crypto_uint32_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint32 crypto_uint32_y;
__asm__ ("and %0,%1,#1" : "=r"(crypto_uint32_y) : "r"(crypto_uint32_x) : );
return crypto_uint32_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint32 crypto_uint32_y;
__asm__ ("and %1,1,%0" : "=r"(crypto_uint32_y) : "r"(crypto_uint32_x) : );
return crypto_uint32_y;
#else
crypto_uint32_x &= 1 + crypto_uint32_signed_optblocker;
return crypto_uint32_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_bitinrangepublicpos_mask(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrl %%cl,%0" : "+r"(crypto_uint32_x) : "c"(crypto_uint32_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("lsr %w0,%w0,%w1" : "+r"(crypto_uint32_x) : "r"(crypto_uint32_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %0,%0,#31\n lsr %1,%1,%0" : "+&r"(crypto_uint32_s), "+r"(crypto_uint32_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("srl %0,%1,%0" : "+r"(crypto_uint32_x) : "r"(crypto_uint32_s) : );
#else
crypto_uint32_x >>= crypto_uint32_s ^ crypto_uint32_signed_optblocker;
#endif
return crypto_uint32_bottombit_mask(crypto_uint32_x);
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_bitinrangepublicpos_01(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrl %%cl,%0" : "+r"(crypto_uint32_x) : "c"(crypto_uint32_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("lsr %w0,%w0,%w1" : "+r"(crypto_uint32_x) : "r"(crypto_uint32_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %0,%0,#31\n lsr %1,%1,%0" : "+&r"(crypto_uint32_s), "+r"(crypto_uint32_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("srl %0,%1,%0" : "+r"(crypto_uint32_x) : "r"(crypto_uint32_s) : );
#else
crypto_uint32_x >>= crypto_uint32_s ^ crypto_uint32_signed_optblocker;
#endif
return crypto_uint32_bottombit_01(crypto_uint32_x);
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_shlmod(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shll %%cl,%0" : "+r"(crypto_uint32_x) : "c"(crypto_uint32_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("lsl %w0,%w0,%w1" : "+r"(crypto_uint32_x) : "r"(crypto_uint32_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint32_s &= 31;
__asm__ ("lsl %0,%0,%1" : "+r"(crypto_uint32_x) : "r"(crypto_uint32_s) : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("sll %0,%1,%0" : "+r"(crypto_uint32_x) : "r"(crypto_uint32_s) : );
#else
int crypto_uint32_k, crypto_uint32_l;
for (crypto_uint32_l = 0,crypto_uint32_k = 1;crypto_uint32_k < 32;++crypto_uint32_l,crypto_uint32_k *= 2)
crypto_uint32_x ^= (crypto_uint32_x ^ (crypto_uint32_x << crypto_uint32_k)) & crypto_uint32_bitinrangepublicpos_mask(crypto_uint32_s,crypto_uint32_l);
#endif
return crypto_uint32_x;
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_shrmod(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrl %%cl,%0" : "+r"(crypto_uint32_x) : "c"(crypto_uint32_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("lsr %w0,%w0,%w1" : "+r"(crypto_uint32_x) : "r"(crypto_uint32_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint32_s &= 31;
__asm__ ("lsr %0,%0,%1" : "+r"(crypto_uint32_x) : "r"(crypto_uint32_s) : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("srl %0,%1,%0" : "+r"(crypto_uint32_x) : "r"(crypto_uint32_s) : );
#else
int crypto_uint32_k, crypto_uint32_l;
for (crypto_uint32_l = 0,crypto_uint32_k = 1;crypto_uint32_k < 32;++crypto_uint32_l,crypto_uint32_k *= 2)
crypto_uint32_x ^= (crypto_uint32_x ^ (crypto_uint32_x >> crypto_uint32_k)) & crypto_uint32_bitinrangepublicpos_mask(crypto_uint32_s,crypto_uint32_l);
#endif
return crypto_uint32_x;
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_bitmod_mask(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_s) {
crypto_uint32_x = crypto_uint32_shrmod(crypto_uint32_x,crypto_uint32_s);
return crypto_uint32_bottombit_mask(crypto_uint32_x);
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_bitmod_01(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_s) {
crypto_uint32_x = crypto_uint32_shrmod(crypto_uint32_x,crypto_uint32_s);
return crypto_uint32_bottombit_01(crypto_uint32_x);
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_nonzero_mask(crypto_uint32 crypto_uint32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint32 crypto_uint32_q,crypto_uint32_z;
__asm__ ("xorl %0,%0\n movl $-1,%1\n testl %2,%2\n cmovnel %1,%0" : "=&r"(crypto_uint32_z), "=&r"(crypto_uint32_q) : "r"(crypto_uint32_x) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %w1,0\n csetm %w0,ne" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("cmp %0,#0\n movne %0,#-1" : "+r"(crypto_uint32_x) : : "cc");
return crypto_uint32_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %%g0,%1\n subx %%g0,0,%0" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x) : "cc");
return crypto_uint32_z;
#else
crypto_uint32_x |= -crypto_uint32_x;
return crypto_uint32_signed_negative_mask(crypto_uint32_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_nonzero_01(crypto_uint32 crypto_uint32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint32 crypto_uint32_q,crypto_uint32_z;
__asm__ ("xorl %0,%0\n movl $1,%1\n testl %2,%2\n cmovnel %1,%0" : "=&r"(crypto_uint32_z), "=&r"(crypto_uint32_q) : "r"(crypto_uint32_x) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %w1,0\n cset %w0,ne" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("cmp %0,#0\n movne %0,#1" : "+r"(crypto_uint32_x) : : "cc");
return crypto_uint32_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %%g0,%1\n addx %%g0,0,%0" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x) : "cc");
return crypto_uint32_z;
#else
crypto_uint32_x |= -crypto_uint32_x;
return crypto_uint32_topbit_01(crypto_uint32_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_zero_mask(crypto_uint32 crypto_uint32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint32 crypto_uint32_q,crypto_uint32_z;
__asm__ ("xorl %0,%0\n movl $-1,%1\n testl %2,%2\n cmovel %1,%0" : "=&r"(crypto_uint32_z), "=&r"(crypto_uint32_q) : "r"(crypto_uint32_x) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %w1,0\n csetm %w0,eq" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %%g0,%1\n addx %%g0,-1,%0" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x) : "cc");
return crypto_uint32_z;
#else
return ~crypto_uint32_nonzero_mask(crypto_uint32_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_zero_01(crypto_uint32 crypto_uint32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint32 crypto_uint32_q,crypto_uint32_z;
__asm__ ("xorl %0,%0\n movl $1,%1\n testl %2,%2\n cmovel %1,%0" : "=&r"(crypto_uint32_z), "=&r"(crypto_uint32_q) : "r"(crypto_uint32_x) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %w1,0\n cset %w0,eq" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %%g0,%1\n subx %%g0,-1,%0" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x) : "cc");
return crypto_uint32_z;
#else
return 1-crypto_uint32_nonzero_01(crypto_uint32_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_unequal_mask(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint32 crypto_uint32_q,crypto_uint32_z;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpl %3,%2\n cmovnel %1,%0" : "=&r"(crypto_uint32_z), "=&r"(crypto_uint32_q) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %w1,%w2\n csetm %w0,ne" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#else
return crypto_uint32_nonzero_mask(crypto_uint32_x ^ crypto_uint32_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_unequal_01(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint32 crypto_uint32_q,crypto_uint32_z;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpl %3,%2\n cmovnel %1,%0" : "=&r"(crypto_uint32_z), "=&r"(crypto_uint32_q) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %w1,%w2\n cset %w0,ne" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#else
return crypto_uint32_nonzero_01(crypto_uint32_x ^ crypto_uint32_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_equal_mask(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint32 crypto_uint32_q,crypto_uint32_z;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpl %3,%2\n cmovel %1,%0" : "=&r"(crypto_uint32_z), "=&r"(crypto_uint32_q) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %w1,%w2\n csetm %w0,eq" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#else
return crypto_uint32_zero_mask(crypto_uint32_x ^ crypto_uint32_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_equal_01(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint32 crypto_uint32_q,crypto_uint32_z;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpl %3,%2\n cmovel %1,%0" : "=&r"(crypto_uint32_z), "=&r"(crypto_uint32_q) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %w1,%w2\n cset %w0,eq" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#else
return crypto_uint32_zero_01(crypto_uint32_x ^ crypto_uint32_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_min(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("cmpl %1,%0\n cmoval %1,%0" : "+r"(crypto_uint32_x) : "r"(crypto_uint32_y) : "cc");
return crypto_uint32_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("cmp %w0,%w1\n csel %w0,%w0,%w1,lo" : "+r"(crypto_uint32_x) : "r"(crypto_uint32_y) : "cc");
return crypto_uint32_x;
#else
crypto_uint32 crypto_uint32_r = crypto_uint32_y ^ crypto_uint32_x;
crypto_uint32 crypto_uint32_z = crypto_uint32_y - crypto_uint32_x;
crypto_uint32_z ^= crypto_uint32_r & (crypto_uint32_z ^ crypto_uint32_y ^ (((crypto_uint32) 1) << (32-1)));
crypto_uint32_z = crypto_uint32_signed_negative_mask(crypto_uint32_z);
crypto_uint32_z &= crypto_uint32_r;
return crypto_uint32_x ^ crypto_uint32_z;
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_max(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("cmpl %1,%0\n cmovbl %1,%0" : "+r"(crypto_uint32_x) : "r"(crypto_uint32_y) : "cc");
return crypto_uint32_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("cmp %w0,%w1\n csel %w0,%w1,%w0,lo" : "+r"(crypto_uint32_x) : "r"(crypto_uint32_y) : "cc");
return crypto_uint32_x;
#else
crypto_uint32 crypto_uint32_r = crypto_uint32_y ^ crypto_uint32_x;
crypto_uint32 crypto_uint32_z = crypto_uint32_y - crypto_uint32_x;
crypto_uint32_z ^= crypto_uint32_r & (crypto_uint32_z ^ crypto_uint32_y ^ (((crypto_uint32) 1) << (32-1)));
crypto_uint32_z = crypto_uint32_signed_negative_mask(crypto_uint32_z);
crypto_uint32_z &= crypto_uint32_r;
return crypto_uint32_y ^ crypto_uint32_z;
#endif
}
__attribute__((unused))
static inline
void crypto_uint32_minmax(crypto_uint32 *crypto_uint32_p,crypto_uint32 *crypto_uint32_q) {
crypto_uint32 crypto_uint32_x = *crypto_uint32_p;
crypto_uint32 crypto_uint32_y = *crypto_uint32_q;
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmpl %2,%1\n movl %1,%0\n cmoval %2,%1\n cmoval %0,%2" : "=&r"(crypto_uint32_z), "+&r"(crypto_uint32_x), "+r"(crypto_uint32_y) : : "cc");
*crypto_uint32_p = crypto_uint32_x;
*crypto_uint32_q = crypto_uint32_y;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_r, crypto_uint32_s;
__asm__ ("cmp %w2,%w3\n csel %w0,%w2,%w3,lo\n csel %w1,%w3,%w2,lo" : "=&r"(crypto_uint32_r), "=r"(crypto_uint32_s) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
*crypto_uint32_p = crypto_uint32_r;
*crypto_uint32_q = crypto_uint32_s;
#else
crypto_uint32 crypto_uint32_r = crypto_uint32_y ^ crypto_uint32_x;
crypto_uint32 crypto_uint32_z = crypto_uint32_y - crypto_uint32_x;
crypto_uint32_z ^= crypto_uint32_r & (crypto_uint32_z ^ crypto_uint32_y ^ (((crypto_uint32) 1) << (32-1)));
crypto_uint32_z = crypto_uint32_signed_negative_mask(crypto_uint32_z);
crypto_uint32_z &= crypto_uint32_r;
crypto_uint32_x ^= crypto_uint32_z;
crypto_uint32_y ^= crypto_uint32_z;
*crypto_uint32_p = crypto_uint32_x;
*crypto_uint32_q = crypto_uint32_y;
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_smaller_mask(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint32 crypto_uint32_q,crypto_uint32_z;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpl %3,%2\n cmovbl %1,%0" : "=&r"(crypto_uint32_z), "=&r"(crypto_uint32_q) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %w1,%w2\n csetm %w0,lo" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#else
crypto_uint32 crypto_uint32_r = crypto_uint32_x ^ crypto_uint32_y;
crypto_uint32 crypto_uint32_z = crypto_uint32_x - crypto_uint32_y;
crypto_uint32_z ^= crypto_uint32_r & (crypto_uint32_z ^ crypto_uint32_x ^ (((crypto_uint32) 1) << (32-1)));
return crypto_uint32_signed_negative_mask(crypto_uint32_z);
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_smaller_01(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint32 crypto_uint32_q,crypto_uint32_z;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpl %3,%2\n cmovbl %1,%0" : "=&r"(crypto_uint32_z), "=&r"(crypto_uint32_q) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %w1,%w2\n cset %w0,lo" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#else
crypto_uint32 crypto_uint32_r = crypto_uint32_x ^ crypto_uint32_y;
crypto_uint32 crypto_uint32_z = crypto_uint32_x - crypto_uint32_y;
crypto_uint32_z ^= crypto_uint32_r & (crypto_uint32_z ^ crypto_uint32_x ^ (((crypto_uint32) 1) << (32-1)));
return crypto_uint32_topbit_01(crypto_uint32_z);
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_leq_mask(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint32 crypto_uint32_q,crypto_uint32_z;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpl %3,%2\n cmovbel %1,%0" : "=&r"(crypto_uint32_z), "=&r"(crypto_uint32_q) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %w1,%w2\n csetm %w0,ls" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#else
return ~crypto_uint32_smaller_mask(crypto_uint32_y,crypto_uint32_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint32 crypto_uint32_leq_01(crypto_uint32 crypto_uint32_x,crypto_uint32 crypto_uint32_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint32 crypto_uint32_q,crypto_uint32_z;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpl %3,%2\n cmovbel %1,%0" : "=&r"(crypto_uint32_z), "=&r"(crypto_uint32_q) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint32 crypto_uint32_z;
__asm__ ("cmp %w1,%w2\n cset %w0,ls" : "=r"(crypto_uint32_z) : "r"(crypto_uint32_x), "r"(crypto_uint32_y) : "cc");
return crypto_uint32_z;
#else
return 1-crypto_uint32_smaller_01(crypto_uint32_y,crypto_uint32_x);
#endif
}
__attribute__((unused))
static inline
int crypto_uint32_ones_num(crypto_uint32 crypto_uint32_x) {
crypto_uint32 crypto_uint32_y = crypto_uint32_x;
const crypto_uint32 C0 = 0x55555555;
const crypto_uint32 C1 = 0x33333333;
const crypto_uint32 C2 = 0x0f0f0f0f;
crypto_uint32_y -= ((crypto_uint32_y >> 1) & C0);
crypto_uint32_y = (crypto_uint32_y & C1) + ((crypto_uint32_y >> 2) & C1);
crypto_uint32_y = (crypto_uint32_y + (crypto_uint32_y >> 4)) & C2;
crypto_uint32_y += crypto_uint32_y >> 8;
crypto_uint32_y = (crypto_uint32_y + (crypto_uint32_y >> 16)) & 0xff;
return crypto_uint32_y;
}
__attribute__((unused))
static inline
int crypto_uint32_bottomzeros_num(crypto_uint32 crypto_uint32_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint32 fallback = 32;
__asm__ ("bsfl %0,%0\n cmovel %1,%0" : "+&r"(crypto_uint32_x) : "r"(fallback) : "cc");
return crypto_uint32_x;
#elif defined(__GNUC__) && defined(__aarch64__)
int64_t crypto_uint32_y;
__asm__ ("rbit %w0,%w1\n clz %w0,%w0" : "=r"(crypto_uint32_y) : "r"(crypto_uint32_x) : );
return crypto_uint32_y;
#else
crypto_uint32 crypto_uint32_y = crypto_uint32_x ^ (crypto_uint32_x-1);
crypto_uint32_y = ((crypto_uint32_signed) crypto_uint32_y) >> 1;
crypto_uint32_y &= ~(crypto_uint32_x & (((crypto_uint32) 1) << (32-1)));
return crypto_uint32_ones_num(crypto_uint32_y);
#endif
}
#endif
tinyssh-20250501/cryptoint/crypto_uint64.h 0000664 0000000 0000000 00000067246 15004722224 0020425 0 ustar 00root root 0000000 0000000 /* auto-generated: cd cryptoint; ./autogen */
/* cryptoint 20250414 */
#ifndef crypto_uint64_h
#define crypto_uint64_h
#include
#define crypto_uint64 uint64_t
#define crypto_uint64_signed int64_t
#define crypto_uint64_signed_optblocker tinyssh_uint64_signed_optblocker
extern volatile crypto_uint64_signed crypto_uint64_signed_optblocker;
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_load(const unsigned char *crypto_uint64_s) {
crypto_uint64 crypto_uint64_z = 0;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 0;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 8;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 16;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 24;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 32;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 40;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 48;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 56;
return crypto_uint64_z;
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_load_bigendian(const unsigned char *crypto_uint64_s) {
crypto_uint64 crypto_uint64_z = 0;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 56;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 48;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 40;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 32;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 24;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 16;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 8;
crypto_uint64_z |= ((crypto_uint64) (*crypto_uint64_s++)) << 0;
return crypto_uint64_z;
}
__attribute__((unused))
static inline
void crypto_uint64_store(unsigned char *crypto_uint64_s,crypto_uint64 crypto_uint64_x) {
*crypto_uint64_s++ = crypto_uint64_x >> 0;
*crypto_uint64_s++ = crypto_uint64_x >> 8;
*crypto_uint64_s++ = crypto_uint64_x >> 16;
*crypto_uint64_s++ = crypto_uint64_x >> 24;
*crypto_uint64_s++ = crypto_uint64_x >> 32;
*crypto_uint64_s++ = crypto_uint64_x >> 40;
*crypto_uint64_s++ = crypto_uint64_x >> 48;
*crypto_uint64_s++ = crypto_uint64_x >> 56;
}
__attribute__((unused))
static inline
void crypto_uint64_store_bigendian(unsigned char *crypto_uint64_s,crypto_uint64 crypto_uint64_x) {
*crypto_uint64_s++ = crypto_uint64_x >> 56;
*crypto_uint64_s++ = crypto_uint64_x >> 48;
*crypto_uint64_s++ = crypto_uint64_x >> 40;
*crypto_uint64_s++ = crypto_uint64_x >> 32;
*crypto_uint64_s++ = crypto_uint64_x >> 24;
*crypto_uint64_s++ = crypto_uint64_x >> 16;
*crypto_uint64_s++ = crypto_uint64_x >> 8;
*crypto_uint64_s++ = crypto_uint64_x >> 0;
}
__attribute__((unused))
static inline
crypto_uint64_signed crypto_uint64_signed_negative_mask(crypto_uint64_signed crypto_uint64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarq $63,%0" : "+r"(crypto_uint64_x) : : "cc");
return crypto_uint64_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64_signed crypto_uint64_y;
__asm__ ("asr %0,%1,63" : "=r"(crypto_uint64_y) : "r"(crypto_uint64_x) : );
return crypto_uint64_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint64_signed crypto_uint64_y;
__asm__ ("asr %Q0,%R1,#31\n mov %R0,%Q0" : "=r"(crypto_uint64_y) : "r"(crypto_uint64_x) : );
return crypto_uint64_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint64_signed crypto_uint64_y;
__asm__ ("sra %H1,31,%L0\n mov %L0,%H0" : "=r"(crypto_uint64_y) : "r"(crypto_uint64_x) : );
return crypto_uint64_y;
#else
crypto_uint64_x >>= 64-6;
crypto_uint64_x += crypto_uint64_signed_optblocker;
crypto_uint64_x >>= 5;
return crypto_uint64_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_topbit_01(crypto_uint64 crypto_uint64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrq $63,%0" : "+r"(crypto_uint64_x) : : "cc");
return crypto_uint64_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_y;
__asm__ ("lsr %0,%1,63" : "=r"(crypto_uint64_y) : "r"(crypto_uint64_x) : );
return crypto_uint64_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint64_signed crypto_uint64_y;
__asm__ ("lsr %Q0,%R1,#31\n mov %R0,#0" : "=r"(crypto_uint64_y) : "r"(crypto_uint64_x) : );
return crypto_uint64_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint64 crypto_uint64_y;
__asm__ ("srl %H1,31,%L0\n mov 0,%H0" : "=r"(crypto_uint64_y) : "r"(crypto_uint64_x) : );
return crypto_uint64_y;
#else
crypto_uint64_x >>= 64-6;
crypto_uint64_x += crypto_uint64_signed_optblocker;
crypto_uint64_x >>= 5;
return crypto_uint64_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_topbit_mask(crypto_uint64 crypto_uint64_x) {
return crypto_uint64_signed_negative_mask(crypto_uint64_x);
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_bottombit_mask(crypto_uint64 crypto_uint64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andq $1,%0" : "+r"(crypto_uint64_x) : : "cc");
return -crypto_uint64_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_y;
__asm__ ("sbfx %0,%1,0,1" : "=r"(crypto_uint64_y) : "r"(crypto_uint64_x) : );
return crypto_uint64_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint64 crypto_uint64_y;
__asm__ ("and %Q0,%Q1,#1\n neg %Q0,%Q0\n mov %R0,%Q0" : "=r"(crypto_uint64_y) : "r"(crypto_uint64_x) : );
return crypto_uint64_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint64 crypto_uint64_y;
__asm__ ("and %L1,1,%L0\n neg %L0,%L0\n mov %L0,%H0" : "=r"(crypto_uint64_y) : "r"(crypto_uint64_x) : );
return crypto_uint64_y;
#else
crypto_uint64_x &= 1 + crypto_uint64_signed_optblocker;
return -crypto_uint64_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_bottombit_01(crypto_uint64 crypto_uint64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andq $1,%0" : "+r"(crypto_uint64_x) : : "cc");
return crypto_uint64_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_y;
__asm__ ("ubfx %0,%1,0,1" : "=r"(crypto_uint64_y) : "r"(crypto_uint64_x) : );
return crypto_uint64_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint64 crypto_uint64_y;
__asm__ ("and %Q0,%Q1,#1\n mov %R0,#0" : "=r"(crypto_uint64_y) : "r"(crypto_uint64_x) : );
return crypto_uint64_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint64 crypto_uint64_y;
__asm__ ("and %L1,1,%L0\n mov 0,%H0" : "=r"(crypto_uint64_y) : "r"(crypto_uint64_x) : );
return crypto_uint64_y;
#else
crypto_uint64_x &= 1 + crypto_uint64_signed_optblocker;
return crypto_uint64_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_bitinrangepublicpos_mask(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrq %%cl,%0" : "+r"(crypto_uint64_x) : "c"(crypto_uint64_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("lsr %0,%0,%1" : "+r"(crypto_uint64_x) : "r"(crypto_uint64_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %Q0,%Q0,#63\n lsr %Q1,%Q1,%Q0\n rsb %R0,%Q0,#32\n orr %Q1,%Q1,%R1,lsl %R0\n sub %R0,%Q0,#32\n orr %Q1,%Q1,%R1,lsr %R0\n lsr %R1,%R1,%Q0" : "+&r"(crypto_uint64_s), "+r"(crypto_uint64_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint64 crypto_uint64_y, crypto_uint64_z;
__asm__ ("not %L0,%H0\n sll %L0,26,%H1\n sll %H3,1,%L1\n srl %L3,%L0,%L2\n sll %L1,%H0,%L1\n srl %H3,%L0,%H2\n sra %H1,31,%H1\n or %L2,%L1,%L2\n xor %L2,%H2,%L1\n and %H1,%H2,%H3\n and %H1,%L1,%L1\n xor %H3,%H2,%H3\n xor %L2,%L1,%L3" : "+&r"(crypto_uint64_s), "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_y), "+r"(crypto_uint64_x) : : );
#else
crypto_uint64_x >>= crypto_uint64_s ^ crypto_uint64_signed_optblocker;
#endif
return crypto_uint64_bottombit_mask(crypto_uint64_x);
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_bitinrangepublicpos_01(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrq %%cl,%0" : "+r"(crypto_uint64_x) : "c"(crypto_uint64_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("lsr %0,%0,%1" : "+r"(crypto_uint64_x) : "r"(crypto_uint64_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %Q0,%Q0,#63\n lsr %Q1,%Q1,%Q0\n rsb %R0,%Q0,#32\n orr %Q1,%Q1,%R1,lsl %R0\n sub %R0,%Q0,#32\n orr %Q1,%Q1,%R1,lsr %R0\n lsr %R1,%R1,%Q0" : "+&r"(crypto_uint64_s), "+r"(crypto_uint64_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint64 crypto_uint64_y, crypto_uint64_z;
__asm__ ("not %L0,%H0\n sll %L0,26,%H1\n sll %H3,1,%L1\n srl %L3,%L0,%L2\n sll %L1,%H0,%L1\n srl %H3,%L0,%H2\n sra %H1,31,%H1\n or %L2,%L1,%L2\n xor %L2,%H2,%L1\n and %H1,%H2,%H3\n and %H1,%L1,%L1\n xor %H3,%H2,%H3\n xor %L2,%L1,%L3" : "+&r"(crypto_uint64_s), "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_y), "+r"(crypto_uint64_x) : : );
#else
crypto_uint64_x >>= crypto_uint64_s ^ crypto_uint64_signed_optblocker;
#endif
return crypto_uint64_bottombit_01(crypto_uint64_x);
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_shlmod(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shlq %%cl,%0" : "+r"(crypto_uint64_x) : "c"(crypto_uint64_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("lsl %0,%0,%1" : "+r"(crypto_uint64_x) : "r"(crypto_uint64_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %Q0,%Q0,#63\n lsl %R1,%R1,%Q0\n sub %R0,%Q0,#32\n orr %R1,%R1,%Q1,lsl %R0\n rsb %R0,%Q0,#32\n orr %R1,%R1,%Q1,lsr %R0\n lsl %Q1,%Q1,%Q0" : "+&r"(crypto_uint64_s), "+r"(crypto_uint64_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint64 crypto_uint64_y, crypto_uint64_z;
__asm__ ("not %L0,%H0\n sll %L0,26,%H1\n srl %L3,1,%L1\n sll %L3,%L0,%L2\n srl %L1,%H0,%L1\n sll %H3,%L0,%H2\n sra %H1,31,%H1\n or %H2,%L1,%H2\n xor %L2,%H2,%L1\n and %H1,%L2,%L3\n and %H1,%L1,%L1\n xor %L3,%L2,%L3\n xor %H2,%L1,%H3" : "+&r"(crypto_uint64_s), "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_y), "+r"(crypto_uint64_x) : : );
#else
int crypto_uint64_k, crypto_uint64_l;
for (crypto_uint64_l = 0,crypto_uint64_k = 1;crypto_uint64_k < 64;++crypto_uint64_l,crypto_uint64_k *= 2)
crypto_uint64_x ^= (crypto_uint64_x ^ (crypto_uint64_x << crypto_uint64_k)) & crypto_uint64_bitinrangepublicpos_mask(crypto_uint64_s,crypto_uint64_l);
#endif
return crypto_uint64_x;
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_shrmod(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrq %%cl,%0" : "+r"(crypto_uint64_x) : "c"(crypto_uint64_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("lsr %0,%0,%1" : "+r"(crypto_uint64_x) : "r"(crypto_uint64_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %Q0,%Q0,#63\n lsr %Q1,%Q1,%Q0\n rsb %R0,%Q0,#32\n orr %Q1,%Q1,%R1,lsl %R0\n sub %R0,%Q0,#32\n orr %Q1,%Q1,%R1,lsr %R0\n lsr %R1,%R1,%Q0" : "+&r"(crypto_uint64_s), "+r"(crypto_uint64_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint64 crypto_uint64_y, crypto_uint64_z;
__asm__ ("not %L0,%H0\n sll %L0,26,%H1\n sll %H3,1,%L1\n srl %L3,%L0,%L2\n sll %L1,%H0,%L1\n srl %H3,%L0,%H2\n sra %H1,31,%H1\n or %L2,%L1,%L2\n xor %L2,%H2,%L1\n and %H1,%H2,%H3\n and %H1,%L1,%L1\n xor %H3,%H2,%H3\n xor %L2,%L1,%L3" : "+&r"(crypto_uint64_s), "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_y), "+r"(crypto_uint64_x) : : );
#else
int crypto_uint64_k, crypto_uint64_l;
for (crypto_uint64_l = 0,crypto_uint64_k = 1;crypto_uint64_k < 64;++crypto_uint64_l,crypto_uint64_k *= 2)
crypto_uint64_x ^= (crypto_uint64_x ^ (crypto_uint64_x >> crypto_uint64_k)) & crypto_uint64_bitinrangepublicpos_mask(crypto_uint64_s,crypto_uint64_l);
#endif
return crypto_uint64_x;
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_bitmod_mask(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_s) {
crypto_uint64_x = crypto_uint64_shrmod(crypto_uint64_x,crypto_uint64_s);
return crypto_uint64_bottombit_mask(crypto_uint64_x);
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_bitmod_01(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_s) {
crypto_uint64_x = crypto_uint64_shrmod(crypto_uint64_x,crypto_uint64_s);
return crypto_uint64_bottombit_01(crypto_uint64_x);
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_nonzero_mask(crypto_uint64 crypto_uint64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint64 crypto_uint64_q,crypto_uint64_z;
__asm__ ("xorq %0,%0\n movq $-1,%1\n testq %2,%2\n cmovneq %1,%0" : "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_q) : "r"(crypto_uint64_x) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_z;
__asm__ ("cmp %1,0\n csetm %0,ne" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("orrs %Q0,%Q0,%R0\n movne %Q0,#-1\n mov %R0,%Q0" : "+r"(crypto_uint64_x) : : "cc");
return crypto_uint64_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint64 crypto_uint64_z;
__asm__ ("or %L1,%H1,%L0\n cmp %%g0,%L0\n subx %%g0,0,%L0\n mov %L0,%H0" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x) : "cc");
return crypto_uint64_z;
#else
crypto_uint64_x |= -crypto_uint64_x;
return crypto_uint64_signed_negative_mask(crypto_uint64_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_nonzero_01(crypto_uint64 crypto_uint64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint64 crypto_uint64_q,crypto_uint64_z;
__asm__ ("xorq %0,%0\n movq $1,%1\n testq %2,%2\n cmovneq %1,%0" : "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_q) : "r"(crypto_uint64_x) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_z;
__asm__ ("cmp %1,0\n cset %0,ne" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("orrs %Q0,%Q0,%R0\n movne %Q0,#1\n mov %R0,#0" : "+r"(crypto_uint64_x) : : "cc");
return crypto_uint64_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint64 crypto_uint64_z;
__asm__ ("or %L1,%H1,%L0\n cmp %%g0,%L0\n addx %%g0,0,%L0\n mov 0,%H0" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x) : "cc");
return crypto_uint64_z;
#else
crypto_uint64_x |= -crypto_uint64_x;
return crypto_uint64_topbit_01(crypto_uint64_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_zero_mask(crypto_uint64 crypto_uint64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint64 crypto_uint64_q,crypto_uint64_z;
__asm__ ("xorq %0,%0\n movq $-1,%1\n testq %2,%2\n cmoveq %1,%0" : "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_q) : "r"(crypto_uint64_x) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_z;
__asm__ ("cmp %1,0\n csetm %0,eq" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint64 crypto_uint64_z;
__asm__ ("or %L1,%H1,%L0\n cmp %%g0,%L0\n addx %%g0,-1,%L0\n mov %L0,%H0" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x) : "cc");
return crypto_uint64_z;
#else
return ~crypto_uint64_nonzero_mask(crypto_uint64_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_zero_01(crypto_uint64 crypto_uint64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint64 crypto_uint64_q,crypto_uint64_z;
__asm__ ("xorq %0,%0\n movq $1,%1\n testq %2,%2\n cmoveq %1,%0" : "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_q) : "r"(crypto_uint64_x) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_z;
__asm__ ("cmp %1,0\n cset %0,eq" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint64 crypto_uint64_z;
__asm__ ("or %L1,%H1,%L0\n cmp %%g0,%L0\n subx %%g0,-1,%L0\n mov 0,%H0" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x) : "cc");
return crypto_uint64_z;
#else
return 1-crypto_uint64_nonzero_01(crypto_uint64_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_unequal_mask(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint64 crypto_uint64_q,crypto_uint64_z;
__asm__ ("xorq %0,%0\n movq $-1,%1\n cmpq %3,%2\n cmovneq %1,%0" : "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_q) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_z;
__asm__ ("cmp %1,%2\n csetm %0,ne" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#else
return crypto_uint64_nonzero_mask(crypto_uint64_x ^ crypto_uint64_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_unequal_01(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint64 crypto_uint64_q,crypto_uint64_z;
__asm__ ("xorq %0,%0\n movq $1,%1\n cmpq %3,%2\n cmovneq %1,%0" : "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_q) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_z;
__asm__ ("cmp %1,%2\n cset %0,ne" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#else
return crypto_uint64_nonzero_01(crypto_uint64_x ^ crypto_uint64_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_equal_mask(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint64 crypto_uint64_q,crypto_uint64_z;
__asm__ ("xorq %0,%0\n movq $-1,%1\n cmpq %3,%2\n cmoveq %1,%0" : "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_q) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_z;
__asm__ ("cmp %1,%2\n csetm %0,eq" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#else
return crypto_uint64_zero_mask(crypto_uint64_x ^ crypto_uint64_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_equal_01(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint64 crypto_uint64_q,crypto_uint64_z;
__asm__ ("xorq %0,%0\n movq $1,%1\n cmpq %3,%2\n cmoveq %1,%0" : "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_q) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_z;
__asm__ ("cmp %1,%2\n cset %0,eq" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#else
return crypto_uint64_zero_01(crypto_uint64_x ^ crypto_uint64_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_min(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("cmpq %1,%0\n cmovaq %1,%0" : "+r"(crypto_uint64_x) : "r"(crypto_uint64_y) : "cc");
return crypto_uint64_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("cmp %0,%1\n csel %0,%0,%1,lo" : "+r"(crypto_uint64_x) : "r"(crypto_uint64_y) : "cc");
return crypto_uint64_x;
#else
crypto_uint64 crypto_uint64_r = crypto_uint64_y ^ crypto_uint64_x;
crypto_uint64 crypto_uint64_z = crypto_uint64_y - crypto_uint64_x;
crypto_uint64_z ^= crypto_uint64_r & (crypto_uint64_z ^ crypto_uint64_y ^ (((crypto_uint64) 1) << (64-1)));
crypto_uint64_z = crypto_uint64_signed_negative_mask(crypto_uint64_z);
crypto_uint64_z &= crypto_uint64_r;
return crypto_uint64_x ^ crypto_uint64_z;
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_max(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("cmpq %1,%0\n cmovbq %1,%0" : "+r"(crypto_uint64_x) : "r"(crypto_uint64_y) : "cc");
return crypto_uint64_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("cmp %0,%1\n csel %0,%1,%0,lo" : "+r"(crypto_uint64_x) : "r"(crypto_uint64_y) : "cc");
return crypto_uint64_x;
#else
crypto_uint64 crypto_uint64_r = crypto_uint64_y ^ crypto_uint64_x;
crypto_uint64 crypto_uint64_z = crypto_uint64_y - crypto_uint64_x;
crypto_uint64_z ^= crypto_uint64_r & (crypto_uint64_z ^ crypto_uint64_y ^ (((crypto_uint64) 1) << (64-1)));
crypto_uint64_z = crypto_uint64_signed_negative_mask(crypto_uint64_z);
crypto_uint64_z &= crypto_uint64_r;
return crypto_uint64_y ^ crypto_uint64_z;
#endif
}
__attribute__((unused))
static inline
void crypto_uint64_minmax(crypto_uint64 *crypto_uint64_p,crypto_uint64 *crypto_uint64_q) {
crypto_uint64 crypto_uint64_x = *crypto_uint64_p;
crypto_uint64 crypto_uint64_y = *crypto_uint64_q;
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint64 crypto_uint64_z;
__asm__ ("cmpq %2,%1\n movq %1,%0\n cmovaq %2,%1\n cmovaq %0,%2" : "=&r"(crypto_uint64_z), "+&r"(crypto_uint64_x), "+r"(crypto_uint64_y) : : "cc");
*crypto_uint64_p = crypto_uint64_x;
*crypto_uint64_q = crypto_uint64_y;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_r, crypto_uint64_s;
__asm__ ("cmp %2,%3\n csel %0,%2,%3,lo\n csel %1,%3,%2,lo" : "=&r"(crypto_uint64_r), "=r"(crypto_uint64_s) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
*crypto_uint64_p = crypto_uint64_r;
*crypto_uint64_q = crypto_uint64_s;
#else
crypto_uint64 crypto_uint64_r = crypto_uint64_y ^ crypto_uint64_x;
crypto_uint64 crypto_uint64_z = crypto_uint64_y - crypto_uint64_x;
crypto_uint64_z ^= crypto_uint64_r & (crypto_uint64_z ^ crypto_uint64_y ^ (((crypto_uint64) 1) << (64-1)));
crypto_uint64_z = crypto_uint64_signed_negative_mask(crypto_uint64_z);
crypto_uint64_z &= crypto_uint64_r;
crypto_uint64_x ^= crypto_uint64_z;
crypto_uint64_y ^= crypto_uint64_z;
*crypto_uint64_p = crypto_uint64_x;
*crypto_uint64_q = crypto_uint64_y;
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_smaller_mask(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint64 crypto_uint64_q,crypto_uint64_z;
__asm__ ("xorq %0,%0\n movq $-1,%1\n cmpq %3,%2\n cmovbq %1,%0" : "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_q) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_z;
__asm__ ("cmp %1,%2\n csetm %0,lo" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#else
crypto_uint64 crypto_uint64_r = crypto_uint64_x ^ crypto_uint64_y;
crypto_uint64 crypto_uint64_z = crypto_uint64_x - crypto_uint64_y;
crypto_uint64_z ^= crypto_uint64_r & (crypto_uint64_z ^ crypto_uint64_x ^ (((crypto_uint64) 1) << (64-1)));
return crypto_uint64_signed_negative_mask(crypto_uint64_z);
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_smaller_01(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint64 crypto_uint64_q,crypto_uint64_z;
__asm__ ("xorq %0,%0\n movq $1,%1\n cmpq %3,%2\n cmovbq %1,%0" : "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_q) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_z;
__asm__ ("cmp %1,%2\n cset %0,lo" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#else
crypto_uint64 crypto_uint64_r = crypto_uint64_x ^ crypto_uint64_y;
crypto_uint64 crypto_uint64_z = crypto_uint64_x - crypto_uint64_y;
crypto_uint64_z ^= crypto_uint64_r & (crypto_uint64_z ^ crypto_uint64_x ^ (((crypto_uint64) 1) << (64-1)));
return crypto_uint64_topbit_01(crypto_uint64_z);
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_leq_mask(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint64 crypto_uint64_q,crypto_uint64_z;
__asm__ ("xorq %0,%0\n movq $-1,%1\n cmpq %3,%2\n cmovbeq %1,%0" : "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_q) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_z;
__asm__ ("cmp %1,%2\n csetm %0,ls" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#else
return ~crypto_uint64_smaller_mask(crypto_uint64_y,crypto_uint64_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint64 crypto_uint64_leq_01(crypto_uint64 crypto_uint64_x,crypto_uint64 crypto_uint64_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint64 crypto_uint64_q,crypto_uint64_z;
__asm__ ("xorq %0,%0\n movq $1,%1\n cmpq %3,%2\n cmovbeq %1,%0" : "=&r"(crypto_uint64_z), "=&r"(crypto_uint64_q) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint64 crypto_uint64_z;
__asm__ ("cmp %1,%2\n cset %0,ls" : "=r"(crypto_uint64_z) : "r"(crypto_uint64_x), "r"(crypto_uint64_y) : "cc");
return crypto_uint64_z;
#else
return 1-crypto_uint64_smaller_01(crypto_uint64_y,crypto_uint64_x);
#endif
}
__attribute__((unused))
static inline
int crypto_uint64_ones_num(crypto_uint64 crypto_uint64_x) {
crypto_uint64 crypto_uint64_y = crypto_uint64_x;
const crypto_uint64 C0 = 0x5555555555555555;
const crypto_uint64 C1 = 0x3333333333333333;
const crypto_uint64 C2 = 0x0f0f0f0f0f0f0f0f;
crypto_uint64_y -= ((crypto_uint64_y >> 1) & C0);
crypto_uint64_y = (crypto_uint64_y & C1) + ((crypto_uint64_y >> 2) & C1);
crypto_uint64_y = (crypto_uint64_y + (crypto_uint64_y >> 4)) & C2;
crypto_uint64_y += crypto_uint64_y >> 8;
crypto_uint64_y += crypto_uint64_y >> 16;
crypto_uint64_y = (crypto_uint64_y + (crypto_uint64_y >> 32)) & 0xff;
return crypto_uint64_y;
}
__attribute__((unused))
static inline
int crypto_uint64_bottomzeros_num(crypto_uint64 crypto_uint64_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint64 fallback = 64;
__asm__ ("bsfq %0,%0\n cmoveq %1,%0" : "+&r"(crypto_uint64_x) : "r"(fallback) : "cc");
return crypto_uint64_x;
#elif defined(__GNUC__) && defined(__aarch64__)
int64_t crypto_uint64_y;
__asm__ ("rbit %0,%1\n clz %0,%0" : "=r"(crypto_uint64_y) : "r"(crypto_uint64_x) : );
return crypto_uint64_y;
#else
crypto_uint64 crypto_uint64_y = crypto_uint64_x ^ (crypto_uint64_x-1);
crypto_uint64_y = ((crypto_uint64_signed) crypto_uint64_y) >> 1;
crypto_uint64_y &= ~(crypto_uint64_x & (((crypto_uint64) 1) << (64-1)));
return crypto_uint64_ones_num(crypto_uint64_y);
#endif
}
#endif
tinyssh-20250501/cryptoint/crypto_uint8.h 0000664 0000000 0000000 00000064204 15004722224 0020332 0 ustar 00root root 0000000 0000000 /* auto-generated: cd cryptoint; ./autogen */
/* cryptoint 20250414 */
#ifndef crypto_uint8_h
#define crypto_uint8_h
#include
#define crypto_uint8 uint8_t
#define crypto_uint8_signed int8_t
#define crypto_uint8_signed_optblocker tinyssh_uint8_signed_optblocker
extern volatile crypto_uint8_signed crypto_uint8_signed_optblocker;
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_load(const unsigned char *crypto_uint8_s) {
crypto_uint8 crypto_uint8_z = 0;
crypto_uint8_z |= ((crypto_uint8) (*crypto_uint8_s++)) << 0;
return crypto_uint8_z;
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_load_bigendian(const unsigned char *crypto_uint8_s) {
crypto_uint8 crypto_uint8_z = 0;
crypto_uint8_z |= ((crypto_uint8) (*crypto_uint8_s++)) << 0;
return crypto_uint8_z;
}
__attribute__((unused))
static inline
void crypto_uint8_store(unsigned char *crypto_uint8_s,crypto_uint8 crypto_uint8_x) {
*crypto_uint8_s++ = crypto_uint8_x >> 0;
}
__attribute__((unused))
static inline
void crypto_uint8_store_bigendian(unsigned char *crypto_uint8_s,crypto_uint8 crypto_uint8_x) {
*crypto_uint8_s++ = crypto_uint8_x >> 0;
}
__attribute__((unused))
static inline
crypto_uint8_signed crypto_uint8_signed_negative_mask(crypto_uint8_signed crypto_uint8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("sarb $7,%0" : "+r"(crypto_uint8_x) : : "cc");
return crypto_uint8_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8_signed crypto_uint8_y;
__asm__ ("sbfx %w0,%w1,7,1" : "=r"(crypto_uint8_y) : "r"(crypto_uint8_x) : );
return crypto_uint8_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint8_signed crypto_uint8_y;
__asm__ ("sxtb %0,%1\n asr %0,%0,#31" : "=r"(crypto_uint8_y) : "r"(crypto_uint8_x) : );
return crypto_uint8_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint8_signed crypto_uint8_y;
__asm__ ("sll %1,24,%0\n sra %0,31,%0" : "=r"(crypto_uint8_y) : "r"(crypto_uint8_x) : );
return crypto_uint8_y;
#else
crypto_uint8_x >>= 8-6;
crypto_uint8_x += crypto_uint8_signed_optblocker;
crypto_uint8_x >>= 5;
return crypto_uint8_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_topbit_01(crypto_uint8 crypto_uint8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrb $7,%0" : "+r"(crypto_uint8_x) : : "cc");
return crypto_uint8_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_y;
__asm__ ("ubfx %w0,%w1,7,1" : "=r"(crypto_uint8_y) : "r"(crypto_uint8_x) : );
return crypto_uint8_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint8_signed crypto_uint8_y;
__asm__ ("uxtb %0,%1\n lsr %0,%0,#7" : "=r"(crypto_uint8_y) : "r"(crypto_uint8_x) : );
return crypto_uint8_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint8 crypto_uint8_y;
__asm__ ("and %1,255,%0\n srl %0,7,%0" : "=r"(crypto_uint8_y) : "r"(crypto_uint8_x) : );
return crypto_uint8_y;
#else
crypto_uint8_x >>= 8-6;
crypto_uint8_x += crypto_uint8_signed_optblocker;
crypto_uint8_x >>= 5;
return crypto_uint8_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_topbit_mask(crypto_uint8 crypto_uint8_x) {
return crypto_uint8_signed_negative_mask(crypto_uint8_x);
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_bottombit_mask(crypto_uint8 crypto_uint8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andb $1,%0" : "+r"(crypto_uint8_x) : : "cc");
return -crypto_uint8_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_y;
__asm__ ("sbfx %w0,%w1,0,1" : "=r"(crypto_uint8_y) : "r"(crypto_uint8_x) : );
return crypto_uint8_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint8 crypto_uint8_y;
__asm__ ("and %0,%1,#1\n neg %0,%0\n uxtb %0,%0" : "=r"(crypto_uint8_y) : "r"(crypto_uint8_x) : );
return crypto_uint8_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint8 crypto_uint8_y;
__asm__ ("and %1,1,%0\n neg %0,%0\n and %0,255,%0" : "=r"(crypto_uint8_y) : "r"(crypto_uint8_x) : );
return crypto_uint8_y;
#else
crypto_uint8_x &= 1 + crypto_uint8_signed_optblocker;
return -crypto_uint8_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_bottombit_01(crypto_uint8 crypto_uint8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("andb $1,%0" : "+r"(crypto_uint8_x) : : "cc");
return crypto_uint8_x;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_y;
__asm__ ("ubfx %w0,%w1,0,1" : "=r"(crypto_uint8_y) : "r"(crypto_uint8_x) : );
return crypto_uint8_y;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint8 crypto_uint8_y;
__asm__ ("and %0,%1,#1" : "=r"(crypto_uint8_y) : "r"(crypto_uint8_x) : );
return crypto_uint8_y;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint8 crypto_uint8_y;
__asm__ ("and %1,1,%0" : "=r"(crypto_uint8_y) : "r"(crypto_uint8_x) : );
return crypto_uint8_y;
#else
crypto_uint8_x &= 1 + crypto_uint8_signed_optblocker;
return crypto_uint8_x;
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_bitinrangepublicpos_mask(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrb %%cl,%0" : "+r"(crypto_uint8_x) : "c"(crypto_uint8_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("and %w0,%w0,255\n lsr %w0,%w0,%w1" : "+&r"(crypto_uint8_x) : "r"(crypto_uint8_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %0,%0,#7\n uxtb %1,%1\n lsr %1,%1,%0" : "+&r"(crypto_uint8_s), "+r"(crypto_uint8_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("and %0,7,%0\n srl %1,%0,%1" : "+&r"(crypto_uint8_s), "+r"(crypto_uint8_x) : : );
#else
crypto_uint8_x >>= crypto_uint8_s ^ crypto_uint8_signed_optblocker;
#endif
return crypto_uint8_bottombit_mask(crypto_uint8_x);
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_bitinrangepublicpos_01(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_s) {
#if defined(__GNUC__) && defined(__x86_64__)
__asm__ ("shrb %%cl,%0" : "+r"(crypto_uint8_x) : "c"(crypto_uint8_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("and %w0,%w0,255\n lsr %w0,%w0,%w1" : "+&r"(crypto_uint8_x) : "r"(crypto_uint8_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("and %0,%0,#7\n uxtb %1,%1\n lsr %1,%1,%0" : "+&r"(crypto_uint8_s), "+r"(crypto_uint8_x) : : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
__asm__ ("and %0,7,%0\n srl %1,%0,%1" : "+&r"(crypto_uint8_s), "+r"(crypto_uint8_x) : : );
#else
crypto_uint8_x >>= crypto_uint8_s ^ crypto_uint8_signed_optblocker;
#endif
return crypto_uint8_bottombit_01(crypto_uint8_x);
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_shlmod(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_s) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint8_s &= 7;
__asm__ ("shlb %%cl,%0" : "+r"(crypto_uint8_x) : "c"(crypto_uint8_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8_s &= 7;
__asm__ ("and %w0,%w0,255\n lsl %w0,%w0,%w1" : "+&r"(crypto_uint8_x) : "r"(crypto_uint8_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint8_s &= 7;
__asm__ ("lsl %0,%0,%1\n uxtb %0,%0" : "+r"(crypto_uint8_x) : "r"(crypto_uint8_s) : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint8_s &= 7;
__asm__ ("sll %0,%1,%0\n and %0,255,%0" : "+r"(crypto_uint8_x) : "r"(crypto_uint8_s) : );
#else
int crypto_uint8_k, crypto_uint8_l;
for (crypto_uint8_l = 0,crypto_uint8_k = 1;crypto_uint8_k < 8;++crypto_uint8_l,crypto_uint8_k *= 2)
crypto_uint8_x ^= (crypto_uint8_x ^ (crypto_uint8_x << crypto_uint8_k)) & crypto_uint8_bitinrangepublicpos_mask(crypto_uint8_s,crypto_uint8_l);
#endif
return crypto_uint8_x;
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_shrmod(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_s) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint8_s &= 7;
__asm__ ("shrb %%cl,%0" : "+r"(crypto_uint8_x) : "c"(crypto_uint8_s) : "cc");
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8_s &= 7;
__asm__ ("and %w0,%w0,255\n lsr %w0,%w0,%w1" : "+&r"(crypto_uint8_x) : "r"(crypto_uint8_s) : );
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
crypto_uint8_s &= 7;
__asm__ ("uxtb %0,%0\n lsr %0,%0,%1" : "+&r"(crypto_uint8_x) : "r"(crypto_uint8_s) : );
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint8_s &= 7;
__asm__ ("srl %0,%1,%0" : "+r"(crypto_uint8_x) : "r"(crypto_uint8_s) : );
#else
int crypto_uint8_k, crypto_uint8_l;
for (crypto_uint8_l = 0,crypto_uint8_k = 1;crypto_uint8_k < 8;++crypto_uint8_l,crypto_uint8_k *= 2)
crypto_uint8_x ^= (crypto_uint8_x ^ (crypto_uint8_x >> crypto_uint8_k)) & crypto_uint8_bitinrangepublicpos_mask(crypto_uint8_s,crypto_uint8_l);
#endif
return crypto_uint8_x;
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_bitmod_mask(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_s) {
crypto_uint8_x = crypto_uint8_shrmod(crypto_uint8_x,crypto_uint8_s);
return crypto_uint8_bottombit_mask(crypto_uint8_x);
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_bitmod_01(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_s) {
crypto_uint8_x = crypto_uint8_shrmod(crypto_uint8_x,crypto_uint8_s);
return crypto_uint8_bottombit_01(crypto_uint8_x);
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_nonzero_mask(crypto_uint8 crypto_uint8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint8 crypto_uint8_z;
int32_t crypto_uint8_x32 = crypto_uint8_x,crypto_uint8_q32,crypto_uint8_z32;
__asm__ ("xorl %0,%0\n movl $-1,%1\n testb %b2,%b2\n cmovnel %1,%0" : "=&r"(crypto_uint8_z32), "=&r"(crypto_uint8_q32) : "q"(crypto_uint8_x32) : "cc");
crypto_uint8_z = crypto_uint8_z32;
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_z;
__asm__ ("tst %w1,255\n csetm %w0,ne" : "=r"(crypto_uint8_z) : "r"(crypto_uint8_x) : "cc");
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("uxtb %0,%0\n cmp %0,#0\n movne %0,#-1" : "+r"(crypto_uint8_x) : : "cc");
return crypto_uint8_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint8 crypto_uint8_z;
__asm__ ("and %0,255,%0\n cmp %%g0,%0\n subx %%g0,0,%1" : "+r"(crypto_uint8_x), "=r"(crypto_uint8_z) : : "cc");
return crypto_uint8_z;
#else
crypto_uint8_x |= -crypto_uint8_x;
return crypto_uint8_signed_negative_mask(crypto_uint8_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_nonzero_01(crypto_uint8 crypto_uint8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint8 crypto_uint8_z;
int32_t crypto_uint8_x32 = crypto_uint8_x,crypto_uint8_q32,crypto_uint8_z32;
__asm__ ("xorl %0,%0\n movl $1,%1\n testb %b2,%b2\n cmovnel %1,%0" : "=&r"(crypto_uint8_z32), "=&r"(crypto_uint8_q32) : "q"(crypto_uint8_x32) : "cc");
crypto_uint8_z = crypto_uint8_z32;
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_z;
__asm__ ("tst %w1,255\n cset %w0,ne" : "=r"(crypto_uint8_z) : "r"(crypto_uint8_x) : "cc");
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__arm__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__thumb__)
__asm__ ("uxtb %0,%0\n cmp %0,#0\n movne %0,#1" : "+r"(crypto_uint8_x) : : "cc");
return crypto_uint8_x;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint8 crypto_uint8_z;
__asm__ ("and %0,255,%0\n cmp %%g0,%0\n addx %%g0,0,%1" : "+r"(crypto_uint8_x), "=r"(crypto_uint8_z) : : "cc");
return crypto_uint8_z;
#else
crypto_uint8_x |= -crypto_uint8_x;
return crypto_uint8_topbit_01(crypto_uint8_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_zero_mask(crypto_uint8 crypto_uint8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint8 crypto_uint8_z;
int32_t crypto_uint8_x32 = crypto_uint8_x,crypto_uint8_q32,crypto_uint8_z32;
__asm__ ("xorl %0,%0\n movl $-1,%1\n testb %b2,%b2\n cmovel %1,%0" : "=&r"(crypto_uint8_z32), "=&r"(crypto_uint8_q32) : "q"(crypto_uint8_x32) : "cc");
crypto_uint8_z = crypto_uint8_z32;
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_z;
__asm__ ("tst %w1,255\n csetm %w0,eq" : "=r"(crypto_uint8_z) : "r"(crypto_uint8_x) : "cc");
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint8 crypto_uint8_z;
__asm__ ("and %0,255,%0\n cmp %%g0,%0\n addx %%g0,-1,%1" : "+r"(crypto_uint8_x), "=r"(crypto_uint8_z) : : "cc");
return crypto_uint8_z;
#else
return ~crypto_uint8_nonzero_mask(crypto_uint8_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_zero_01(crypto_uint8 crypto_uint8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint8 crypto_uint8_z;
int32_t crypto_uint8_x32 = crypto_uint8_x,crypto_uint8_q32,crypto_uint8_z32;
__asm__ ("xorl %0,%0\n movl $1,%1\n testb %b2,%b2\n cmovel %1,%0" : "=&r"(crypto_uint8_z32), "=&r"(crypto_uint8_q32) : "q"(crypto_uint8_x32) : "cc");
crypto_uint8_z = crypto_uint8_z32;
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_z;
__asm__ ("tst %w1,255\n cset %w0,eq" : "=r"(crypto_uint8_z) : "r"(crypto_uint8_x) : "cc");
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__sparc_v8__)
crypto_uint8 crypto_uint8_z;
__asm__ ("and %0,255,%0\n cmp %%g0,%0\n subx %%g0,-1,%1" : "+r"(crypto_uint8_x), "=r"(crypto_uint8_z) : : "cc");
return crypto_uint8_z;
#else
return 1-crypto_uint8_nonzero_01(crypto_uint8_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_unequal_mask(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint8 crypto_uint8_z;
int32_t crypto_uint8_x32 = crypto_uint8_x,crypto_uint8_y32 = crypto_uint8_y,crypto_uint8_q32,crypto_uint8_z32;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpb %b3,%b2\n cmovnel %1,%0" : "=&r"(crypto_uint8_z32), "=&r"(crypto_uint8_q32) : "q"(crypto_uint8_x32), "q"(crypto_uint8_y32) : "cc");
crypto_uint8_z = crypto_uint8_z32;
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_z;
__asm__ ("and %w0,%w1,255\n cmp %w0,%w2,uxtb\n csetm %w0,ne" : "=&r"(crypto_uint8_z) : "r"(crypto_uint8_x), "r"(crypto_uint8_y) : "cc");
return crypto_uint8_z;
#else
return crypto_uint8_nonzero_mask(crypto_uint8_x ^ crypto_uint8_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_unequal_01(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint8 crypto_uint8_z;
int32_t crypto_uint8_x32 = crypto_uint8_x,crypto_uint8_y32 = crypto_uint8_y,crypto_uint8_q32,crypto_uint8_z32;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpb %b3,%b2\n cmovnel %1,%0" : "=&r"(crypto_uint8_z32), "=&r"(crypto_uint8_q32) : "q"(crypto_uint8_x32), "q"(crypto_uint8_y32) : "cc");
crypto_uint8_z = crypto_uint8_z32;
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_z;
__asm__ ("and %w0,%w1,255\n cmp %w0,%w2,uxtb\n cset %w0,ne" : "=&r"(crypto_uint8_z) : "r"(crypto_uint8_x), "r"(crypto_uint8_y) : "cc");
return crypto_uint8_z;
#else
return crypto_uint8_nonzero_01(crypto_uint8_x ^ crypto_uint8_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_equal_mask(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint8 crypto_uint8_z;
int32_t crypto_uint8_x32 = crypto_uint8_x,crypto_uint8_y32 = crypto_uint8_y,crypto_uint8_q32,crypto_uint8_z32;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpb %b3,%b2\n cmovel %1,%0" : "=&r"(crypto_uint8_z32), "=&r"(crypto_uint8_q32) : "q"(crypto_uint8_x32), "q"(crypto_uint8_y32) : "cc");
crypto_uint8_z = crypto_uint8_z32;
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_z;
__asm__ ("and %w0,%w1,255\n cmp %w0,%w2,uxtb\n csetm %w0,eq" : "=&r"(crypto_uint8_z) : "r"(crypto_uint8_x), "r"(crypto_uint8_y) : "cc");
return crypto_uint8_z;
#else
return crypto_uint8_zero_mask(crypto_uint8_x ^ crypto_uint8_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_equal_01(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint8 crypto_uint8_z;
int32_t crypto_uint8_x32 = crypto_uint8_x,crypto_uint8_y32 = crypto_uint8_y,crypto_uint8_q32,crypto_uint8_z32;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpb %b3,%b2\n cmovel %1,%0" : "=&r"(crypto_uint8_z32), "=&r"(crypto_uint8_q32) : "q"(crypto_uint8_x32), "q"(crypto_uint8_y32) : "cc");
crypto_uint8_z = crypto_uint8_z32;
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_z;
__asm__ ("and %w0,%w1,255\n cmp %w0,%w2,uxtb\n cset %w0,eq" : "=&r"(crypto_uint8_z) : "r"(crypto_uint8_x), "r"(crypto_uint8_y) : "cc");
return crypto_uint8_z;
#else
return crypto_uint8_zero_01(crypto_uint8_x ^ crypto_uint8_y);
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_min(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
uint32_t crypto_uint8_x32 = crypto_uint8_x,crypto_uint8_y32 = crypto_uint8_y;
__asm__ ("cmpb %b1,%b0\n cmoval %1,%0" : "+q"(crypto_uint8_x32) : "q"(crypto_uint8_y32) : "cc");
crypto_uint8_x = crypto_uint8_x32;
return crypto_uint8_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("and %w0,%w0,255\n cmp %w0,%w1,uxtb\n csel %w0,%w0,%w1,lo" : "+&r"(crypto_uint8_x) : "r"(crypto_uint8_y) : "cc");
return crypto_uint8_x;
#else
crypto_uint8 crypto_uint8_r = crypto_uint8_y ^ crypto_uint8_x;
crypto_uint8 crypto_uint8_z = crypto_uint8_y - crypto_uint8_x;
crypto_uint8_z ^= crypto_uint8_r & (crypto_uint8_z ^ crypto_uint8_y ^ (((crypto_uint8) 1) << (8-1)));
crypto_uint8_z = crypto_uint8_signed_negative_mask(crypto_uint8_z);
crypto_uint8_z &= crypto_uint8_r;
return crypto_uint8_x ^ crypto_uint8_z;
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_max(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
uint32_t crypto_uint8_x32 = crypto_uint8_x,crypto_uint8_y32 = crypto_uint8_y;
__asm__ ("cmpb %b1,%b0\n cmovbl %1,%0" : "+q"(crypto_uint8_x32) : "q"(crypto_uint8_y32) : "cc");
crypto_uint8_x = crypto_uint8_x32;
return crypto_uint8_x;
#elif defined(__GNUC__) && defined(__aarch64__)
__asm__ ("and %w0,%w0,255\n cmp %w0,%w1,uxtb\n csel %w0,%w1,%w0,lo" : "+&r"(crypto_uint8_x) : "r"(crypto_uint8_y) : "cc");
return crypto_uint8_x;
#else
crypto_uint8 crypto_uint8_r = crypto_uint8_y ^ crypto_uint8_x;
crypto_uint8 crypto_uint8_z = crypto_uint8_y - crypto_uint8_x;
crypto_uint8_z ^= crypto_uint8_r & (crypto_uint8_z ^ crypto_uint8_y ^ (((crypto_uint8) 1) << (8-1)));
crypto_uint8_z = crypto_uint8_signed_negative_mask(crypto_uint8_z);
crypto_uint8_z &= crypto_uint8_r;
return crypto_uint8_y ^ crypto_uint8_z;
#endif
}
__attribute__((unused))
static inline
void crypto_uint8_minmax(crypto_uint8 *crypto_uint8_p,crypto_uint8 *crypto_uint8_q) {
crypto_uint8 crypto_uint8_x = *crypto_uint8_p;
crypto_uint8 crypto_uint8_y = *crypto_uint8_q;
#if defined(__GNUC__) && defined(__x86_64__)
uint32_t crypto_uint8_x32 = crypto_uint8_x,crypto_uint8_y32 = crypto_uint8_y,crypto_uint8_z32;
__asm__ ("cmpb %b2,%b1\n movl %1,%0\n cmoval %2,%1\n cmoval %0,%2" : "=&r"(crypto_uint8_z32), "+&q"(crypto_uint8_x32), "+q"(crypto_uint8_y32) : : "cc");
crypto_uint8_x = crypto_uint8_x32; crypto_uint8_y = crypto_uint8_y32;
*crypto_uint8_p = crypto_uint8_x;
*crypto_uint8_q = crypto_uint8_y;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_r, crypto_uint8_s;
__asm__ ("and %w0,%w0,255\n cmp %w0,%w3,uxtb\n csel %w1,%w0,%w3,lo\n csel %w2,%w3,%w0,lo" : "+&r"(crypto_uint8_x), "=&r"(crypto_uint8_r), "=r"(crypto_uint8_s) : "r"(crypto_uint8_y) : "cc");
*crypto_uint8_p = crypto_uint8_r;
*crypto_uint8_q = crypto_uint8_s;
#else
crypto_uint8 crypto_uint8_r = crypto_uint8_y ^ crypto_uint8_x;
crypto_uint8 crypto_uint8_z = crypto_uint8_y - crypto_uint8_x;
crypto_uint8_z ^= crypto_uint8_r & (crypto_uint8_z ^ crypto_uint8_y ^ (((crypto_uint8) 1) << (8-1)));
crypto_uint8_z = crypto_uint8_signed_negative_mask(crypto_uint8_z);
crypto_uint8_z &= crypto_uint8_r;
crypto_uint8_x ^= crypto_uint8_z;
crypto_uint8_y ^= crypto_uint8_z;
*crypto_uint8_p = crypto_uint8_x;
*crypto_uint8_q = crypto_uint8_y;
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_smaller_mask(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint8 crypto_uint8_z;
int32_t crypto_uint8_x32 = crypto_uint8_x,crypto_uint8_y32 = crypto_uint8_y,crypto_uint8_q32,crypto_uint8_z32;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpb %b3,%b2\n cmovbl %1,%0" : "=&r"(crypto_uint8_z32), "=&r"(crypto_uint8_q32) : "q"(crypto_uint8_x32), "q"(crypto_uint8_y32) : "cc");
crypto_uint8_z = crypto_uint8_z32;
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_z;
__asm__ ("and %w0,%w1,255\n cmp %w0,%w2,uxtb\n csetm %w0,lo" : "=&r"(crypto_uint8_z) : "r"(crypto_uint8_x), "r"(crypto_uint8_y) : "cc");
return crypto_uint8_z;
#else
crypto_uint8 crypto_uint8_r = crypto_uint8_x ^ crypto_uint8_y;
crypto_uint8 crypto_uint8_z = crypto_uint8_x - crypto_uint8_y;
crypto_uint8_z ^= crypto_uint8_r & (crypto_uint8_z ^ crypto_uint8_x ^ (((crypto_uint8) 1) << (8-1)));
return crypto_uint8_signed_negative_mask(crypto_uint8_z);
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_smaller_01(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint8 crypto_uint8_z;
int32_t crypto_uint8_x32 = crypto_uint8_x,crypto_uint8_y32 = crypto_uint8_y,crypto_uint8_q32,crypto_uint8_z32;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpb %b3,%b2\n cmovbl %1,%0" : "=&r"(crypto_uint8_z32), "=&r"(crypto_uint8_q32) : "q"(crypto_uint8_x32), "q"(crypto_uint8_y32) : "cc");
crypto_uint8_z = crypto_uint8_z32;
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_z;
__asm__ ("and %w0,%w1,255\n cmp %w0,%w2,uxtb\n cset %w0,lo" : "=&r"(crypto_uint8_z) : "r"(crypto_uint8_x), "r"(crypto_uint8_y) : "cc");
return crypto_uint8_z;
#else
crypto_uint8 crypto_uint8_r = crypto_uint8_x ^ crypto_uint8_y;
crypto_uint8 crypto_uint8_z = crypto_uint8_x - crypto_uint8_y;
crypto_uint8_z ^= crypto_uint8_r & (crypto_uint8_z ^ crypto_uint8_x ^ (((crypto_uint8) 1) << (8-1)));
return crypto_uint8_topbit_01(crypto_uint8_z);
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_leq_mask(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint8 crypto_uint8_z;
int32_t crypto_uint8_x32 = crypto_uint8_x,crypto_uint8_y32 = crypto_uint8_y,crypto_uint8_q32,crypto_uint8_z32;
__asm__ ("xorl %0,%0\n movl $-1,%1\n cmpb %b3,%b2\n cmovbel %1,%0" : "=&r"(crypto_uint8_z32), "=&r"(crypto_uint8_q32) : "q"(crypto_uint8_x32), "q"(crypto_uint8_y32) : "cc");
crypto_uint8_z = crypto_uint8_z32;
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_z;
__asm__ ("and %w0,%w1,255\n cmp %w0,%w2,uxtb\n csetm %w0,ls" : "=&r"(crypto_uint8_z) : "r"(crypto_uint8_x), "r"(crypto_uint8_y) : "cc");
return crypto_uint8_z;
#else
return ~crypto_uint8_smaller_mask(crypto_uint8_y,crypto_uint8_x);
#endif
}
__attribute__((unused))
static inline
crypto_uint8 crypto_uint8_leq_01(crypto_uint8 crypto_uint8_x,crypto_uint8 crypto_uint8_y) {
#if defined(__GNUC__) && defined(__x86_64__)
crypto_uint8 crypto_uint8_z;
int32_t crypto_uint8_x32 = crypto_uint8_x,crypto_uint8_y32 = crypto_uint8_y,crypto_uint8_q32,crypto_uint8_z32;
__asm__ ("xorl %0,%0\n movl $1,%1\n cmpb %b3,%b2\n cmovbel %1,%0" : "=&r"(crypto_uint8_z32), "=&r"(crypto_uint8_q32) : "q"(crypto_uint8_x32), "q"(crypto_uint8_y32) : "cc");
crypto_uint8_z = crypto_uint8_z32;
return crypto_uint8_z;
#elif defined(__GNUC__) && defined(__aarch64__)
crypto_uint8 crypto_uint8_z;
__asm__ ("and %w0,%w1,255\n cmp %w0,%w2,uxtb\n cset %w0,ls" : "=&r"(crypto_uint8_z) : "r"(crypto_uint8_x), "r"(crypto_uint8_y) : "cc");
return crypto_uint8_z;
#else
return 1-crypto_uint8_smaller_01(crypto_uint8_y,crypto_uint8_x);
#endif
}
__attribute__((unused))
static inline
int crypto_uint8_ones_num(crypto_uint8 crypto_uint8_x) {
crypto_uint8 crypto_uint8_y = crypto_uint8_x;
const crypto_uint8 C0 = 0x55;
const crypto_uint8 C1 = 0x33;
const crypto_uint8 C2 = 0x0f;
crypto_uint8_y -= ((crypto_uint8_y >> 1) & C0);
crypto_uint8_y = (crypto_uint8_y & C1) + ((crypto_uint8_y >> 2) & C1);
crypto_uint8_y = (crypto_uint8_y + (crypto_uint8_y >> 4)) & C2;
return crypto_uint8_y;
}
__attribute__((unused))
static inline
int crypto_uint8_bottomzeros_num(crypto_uint8 crypto_uint8_x) {
#if defined(__GNUC__) && defined(__x86_64__)
int32_t fallback = 8;
int32_t crypto_uint8_x32 = crypto_uint8_x;
__asm__ ("bsfl %0,%0\n cmovel %1,%0" : "+&r"(crypto_uint8_x32) : "r"(fallback) : "cc");
crypto_uint8_x = crypto_uint8_x32;
return crypto_uint8_x;
#elif defined(__GNUC__) && defined(__aarch64__)
int64_t crypto_uint8_y;
__asm__ ("orr %w0,%w1,-256\n rbit %w0,%w0\n clz %w0,%w0" : "=r"(crypto_uint8_y) : "r"(crypto_uint8_x) : );
return crypto_uint8_y;
#else
crypto_uint8 crypto_uint8_y = crypto_uint8_x ^ (crypto_uint8_x-1);
crypto_uint8_y = ((crypto_uint8_signed) crypto_uint8_y) >> 1;
crypto_uint8_y &= ~(crypto_uint8_x & (((crypto_uint8) 1) << (8-1)));
return crypto_uint8_ones_num(crypto_uint8_y);
#endif
}
#endif
tinyssh-20250501/cryptoint/crypto_uintN.h 0000664 0000000 0000000 00000201100 15004722224 0020344 0 ustar 00root root 0000000 0000000 /* auto-generated: cd cryptoint; ./autogen */
/* cryptoint 20250414 */
#ifndef crypto_uintN_h
#define crypto_uintN_h
#include
#define crypto_uintN uintN_t
#define crypto_uintN_signed intN_t
#define crypto_uintN_signed_optblocker namespace_uintN_signed_optblocker
extern volatile crypto_uintN_signed crypto_uintN_signed_optblocker;
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_load(const unsigned char *crypto_uintN_s) {
crypto_uintN crypto_uintN_z = 0;
int crypto_uintN_k;
for (crypto_uintN_k = 0;crypto_uintN_k < N;crypto_uintN_k += 8)
crypto_uintN_z |= ((crypto_uintN) (*crypto_uintN_s++)) << crypto_uintN_k;
return crypto_uintN_z;
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_load_bigendian(const unsigned char *crypto_uintN_s) {
crypto_uintN crypto_uintN_z = 0;
int crypto_uintN_k;
for (crypto_uintN_k = N - 8;crypto_uintN_k >= 0;crypto_uintN_k -= 8)
crypto_uintN_z |= ((crypto_uintN) (*crypto_uintN_s++)) << crypto_uintN_k;
return crypto_uintN_z;
}
__attribute__((unused))
static inline
void crypto_uintN_store(unsigned char *crypto_uintN_s,crypto_uintN crypto_uintN_x) {
int crypto_uintN_k;
for (crypto_uintN_k = 0;crypto_uintN_k < N;crypto_uintN_k += 8)
*crypto_uintN_s++ = crypto_uintN_x >> crypto_uintN_k;
}
__attribute__((unused))
static inline
void crypto_uintN_store_bigendian(unsigned char *crypto_uintN_s,crypto_uintN crypto_uintN_x) {
int crypto_uintN_k;
for (crypto_uintN_k = N - 8;crypto_uintN_k >= 0;crypto_uintN_k -= 8)
*crypto_uintN_s++ = crypto_uintN_x >> crypto_uintN_k;
}
__attribute__((unused))
static inline
crypto_uintN_signed crypto_uintN_signed_negative_mask(crypto_uintN_signed crypto_uintN_x) {
#if amd64
8: readasm("amd64; int8 crypto_uintN_x; crypto_uintN_x signed>>= 7");
16: readasm("amd64; int16 crypto_uintN_x; crypto_uintN_x signed>>= 15");
32: readasm("amd64; int32 crypto_uintN_x; crypto_uintN_x signed>>= 31");
64: readasm("amd64; int64 crypto_uintN_x; crypto_uintN_x signed>>= 63");
return crypto_uintN_x;
#elif arm64
crypto_uintN_signed crypto_uintN_y;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = -(1 & (crypto_uintN_x unsigned>> 7))");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = -(1 & (crypto_uintN_x unsigned>> 15))");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x signed>> 31");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x signed>> 63");
return crypto_uintN_y;
#elif arm32
crypto_uintN_signed crypto_uintN_y;
8: readasm("arm32; int8 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = (int8) crypto_uintN_x; crypto_uintN_y = crypto_uintN_y signed>> 31");
16: readasm("arm32; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = (int16) crypto_uintN_x; crypto_uintN_y = crypto_uintN_y signed>> 31");
32: readasm("arm32; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x signed>> 31");
64: readasm("arm32; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_y.lo = crypto_uintN_x.hi signed>> 31; crypto_uintN_y.hi = crypto_uintN_y.lo");
return crypto_uintN_y;
#elif sparc32
crypto_uintN_signed crypto_uintN_y;
8: readasm("sparc32; int8 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x << 24; crypto_uintN_y = crypto_uintN_y signed>> 31");
16: readasm("sparc32; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x << 16; crypto_uintN_y = crypto_uintN_y signed>> 31");
32: readasm("sparc32; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x signed>> 31");
64: readasm("sparc32; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_y.lo = crypto_uintN_x.hi signed>> 31; crypto_uintN_y.hi = crypto_uintN_y.lo");
return crypto_uintN_y;
#else
crypto_uintN_x >>= N-6;
crypto_uintN_x += crypto_uintN_signed_optblocker;
crypto_uintN_x >>= 5;
return crypto_uintN_x;
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_topbit_01(crypto_uintN crypto_uintN_x) {
#if amd64
8: readasm("amd64; int8 crypto_uintN_x; crypto_uintN_x unsigned>>= 7");
16: readasm("amd64; int16 crypto_uintN_x; crypto_uintN_x unsigned>>= 15");
32: readasm("amd64; int32 crypto_uintN_x; crypto_uintN_x unsigned>>= 31");
64: readasm("amd64; int64 crypto_uintN_x; crypto_uintN_x unsigned>>= 63");
return crypto_uintN_x;
#elif arm64
crypto_uintN crypto_uintN_y;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = 1 & (crypto_uintN_x unsigned>> 7)");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = 1 & (crypto_uintN_x unsigned>> 15)");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x unsigned>> 31");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x unsigned>> 63");
return crypto_uintN_y;
#elif arm32
crypto_uintN_signed crypto_uintN_y;
8: readasm("arm32; int8 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = (uint8) crypto_uintN_x; crypto_uintN_y = crypto_uintN_y unsigned>> 7");
16: readasm("arm32; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = (uint16) crypto_uintN_x; crypto_uintN_y = crypto_uintN_y unsigned>> 15");
32: readasm("arm32; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x unsigned>> 31");
64: readasm("arm32; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_y.lo = crypto_uintN_x.hi unsigned>> 31; crypto_uintN_y.hi = 0");
return crypto_uintN_y;
#elif sparc32
crypto_uintN crypto_uintN_y;
8: readasm("sparc32; int8 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = (uint8) crypto_uintN_x; crypto_uintN_y = crypto_uintN_y unsigned>> 7");
16: readasm("sparc32; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = (uint16) crypto_uintN_x; crypto_uintN_y = crypto_uintN_y unsigned>> 15");
32: readasm("sparc32; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x unsigned>> 31");
64: readasm("sparc32; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_y.lo = crypto_uintN_x.hi unsigned>> 31; crypto_uintN_y.hi = 0");
return crypto_uintN_y;
#else
crypto_uintN_x >>= N-6;
crypto_uintN_x += crypto_uintN_signed_optblocker;
crypto_uintN_x >>= 5;
return crypto_uintN_x;
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_topbit_mask(crypto_uintN crypto_uintN_x) {
return crypto_uintN_signed_negative_mask(crypto_uintN_x);
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_bottombit_mask(crypto_uintN crypto_uintN_x) {
#if amd64
8: readasm("amd64; int8 crypto_uintN_x; crypto_uintN_x &= 1");
16: readasm("amd64; int16 crypto_uintN_x; crypto_uintN_x &= 1");
32: readasm("amd64; int32 crypto_uintN_x; crypto_uintN_x &= 1");
64: readasm("amd64; int64 crypto_uintN_x; crypto_uintN_x &= 1");
return -crypto_uintN_x;
#elif arm64
crypto_uintN crypto_uintN_y;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = -(1 & (crypto_uintN_x unsigned>> 0))");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = -(1 & (crypto_uintN_x unsigned>> 0))");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = -(1 & (crypto_uintN_x unsigned>> 0))");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = -(1 & (crypto_uintN_x unsigned>> 0))");
return crypto_uintN_y;
#elif arm32
crypto_uintN crypto_uintN_y;
8: readasm("arm32; int8 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x & 1; crypto_uintN_y = -crypto_uintN_y; crypto_uintN_y = (uint8) crypto_uintN_y");
16: readasm("arm32; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x & 1; crypto_uintN_y = -crypto_uintN_y; crypto_uintN_y = (uint16) crypto_uintN_y");
32: readasm("arm32; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x & 1; crypto_uintN_y = -crypto_uintN_y");
64: readasm("arm32; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_y.lo = crypto_uintN_x.lo & 1; crypto_uintN_y.lo = -crypto_uintN_y.lo; crypto_uintN_y.hi = crypto_uintN_y.lo");
return crypto_uintN_y;
#elif sparc32
crypto_uintN crypto_uintN_y;
8: readasm("sparc32; int8 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x & 1; crypto_uintN_y = -crypto_uintN_y; crypto_uintN_y = (uint8) crypto_uintN_y");
16: readasm("sparc32; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x & 1; crypto_uintN_y = -crypto_uintN_y; crypto_uintN_y = (uint16) crypto_uintN_y");
32: readasm("sparc32; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x & 1; crypto_uintN_y = -crypto_uintN_y");
64: readasm("sparc32; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_y.lo = crypto_uintN_x.lo & 1; crypto_uintN_y.lo = -crypto_uintN_y.lo; crypto_uintN_y.hi = crypto_uintN_y.lo");
return crypto_uintN_y;
#else
crypto_uintN_x &= 1 + crypto_uintN_signed_optblocker;
return -crypto_uintN_x;
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_bottombit_01(crypto_uintN crypto_uintN_x) {
#if amd64
8: readasm("amd64; int8 crypto_uintN_x; crypto_uintN_x &= 1");
16: readasm("amd64; int16 crypto_uintN_x; crypto_uintN_x &= 1");
32: readasm("amd64; int32 crypto_uintN_x; crypto_uintN_x &= 1");
64: readasm("amd64; int64 crypto_uintN_x; crypto_uintN_x &= 1");
return crypto_uintN_x;
#elif arm64
crypto_uintN crypto_uintN_y;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = 1 & (crypto_uintN_x unsigned>> 0)");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = 1 & (crypto_uintN_x unsigned>> 0)");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = 1 & (crypto_uintN_x unsigned>> 0)");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = 1 & (crypto_uintN_x unsigned>> 0)");
return crypto_uintN_y;
#elif arm32
crypto_uintN crypto_uintN_y;
8: readasm("arm32; int8 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x & 1");
16: readasm("arm32; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x & 1");
32: readasm("arm32; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x & 1");
64: readasm("arm32; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_y.lo = crypto_uintN_x.lo & 1; crypto_uintN_y.hi = 0");
return crypto_uintN_y;
#elif sparc32
crypto_uintN crypto_uintN_y;
8: readasm("sparc32; int8 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x & 1");
16: readasm("sparc32; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x & 1");
32: readasm("sparc32; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x & 1");
64: readasm("sparc32; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_y.lo = crypto_uintN_x.lo & 1; crypto_uintN_y.hi = 0");
return crypto_uintN_y;
#else
crypto_uintN_x &= 1 + crypto_uintN_signed_optblocker;
return crypto_uintN_x;
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_bitinrangepublicpos_mask(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_s) {
#if amd64
8: readasm("amd64; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_x unsigned>>= crypto_uintN_s");
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_x unsigned>>= crypto_uintN_s");
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_x unsigned>>= crypto_uintN_s");
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_s; crypto_uintN_x unsigned>>= crypto_uintN_s");
#elif arm64
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = (uint8) crypto_uintN_x; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = (uint16) crypto_uintN_x; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
#elif arm32
8: readasm("arm32; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_s = crypto_uintN_s & 7; crypto_uintN_x = (uint8) crypto_uintN_x; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
16: readasm("arm32; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_s = crypto_uintN_s & 15; crypto_uintN_x = (uint16) crypto_uintN_x; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
32: readasm("arm32; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_s = crypto_uintN_s & 31; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
64: readasm("arm32; int64 crypto_uintN_x crypto_uintN_s; crypto_uintN_s.lo = crypto_uintN_s.lo & 63; crypto_uintN_x.lo = crypto_uintN_x.lo unsigned>> crypto_uintN_s.lo; crypto_uintN_s.hi = 32 - crypto_uintN_s.lo; crypto_uintN_x.lo = crypto_uintN_x.lo | (crypto_uintN_x.hi << crypto_uintN_s.hi); crypto_uintN_s.hi = crypto_uintN_s.lo - 32; crypto_uintN_x.lo = crypto_uintN_x.lo | (crypto_uintN_x.hi unsigned>> crypto_uintN_s.hi); crypto_uintN_x.hi = crypto_uintN_x.hi unsigned>> crypto_uintN_s.lo");
#elif sparc32
8: readasm("sparc32; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_s = crypto_uintN_s & 7; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
16: readasm("sparc32; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_s = crypto_uintN_s & 15; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
32: readasm("sparc32; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
64: crypto_uintN crypto_uintN_y, crypto_uintN_z;
64: readasm("sparc32; int64 crypto_uintN_x crypto_uintN_y crypto_uintN_z crypto_uintN_s; crypto_uintN_s.hi = ~crypto_uintN_s.lo; crypto_uintN_z.hi = crypto_uintN_s.lo << 26; crypto_uintN_z.lo = crypto_uintN_x.hi << 1; crypto_uintN_y.lo = crypto_uintN_x.lo unsigned>> crypto_uintN_s.lo; crypto_uintN_z.lo = crypto_uintN_z.lo << crypto_uintN_s.hi; crypto_uintN_y.hi = crypto_uintN_x.hi unsigned>> crypto_uintN_s.lo; crypto_uintN_z.hi = crypto_uintN_z.hi signed>> 31; crypto_uintN_y.lo = crypto_uintN_y.lo | crypto_uintN_z.lo; crypto_uintN_z.lo = crypto_uintN_y.lo ^ crypto_uintN_y.hi; crypto_uintN_x.hi = crypto_uintN_z.hi & crypto_uintN_y.hi; crypto_uintN_z.lo = crypto_uintN_z.hi & crypto_uintN_z.lo; crypto_uintN_x.hi = crypto_uintN_x.hi ^ crypto_uintN_y.hi; crypto_uintN_x.lo = crypto_uintN_y.lo ^ crypto_uintN_z.lo");
#else
crypto_uintN_x >>= crypto_uintN_s ^ crypto_uintN_signed_optblocker;
#endif
return crypto_uintN_bottombit_mask(crypto_uintN_x);
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_bitinrangepublicpos_01(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_s) {
#if amd64
8: readasm("amd64; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_x unsigned>>= crypto_uintN_s");
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_x unsigned>>= crypto_uintN_s");
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_x unsigned>>= crypto_uintN_s");
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_s; crypto_uintN_x unsigned>>= crypto_uintN_s");
#elif arm64
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = (uint8) crypto_uintN_x; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = (uint16) crypto_uintN_x; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
#elif arm32
8: readasm("arm32; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_s = crypto_uintN_s & 7; crypto_uintN_x = (uint8) crypto_uintN_x; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
16: readasm("arm32; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_s = crypto_uintN_s & 15; crypto_uintN_x = (uint16) crypto_uintN_x; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
32: readasm("arm32; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_s = crypto_uintN_s & 31; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
64: readasm("arm32; int64 crypto_uintN_x crypto_uintN_s; crypto_uintN_s.lo = crypto_uintN_s.lo & 63; crypto_uintN_x.lo = crypto_uintN_x.lo unsigned>> crypto_uintN_s.lo; crypto_uintN_s.hi = 32 - crypto_uintN_s.lo; crypto_uintN_x.lo = crypto_uintN_x.lo | (crypto_uintN_x.hi << crypto_uintN_s.hi); crypto_uintN_s.hi = crypto_uintN_s.lo - 32; crypto_uintN_x.lo = crypto_uintN_x.lo | (crypto_uintN_x.hi unsigned>> crypto_uintN_s.hi); crypto_uintN_x.hi = crypto_uintN_x.hi unsigned>> crypto_uintN_s.lo");
#elif sparc32
8: readasm("sparc32; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_s = crypto_uintN_s & 7; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
16: readasm("sparc32; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_s = crypto_uintN_s & 15; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
32: readasm("sparc32; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
64: crypto_uintN crypto_uintN_y, crypto_uintN_z;
64: readasm("sparc32; int64 crypto_uintN_x crypto_uintN_y crypto_uintN_z crypto_uintN_s; crypto_uintN_s.hi = ~crypto_uintN_s.lo; crypto_uintN_z.hi = crypto_uintN_s.lo << 26; crypto_uintN_z.lo = crypto_uintN_x.hi << 1; crypto_uintN_y.lo = crypto_uintN_x.lo unsigned>> crypto_uintN_s.lo; crypto_uintN_z.lo = crypto_uintN_z.lo << crypto_uintN_s.hi; crypto_uintN_y.hi = crypto_uintN_x.hi unsigned>> crypto_uintN_s.lo; crypto_uintN_z.hi = crypto_uintN_z.hi signed>> 31; crypto_uintN_y.lo = crypto_uintN_y.lo | crypto_uintN_z.lo; crypto_uintN_z.lo = crypto_uintN_y.lo ^ crypto_uintN_y.hi; crypto_uintN_x.hi = crypto_uintN_z.hi & crypto_uintN_y.hi; crypto_uintN_z.lo = crypto_uintN_z.hi & crypto_uintN_z.lo; crypto_uintN_x.hi = crypto_uintN_x.hi ^ crypto_uintN_y.hi; crypto_uintN_x.lo = crypto_uintN_y.lo ^ crypto_uintN_z.lo");
#else
crypto_uintN_x >>= crypto_uintN_s ^ crypto_uintN_signed_optblocker;
#endif
return crypto_uintN_bottombit_01(crypto_uintN_x);
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_shlmod(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_s) {
#if amd64
8: crypto_uintN_s &= 7;
8: readasm("amd64; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_x <<= crypto_uintN_s");
16: crypto_uintN_s &= 15;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_x <<= crypto_uintN_s");
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_x <<= crypto_uintN_s");
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_s; crypto_uintN_x <<= crypto_uintN_s");
#elif arm64
8: crypto_uintN_s &= 7;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = (uint8) crypto_uintN_x; crypto_uintN_x = crypto_uintN_x << crypto_uintN_s");
16: crypto_uintN_s &= 15;
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = (uint16) crypto_uintN_x; crypto_uintN_x = crypto_uintN_x << crypto_uintN_s");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x << crypto_uintN_s");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x << crypto_uintN_s");
#elif arm32
8: crypto_uintN_s &= 7;
8: readasm("arm32; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x << crypto_uintN_s; crypto_uintN_x = (uint8) crypto_uintN_x");
16: crypto_uintN_s &= 15;
16: readasm("arm32; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x << crypto_uintN_s; crypto_uintN_x = (uint16) crypto_uintN_x");
32: crypto_uintN_s &= 31;
32: readasm("arm32; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x << crypto_uintN_s");
64: readasm("arm32; int64 crypto_uintN_x crypto_uintN_s; crypto_uintN_s.lo = crypto_uintN_s.lo & 63; crypto_uintN_x.hi = crypto_uintN_x.hi << crypto_uintN_s.lo; crypto_uintN_s.hi = crypto_uintN_s.lo - 32; crypto_uintN_x.hi = crypto_uintN_x.hi | (crypto_uintN_x.lo << crypto_uintN_s.hi); crypto_uintN_s.hi = 32 - crypto_uintN_s.lo; crypto_uintN_x.hi = crypto_uintN_x.hi | (crypto_uintN_x.lo unsigned>> crypto_uintN_s.hi); crypto_uintN_x.lo = crypto_uintN_x.lo << crypto_uintN_s.lo");
#elif sparc32
8: crypto_uintN_s &= 7;
8: readasm("sparc32; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x << crypto_uintN_s; crypto_uintN_x = (uint8) crypto_uintN_x");
16: crypto_uintN_s &= 15;
16: readasm("sparc32; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x << crypto_uintN_s; crypto_uintN_x = (uint16) crypto_uintN_x");
32: readasm("sparc32; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x << crypto_uintN_s");
64: crypto_uintN crypto_uintN_y, crypto_uintN_z;
64: readasm("sparc32; int64 crypto_uintN_x crypto_uintN_y crypto_uintN_z crypto_uintN_s; crypto_uintN_s.hi = ~crypto_uintN_s.lo; crypto_uintN_z.hi = crypto_uintN_s.lo << 26; crypto_uintN_z.lo = crypto_uintN_x.lo unsigned>> 1; crypto_uintN_y.lo = crypto_uintN_x.lo << crypto_uintN_s.lo; crypto_uintN_z.lo = crypto_uintN_z.lo unsigned>> crypto_uintN_s.hi; crypto_uintN_y.hi = crypto_uintN_x.hi << crypto_uintN_s.lo; crypto_uintN_z.hi = crypto_uintN_z.hi signed>> 31; crypto_uintN_y.hi = crypto_uintN_y.hi | crypto_uintN_z.lo; crypto_uintN_z.lo = crypto_uintN_y.lo ^ crypto_uintN_y.hi; crypto_uintN_x.lo = crypto_uintN_z.hi & crypto_uintN_y.lo; crypto_uintN_z.lo = crypto_uintN_z.hi & crypto_uintN_z.lo; crypto_uintN_x.lo = crypto_uintN_x.lo ^ crypto_uintN_y.lo; crypto_uintN_x.hi = crypto_uintN_y.hi ^ crypto_uintN_z.lo");
#else
int crypto_uintN_k, crypto_uintN_l;
for (crypto_uintN_l = 0,crypto_uintN_k = 1;crypto_uintN_k < N;++crypto_uintN_l,crypto_uintN_k *= 2)
crypto_uintN_x ^= (crypto_uintN_x ^ (crypto_uintN_x << crypto_uintN_k)) & crypto_uintN_bitinrangepublicpos_mask(crypto_uintN_s,crypto_uintN_l);
#endif
return crypto_uintN_x;
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_shrmod(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_s) {
#if amd64
8: crypto_uintN_s &= 7;
8: readasm("amd64; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_x unsigned>>= crypto_uintN_s");
16: crypto_uintN_s &= 15;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_x unsigned>>= crypto_uintN_s");
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_x unsigned>>= crypto_uintN_s");
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_s; crypto_uintN_x unsigned>>= crypto_uintN_s");
#elif arm64
8: crypto_uintN_s &= 7;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = (uint8) crypto_uintN_x; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
16: crypto_uintN_s &= 15;
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = (uint16) crypto_uintN_x; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
#elif arm32
8: crypto_uintN_s &= 7;
8: readasm("arm32; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = (uint8) crypto_uintN_x; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
16: crypto_uintN_s &= 15;
16: readasm("arm32; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = (uint16) crypto_uintN_x; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
32: crypto_uintN_s &= 31;
32: readasm("arm32; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
64: readasm("arm32; int64 crypto_uintN_x crypto_uintN_s; crypto_uintN_s.lo = crypto_uintN_s.lo & 63; crypto_uintN_x.lo = crypto_uintN_x.lo unsigned>> crypto_uintN_s.lo; crypto_uintN_s.hi = 32 - crypto_uintN_s.lo; crypto_uintN_x.lo = crypto_uintN_x.lo | (crypto_uintN_x.hi << crypto_uintN_s.hi); crypto_uintN_s.hi = crypto_uintN_s.lo - 32; crypto_uintN_x.lo = crypto_uintN_x.lo | (crypto_uintN_x.hi unsigned>> crypto_uintN_s.hi); crypto_uintN_x.hi = crypto_uintN_x.hi unsigned>> crypto_uintN_s.lo");
#elif sparc32
8: crypto_uintN_s &= 7;
8: readasm("sparc32; int8 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
16: crypto_uintN_s &= 15;
16: readasm("sparc32; int16 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
32: readasm("sparc32; int32 crypto_uintN_x crypto_uintN_s; crypto_uintN_x = crypto_uintN_x unsigned>> crypto_uintN_s");
64: crypto_uintN crypto_uintN_y, crypto_uintN_z;
64: readasm("sparc32; int64 crypto_uintN_x crypto_uintN_y crypto_uintN_z crypto_uintN_s; crypto_uintN_s.hi = ~crypto_uintN_s.lo; crypto_uintN_z.hi = crypto_uintN_s.lo << 26; crypto_uintN_z.lo = crypto_uintN_x.hi << 1; crypto_uintN_y.lo = crypto_uintN_x.lo unsigned>> crypto_uintN_s.lo; crypto_uintN_z.lo = crypto_uintN_z.lo << crypto_uintN_s.hi; crypto_uintN_y.hi = crypto_uintN_x.hi unsigned>> crypto_uintN_s.lo; crypto_uintN_z.hi = crypto_uintN_z.hi signed>> 31; crypto_uintN_y.lo = crypto_uintN_y.lo | crypto_uintN_z.lo; crypto_uintN_z.lo = crypto_uintN_y.lo ^ crypto_uintN_y.hi; crypto_uintN_x.hi = crypto_uintN_z.hi & crypto_uintN_y.hi; crypto_uintN_z.lo = crypto_uintN_z.hi & crypto_uintN_z.lo; crypto_uintN_x.hi = crypto_uintN_x.hi ^ crypto_uintN_y.hi; crypto_uintN_x.lo = crypto_uintN_y.lo ^ crypto_uintN_z.lo");
#else
int crypto_uintN_k, crypto_uintN_l;
for (crypto_uintN_l = 0,crypto_uintN_k = 1;crypto_uintN_k < N;++crypto_uintN_l,crypto_uintN_k *= 2)
crypto_uintN_x ^= (crypto_uintN_x ^ (crypto_uintN_x >> crypto_uintN_k)) & crypto_uintN_bitinrangepublicpos_mask(crypto_uintN_s,crypto_uintN_l);
#endif
return crypto_uintN_x;
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_bitmod_mask(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_s) {
crypto_uintN_x = crypto_uintN_shrmod(crypto_uintN_x,crypto_uintN_s);
return crypto_uintN_bottombit_mask(crypto_uintN_x);
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_bitmod_01(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_s) {
crypto_uintN_x = crypto_uintN_shrmod(crypto_uintN_x,crypto_uintN_s);
return crypto_uintN_bottombit_01(crypto_uintN_x);
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_nonzero_mask(crypto_uintN crypto_uintN_x) {
#if amd64
8: crypto_uintN crypto_uintN_z;
8: int32_t crypto_uintN_x32 = crypto_uintN_x,crypto_uintN_q32,crypto_uintN_z32;
8: readasm("amd64; int32 crypto_uintN_x32 crypto_uintN_q32 crypto_uintN_z32; crypto_uintN_z32 = 0; crypto_uintN_q32 = -1; crypto_uintN_x32 & (int8) crypto_uintN_x32; crypto_uintN_z32 = crypto_uintN_q32 if !=");
8: crypto_uintN_z = crypto_uintN_z32;
16: crypto_uintN crypto_uintN_q,crypto_uintN_z;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_q crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x & crypto_uintN_x; crypto_uintN_z = crypto_uintN_q if !=");
32: crypto_uintN crypto_uintN_q,crypto_uintN_z;
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_q crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x & crypto_uintN_x; crypto_uintN_z = crypto_uintN_q if !=");
64: crypto_uintN crypto_uintN_q,crypto_uintN_z;
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_q crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x & crypto_uintN_x; crypto_uintN_z = crypto_uintN_q if !=");
return crypto_uintN_z;
#elif arm64
crypto_uintN crypto_uintN_z;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_z; crypto_uintN_x & 255; crypto_uintN_z = -1 if != else 0");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_z; crypto_uintN_x & 65535; crypto_uintN_z = -1 if != else 0");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_z; crypto_uintN_x - 0; crypto_uintN_z = -1 if != else 0");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_z; crypto_uintN_x - 0; crypto_uintN_z = -1 if != else 0");
return crypto_uintN_z;
#elif arm32
8: readasm("arm32; int8 crypto_uintN_x; crypto_uintN_x = (uint8) crypto_uintN_x; crypto_uintN_x - 0; crypto_uintN_x = -1 if !=");
16: readasm("arm32; int16 crypto_uintN_x; crypto_uintN_x = (uint16) crypto_uintN_x; crypto_uintN_x - 0; crypto_uintN_x = -1 if !=");
32: readasm("arm32; int32 crypto_uintN_x; crypto_uintN_x - 0; crypto_uintN_x = -1 if !=");
64: readasm("arm32; int64 crypto_uintN_x; flags, crypto_uintN_x.lo = crypto_uintN_x.lo | crypto_uintN_x.hi; crypto_uintN_x.lo = -1 if !=; crypto_uintN_x.hi = crypto_uintN_x.lo");
return crypto_uintN_x;
#elif sparc32
crypto_uintN crypto_uintN_z;
8: readasm("sparc32; int8 crypto_uintN_x crypto_uintN_z; crypto_uintN_x = (uint8) crypto_uintN_x; 0 - crypto_uintN_x; crypto_uintN_z = -carry");
16: readasm("sparc32; int16 crypto_uintN_x crypto_uintN_z; crypto_uintN_x = (uint16) crypto_uintN_x; 0 - crypto_uintN_x; crypto_uintN_z = -carry");
32: readasm("sparc32; int32 crypto_uintN_x crypto_uintN_z; 0 - crypto_uintN_x; crypto_uintN_z = -carry");
64: readasm("sparc32; int64 crypto_uintN_x crypto_uintN_z; crypto_uintN_z.lo = crypto_uintN_x.lo | crypto_uintN_x.hi; 0 - crypto_uintN_z.lo; crypto_uintN_z.lo = -carry; crypto_uintN_z.hi = crypto_uintN_z.lo");
return crypto_uintN_z;
#else
crypto_uintN_x |= -crypto_uintN_x;
return crypto_uintN_signed_negative_mask(crypto_uintN_x);
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_nonzero_01(crypto_uintN crypto_uintN_x) {
#if amd64
8: crypto_uintN crypto_uintN_z;
8: int32_t crypto_uintN_x32 = crypto_uintN_x,crypto_uintN_q32,crypto_uintN_z32;
8: readasm("amd64; int32 crypto_uintN_x32 crypto_uintN_q32 crypto_uintN_z32; crypto_uintN_z32 = 0; crypto_uintN_q32 = 1; crypto_uintN_x32 & (int8) crypto_uintN_x32; crypto_uintN_z32 = crypto_uintN_q32 if !=");
8: crypto_uintN_z = crypto_uintN_z32;
16: crypto_uintN crypto_uintN_q,crypto_uintN_z;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_q crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x & crypto_uintN_x; crypto_uintN_z = crypto_uintN_q if !=");
32: crypto_uintN crypto_uintN_q,crypto_uintN_z;
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_q crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x & crypto_uintN_x; crypto_uintN_z = crypto_uintN_q if !=");
64: crypto_uintN crypto_uintN_q,crypto_uintN_z;
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_q crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x & crypto_uintN_x; crypto_uintN_z = crypto_uintN_q if !=");
return crypto_uintN_z;
#elif arm64
crypto_uintN crypto_uintN_z;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_z; crypto_uintN_x & 255; crypto_uintN_z = 1 if != else 0");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_z; crypto_uintN_x & 65535; crypto_uintN_z = 1 if != else 0");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_z; crypto_uintN_x - 0; crypto_uintN_z = 1 if != else 0");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_z; crypto_uintN_x - 0; crypto_uintN_z = 1 if != else 0");
return crypto_uintN_z;
#elif arm32
8: readasm("arm32; int8 crypto_uintN_x; crypto_uintN_x = (uint8) crypto_uintN_x; crypto_uintN_x - 0; crypto_uintN_x = 1 if !=");
16: readasm("arm32; int16 crypto_uintN_x; crypto_uintN_x = (uint16) crypto_uintN_x; crypto_uintN_x - 0; crypto_uintN_x = 1 if !=");
32: readasm("arm32; int32 crypto_uintN_x; crypto_uintN_x - 0; crypto_uintN_x = 1 if !=");
64: readasm("arm32; int64 crypto_uintN_x; flags, crypto_uintN_x.lo = crypto_uintN_x.lo | crypto_uintN_x.hi; crypto_uintN_x.lo = 1 if !=; crypto_uintN_x.hi = 0");
return crypto_uintN_x;
#elif sparc32
crypto_uintN crypto_uintN_z;
8: readasm("sparc32; int8 crypto_uintN_x crypto_uintN_z; crypto_uintN_x = (uint8) crypto_uintN_x; 0 - crypto_uintN_x; crypto_uintN_z = carry");
16: readasm("sparc32; int16 crypto_uintN_x crypto_uintN_z; crypto_uintN_x = (uint16) crypto_uintN_x; 0 - crypto_uintN_x; crypto_uintN_z = carry");
32: readasm("sparc32; int32 crypto_uintN_x crypto_uintN_z; 0 - crypto_uintN_x; crypto_uintN_z = carry");
64: readasm("sparc32; int64 crypto_uintN_x crypto_uintN_z; crypto_uintN_z.lo = crypto_uintN_x.lo | crypto_uintN_x.hi; 0 - crypto_uintN_z.lo; crypto_uintN_z.lo = carry; crypto_uintN_z.hi = 0");
return crypto_uintN_z;
#else
crypto_uintN_x |= -crypto_uintN_x;
return crypto_uintN_topbit_01(crypto_uintN_x);
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_zero_mask(crypto_uintN crypto_uintN_x) {
#if amd64
8: crypto_uintN crypto_uintN_z;
8: int32_t crypto_uintN_x32 = crypto_uintN_x,crypto_uintN_q32,crypto_uintN_z32;
8: readasm("amd64; int32 crypto_uintN_x32 crypto_uintN_q32 crypto_uintN_z32; crypto_uintN_z32 = 0; crypto_uintN_q32 = -1; crypto_uintN_x32 & (int8) crypto_uintN_x32; crypto_uintN_z32 = crypto_uintN_q32 if =");
8: crypto_uintN_z = crypto_uintN_z32;
16: crypto_uintN crypto_uintN_q,crypto_uintN_z;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_q crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x & crypto_uintN_x; crypto_uintN_z = crypto_uintN_q if =");
32: crypto_uintN crypto_uintN_q,crypto_uintN_z;
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_q crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x & crypto_uintN_x; crypto_uintN_z = crypto_uintN_q if =");
64: crypto_uintN crypto_uintN_q,crypto_uintN_z;
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_q crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x & crypto_uintN_x; crypto_uintN_z = crypto_uintN_q if =");
return crypto_uintN_z;
#elif arm64
crypto_uintN crypto_uintN_z;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_z; crypto_uintN_x & 255; crypto_uintN_z = -1 if = else 0");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_z; crypto_uintN_x & 65535; crypto_uintN_z = -1 if = else 0");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_z; crypto_uintN_x - 0; crypto_uintN_z = -1 if = else 0");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_z; crypto_uintN_x - 0; crypto_uintN_z = -1 if = else 0");
return crypto_uintN_z;
#elif sparc32
crypto_uintN crypto_uintN_z;
8: readasm("sparc32; int8 crypto_uintN_x crypto_uintN_z; crypto_uintN_x = (uint8) crypto_uintN_x; 0 - crypto_uintN_x; crypto_uintN_z = carry - 1");
16: readasm("sparc32; int16 crypto_uintN_x crypto_uintN_z; crypto_uintN_x = (uint16) crypto_uintN_x; 0 - crypto_uintN_x; crypto_uintN_z = carry - 1");
32: readasm("sparc32; int32 crypto_uintN_x crypto_uintN_z; 0 - crypto_uintN_x; crypto_uintN_z = carry - 1");
64: readasm("sparc32; int64 crypto_uintN_x crypto_uintN_z; crypto_uintN_z.lo = crypto_uintN_x.lo | crypto_uintN_x.hi; 0 - crypto_uintN_z.lo; crypto_uintN_z.lo = carry - 1; crypto_uintN_z.hi = crypto_uintN_z.lo");
return crypto_uintN_z;
#else
return ~crypto_uintN_nonzero_mask(crypto_uintN_x);
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_zero_01(crypto_uintN crypto_uintN_x) {
#if amd64
8: crypto_uintN crypto_uintN_z;
8: int32_t crypto_uintN_x32 = crypto_uintN_x,crypto_uintN_q32,crypto_uintN_z32;
8: readasm("amd64; int32 crypto_uintN_x32 crypto_uintN_q32 crypto_uintN_z32; crypto_uintN_z32 = 0; crypto_uintN_q32 = 1; crypto_uintN_x32 & (int8) crypto_uintN_x32; crypto_uintN_z32 = crypto_uintN_q32 if =");
8: crypto_uintN_z = crypto_uintN_z32;
16: crypto_uintN crypto_uintN_q,crypto_uintN_z;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_q crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x & crypto_uintN_x; crypto_uintN_z = crypto_uintN_q if =");
32: crypto_uintN crypto_uintN_q,crypto_uintN_z;
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_q crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x & crypto_uintN_x; crypto_uintN_z = crypto_uintN_q if =");
64: crypto_uintN crypto_uintN_q,crypto_uintN_z;
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_q crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x & crypto_uintN_x; crypto_uintN_z = crypto_uintN_q if =");
return crypto_uintN_z;
#elif arm64
crypto_uintN crypto_uintN_z;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_z; crypto_uintN_x & 255; crypto_uintN_z = 1 if = else 0");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_z; crypto_uintN_x & 65535; crypto_uintN_z = 1 if = else 0");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_z; crypto_uintN_x - 0; crypto_uintN_z = 1 if = else 0");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_z; crypto_uintN_x - 0; crypto_uintN_z = 1 if = else 0");
return crypto_uintN_z;
#elif sparc32
crypto_uintN crypto_uintN_z;
8: readasm("sparc32; int8 crypto_uintN_x crypto_uintN_z; crypto_uintN_x = (uint8) crypto_uintN_x; 0 - crypto_uintN_x; crypto_uintN_z = 1 - carry");
16: readasm("sparc32; int16 crypto_uintN_x crypto_uintN_z; crypto_uintN_x = (uint16) crypto_uintN_x; 0 - crypto_uintN_x; crypto_uintN_z = 1 - carry");
32: readasm("sparc32; int32 crypto_uintN_x crypto_uintN_z; 0 - crypto_uintN_x; crypto_uintN_z = 1 - carry");
64: readasm("sparc32; int64 crypto_uintN_x crypto_uintN_z; crypto_uintN_z.lo = crypto_uintN_x.lo | crypto_uintN_x.hi; 0 - crypto_uintN_z.lo; crypto_uintN_z.lo = 1 - carry; crypto_uintN_z.hi = 0");
return crypto_uintN_z;
#else
return 1-crypto_uintN_nonzero_01(crypto_uintN_x);
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_unequal_mask(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_y) {
#if amd64
8: crypto_uintN crypto_uintN_z;
8: int32_t crypto_uintN_x32 = crypto_uintN_x,crypto_uintN_y32 = crypto_uintN_y,crypto_uintN_q32,crypto_uintN_z32;
8: readasm("amd64; int32 crypto_uintN_x32 crypto_uintN_q32 crypto_uintN_y32 crypto_uintN_z32; crypto_uintN_z32 = 0; crypto_uintN_q32 = -1; crypto_uintN_x32 - (int8) crypto_uintN_y32; crypto_uintN_z32 = crypto_uintN_q32 if !=");
8: crypto_uintN_z = crypto_uintN_z32;
16: crypto_uintN crypto_uintN_q,crypto_uintN_z;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if !=");
32: crypto_uintN crypto_uintN_q,crypto_uintN_z;
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if !=");
64: crypto_uintN crypto_uintN_q,crypto_uintN_z;
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if !=");
return crypto_uintN_z;
#elif arm64
crypto_uintN crypto_uintN_z;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint8) crypto_uintN_x; crypto_uintN_z - (uint8) crypto_uintN_y; crypto_uintN_z = -1 if != else 0");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint16) crypto_uintN_x; crypto_uintN_z - (uint16) crypto_uintN_y; crypto_uintN_z = -1 if != else 0");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = -1 if != else 0");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = -1 if != else 0");
return crypto_uintN_z;
#else
return crypto_uintN_nonzero_mask(crypto_uintN_x ^ crypto_uintN_y);
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_unequal_01(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_y) {
#if amd64
8: crypto_uintN crypto_uintN_z;
8: int32_t crypto_uintN_x32 = crypto_uintN_x,crypto_uintN_y32 = crypto_uintN_y,crypto_uintN_q32,crypto_uintN_z32;
8: readasm("amd64; int32 crypto_uintN_x32 crypto_uintN_q32 crypto_uintN_y32 crypto_uintN_z32; crypto_uintN_z32 = 0; crypto_uintN_q32 = 1; crypto_uintN_x32 - (int8) crypto_uintN_y32; crypto_uintN_z32 = crypto_uintN_q32 if !=");
8: crypto_uintN_z = crypto_uintN_z32;
16: crypto_uintN crypto_uintN_q,crypto_uintN_z;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if !=");
32: crypto_uintN crypto_uintN_q,crypto_uintN_z;
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if !=");
64: crypto_uintN crypto_uintN_q,crypto_uintN_z;
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if !=");
return crypto_uintN_z;
#elif arm64
crypto_uintN crypto_uintN_z;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint8) crypto_uintN_x; crypto_uintN_z - (uint8) crypto_uintN_y; crypto_uintN_z = 1 if != else 0");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint16) crypto_uintN_x; crypto_uintN_z - (uint16) crypto_uintN_y; crypto_uintN_z = 1 if != else 0");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = 1 if != else 0");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = 1 if != else 0");
return crypto_uintN_z;
#else
return crypto_uintN_nonzero_01(crypto_uintN_x ^ crypto_uintN_y);
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_equal_mask(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_y) {
#if amd64
8: crypto_uintN crypto_uintN_z;
8: int32_t crypto_uintN_x32 = crypto_uintN_x,crypto_uintN_y32 = crypto_uintN_y,crypto_uintN_q32,crypto_uintN_z32;
8: readasm("amd64; int32 crypto_uintN_x32 crypto_uintN_q32 crypto_uintN_y32 crypto_uintN_z32; crypto_uintN_z32 = 0; crypto_uintN_q32 = -1; crypto_uintN_x32 - (int8) crypto_uintN_y32; crypto_uintN_z32 = crypto_uintN_q32 if =");
8: crypto_uintN_z = crypto_uintN_z32;
16: crypto_uintN crypto_uintN_q,crypto_uintN_z;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if =");
32: crypto_uintN crypto_uintN_q,crypto_uintN_z;
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if =");
64: crypto_uintN crypto_uintN_q,crypto_uintN_z;
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if =");
return crypto_uintN_z;
#elif arm64
crypto_uintN crypto_uintN_z;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint8) crypto_uintN_x; crypto_uintN_z - (uint8) crypto_uintN_y; crypto_uintN_z = -1 if = else 0");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint16) crypto_uintN_x; crypto_uintN_z - (uint16) crypto_uintN_y; crypto_uintN_z = -1 if = else 0");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = -1 if = else 0");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = -1 if = else 0");
return crypto_uintN_z;
#else
return crypto_uintN_zero_mask(crypto_uintN_x ^ crypto_uintN_y);
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_equal_01(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_y) {
#if amd64
8: crypto_uintN crypto_uintN_z;
8: int32_t crypto_uintN_x32 = crypto_uintN_x,crypto_uintN_y32 = crypto_uintN_y,crypto_uintN_q32,crypto_uintN_z32;
8: readasm("amd64; int32 crypto_uintN_x32 crypto_uintN_q32 crypto_uintN_y32 crypto_uintN_z32; crypto_uintN_z32 = 0; crypto_uintN_q32 = 1; crypto_uintN_x32 - (int8) crypto_uintN_y32; crypto_uintN_z32 = crypto_uintN_q32 if =");
8: crypto_uintN_z = crypto_uintN_z32;
16: crypto_uintN crypto_uintN_q,crypto_uintN_z;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if =");
32: crypto_uintN crypto_uintN_q,crypto_uintN_z;
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if =");
64: crypto_uintN crypto_uintN_q,crypto_uintN_z;
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if =");
return crypto_uintN_z;
#elif arm64
crypto_uintN crypto_uintN_z;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint8) crypto_uintN_x; crypto_uintN_z - (uint8) crypto_uintN_y; crypto_uintN_z = 1 if = else 0");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint16) crypto_uintN_x; crypto_uintN_z - (uint16) crypto_uintN_y; crypto_uintN_z = 1 if = else 0");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = 1 if = else 0");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = 1 if = else 0");
return crypto_uintN_z;
#else
return crypto_uintN_zero_01(crypto_uintN_x ^ crypto_uintN_y);
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_min(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_y) {
#if amd64
8: uint32_t crypto_uintN_x32 = crypto_uintN_x,crypto_uintN_y32 = crypto_uintN_y;
8: readasm("amd64; int32 crypto_uintN_x32 crypto_uintN_y32; crypto_uintN_x32 - (int8) crypto_uintN_y32; crypto_uintN_x32 = crypto_uintN_y32 if unsigned>");
8: crypto_uintN_x = crypto_uintN_x32;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_x - crypto_uintN_y; crypto_uintN_x = crypto_uintN_y if unsigned>");
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_x - crypto_uintN_y; crypto_uintN_x = crypto_uintN_y if unsigned>");
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_x - crypto_uintN_y; crypto_uintN_x = crypto_uintN_y if unsigned>");
return crypto_uintN_x;
#elif arm64
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y; crypto_uintN_x = (uint8) crypto_uintN_x; crypto_uintN_x - (uint8) crypto_uintN_y; crypto_uintN_x = crypto_uintN_x if unsigned< else crypto_uintN_y");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_x = (uint16) crypto_uintN_x; crypto_uintN_x - (uint16) crypto_uintN_y; crypto_uintN_x = crypto_uintN_x if unsigned< else crypto_uintN_y");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_x - crypto_uintN_y; crypto_uintN_x = crypto_uintN_x if unsigned< else crypto_uintN_y");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_x - crypto_uintN_y; crypto_uintN_x = crypto_uintN_x if unsigned< else crypto_uintN_y");
return crypto_uintN_x;
#else
crypto_uintN crypto_uintN_r = crypto_uintN_y ^ crypto_uintN_x;
crypto_uintN crypto_uintN_z = crypto_uintN_y - crypto_uintN_x;
crypto_uintN_z ^= crypto_uintN_r & (crypto_uintN_z ^ crypto_uintN_y ^ (((crypto_uintN) 1) << (N-1)));
crypto_uintN_z = crypto_uintN_signed_negative_mask(crypto_uintN_z);
crypto_uintN_z &= crypto_uintN_r;
return crypto_uintN_x ^ crypto_uintN_z;
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_max(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_y) {
#if amd64
8: uint32_t crypto_uintN_x32 = crypto_uintN_x,crypto_uintN_y32 = crypto_uintN_y;
8: readasm("amd64; int32 crypto_uintN_x32 crypto_uintN_y32; crypto_uintN_x32 - (int8) crypto_uintN_y32; crypto_uintN_x32 = crypto_uintN_y32 if unsigned<");
8: crypto_uintN_x = crypto_uintN_x32;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_x - crypto_uintN_y; crypto_uintN_x = crypto_uintN_y if unsigned<");
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_x - crypto_uintN_y; crypto_uintN_x = crypto_uintN_y if unsigned<");
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_x - crypto_uintN_y; crypto_uintN_x = crypto_uintN_y if unsigned<");
return crypto_uintN_x;
#elif arm64
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y; crypto_uintN_x = (uint8) crypto_uintN_x; crypto_uintN_x - (uint8) crypto_uintN_y; crypto_uintN_x = crypto_uintN_y if unsigned< else crypto_uintN_x");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_x = (uint16) crypto_uintN_x; crypto_uintN_x - (uint16) crypto_uintN_y; crypto_uintN_x = crypto_uintN_y if unsigned< else crypto_uintN_x");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_x - crypto_uintN_y; crypto_uintN_x = crypto_uintN_y if unsigned< else crypto_uintN_x");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_x - crypto_uintN_y; crypto_uintN_x = crypto_uintN_y if unsigned< else crypto_uintN_x");
return crypto_uintN_x;
#else
crypto_uintN crypto_uintN_r = crypto_uintN_y ^ crypto_uintN_x;
crypto_uintN crypto_uintN_z = crypto_uintN_y - crypto_uintN_x;
crypto_uintN_z ^= crypto_uintN_r & (crypto_uintN_z ^ crypto_uintN_y ^ (((crypto_uintN) 1) << (N-1)));
crypto_uintN_z = crypto_uintN_signed_negative_mask(crypto_uintN_z);
crypto_uintN_z &= crypto_uintN_r;
return crypto_uintN_y ^ crypto_uintN_z;
#endif
}
__attribute__((unused))
static inline
void crypto_uintN_minmax(crypto_uintN *crypto_uintN_p,crypto_uintN *crypto_uintN_q) {
crypto_uintN crypto_uintN_x = *crypto_uintN_p;
crypto_uintN crypto_uintN_y = *crypto_uintN_q;
#if amd64
8: uint32_t crypto_uintN_x32 = crypto_uintN_x,crypto_uintN_y32 = crypto_uintN_y,crypto_uintN_z32;
8: readasm("amd64; int32 crypto_uintN_x32 crypto_uintN_y32 crypto_uintN_z32; crypto_uintN_x32 - (int8) crypto_uintN_y32; crypto_uintN_z32 = crypto_uintN_x32; crypto_uintN_x32 = crypto_uintN_y32 if unsigned>; crypto_uintN_y32 = crypto_uintN_z32 if unsigned>");
8: crypto_uintN_x = crypto_uintN_x32; crypto_uintN_y = crypto_uintN_y32;
16: crypto_uintN crypto_uintN_z;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_x; crypto_uintN_x = crypto_uintN_y if unsigned>; crypto_uintN_y = crypto_uintN_z if unsigned>");
32: crypto_uintN crypto_uintN_z;
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_x; crypto_uintN_x = crypto_uintN_y if unsigned>; crypto_uintN_y = crypto_uintN_z if unsigned>");
64: crypto_uintN crypto_uintN_z;
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_x; crypto_uintN_x = crypto_uintN_y if unsigned>; crypto_uintN_y = crypto_uintN_z if unsigned>");
*crypto_uintN_p = crypto_uintN_x;
*crypto_uintN_q = crypto_uintN_y;
#elif arm64
crypto_uintN crypto_uintN_r, crypto_uintN_s;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y crypto_uintN_r crypto_uintN_s; crypto_uintN_x = (uint8) crypto_uintN_x; crypto_uintN_x - (uint8) crypto_uintN_y; crypto_uintN_r = crypto_uintN_x if unsigned< else crypto_uintN_y; crypto_uintN_s = crypto_uintN_y if unsigned< else crypto_uintN_x");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y crypto_uintN_r crypto_uintN_s; crypto_uintN_x = (uint16) crypto_uintN_x; crypto_uintN_x - (uint16) crypto_uintN_y; crypto_uintN_r = crypto_uintN_x if unsigned< else crypto_uintN_y; crypto_uintN_s = crypto_uintN_y if unsigned< else crypto_uintN_x");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y crypto_uintN_r crypto_uintN_s; crypto_uintN_x - crypto_uintN_y; crypto_uintN_r = crypto_uintN_x if unsigned< else crypto_uintN_y; crypto_uintN_s = crypto_uintN_y if unsigned< else crypto_uintN_x");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y crypto_uintN_r crypto_uintN_s; crypto_uintN_x - crypto_uintN_y; crypto_uintN_r = crypto_uintN_x if unsigned< else crypto_uintN_y; crypto_uintN_s = crypto_uintN_y if unsigned< else crypto_uintN_x");
*crypto_uintN_p = crypto_uintN_r;
*crypto_uintN_q = crypto_uintN_s;
#else
crypto_uintN crypto_uintN_r = crypto_uintN_y ^ crypto_uintN_x;
crypto_uintN crypto_uintN_z = crypto_uintN_y - crypto_uintN_x;
crypto_uintN_z ^= crypto_uintN_r & (crypto_uintN_z ^ crypto_uintN_y ^ (((crypto_uintN) 1) << (N-1)));
crypto_uintN_z = crypto_uintN_signed_negative_mask(crypto_uintN_z);
crypto_uintN_z &= crypto_uintN_r;
crypto_uintN_x ^= crypto_uintN_z;
crypto_uintN_y ^= crypto_uintN_z;
*crypto_uintN_p = crypto_uintN_x;
*crypto_uintN_q = crypto_uintN_y;
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_smaller_mask(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_y) {
#if amd64
8: crypto_uintN crypto_uintN_z;
8: int32_t crypto_uintN_x32 = crypto_uintN_x,crypto_uintN_y32 = crypto_uintN_y,crypto_uintN_q32,crypto_uintN_z32;
8: readasm("amd64; int32 crypto_uintN_x32 crypto_uintN_q32 crypto_uintN_y32 crypto_uintN_z32; crypto_uintN_z32 = 0; crypto_uintN_q32 = -1; crypto_uintN_x32 - (int8) crypto_uintN_y32; crypto_uintN_z32 = crypto_uintN_q32 if unsigned<");
8: crypto_uintN_z = crypto_uintN_z32;
16: crypto_uintN crypto_uintN_q,crypto_uintN_z;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if unsigned<");
32: crypto_uintN crypto_uintN_q,crypto_uintN_z;
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if unsigned<");
64: crypto_uintN crypto_uintN_q,crypto_uintN_z;
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if unsigned<");
return crypto_uintN_z;
#elif arm64
crypto_uintN crypto_uintN_z;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint8) crypto_uintN_x; crypto_uintN_z - (uint8) crypto_uintN_y; crypto_uintN_z = -1 if unsigned< else 0");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint16) crypto_uintN_x; crypto_uintN_z - (uint16) crypto_uintN_y; crypto_uintN_z = -1 if unsigned< else 0");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = -1 if unsigned< else 0");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = -1 if unsigned< else 0");
return crypto_uintN_z;
#else
crypto_uintN crypto_uintN_r = crypto_uintN_x ^ crypto_uintN_y;
crypto_uintN crypto_uintN_z = crypto_uintN_x - crypto_uintN_y;
crypto_uintN_z ^= crypto_uintN_r & (crypto_uintN_z ^ crypto_uintN_x ^ (((crypto_uintN) 1) << (N-1)));
return crypto_uintN_signed_negative_mask(crypto_uintN_z);
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_smaller_01(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_y) {
#if amd64
8: crypto_uintN crypto_uintN_z;
8: int32_t crypto_uintN_x32 = crypto_uintN_x,crypto_uintN_y32 = crypto_uintN_y,crypto_uintN_q32,crypto_uintN_z32;
8: readasm("amd64; int32 crypto_uintN_x32 crypto_uintN_q32 crypto_uintN_y32 crypto_uintN_z32; crypto_uintN_z32 = 0; crypto_uintN_q32 = 1; crypto_uintN_x32 - (int8) crypto_uintN_y32; crypto_uintN_z32 = crypto_uintN_q32 if unsigned<");
8: crypto_uintN_z = crypto_uintN_z32;
16: crypto_uintN crypto_uintN_q,crypto_uintN_z;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if unsigned<");
32: crypto_uintN crypto_uintN_q,crypto_uintN_z;
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if unsigned<");
64: crypto_uintN crypto_uintN_q,crypto_uintN_z;
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if unsigned<");
return crypto_uintN_z;
#elif arm64
crypto_uintN crypto_uintN_z;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint8) crypto_uintN_x; crypto_uintN_z - (uint8) crypto_uintN_y; crypto_uintN_z = 1 if unsigned< else 0");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint16) crypto_uintN_x; crypto_uintN_z - (uint16) crypto_uintN_y; crypto_uintN_z = 1 if unsigned< else 0");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = 1 if unsigned< else 0");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = 1 if unsigned< else 0");
return crypto_uintN_z;
#else
crypto_uintN crypto_uintN_r = crypto_uintN_x ^ crypto_uintN_y;
crypto_uintN crypto_uintN_z = crypto_uintN_x - crypto_uintN_y;
crypto_uintN_z ^= crypto_uintN_r & (crypto_uintN_z ^ crypto_uintN_x ^ (((crypto_uintN) 1) << (N-1)));
return crypto_uintN_topbit_01(crypto_uintN_z);
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_leq_mask(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_y) {
#if amd64
8: crypto_uintN crypto_uintN_z;
8: int32_t crypto_uintN_x32 = crypto_uintN_x,crypto_uintN_y32 = crypto_uintN_y,crypto_uintN_q32,crypto_uintN_z32;
8: readasm("amd64; int32 crypto_uintN_x32 crypto_uintN_q32 crypto_uintN_y32 crypto_uintN_z32; crypto_uintN_z32 = 0; crypto_uintN_q32 = -1; crypto_uintN_x32 - (int8) crypto_uintN_y32; crypto_uintN_z32 = crypto_uintN_q32 if unsigned<=");
8: crypto_uintN_z = crypto_uintN_z32;
16: crypto_uintN crypto_uintN_q,crypto_uintN_z;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if unsigned<=");
32: crypto_uintN crypto_uintN_q,crypto_uintN_z;
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if unsigned<=");
64: crypto_uintN crypto_uintN_q,crypto_uintN_z;
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = -1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if unsigned<=");
return crypto_uintN_z;
#elif arm64
crypto_uintN crypto_uintN_z;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint8) crypto_uintN_x; crypto_uintN_z - (uint8) crypto_uintN_y; crypto_uintN_z = -1 if unsigned<= else 0");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint16) crypto_uintN_x; crypto_uintN_z - (uint16) crypto_uintN_y; crypto_uintN_z = -1 if unsigned<= else 0");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = -1 if unsigned<= else 0");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = -1 if unsigned<= else 0");
return crypto_uintN_z;
#else
return ~crypto_uintN_smaller_mask(crypto_uintN_y,crypto_uintN_x);
#endif
}
__attribute__((unused))
static inline
crypto_uintN crypto_uintN_leq_01(crypto_uintN crypto_uintN_x,crypto_uintN crypto_uintN_y) {
#if amd64
8: crypto_uintN crypto_uintN_z;
8: int32_t crypto_uintN_x32 = crypto_uintN_x,crypto_uintN_y32 = crypto_uintN_y,crypto_uintN_q32,crypto_uintN_z32;
8: readasm("amd64; int32 crypto_uintN_x32 crypto_uintN_q32 crypto_uintN_y32 crypto_uintN_z32; crypto_uintN_z32 = 0; crypto_uintN_q32 = 1; crypto_uintN_x32 - (int8) crypto_uintN_y32; crypto_uintN_z32 = crypto_uintN_q32 if unsigned<=");
8: crypto_uintN_z = crypto_uintN_z32;
16: crypto_uintN crypto_uintN_q,crypto_uintN_z;
16: readasm("amd64; int16 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if unsigned<=");
32: crypto_uintN crypto_uintN_q,crypto_uintN_z;
32: readasm("amd64; int32 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if unsigned<=");
64: crypto_uintN crypto_uintN_q,crypto_uintN_z;
64: readasm("amd64; int64 crypto_uintN_x crypto_uintN_q crypto_uintN_y crypto_uintN_z; crypto_uintN_z = 0; crypto_uintN_q = 1; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = crypto_uintN_q if unsigned<=");
return crypto_uintN_z;
#elif arm64
crypto_uintN crypto_uintN_z;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint8) crypto_uintN_x; crypto_uintN_z - (uint8) crypto_uintN_y; crypto_uintN_z = 1 if unsigned<= else 0");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_z = (uint16) crypto_uintN_x; crypto_uintN_z - (uint16) crypto_uintN_y; crypto_uintN_z = 1 if unsigned<= else 0");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = 1 if unsigned<= else 0");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y crypto_uintN_z; crypto_uintN_x - crypto_uintN_y; crypto_uintN_z = 1 if unsigned<= else 0");
return crypto_uintN_z;
#else
return 1-crypto_uintN_smaller_01(crypto_uintN_y,crypto_uintN_x);
#endif
}
__attribute__((unused))
static inline
int crypto_uintN_ones_num(crypto_uintN crypto_uintN_x) {
crypto_uintN crypto_uintN_y = crypto_uintN_x;
8: const crypto_uintN C0 = 0x55;
16: const crypto_uintN C0 = 0x5555;
32: const crypto_uintN C0 = 0x55555555;
64: const crypto_uintN C0 = 0x5555555555555555;
8: const crypto_uintN C1 = 0x33;
16: const crypto_uintN C1 = 0x3333;
32: const crypto_uintN C1 = 0x33333333;
64: const crypto_uintN C1 = 0x3333333333333333;
8: const crypto_uintN C2 = 0x0f;
16: const crypto_uintN C2 = 0x0f0f;
32: const crypto_uintN C2 = 0x0f0f0f0f;
64: const crypto_uintN C2 = 0x0f0f0f0f0f0f0f0f;
crypto_uintN_y -= ((crypto_uintN_y >> 1) & C0);
crypto_uintN_y = (crypto_uintN_y & C1) + ((crypto_uintN_y >> 2) & C1);
crypto_uintN_y = (crypto_uintN_y + (crypto_uintN_y >> 4)) & C2;
16: crypto_uintN_y = (crypto_uintN_y + (crypto_uintN_y >> 8)) & 0xff;
32: crypto_uintN_y += crypto_uintN_y >> 8;
32: crypto_uintN_y = (crypto_uintN_y + (crypto_uintN_y >> 16)) & 0xff;
64: crypto_uintN_y += crypto_uintN_y >> 8;
64: crypto_uintN_y += crypto_uintN_y >> 16;
64: crypto_uintN_y = (crypto_uintN_y + (crypto_uintN_y >> 32)) & 0xff;
return crypto_uintN_y;
}
__attribute__((unused))
static inline
int crypto_uintN_bottomzeros_num(crypto_uintN crypto_uintN_x) {
#if amd64
8: int32_t fallback = N;
8: int32_t crypto_uintN_x32 = crypto_uintN_x;
8: readasm("amd64; int32 crypto_uintN_x32 fallback; crypto_uintN_x32 = numbottomzeros_tricky crypto_uintN_x32; crypto_uintN_x32 = fallback if =");
8: crypto_uintN_x = crypto_uintN_x32;
16: crypto_uintN fallback = N;
16: readasm("amd64; int16 crypto_uintN_x fallback; crypto_uintN_x = numbottomzeros_tricky crypto_uintN_x; crypto_uintN_x = fallback if =");
32: crypto_uintN fallback = N;
32: readasm("amd64; int32 crypto_uintN_x fallback; crypto_uintN_x = numbottomzeros_tricky crypto_uintN_x; crypto_uintN_x = fallback if =");
64: crypto_uintN fallback = N;
64: readasm("amd64; int64 crypto_uintN_x fallback; crypto_uintN_x = numbottomzeros_tricky crypto_uintN_x; crypto_uintN_x = fallback if =");
return crypto_uintN_x;
#elif arm64
int64_t crypto_uintN_y;
8: readasm("arm64; int8 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x | -256; crypto_uintN_y = bitrev32 crypto_uintN_y; crypto_uintN_y = numbottomzeros crypto_uintN_y");
16: readasm("arm64; int16 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = crypto_uintN_x | -65536; crypto_uintN_y = bitrev32 crypto_uintN_y; crypto_uintN_y = numbottomzeros crypto_uintN_y");
32: readasm("arm64; int32 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = bitrev32 crypto_uintN_x; crypto_uintN_y = numbottomzeros crypto_uintN_y");
64: readasm("arm64; int64 crypto_uintN_x crypto_uintN_y; crypto_uintN_y = bitrev64 crypto_uintN_x; crypto_uintN_y = numbottomzeros crypto_uintN_y");
return crypto_uintN_y;
#else
crypto_uintN crypto_uintN_y = crypto_uintN_x ^ (crypto_uintN_x-1);
crypto_uintN_y = ((crypto_uintN_signed) crypto_uintN_y) >> 1;
crypto_uintN_y &= ~(crypto_uintN_x & (((crypto_uintN) 1) << (N-1)));
return crypto_uintN_ones_num(crypto_uintN_y);
#endif
}
#endif
tinyssh-20250501/cryptoint/functions 0000664 0000000 0000000 00000132234 15004722224 0017444 0 ustar 00root root 0000000 0000000 TYPE TYPE_load(const unsigned char *S) {
TYPE Z = 0;
int K;
for (K = 0;K < N;K += 8)
Z |= ((TYPE) (*S++)) << K;
return Z;
}
TYPE TYPE_load_bigendian(const unsigned char *S) {
TYPE Z = 0;
int K;
for (K = N - 8;K >= 0;K -= 8)
Z |= ((TYPE) (*S++)) << K;
return Z;
}
void TYPE_store(unsigned char *S,TYPE X) {
int K;
for (K = 0;K < N;K += 8)
*S++ = X >> K;
}
void TYPE_store_bigendian(unsigned char *S,TYPE X) {
int K;
for (K = N - 8;K >= 0;K -= 8)
*S++ = X >> K;
}
SIGNED SIGNED_negative_mask(SIGNED X) {
#if amd64
8: readasm("amd64; int8 X; X signed>>= 7");
16: readasm("amd64; int16 X; X signed>>= 15");
32: readasm("amd64; int32 X; X signed>>= 31");
64: readasm("amd64; int64 X; X signed>>= 63");
return X;
#elif arm64
SIGNED Y;
8: readasm("arm64; int8 X Y; Y = -(1 & (X unsigned>> 7))");
16: readasm("arm64; int16 X Y; Y = -(1 & (X unsigned>> 15))");
32: readasm("arm64; int32 X Y; Y = X signed>> 31");
64: readasm("arm64; int64 X Y; Y = X signed>> 63");
return Y;
#elif arm32
SIGNED Y;
8: readasm("arm32; int8 X Y; Y = (int8) X; Y = Y signed>> 31");
16: readasm("arm32; int16 X Y; Y = (int16) X; Y = Y signed>> 31");
32: readasm("arm32; int32 X Y; Y = X signed>> 31");
64: readasm("arm32; int64 X Y; Y.lo = X.hi signed>> 31; Y.hi = Y.lo");
return Y;
#elif sparc32
SIGNED Y;
8: readasm("sparc32; int8 X Y; Y = X << 24; Y = Y signed>> 31");
16: readasm("sparc32; int16 X Y; Y = X << 16; Y = Y signed>> 31");
32: readasm("sparc32; int32 X Y; Y = X signed>> 31");
64: readasm("sparc32; int64 X Y; Y.lo = X.hi signed>> 31; Y.hi = Y.lo");
return Y;
#else
X >>= N-6;
X += SIGNED_optblocker;
X >>= 5;
return X;
#endif
}
UNSIGNED UNSIGNED_topbit_01(UNSIGNED X) {
#if amd64
8: readasm("amd64; int8 X; X unsigned>>= 7");
16: readasm("amd64; int16 X; X unsigned>>= 15");
32: readasm("amd64; int32 X; X unsigned>>= 31");
64: readasm("amd64; int64 X; X unsigned>>= 63");
return X;
#elif arm64
UNSIGNED Y;
8: readasm("arm64; int8 X Y; Y = 1 & (X unsigned>> 7)");
16: readasm("arm64; int16 X Y; Y = 1 & (X unsigned>> 15)");
32: readasm("arm64; int32 X Y; Y = X unsigned>> 31");
64: readasm("arm64; int64 X Y; Y = X unsigned>> 63");
return Y;
#elif arm32
SIGNED Y;
8: readasm("arm32; int8 X Y; Y = (uint8) X; Y = Y unsigned>> 7");
16: readasm("arm32; int16 X Y; Y = (uint16) X; Y = Y unsigned>> 15");
32: readasm("arm32; int32 X Y; Y = X unsigned>> 31");
64: readasm("arm32; int64 X Y; Y.lo = X.hi unsigned>> 31; Y.hi = 0");
return Y;
#elif sparc32
UNSIGNED Y;
8: readasm("sparc32; int8 X Y; Y = (uint8) X; Y = Y unsigned>> 7");
16: readasm("sparc32; int16 X Y; Y = (uint16) X; Y = Y unsigned>> 15");
32: readasm("sparc32; int32 X Y; Y = X unsigned>> 31");
64: readasm("sparc32; int64 X Y; Y.lo = X.hi unsigned>> 31; Y.hi = 0");
return Y;
#else
X >>= N-6;
X += SIGNED_optblocker;
X >>= 5;
return X;
#endif
}
SIGNED:
TYPE TYPE_negative_01(TYPE X) {
return UNSIGNED_topbit_01(X);
}
SIGNED:
TYPE TYPE_topbit_mask(TYPE X) {
return SIGNED_negative_mask(X);
}
SIGNED:
TYPE TYPE_topbit_01(TYPE X) {
return UNSIGNED_topbit_01(X);
}
UNSIGNED:
TYPE TYPE_topbit_mask(TYPE X) {
return SIGNED_negative_mask(X);
}
SIGNED:
TYPE TYPE_bottombit_mask(TYPE X) {
#if amd64
8: readasm("amd64; int8 X; X &= 1");
16: readasm("amd64; int16 X; X &= 1");
32: readasm("amd64; int32 X; X &= 1");
64: readasm("amd64; int64 X; X &= 1");
return -X;
#elif arm64
TYPE Y;
8: readasm("arm64; int8 X Y; Y = -(1 & (X unsigned>> 0))");
16: readasm("arm64; int16 X Y; Y = -(1 & (X unsigned>> 0))");
32: readasm("arm64; int32 X Y; Y = -(1 & (X unsigned>> 0))");
64: readasm("arm64; int64 X Y; Y = -(1 & (X unsigned>> 0))");
return Y;
#elif arm32
TYPE Y;
8: readasm("arm32; int8 X Y; Y = X & 1; Y = -Y");
16: readasm("arm32; int16 X Y; Y = X & 1; Y = -Y");
32: readasm("arm32; int32 X Y; Y = X & 1; Y = -Y");
64: readasm("arm32; int64 X Y; Y.lo = X.lo & 1; Y.lo = -Y.lo; Y.hi = Y.lo");
return Y;
#elif sparc32
TYPE Y;
8: readasm("sparc32; int8 X Y; Y = X & 1; Y = -Y");
16: readasm("sparc32; int16 X Y; Y = X & 1; Y = -Y");
32: readasm("sparc32; int32 X Y; Y = X & 1; Y = -Y");
64: readasm("sparc32; int64 X Y; Y.lo = X.lo & 1; Y.lo = -Y.lo; Y.hi = Y.lo");
return Y;
#else
X &= 1 + SIGNED_optblocker;
return -X;
#endif
}
UNSIGNED:
TYPE TYPE_bottombit_mask(TYPE X) {
#if amd64
8: readasm("amd64; int8 X; X &= 1");
16: readasm("amd64; int16 X; X &= 1");
32: readasm("amd64; int32 X; X &= 1");
64: readasm("amd64; int64 X; X &= 1");
return -X;
#elif arm64
TYPE Y;
8: readasm("arm64; int8 X Y; Y = -(1 & (X unsigned>> 0))");
16: readasm("arm64; int16 X Y; Y = -(1 & (X unsigned>> 0))");
32: readasm("arm64; int32 X Y; Y = -(1 & (X unsigned>> 0))");
64: readasm("arm64; int64 X Y; Y = -(1 & (X unsigned>> 0))");
return Y;
#elif arm32
TYPE Y;
8: readasm("arm32; int8 X Y; Y = X & 1; Y = -Y; Y = (uint8) Y");
16: readasm("arm32; int16 X Y; Y = X & 1; Y = -Y; Y = (uint16) Y");
32: readasm("arm32; int32 X Y; Y = X & 1; Y = -Y");
64: readasm("arm32; int64 X Y; Y.lo = X.lo & 1; Y.lo = -Y.lo; Y.hi = Y.lo");
return Y;
#elif sparc32
TYPE Y;
8: readasm("sparc32; int8 X Y; Y = X & 1; Y = -Y; Y = (uint8) Y");
16: readasm("sparc32; int16 X Y; Y = X & 1; Y = -Y; Y = (uint16) Y");
32: readasm("sparc32; int32 X Y; Y = X & 1; Y = -Y");
64: readasm("sparc32; int64 X Y; Y.lo = X.lo & 1; Y.lo = -Y.lo; Y.hi = Y.lo");
return Y;
#else
X &= 1 + SIGNED_optblocker;
return -X;
#endif
}
TYPE TYPE_bottombit_01(TYPE X) {
#if amd64
8: readasm("amd64; int8 X; X &= 1");
16: readasm("amd64; int16 X; X &= 1");
32: readasm("amd64; int32 X; X &= 1");
64: readasm("amd64; int64 X; X &= 1");
return X;
#elif arm64
TYPE Y;
8: readasm("arm64; int8 X Y; Y = 1 & (X unsigned>> 0)");
16: readasm("arm64; int16 X Y; Y = 1 & (X unsigned>> 0)");
32: readasm("arm64; int32 X Y; Y = 1 & (X unsigned>> 0)");
64: readasm("arm64; int64 X Y; Y = 1 & (X unsigned>> 0)");
return Y;
#elif arm32
TYPE Y;
8: readasm("arm32; int8 X Y; Y = X & 1");
16: readasm("arm32; int16 X Y; Y = X & 1");
32: readasm("arm32; int32 X Y; Y = X & 1");
64: readasm("arm32; int64 X Y; Y.lo = X.lo & 1; Y.hi = 0");
return Y;
#elif sparc32
TYPE Y;
8: readasm("sparc32; int8 X Y; Y = X & 1");
16: readasm("sparc32; int16 X Y; Y = X & 1");
32: readasm("sparc32; int32 X Y; Y = X & 1");
64: readasm("sparc32; int64 X Y; Y.lo = X.lo & 1; Y.hi = 0");
return Y;
#else
X &= 1 + SIGNED_optblocker;
return X;
#endif
}
SIGNED:
TYPE TYPE_bitinrangepublicpos_mask(TYPE X,TYPE S) {
#if amd64
8: readasm("amd64; int8 X S; X signed>>= S");
16: readasm("amd64; int16 X S; X signed>>= S");
32: readasm("amd64; int32 X S; X signed>>= S");
64: readasm("amd64; int64 X S; X signed>>= S");
#elif arm64
8: readasm("arm64; int8 X S; X = (int8) X; X = X signed>> S");
16: readasm("arm64; int16 X S; X = (int16) X; X = X signed>> S");
32: readasm("arm64; int32 X S; X = X signed>> S");
64: readasm("arm64; int64 X S; X = X signed>> S");
#elif arm32
8: readasm("arm32; int8 X S; S = S & 7; X = (int8) X; X = X signed>> S");
16: readasm("arm32; int16 X S; S = S & 15; X = (int16) X; X = X signed>> S");
32: readasm("arm32; int32 X S; S = S & 31; X = X signed>> S");
64: readasm("arm32; int64 X S; S.lo = S.lo & 63; X.lo = X.lo unsigned>> S.lo; S.hi = 32 - S.lo; X.lo = X.lo | (X.hi << S.hi); flags, S.hi = S.lo - 32; X.lo = X.lo | (X.hi signed>> S.hi) if unsigned>=; X.hi = X.hi signed>> S.lo");
#elif sparc32
8: readasm("sparc32; int8 X S; S = S & 7; X = X signed>> S");
16: readasm("sparc32; int16 X S; S = S & 15; X = X signed>> S");
32: readasm("sparc32; int32 X S; X = X signed>> S");
64: TYPE Y, Z;
64: readasm("sparc32; int64 X Y Z S; S.hi = ~S.lo; Z.hi = S.lo << 26; Z.lo = X.hi << 1; Y.lo = X.lo unsigned>> S.lo; Z.lo = Z.lo << S.hi; Y.hi = X.hi signed>> S.lo; Z.hi = Z.hi signed>> 31; Y.lo = Y.lo | Z.lo; Z.lo = Y.lo ^ Y.hi; Z.lo = Z.hi & Z.lo; X.hi = Y.hi signed>> Z.hi; X.lo = Y.lo ^ Z.lo");
#else
X >>= S ^ SIGNED_optblocker;
#endif
return TYPE_bottombit_mask(X);
}
SIGNED:
TYPE TYPE_bitinrangepublicpos_01(TYPE X,TYPE S) {
#if amd64
8: readasm("amd64; int8 X S; X signed>>= S");
16: readasm("amd64; int16 X S; X signed>>= S");
32: readasm("amd64; int32 X S; X signed>>= S");
64: readasm("amd64; int64 X S; X signed>>= S");
#elif arm64
8: readasm("arm64; int8 X S; X = (int8) X; X = X signed>> S");
16: readasm("arm64; int16 X S; X = (int16) X; X = X signed>> S");
32: readasm("arm64; int32 X S; X = X signed>> S");
64: readasm("arm64; int64 X S; X = X signed>> S");
#elif arm32
8: readasm("arm32; int8 X S; S = S & 7; X = (int8) X; X = X signed>> S");
16: readasm("arm32; int16 X S; S = S & 15; X = (int16) X; X = X signed>> S");
32: readasm("arm32; int32 X S; S = S & 31; X = X signed>> S");
64: readasm("arm32; int64 X S; S.lo = S.lo & 63; X.lo = X.lo unsigned>> S.lo; S.hi = 32 - S.lo; X.lo = X.lo | (X.hi << S.hi); flags, S.hi = S.lo - 32; X.lo = X.lo | (X.hi signed>> S.hi) if unsigned>=; X.hi = X.hi signed>> S.lo");
#elif sparc32
8: readasm("sparc32; int8 X S; S = S & 7; X = X signed>> S");
16: readasm("sparc32; int16 X S; S = S & 15; X = X signed>> S");
32: readasm("sparc32; int32 X S; X = X signed>> S");
64: TYPE Y, Z;
64: readasm("sparc32; int64 X Y Z S; S.hi = ~S.lo; Z.hi = S.lo << 26; Z.lo = X.hi << 1; Y.lo = X.lo unsigned>> S.lo; Z.lo = Z.lo << S.hi; Y.hi = X.hi signed>> S.lo; Z.hi = Z.hi signed>> 31; Y.lo = Y.lo | Z.lo; Z.lo = Y.lo ^ Y.hi; Z.lo = Z.hi & Z.lo; X.hi = Y.hi signed>> Z.hi; X.lo = Y.lo ^ Z.lo");
#else
X >>= S ^ SIGNED_optblocker;
#endif
return TYPE_bottombit_01(X);
}
UNSIGNED:
TYPE TYPE_bitinrangepublicpos_mask(TYPE X,TYPE S) {
#if amd64
8: readasm("amd64; int8 X S; X unsigned>>= S");
16: readasm("amd64; int16 X S; X unsigned>>= S");
32: readasm("amd64; int32 X S; X unsigned>>= S");
64: readasm("amd64; int64 X S; X unsigned>>= S");
#elif arm64
8: readasm("arm64; int8 X S; X = (uint8) X; X = X unsigned>> S");
16: readasm("arm64; int16 X S; X = (uint16) X; X = X unsigned>> S");
32: readasm("arm64; int32 X S; X = X unsigned>> S");
64: readasm("arm64; int64 X S; X = X unsigned>> S");
#elif arm32
8: readasm("arm32; int8 X S; S = S & 7; X = (uint8) X; X = X unsigned>> S");
16: readasm("arm32; int16 X S; S = S & 15; X = (uint16) X; X = X unsigned>> S");
32: readasm("arm32; int32 X S; S = S & 31; X = X unsigned>> S");
64: readasm("arm32; int64 X S; S.lo = S.lo & 63; X.lo = X.lo unsigned>> S.lo; S.hi = 32 - S.lo; X.lo = X.lo | (X.hi << S.hi); S.hi = S.lo - 32; X.lo = X.lo | (X.hi unsigned>> S.hi); X.hi = X.hi unsigned>> S.lo");
#elif sparc32
8: readasm("sparc32; int8 X S; S = S & 7; X = X unsigned>> S");
16: readasm("sparc32; int16 X S; S = S & 15; X = X unsigned>> S");
32: readasm("sparc32; int32 X S; X = X unsigned>> S");
64: TYPE Y, Z;
64: readasm("sparc32; int64 X Y Z S; S.hi = ~S.lo; Z.hi = S.lo << 26; Z.lo = X.hi << 1; Y.lo = X.lo unsigned>> S.lo; Z.lo = Z.lo << S.hi; Y.hi = X.hi unsigned>> S.lo; Z.hi = Z.hi signed>> 31; Y.lo = Y.lo | Z.lo; Z.lo = Y.lo ^ Y.hi; X.hi = Z.hi & Y.hi; Z.lo = Z.hi & Z.lo; X.hi = X.hi ^ Y.hi; X.lo = Y.lo ^ Z.lo");
#else
X >>= S ^ SIGNED_optblocker;
#endif
return TYPE_bottombit_mask(X);
}
UNSIGNED:
TYPE TYPE_bitinrangepublicpos_01(TYPE X,TYPE S) {
#if amd64
8: readasm("amd64; int8 X S; X unsigned>>= S");
16: readasm("amd64; int16 X S; X unsigned>>= S");
32: readasm("amd64; int32 X S; X unsigned>>= S");
64: readasm("amd64; int64 X S; X unsigned>>= S");
#elif arm64
8: readasm("arm64; int8 X S; X = (uint8) X; X = X unsigned>> S");
16: readasm("arm64; int16 X S; X = (uint16) X; X = X unsigned>> S");
32: readasm("arm64; int32 X S; X = X unsigned>> S");
64: readasm("arm64; int64 X S; X = X unsigned>> S");
#elif arm32
8: readasm("arm32; int8 X S; S = S & 7; X = (uint8) X; X = X unsigned>> S");
16: readasm("arm32; int16 X S; S = S & 15; X = (uint16) X; X = X unsigned>> S");
32: readasm("arm32; int32 X S; S = S & 31; X = X unsigned>> S");
64: readasm("arm32; int64 X S; S.lo = S.lo & 63; X.lo = X.lo unsigned>> S.lo; S.hi = 32 - S.lo; X.lo = X.lo | (X.hi << S.hi); S.hi = S.lo - 32; X.lo = X.lo | (X.hi unsigned>> S.hi); X.hi = X.hi unsigned>> S.lo");
#elif sparc32
8: readasm("sparc32; int8 X S; S = S & 7; X = X unsigned>> S");
16: readasm("sparc32; int16 X S; S = S & 15; X = X unsigned>> S");
32: readasm("sparc32; int32 X S; X = X unsigned>> S");
64: TYPE Y, Z;
64: readasm("sparc32; int64 X Y Z S; S.hi = ~S.lo; Z.hi = S.lo << 26; Z.lo = X.hi << 1; Y.lo = X.lo unsigned>> S.lo; Z.lo = Z.lo << S.hi; Y.hi = X.hi unsigned>> S.lo; Z.hi = Z.hi signed>> 31; Y.lo = Y.lo | Z.lo; Z.lo = Y.lo ^ Y.hi; X.hi = Z.hi & Y.hi; Z.lo = Z.hi & Z.lo; X.hi = X.hi ^ Y.hi; X.lo = Y.lo ^ Z.lo");
#else
X >>= S ^ SIGNED_optblocker;
#endif
return TYPE_bottombit_01(X);
}
SIGNED:
TYPE TYPE_shlmod(TYPE X,TYPE S) {
#if amd64
8: S &= 7;
8: readasm("amd64; int8 X S; X <<= S");
16: S &= 15;
16: readasm("amd64; int16 X S; X <<= S");
32: readasm("amd64; int32 X S; X <<= S");
64: readasm("amd64; int64 X S; X <<= S");
#elif arm64
8: S &= 7;
8: readasm("arm64; int8 X S; X = (uint8) X; X = X << S");
16: S &= 15;
16: readasm("arm64; int16 X S; X = (uint16) X; X = X << S");
32: readasm("arm64; int32 X S; X = X << S");
64: readasm("arm64; int64 X S; X = X << S");
#elif arm32
8: S &= 7;
8: readasm("arm32; int8 X S; X = X << S; X = (int8) X");
16: S &= 15;
16: readasm("arm32; int16 X S; X = X << S; X = (int16) X");
32: S &= 31;
32: readasm("arm32; int32 X S; X = X << S");
64: readasm("arm32; int64 X S; S.lo = S.lo & 63; X.hi = X.hi << S.lo; S.hi = S.lo - 32; X.hi = X.hi | (X.lo << S.hi); S.hi = 32 - S.lo; X.hi = X.hi | (X.lo unsigned>> S.hi); X.lo = X.lo << S.lo");
#elif sparc32
8: S &= 7; S += 24;
8: readasm("sparc32; int8 X S; X = X << S; X = X signed>> 24");
16: S &= 15; S += 16;
16: readasm("sparc32; int16 X S; X = X << S; X = X signed>> 16");
32: readasm("sparc32; int32 X S; X = X << S");
64: TYPE Y, Z;
64: readasm("sparc32; int64 X Y Z S; S.hi = ~S.lo; Z.hi = S.lo << 26; Z.lo = X.lo unsigned>> 1; Y.lo = X.lo << S.lo; Z.lo = Z.lo unsigned>> S.hi; Y.hi = X.hi << S.lo; Z.hi = Z.hi signed>> 31; Y.hi = Y.hi | Z.lo; Z.lo = Y.lo ^ Y.hi; X.lo = Z.hi & Y.lo; Z.lo = Z.hi & Z.lo; X.lo = X.lo ^ Y.lo; X.hi = Y.hi ^ Z.lo");
#else
int K, L;
for (L = 0,K = 1;K < N;++L,K *= 2)
X ^= (X ^ (X << K)) & TYPE_bitinrangepublicpos_mask(S,L);
#endif
return X;
}
UNSIGNED:
TYPE TYPE_shlmod(TYPE X,TYPE S) {
#if amd64
8: S &= 7;
8: readasm("amd64; int8 X S; X <<= S");
16: S &= 15;
16: readasm("amd64; int16 X S; X <<= S");
32: readasm("amd64; int32 X S; X <<= S");
64: readasm("amd64; int64 X S; X <<= S");
#elif arm64
8: S &= 7;
8: readasm("arm64; int8 X S; X = (uint8) X; X = X << S");
16: S &= 15;
16: readasm("arm64; int16 X S; X = (uint16) X; X = X << S");
32: readasm("arm64; int32 X S; X = X << S");
64: readasm("arm64; int64 X S; X = X << S");
#elif arm32
8: S &= 7;
8: readasm("arm32; int8 X S; X = X << S; X = (uint8) X");
16: S &= 15;
16: readasm("arm32; int16 X S; X = X << S; X = (uint16) X");
32: S &= 31;
32: readasm("arm32; int32 X S; X = X << S");
64: readasm("arm32; int64 X S; S.lo = S.lo & 63; X.hi = X.hi << S.lo; S.hi = S.lo - 32; X.hi = X.hi | (X.lo << S.hi); S.hi = 32 - S.lo; X.hi = X.hi | (X.lo unsigned>> S.hi); X.lo = X.lo << S.lo");
#elif sparc32
8: S &= 7;
8: readasm("sparc32; int8 X S; X = X << S; X = (uint8) X");
16: S &= 15;
16: readasm("sparc32; int16 X S; X = X << S; X = (uint16) X");
32: readasm("sparc32; int32 X S; X = X << S");
64: TYPE Y, Z;
64: readasm("sparc32; int64 X Y Z S; S.hi = ~S.lo; Z.hi = S.lo << 26; Z.lo = X.lo unsigned>> 1; Y.lo = X.lo << S.lo; Z.lo = Z.lo unsigned>> S.hi; Y.hi = X.hi << S.lo; Z.hi = Z.hi signed>> 31; Y.hi = Y.hi | Z.lo; Z.lo = Y.lo ^ Y.hi; X.lo = Z.hi & Y.lo; Z.lo = Z.hi & Z.lo; X.lo = X.lo ^ Y.lo; X.hi = Y.hi ^ Z.lo");
#else
int K, L;
for (L = 0,K = 1;K < N;++L,K *= 2)
X ^= (X ^ (X << K)) & TYPE_bitinrangepublicpos_mask(S,L);
#endif
return X;
}
SIGNED:
TYPE TYPE_shrmod(TYPE X,TYPE S) {
#if amd64
8: S &= 7;
8: readasm("amd64; int8 X S; X signed>>= S");
16: S &= 15;
16: readasm("amd64; int16 X S; X signed>>= S");
32: readasm("amd64; int32 X S; X signed>>= S");
64: readasm("amd64; int64 X S; X signed>>= S");
#elif arm64
8: S &= 7;
8: readasm("arm64; int8 X S; X = (int8) X; X = X signed>> S");
16: S &= 15;
16: readasm("arm64; int16 X S; X = (int16) X; X = X signed>> S");
32: readasm("arm64; int32 X S; X = X signed>> S");
64: readasm("arm64; int64 X S; X = X signed>> S");
#elif arm32
8: S &= 7;
8: readasm("arm32; int8 X S; X = (int8) X; X = X signed>> S");
16: S &= 15;
16: readasm("arm32; int16 X S; X = (int16) X; X = X signed>> S");
32: S &= 31;
32: readasm("arm32; int32 X S; X = X signed>> S");
64: readasm("arm32; int64 X S; S.lo = S.lo & 63; X.lo = X.lo unsigned>> S.lo; S.hi = 32 - S.lo; X.lo = X.lo | (X.hi << S.hi); flags, S.hi = S.lo - 32; X.lo = X.lo | (X.hi signed>> S.hi) if unsigned>=; X.hi = X.hi signed>> S.lo");
#elif sparc32
8: S &= 7;
8: readasm("sparc32; int8 X S; X = X signed>> S");
16: S &= 15;
16: readasm("sparc32; int16 X S; X = X signed>> S");
32: readasm("sparc32; int32 X S; X = X signed>> S");
64: TYPE Y, Z;
64: readasm("sparc32; int64 X Y Z S; S.hi = ~S.lo; Z.hi = S.lo << 26; Z.lo = X.hi << 1; Y.lo = X.lo unsigned>> S.lo; Z.lo = Z.lo << S.hi; Y.hi = X.hi signed>> S.lo; Z.hi = Z.hi signed>> 31; Y.lo = Y.lo | Z.lo; Z.lo = Y.lo ^ Y.hi; Z.lo = Z.hi & Z.lo; X.hi = Y.hi signed>> Z.hi; X.lo = Y.lo ^ Z.lo");
#else
int K, L;
for (L = 0,K = 1;K < N;++L,K *= 2)
X ^= (X ^ (X >> K)) & TYPE_bitinrangepublicpos_mask(S,L);
#endif
return X;
}
UNSIGNED:
TYPE TYPE_shrmod(TYPE X,TYPE S) {
#if amd64
8: S &= 7;
8: readasm("amd64; int8 X S; X unsigned>>= S");
16: S &= 15;
16: readasm("amd64; int16 X S; X unsigned>>= S");
32: readasm("amd64; int32 X S; X unsigned>>= S");
64: readasm("amd64; int64 X S; X unsigned>>= S");
#elif arm64
8: S &= 7;
8: readasm("arm64; int8 X S; X = (uint8) X; X = X unsigned>> S");
16: S &= 15;
16: readasm("arm64; int16 X S; X = (uint16) X; X = X unsigned>> S");
32: readasm("arm64; int32 X S; X = X unsigned>> S");
64: readasm("arm64; int64 X S; X = X unsigned>> S");
#elif arm32
8: S &= 7;
8: readasm("arm32; int8 X S; X = (uint8) X; X = X unsigned>> S");
16: S &= 15;
16: readasm("arm32; int16 X S; X = (uint16) X; X = X unsigned>> S");
32: S &= 31;
32: readasm("arm32; int32 X S; X = X unsigned>> S");
64: readasm("arm32; int64 X S; S.lo = S.lo & 63; X.lo = X.lo unsigned>> S.lo; S.hi = 32 - S.lo; X.lo = X.lo | (X.hi << S.hi); S.hi = S.lo - 32; X.lo = X.lo | (X.hi unsigned>> S.hi); X.hi = X.hi unsigned>> S.lo");
#elif sparc32
8: S &= 7;
8: readasm("sparc32; int8 X S; X = X unsigned>> S");
16: S &= 15;
16: readasm("sparc32; int16 X S; X = X unsigned>> S");
32: readasm("sparc32; int32 X S; X = X unsigned>> S");
64: TYPE Y, Z;
64: readasm("sparc32; int64 X Y Z S; S.hi = ~S.lo; Z.hi = S.lo << 26; Z.lo = X.hi << 1; Y.lo = X.lo unsigned>> S.lo; Z.lo = Z.lo << S.hi; Y.hi = X.hi unsigned>> S.lo; Z.hi = Z.hi signed>> 31; Y.lo = Y.lo | Z.lo; Z.lo = Y.lo ^ Y.hi; X.hi = Z.hi & Y.hi; Z.lo = Z.hi & Z.lo; X.hi = X.hi ^ Y.hi; X.lo = Y.lo ^ Z.lo");
#else
int K, L;
for (L = 0,K = 1;K < N;++L,K *= 2)
X ^= (X ^ (X >> K)) & TYPE_bitinrangepublicpos_mask(S,L);
#endif
return X;
}
TYPE TYPE_bitmod_mask(TYPE X,TYPE S) {
X = TYPE_shrmod(X,S);
return TYPE_bottombit_mask(X);
}
TYPE TYPE_bitmod_01(TYPE X,TYPE S) {
X = TYPE_shrmod(X,S);
return TYPE_bottombit_01(X);
}
TYPE TYPE_nonzero_mask(TYPE X) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Z32; Z32 = 0; Q32 = -1; X32 & (int8) X32; Z32 = Q32 if !=");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Z; Z = 0; Q = -1; X & X; Z = Q if !=");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Z; Z = 0; Q = -1; X & X; Z = Q if !=");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Z; Z = 0; Q = -1; X & X; Z = Q if !=");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Z; X & 255; Z = -1 if != else 0");
16: readasm("arm64; int16 X Z; X & 65535; Z = -1 if != else 0");
32: readasm("arm64; int32 X Z; X - 0; Z = -1 if != else 0");
64: readasm("arm64; int64 X Z; X - 0; Z = -1 if != else 0");
return Z;
#elif arm32
8: readasm("arm32; int8 X; X = (uint8) X; X - 0; X = -1 if !=");
16: readasm("arm32; int16 X; X = (uint16) X; X - 0; X = -1 if !=");
32: readasm("arm32; int32 X; X - 0; X = -1 if !=");
64: readasm("arm32; int64 X; flags, X.lo = X.lo | X.hi; X.lo = -1 if !=; X.hi = X.lo");
return X;
#elif sparc32
TYPE Z;
8: readasm("sparc32; int8 X Z; X = (uint8) X; 0 - X; Z = -carry");
16: readasm("sparc32; int16 X Z; X = (uint16) X; 0 - X; Z = -carry");
32: readasm("sparc32; int32 X Z; 0 - X; Z = -carry");
64: readasm("sparc32; int64 X Z; Z.lo = X.lo | X.hi; 0 - Z.lo; Z.lo = -carry; Z.hi = Z.lo");
return Z;
#else
X |= -X;
return SIGNED_negative_mask(X);
#endif
}
TYPE TYPE_nonzero_01(TYPE X) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Z32; Z32 = 0; Q32 = 1; X32 & (int8) X32; Z32 = Q32 if !=");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Z; Z = 0; Q = 1; X & X; Z = Q if !=");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Z; Z = 0; Q = 1; X & X; Z = Q if !=");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Z; Z = 0; Q = 1; X & X; Z = Q if !=");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Z; X & 255; Z = 1 if != else 0");
16: readasm("arm64; int16 X Z; X & 65535; Z = 1 if != else 0");
32: readasm("arm64; int32 X Z; X - 0; Z = 1 if != else 0");
64: readasm("arm64; int64 X Z; X - 0; Z = 1 if != else 0");
return Z;
#elif arm32
8: readasm("arm32; int8 X; X = (uint8) X; X - 0; X = 1 if !=");
16: readasm("arm32; int16 X; X = (uint16) X; X - 0; X = 1 if !=");
32: readasm("arm32; int32 X; X - 0; X = 1 if !=");
64: readasm("arm32; int64 X; flags, X.lo = X.lo | X.hi; X.lo = 1 if !=; X.hi = 0");
return X;
#elif sparc32
TYPE Z;
8: readasm("sparc32; int8 X Z; X = (uint8) X; 0 - X; Z = carry");
16: readasm("sparc32; int16 X Z; X = (uint16) X; 0 - X; Z = carry");
32: readasm("sparc32; int32 X Z; 0 - X; Z = carry");
64: readasm("sparc32; int64 X Z; Z.lo = X.lo | X.hi; 0 - Z.lo; Z.lo = carry; Z.hi = 0");
return Z;
#else
X |= -X;
return UNSIGNED_topbit_01(X);
#endif
}
SIGNED:
TYPE TYPE_positive_mask(TYPE X) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Z32; Z32 = 0; Q32 = -1; X32 & (int8) X32; Z32 = Q32 if signed>");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Z; Z = 0; Q = -1; X & X; Z = Q if signed>");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Z; Z = 0; Q = -1; X & X; Z = Q if signed>");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Z; Z = 0; Q = -1; X & X; Z = Q if signed>");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Z; Z = (int8) X; Z - 0; Z = -1 if signed> else 0");
16: readasm("arm64; int16 X Z; Z = (int16) X; Z - 0; Z = -1 if signed> else 0");
32: readasm("arm64; int32 X Z; X - 0; Z = -1 if signed> else 0");
64: readasm("arm64; int64 X Z; X - 0; Z = -1 if signed> else 0");
return Z;
#elif sparc32
TYPE Z;
8: readasm("sparc32; int8 X Z; Z = X << 24; Z = Z signed>> 31; Z = Z - X; Z = Z signed>> 31");
16: readasm("sparc32; int16 X Z; Z = X << 16; Z = Z signed>> 31; Z = Z - X; Z = Z signed>> 31");
32: readasm("sparc32; int32 X Z; Z = X signed>> 31; Z = Z - X; Z = Z signed>> 31");
64: readasm("sparc32; int64 X Z; Z.lo = X.hi signed>> 31; carry, Z.hi = Z.lo - X.lo; Z.hi = Z.lo - X.hi - carry; Z.hi = Z.hi signed>> 31; Z.lo = Z.hi");
return Z;
#else
TYPE Z = -X;
Z ^= X & Z;
return TYPE_negative_mask(Z);
#endif
}
SIGNED:
TYPE TYPE_positive_01(TYPE X) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Z32; Z32 = 0; Q32 = 1; X32 & (int8) X32; Z32 = Q32 if signed>");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Z; Z = 0; Q = 1; X & X; Z = Q if signed>");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Z; Z = 0; Q = 1; X & X; Z = Q if signed>");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Z; Z = 0; Q = 1; X & X; Z = Q if signed>");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Z; Z = (int8) X; Z - 0; Z = 1 if signed> else 0");
16: readasm("arm64; int16 X Z; Z = (int16) X; Z - 0; Z = 1 if signed> else 0");
32: readasm("arm64; int32 X Z; X - 0; Z = 1 if signed> else 0");
64: readasm("arm64; int64 X Z; X - 0; Z = 1 if signed> else 0");
return Z;
#elif sparc32
TYPE Z;
8: readasm("sparc32; int8 X Z; Z = X << 24; Z = Z signed>> 31; Z = Z - X; Z = Z unsigned>> 31");
16: readasm("sparc32; int16 X Z; Z = X << 16; Z = Z signed>> 31; Z = Z - X; Z = Z unsigned>> 31");
32: readasm("sparc32; int32 X Z; Z = X signed>> 31; Z = Z - X; Z = Z unsigned>> 31");
64: readasm("sparc32; int64 X Z; Z.hi = X.hi signed>> 31; carry, Z.lo = Z.hi - X.lo; Z.lo = Z.hi - X.hi - carry; Z.lo = Z.lo unsigned>> 31; Z.hi = 0");
return Z;
#else
TYPE Z = -X;
Z ^= X & Z;
return UNSIGNED_topbit_01(Z);
#endif
}
TYPE TYPE_zero_mask(TYPE X) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Z32; Z32 = 0; Q32 = -1; X32 & (int8) X32; Z32 = Q32 if =");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Z; Z = 0; Q = -1; X & X; Z = Q if =");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Z; Z = 0; Q = -1; X & X; Z = Q if =");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Z; Z = 0; Q = -1; X & X; Z = Q if =");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Z; X & 255; Z = -1 if = else 0");
16: readasm("arm64; int16 X Z; X & 65535; Z = -1 if = else 0");
32: readasm("arm64; int32 X Z; X - 0; Z = -1 if = else 0");
64: readasm("arm64; int64 X Z; X - 0; Z = -1 if = else 0");
return Z;
#elif sparc32
TYPE Z;
8: readasm("sparc32; int8 X Z; X = (uint8) X; 0 - X; Z = carry - 1");
16: readasm("sparc32; int16 X Z; X = (uint16) X; 0 - X; Z = carry - 1");
32: readasm("sparc32; int32 X Z; 0 - X; Z = carry - 1");
64: readasm("sparc32; int64 X Z; Z.lo = X.lo | X.hi; 0 - Z.lo; Z.lo = carry - 1; Z.hi = Z.lo");
return Z;
#else
return ~TYPE_nonzero_mask(X);
#endif
}
TYPE TYPE_zero_01(TYPE X) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Z32; Z32 = 0; Q32 = 1; X32 & (int8) X32; Z32 = Q32 if =");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Z; Z = 0; Q = 1; X & X; Z = Q if =");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Z; Z = 0; Q = 1; X & X; Z = Q if =");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Z; Z = 0; Q = 1; X & X; Z = Q if =");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Z; X & 255; Z = 1 if = else 0");
16: readasm("arm64; int16 X Z; X & 65535; Z = 1 if = else 0");
32: readasm("arm64; int32 X Z; X - 0; Z = 1 if = else 0");
64: readasm("arm64; int64 X Z; X - 0; Z = 1 if = else 0");
return Z;
#elif sparc32
TYPE Z;
8: readasm("sparc32; int8 X Z; X = (uint8) X; 0 - X; Z = 1 - carry");
16: readasm("sparc32; int16 X Z; X = (uint16) X; 0 - X; Z = 1 - carry");
32: readasm("sparc32; int32 X Z; 0 - X; Z = 1 - carry");
64: readasm("sparc32; int64 X Z; Z.lo = X.lo | X.hi; 0 - Z.lo; Z.lo = 1 - carry; Z.hi = 0");
return Z;
#else
return 1-TYPE_nonzero_01(X);
#endif
}
TYPE TYPE_unequal_mask(TYPE X,TYPE Y) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Y32 = Y,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Y32 Z32; Z32 = 0; Q32 = -1; X32 - (int8) Y32; Z32 = Q32 if !=");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if !=");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if !=");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if !=");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Y Z; Z = (uint8) X; Z - (uint8) Y; Z = -1 if != else 0");
16: readasm("arm64; int16 X Y Z; Z = (uint16) X; Z - (uint16) Y; Z = -1 if != else 0");
32: readasm("arm64; int32 X Y Z; X - Y; Z = -1 if != else 0");
64: readasm("arm64; int64 X Y Z; X - Y; Z = -1 if != else 0");
return Z;
#else
return TYPE_nonzero_mask(X ^ Y);
#endif
}
TYPE TYPE_unequal_01(TYPE X,TYPE Y) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Y32 = Y,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Y32 Z32; Z32 = 0; Q32 = 1; X32 - (int8) Y32; Z32 = Q32 if !=");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if !=");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if !=");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if !=");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Y Z; Z = (uint8) X; Z - (uint8) Y; Z = 1 if != else 0");
16: readasm("arm64; int16 X Y Z; Z = (uint16) X; Z - (uint16) Y; Z = 1 if != else 0");
32: readasm("arm64; int32 X Y Z; X - Y; Z = 1 if != else 0");
64: readasm("arm64; int64 X Y Z; X - Y; Z = 1 if != else 0");
return Z;
#else
return TYPE_nonzero_01(X ^ Y);
#endif
}
TYPE TYPE_equal_mask(TYPE X,TYPE Y) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Y32 = Y,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Y32 Z32; Z32 = 0; Q32 = -1; X32 - (int8) Y32; Z32 = Q32 if =");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if =");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if =");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if =");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Y Z; Z = (uint8) X; Z - (uint8) Y; Z = -1 if = else 0");
16: readasm("arm64; int16 X Y Z; Z = (uint16) X; Z - (uint16) Y; Z = -1 if = else 0");
32: readasm("arm64; int32 X Y Z; X - Y; Z = -1 if = else 0");
64: readasm("arm64; int64 X Y Z; X - Y; Z = -1 if = else 0");
return Z;
#else
return TYPE_zero_mask(X ^ Y);
#endif
}
TYPE TYPE_equal_01(TYPE X,TYPE Y) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Y32 = Y,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Y32 Z32; Z32 = 0; Q32 = 1; X32 - (int8) Y32; Z32 = Q32 if =");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if =");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if =");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if =");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Y Z; Z = (uint8) X; Z - (uint8) Y; Z = 1 if = else 0");
16: readasm("arm64; int16 X Y Z; Z = (uint16) X; Z - (uint16) Y; Z = 1 if = else 0");
32: readasm("arm64; int32 X Y Z; X - Y; Z = 1 if = else 0");
64: readasm("arm64; int64 X Y Z; X - Y; Z = 1 if = else 0");
return Z;
#else
return TYPE_zero_01(X ^ Y);
#endif
}
SIGNED:
TYPE TYPE_min(TYPE X,TYPE Y) {
#if amd64
8: int32_t X32 = X,Y32 = Y;
8: readasm("amd64; int32 X32 Y32; X32 - (int8) Y32; X32 = Y32 if signed>");
8: X = X32;
16: readasm("amd64; int16 X Y; X - Y; X = Y if signed>");
32: readasm("amd64; int32 X Y; X - Y; X = Y if signed>");
64: readasm("amd64; int64 X Y; X - Y; X = Y if signed>");
return X;
#elif arm64
8: readasm("arm64; int8 X Y; X = (int8) X; X - (int8) Y; X = X if signed< else Y");
16: readasm("arm64; int16 X Y; X = (int16) X; X - (int16) Y; X = X if signed< else Y");
32: readasm("arm64; int32 X Y; X - Y; X = X if signed< else Y");
64: readasm("arm64; int64 X Y; X - Y; X = X if signed< else Y");
return X;
#else
TYPE R = Y ^ X;
TYPE Z = Y - X;
Z ^= R & (Z ^ Y);
Z = TYPE_negative_mask(Z);
Z &= R;
return X ^ Z;
#endif
}
UNSIGNED:
TYPE TYPE_min(TYPE X,TYPE Y) {
#if amd64
8: uint32_t X32 = X,Y32 = Y;
8: readasm("amd64; int32 X32 Y32; X32 - (int8) Y32; X32 = Y32 if unsigned>");
8: X = X32;
16: readasm("amd64; int16 X Y; X - Y; X = Y if unsigned>");
32: readasm("amd64; int32 X Y; X - Y; X = Y if unsigned>");
64: readasm("amd64; int64 X Y; X - Y; X = Y if unsigned>");
return X;
#elif arm64
8: readasm("arm64; int8 X Y; X = (uint8) X; X - (uint8) Y; X = X if unsigned< else Y");
16: readasm("arm64; int16 X Y; X = (uint16) X; X - (uint16) Y; X = X if unsigned< else Y");
32: readasm("arm64; int32 X Y; X - Y; X = X if unsigned< else Y");
64: readasm("arm64; int64 X Y; X - Y; X = X if unsigned< else Y");
return X;
#else
TYPE R = Y ^ X;
TYPE Z = Y - X;
Z ^= R & (Z ^ Y ^ (((TYPE) 1) << (N-1)));
Z = SIGNED_negative_mask(Z);
Z &= R;
return X ^ Z;
#endif
}
SIGNED:
TYPE TYPE_max(TYPE X,TYPE Y) {
#if amd64
8: int32_t X32 = X,Y32 = Y;
8: readasm("amd64; int32 X32 Y32; X32 - (int8) Y32; X32 = Y32 if signed<");
8: X = X32;
16: readasm("amd64; int16 X Y; X - Y; X = Y if signed<");
32: readasm("amd64; int32 X Y; X - Y; X = Y if signed<");
64: readasm("amd64; int64 X Y; X - Y; X = Y if signed<");
return X;
#elif arm64
8: readasm("arm64; int8 X Y; X = (int8) X; X - (int8) Y; X = Y if signed< else X");
16: readasm("arm64; int16 X Y; X = (int16) X; X - (int16) Y; X = Y if signed< else X");
32: readasm("arm64; int32 X Y; X - Y; X = Y if signed< else X");
64: readasm("arm64; int64 X Y; X - Y; X = Y if signed< else X");
return X;
#else
TYPE R = Y ^ X;
TYPE Z = Y - X;
Z ^= R & (Z ^ Y);
Z = TYPE_negative_mask(Z);
Z &= R;
return Y ^ Z;
#endif
}
UNSIGNED:
TYPE TYPE_max(TYPE X,TYPE Y) {
#if amd64
8: uint32_t X32 = X,Y32 = Y;
8: readasm("amd64; int32 X32 Y32; X32 - (int8) Y32; X32 = Y32 if unsigned<");
8: X = X32;
16: readasm("amd64; int16 X Y; X - Y; X = Y if unsigned<");
32: readasm("amd64; int32 X Y; X - Y; X = Y if unsigned<");
64: readasm("amd64; int64 X Y; X - Y; X = Y if unsigned<");
return X;
#elif arm64
8: readasm("arm64; int8 X Y; X = (uint8) X; X - (uint8) Y; X = Y if unsigned< else X");
16: readasm("arm64; int16 X Y; X = (uint16) X; X - (uint16) Y; X = Y if unsigned< else X");
32: readasm("arm64; int32 X Y; X - Y; X = Y if unsigned< else X");
64: readasm("arm64; int64 X Y; X - Y; X = Y if unsigned< else X");
return X;
#else
TYPE R = Y ^ X;
TYPE Z = Y - X;
Z ^= R & (Z ^ Y ^ (((TYPE) 1) << (N-1)));
Z = SIGNED_negative_mask(Z);
Z &= R;
return Y ^ Z;
#endif
}
SIGNED:
void TYPE_minmax(TYPE *P,TYPE *Q) {
TYPE X = *P;
TYPE Y = *Q;
#if amd64
8: int32_t X32 = X,Y32 = Y,Z32;
8: readasm("amd64; int32 X32 Y32 Z32; X32 - (int8) Y32; Z32 = X32; X32 = Y32 if signed>; Y32 = Z32 if signed>");
8: X = X32; Y = Y32;
16: TYPE Z;
16: readasm("amd64; int16 X Y Z; X - Y; Z = X; X = Y if signed>; Y = Z if signed>");
32: TYPE Z;
32: readasm("amd64; int32 X Y Z; X - Y; Z = X; X = Y if signed>; Y = Z if signed>");
64: TYPE Z;
64: readasm("amd64; int64 X Y Z; X - Y; Z = X; X = Y if signed>; Y = Z if signed>");
*P = X;
*Q = Y;
#elif arm64
TYPE R, S;
8: readasm("arm64; int8 X Y R S; X = (int8) X; X - (int8) Y; R = X if signed< else Y; S = Y if signed< else X");
16: readasm("arm64; int16 X Y R S; X = (int16) X; X - (int16) Y; R = X if signed< else Y; S = Y if signed< else X");
32: readasm("arm64; int32 X Y R S; X - Y; R = X if signed< else Y; S = Y if signed< else X");
64: readasm("arm64; int64 X Y R S; X - Y; R = X if signed< else Y; S = Y if signed< else X");
*P = R;
*Q = S;
#else
TYPE R = Y ^ X;
TYPE Z = Y - X;
Z ^= R & (Z ^ Y);
Z = TYPE_negative_mask(Z);
Z &= R;
X ^= Z;
Y ^= Z;
*P = X;
*Q = Y;
#endif
}
UNSIGNED:
void TYPE_minmax(TYPE *P,TYPE *Q) {
TYPE X = *P;
TYPE Y = *Q;
#if amd64
8: uint32_t X32 = X,Y32 = Y,Z32;
8: readasm("amd64; int32 X32 Y32 Z32; X32 - (int8) Y32; Z32 = X32; X32 = Y32 if unsigned>; Y32 = Z32 if unsigned>");
8: X = X32; Y = Y32;
16: TYPE Z;
16: readasm("amd64; int16 X Y Z; X - Y; Z = X; X = Y if unsigned>; Y = Z if unsigned>");
32: TYPE Z;
32: readasm("amd64; int32 X Y Z; X - Y; Z = X; X = Y if unsigned>; Y = Z if unsigned>");
64: TYPE Z;
64: readasm("amd64; int64 X Y Z; X - Y; Z = X; X = Y if unsigned>; Y = Z if unsigned>");
*P = X;
*Q = Y;
#elif arm64
TYPE R, S;
8: readasm("arm64; int8 X Y R S; X = (uint8) X; X - (uint8) Y; R = X if unsigned< else Y; S = Y if unsigned< else X");
16: readasm("arm64; int16 X Y R S; X = (uint16) X; X - (uint16) Y; R = X if unsigned< else Y; S = Y if unsigned< else X");
32: readasm("arm64; int32 X Y R S; X - Y; R = X if unsigned< else Y; S = Y if unsigned< else X");
64: readasm("arm64; int64 X Y R S; X - Y; R = X if unsigned< else Y; S = Y if unsigned< else X");
*P = R;
*Q = S;
#else
TYPE R = Y ^ X;
TYPE Z = Y - X;
Z ^= R & (Z ^ Y ^ (((TYPE) 1) << (N-1)));
Z = SIGNED_negative_mask(Z);
Z &= R;
X ^= Z;
Y ^= Z;
*P = X;
*Q = Y;
#endif
}
SIGNED:
TYPE TYPE_smaller_mask(TYPE X,TYPE Y) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Y32 = Y,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Y32 Z32; Z32 = 0; Q32 = -1; X32 - (int8) Y32; Z32 = Q32 if signed<");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if signed<");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if signed<");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if signed<");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Y Z; Z = (int8) X; Z - (int8) Y; Z = -1 if signed< else 0");
16: readasm("arm64; int16 X Y Z; Z = (int16) X; Z - (int16) Y; Z = -1 if signed< else 0");
32: readasm("arm64; int32 X Y Z; X - Y; Z = -1 if signed< else 0");
64: readasm("arm64; int64 X Y Z; X - Y; Z = -1 if signed< else 0");
return Z;
#else
TYPE R = X ^ Y;
TYPE Z = X - Y;
Z ^= R & (Z ^ X);
return TYPE_negative_mask(Z);
#endif
}
SIGNED:
TYPE TYPE_smaller_01(TYPE X,TYPE Y) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Y32 = Y,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Y32 Z32; Z32 = 0; Q32 = 1; X32 - (int8) Y32; Z32 = Q32 if signed<");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if signed<");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if signed<");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if signed<");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Y Z; Z = (int8) X; Z - (int8) Y; Z = 1 if signed< else 0");
16: readasm("arm64; int16 X Y Z; Z = (int16) X; Z - (int16) Y; Z = 1 if signed< else 0");
32: readasm("arm64; int32 X Y Z; X - Y; Z = 1 if signed< else 0");
64: readasm("arm64; int64 X Y Z; X - Y; Z = 1 if signed< else 0");
return Z;
#else
TYPE R = X ^ Y;
TYPE Z = X - Y;
Z ^= R & (Z ^ X);
return UNSIGNED_topbit_01(Z);
#endif
}
UNSIGNED:
TYPE TYPE_smaller_mask(TYPE X,TYPE Y) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Y32 = Y,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Y32 Z32; Z32 = 0; Q32 = -1; X32 - (int8) Y32; Z32 = Q32 if unsigned<");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if unsigned<");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if unsigned<");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if unsigned<");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Y Z; Z = (uint8) X; Z - (uint8) Y; Z = -1 if unsigned< else 0");
16: readasm("arm64; int16 X Y Z; Z = (uint16) X; Z - (uint16) Y; Z = -1 if unsigned< else 0");
32: readasm("arm64; int32 X Y Z; X - Y; Z = -1 if unsigned< else 0");
64: readasm("arm64; int64 X Y Z; X - Y; Z = -1 if unsigned< else 0");
return Z;
#else
TYPE R = X ^ Y;
TYPE Z = X - Y;
Z ^= R & (Z ^ X ^ (((TYPE) 1) << (N-1)));
return SIGNED_negative_mask(Z);
#endif
}
UNSIGNED:
TYPE TYPE_smaller_01(TYPE X,TYPE Y) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Y32 = Y,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Y32 Z32; Z32 = 0; Q32 = 1; X32 - (int8) Y32; Z32 = Q32 if unsigned<");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if unsigned<");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if unsigned<");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if unsigned<");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Y Z; Z = (uint8) X; Z - (uint8) Y; Z = 1 if unsigned< else 0");
16: readasm("arm64; int16 X Y Z; Z = (uint16) X; Z - (uint16) Y; Z = 1 if unsigned< else 0");
32: readasm("arm64; int32 X Y Z; X - Y; Z = 1 if unsigned< else 0");
64: readasm("arm64; int64 X Y Z; X - Y; Z = 1 if unsigned< else 0");
return Z;
#else
TYPE R = X ^ Y;
TYPE Z = X - Y;
Z ^= R & (Z ^ X ^ (((TYPE) 1) << (N-1)));
return UNSIGNED_topbit_01(Z);
#endif
}
SIGNED:
TYPE TYPE_leq_mask(TYPE X,TYPE Y) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Y32 = Y,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Y32 Z32; Z32 = 0; Q32 = -1; X32 - (int8) Y32; Z32 = Q32 if signed<=");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if signed<=");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if signed<=");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if signed<=");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Y Z; Z = (int8) X; Z - (int8) Y; Z = -1 if signed<= else 0");
16: readasm("arm64; int16 X Y Z; Z = (int16) X; Z - (int16) Y; Z = -1 if signed<= else 0");
32: readasm("arm64; int32 X Y Z; X - Y; Z = -1 if signed<= else 0");
64: readasm("arm64; int64 X Y Z; X - Y; Z = -1 if signed<= else 0");
return Z;
#else
return ~TYPE_smaller_mask(Y,X);
#endif
}
SIGNED:
TYPE TYPE_leq_01(TYPE X,TYPE Y) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Y32 = Y,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Y32 Z32; Z32 = 0; Q32 = 1; X32 - (int8) Y32; Z32 = Q32 if signed<=");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if signed<=");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if signed<=");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if signed<=");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Y Z; Z = (int8) X; Z - (int8) Y; Z = 1 if signed<= else 0");
16: readasm("arm64; int16 X Y Z; Z = (int16) X; Z - (int16) Y; Z = 1 if signed<= else 0");
32: readasm("arm64; int32 X Y Z; X - Y; Z = 1 if signed<= else 0");
64: readasm("arm64; int64 X Y Z; X - Y; Z = 1 if signed<= else 0");
return Z;
#else
return 1-TYPE_smaller_01(Y,X);
#endif
}
UNSIGNED:
TYPE TYPE_leq_mask(TYPE X,TYPE Y) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Y32 = Y,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Y32 Z32; Z32 = 0; Q32 = -1; X32 - (int8) Y32; Z32 = Q32 if unsigned<=");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if unsigned<=");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if unsigned<=");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Y Z; Z = 0; Q = -1; X - Y; Z = Q if unsigned<=");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Y Z; Z = (uint8) X; Z - (uint8) Y; Z = -1 if unsigned<= else 0");
16: readasm("arm64; int16 X Y Z; Z = (uint16) X; Z - (uint16) Y; Z = -1 if unsigned<= else 0");
32: readasm("arm64; int32 X Y Z; X - Y; Z = -1 if unsigned<= else 0");
64: readasm("arm64; int64 X Y Z; X - Y; Z = -1 if unsigned<= else 0");
return Z;
#else
return ~TYPE_smaller_mask(Y,X);
#endif
}
UNSIGNED:
TYPE TYPE_leq_01(TYPE X,TYPE Y) {
#if amd64
8: TYPE Z;
8: int32_t X32 = X,Y32 = Y,Q32,Z32;
8: readasm("amd64; int32 X32 Q32 Y32 Z32; Z32 = 0; Q32 = 1; X32 - (int8) Y32; Z32 = Q32 if unsigned<=");
8: Z = Z32;
16: TYPE Q,Z;
16: readasm("amd64; int16 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if unsigned<=");
32: TYPE Q,Z;
32: readasm("amd64; int32 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if unsigned<=");
64: TYPE Q,Z;
64: readasm("amd64; int64 X Q Y Z; Z = 0; Q = 1; X - Y; Z = Q if unsigned<=");
return Z;
#elif arm64
TYPE Z;
8: readasm("arm64; int8 X Y Z; Z = (uint8) X; Z - (uint8) Y; Z = 1 if unsigned<= else 0");
16: readasm("arm64; int16 X Y Z; Z = (uint16) X; Z - (uint16) Y; Z = 1 if unsigned<= else 0");
32: readasm("arm64; int32 X Y Z; X - Y; Z = 1 if unsigned<= else 0");
64: readasm("arm64; int64 X Y Z; X - Y; Z = 1 if unsigned<= else 0");
return Z;
#else
return 1-TYPE_smaller_01(Y,X);
#endif
}
int TYPE_ones_num(TYPE X) {
UNSIGNED Y = X;
8: const TYPE C0 = 0x55;
16: const TYPE C0 = 0x5555;
32: const TYPE C0 = 0x55555555;
64: const TYPE C0 = 0x5555555555555555;
8: const TYPE C1 = 0x33;
16: const TYPE C1 = 0x3333;
32: const TYPE C1 = 0x33333333;
64: const TYPE C1 = 0x3333333333333333;
8: const TYPE C2 = 0x0f;
16: const TYPE C2 = 0x0f0f;
32: const TYPE C2 = 0x0f0f0f0f;
64: const TYPE C2 = 0x0f0f0f0f0f0f0f0f;
Y -= ((Y >> 1) & C0);
Y = (Y & C1) + ((Y >> 2) & C1);
Y = (Y + (Y >> 4)) & C2;
16: Y = (Y + (Y >> 8)) & 0xff;
32: Y += Y >> 8;
32: Y = (Y + (Y >> 16)) & 0xff;
64: Y += Y >> 8;
64: Y += Y >> 16;
64: Y = (Y + (Y >> 32)) & 0xff;
return Y;
}
int TYPE_bottomzeros_num(TYPE X) {
#if amd64
8: int32_t fallback = N;
8: int32_t X32 = X;
8: readasm("amd64; int32 X32 fallback; X32 = numbottomzeros_tricky X32; X32 = fallback if =");
8: X = X32;
16: TYPE fallback = N;
16: readasm("amd64; int16 X fallback; X = numbottomzeros_tricky X; X = fallback if =");
32: TYPE fallback = N;
32: readasm("amd64; int32 X fallback; X = numbottomzeros_tricky X; X = fallback if =");
64: TYPE fallback = N;
64: readasm("amd64; int64 X fallback; X = numbottomzeros_tricky X; X = fallback if =");
return X;
#elif arm64
int64_t Y;
8: readasm("arm64; int8 X Y; Y = X | -256; Y = bitrev32 Y; Y = numbottomzeros Y");
16: readasm("arm64; int16 X Y; Y = X | -65536; Y = bitrev32 Y; Y = numbottomzeros Y");
32: readasm("arm64; int32 X Y; Y = bitrev32 X; Y = numbottomzeros Y");
64: readasm("arm64; int64 X Y; Y = bitrev64 X; Y = numbottomzeros Y");
return Y;
#else
TYPE Y = X ^ (X-1);
Y = ((SIGNED) Y) >> 1;
Y &= ~(X & (((TYPE) 1) << (N-1)));
return TYPE_ones_num(Y);
#endif
}
tinyssh-20250501/cryptoint/int16_optblocker.c 0000664 0000000 0000000 00000000225 15004722224 0021034 0 ustar 00root root 0000000 0000000 /* auto-generated: cd cryptoint; ./autogen */
/* cryptoint 20250414 */
#include "crypto_int16.h"
volatile crypto_int16 crypto_int16_optblocker = 0;
tinyssh-20250501/cryptoint/int32_optblocker.c 0000664 0000000 0000000 00000000225 15004722224 0021032 0 ustar 00root root 0000000 0000000 /* auto-generated: cd cryptoint; ./autogen */
/* cryptoint 20250414 */
#include "crypto_int32.h"
volatile crypto_int32 crypto_int32_optblocker = 0;
tinyssh-20250501/cryptoint/int64_optblocker.c 0000664 0000000 0000000 00000000225 15004722224 0021037 0 ustar 00root root 0000000 0000000 /* auto-generated: cd cryptoint; ./autogen */
/* cryptoint 20250414 */
#include "crypto_int64.h"
volatile crypto_int64 crypto_int64_optblocker = 0;
tinyssh-20250501/cryptoint/int8_optblocker.c 0000664 0000000 0000000 00000000222 15004722224 0020752 0 ustar 00root root 0000000 0000000 /* auto-generated: cd cryptoint; ./autogen */
/* cryptoint 20250414 */
#include "crypto_int8.h"
volatile crypto_int8 crypto_int8_optblocker = 0;
tinyssh-20250501/cryptoint/intN_optblocker.c 0000664 0000000 0000000 00000000222 15004722224 0021000 0 ustar 00root root 0000000 0000000 /* auto-generated: cd cryptoint; ./autogen */
/* cryptoint 20250414 */
#include "crypto_intN.h"
volatile crypto_intN crypto_intN_optblocker = 0;
tinyssh-20250501/cryptoint/namespace 0000664 0000000 0000000 00000000010 15004722224 0017352 0 ustar 00root root 0000000 0000000 tinyssh
tinyssh-20250501/cryptoint/readasm.py 0000775 0000000 0000000 00000126573 15004722224 0017513 0 ustar 00root root 0000000 0000000 #!/usr/bin/env python3
import re
import sys
machinedesc = {}
# note for qhasm users:
# the machine descriptions here have, e.g.,
# int8 meaning where the C ABI stores an int8,
# such as a 64-bit integer register on amd64
# ===== amd64
machinedesc['amd64'] = r'''
int8 r:var/r=int8:
int16 r:var/r=int16:
int32 r:var/r=int32:
int64 r:var/r=int64:
int8 r s:var/r=int8:var/s=int8:
int16 r s:var/r=int16:var/s=int16:
int32 r s:var/r=int32:var/s=int32:
int64 r s:var/r=int64:var/s=int64:
int8 r s t:var/r=int8:var/s=int8:var/t=int8:
int16 r s t:var/r=int16:var/s=int16:var/t=int16:
int32 r s t:var/r=int32:var/s=int32:var/t=int32:
int64 r s t:var/r=int64:var/s=int64:var/t=int64:
int8 r s t u:var/r=int8:var/s=int8:var/t=int8:var/u=int8:
int16 r s t u:var/r=int16:var/s=int16:var/t=int16:var/u=int16:
int32 r s t u:var/r=int32:var/s=int32:var/t=int32:var/u=int32:
int64 r s t u:var/r=int64:var/s=int64:var/t=int64:var/u=int64:
r = 0:>r=int8:asm/xorb >r,>r:>?cc:
r = 0:>r=int16:asm/xorw >r,>r:>?cc:
r = 0:>r=int32:asm/xorl >r,>r:>?cc:
r = 0:>r=int64:asm/xorq >r,>r:>?cc:
r = n:>r=int8:#n:asm/movb $#n,>r:
r = n:>r=int16:#n:asm/movw $#n,>r:
r = n:>r=int32:#n:asm/movl $#n,>r:
r = n:>r=int64:#n:asm/movq $#n,>r:
r = -n:>r=int8:#n:asm/movb $-#n,>r:
r = -n:>r=int16:#n:asm/movw $-#n,>r:
r = -n:>r=int32:#n:asm/movl $-#n,>r:
r = -n:>r=int64:#n:asm/movq $-#n,>r:
r signed>>= n:+r=int8:#n:asm/sarb $#n,+r:>?cc:
r signed>>= n:+r=int16:#n:asm/sarw $#n,+r:>?cc:
r signed>>= n:+r=int32:#n:asm/sarl $#n,+r:>?cc:
r signed>>= n:+r=int64:#n:asm/sarq $#n,+r:>?cc:
r signed>>= s:+r=int8:?cc:
r signed>>= s:+r=int16:?cc:
r signed>>= s:+r=int32:?cc:
r signed>>= s:+r=int64:?cc:
r unsigned>>= n:+r=int8:#n:asm/shrb $#n,+r:>?cc:
r unsigned>>= n:+r=int16:#n:asm/shrw $#n,+r:>?cc:
r unsigned>>= n:+r=int32:#n:asm/shrl $#n,+r:>?cc:
r unsigned>>= n:+r=int64:#n:asm/shrq $#n,+r:>?cc:
r unsigned>>= s:+r=int8:?cc:
r unsigned>>= s:+r=int16:?cc:
r unsigned>>= s:+r=int32:?cc:
r unsigned>>= s:+r=int64:?cc:
r <<= n:+r=int8:#n:asm/shlb $#n,+r:>?cc:
r <<= n:+r=int16:#n:asm/shlw $#n,+r:>?cc:
r <<= n:+r=int32:#n:asm/shll $#n,+r:>?cc:
r <<= n:+r=int64:#n:asm/shlq $#n,+r:>?cc:
r <<= s:+r=int8:?cc:
r <<= s:+r=int16:?cc:
r <<= s:+r=int32:?cc:
r <<= s:+r=int64:?cc:
r &= n:+r=int8:#n:asm/andb $#n,+r:>?cc:
r &= n:+r=int16:#n:asm/andw $#n,+r:>?cc:
r &= n:+r=int32:#n:asm/andl $#n,+r:>?cc:
r &= n:+r=int64:#n:asm/andq $#n,+r:>?cc:
r & (int8) s:?cc:
r & s:?cc:
r & s:?cc:
r & s:?cc:
r - (int8) s:?cc:
r - s:?cc:
r - s:?cc:
r - s:?cc:
r = s:>r=int16:r:
r = s:>r=int32:r:
r = s:>r=int64:r:
r = s if signed<:+r=int16::+r=int16::+r=int32::+r=int64::+r=int16::+r=int32::+r=int64:r=int16:?cc:asm/bsfw r:
r = numbottomzeros_tricky s:>r=int32:?cc:asm/bsfl r:
r = numbottomzeros_tricky s:>r=int64:?cc:asm/bsfq r:
'''
# ===== arm64
machinedesc['arm64'] = r'''
int8 r:var/r=int8:
int16 r:var/r=int16:
int32 r:var/r=int32:
int64 r:var/r=int64:
int8 r s:var/r=int8:var/s=int8:
int16 r s:var/r=int16:var/s=int16:
int32 r s:var/r=int32:var/s=int32:
int64 r s:var/r=int64:var/s=int64:
int8 r s t:var/r=int8:var/s=int8:var/t=int8:
int16 r s t:var/r=int16:var/s=int16:var/t=int16:
int32 r s t:var/r=int32:var/s=int32:var/t=int32:
int64 r s t:var/r=int64:var/s=int64:var/t=int64:
int8 r s t u:var/r=int8:var/s=int8:var/t=int8:var/u=int8:
int16 r s t u:var/r=int16:var/s=int16:var/t=int16:var/u=int16:
int32 r s t u:var/r=int32:var/s=int32:var/t=int32:var/u=int32:
int64 r s t u:var/r=int64:var/s=int64:var/t=int64:var/u=int64:
r = s signed>> n:>r=int32:r,> n:>r=int64:r,> n:>r=int32:r,> n:>r=int64:r,> t:>r=int8:r,> t:>r=int16:r,> t:>r=int32:r,> t:>r=int64:r,> t:>r=int8:r,> t:>r=int16:r,> t:>r=int32:r,> t:>r=int64:r,r=int8:r,r=int16:r,r=int32:r,r=int64:r,r=int8:r,r=int16:r,r=int8:r,r=int16:r,r=int8:r,r=int8:r,r=int16:r,r=int16:r,r=int8:r,r=int16:r,?cc:
r & n:?cc:
r - n:?cc:
r - n:?cc:
r - n:?cc:
r - n:?cc:
r - s:?cc:
r - s:?cc:
r - s:?cc:
r - s:?cc:
r - (int8) s:?cc:
r - (uint8) s:?cc:
r - (int16) s:?cc:
r - (uint16) s:?cc:
r = -1 if != else 0:>r=int8:r,ne:
r = -1 if != else 0:>r=int16:r,ne:
r = -1 if != else 0:>r=int32:r,ne:
r = -1 if != else 0:>r=int64:r,ne:
r = -1 if = else 0:>r=int8:r,eq:
r = -1 if = else 0:>r=int16:r,eq:
r = -1 if = else 0:>r=int32:r,eq:
r = -1 if = else 0:>r=int64:r,eq:
r = -1 if signed< else 0:>r=int8:r,lt:
r = -1 if signed< else 0:>r=int16:r,lt:
r = -1 if signed< else 0:>r=int32:r,lt:
r = -1 if signed< else 0:>r=int64:r,lt:
r = -1 if signed> else 0:>r=int8:r,gt:
r = -1 if signed> else 0:>r=int16:r,gt:
r = -1 if signed> else 0:>r=int32:r,gt:
r = -1 if signed> else 0:>r=int64:r,gt:
r = -1 if signed<= else 0:>r=int8:r,le:
r = -1 if signed<= else 0:>r=int16:r,le:
r = -1 if signed<= else 0:>r=int32:r,le:
r = -1 if signed<= else 0:>r=int64:r,le:
r = -1 if unsigned< else 0:>r=int8:r,lo:
r = -1 if unsigned< else 0:>r=int16:r,lo:
r = -1 if unsigned< else 0:>r=int32:r,lo:
r = -1 if unsigned< else 0:>r=int64:r,lo:
r = -1 if unsigned<= else 0:>r=int8:r,ls:
r = -1 if unsigned<= else 0:>r=int16:r,ls:
r = -1 if unsigned<= else 0:>r=int32:r,ls:
r = -1 if unsigned<= else 0:>r=int64:r,ls:
r = 1 if != else 0:>r=int8:r,ne:
r = 1 if != else 0:>r=int16:r,ne:
r = 1 if != else 0:>r=int32:r,ne:
r = 1 if != else 0:>r=int64:r,ne:
r = 1 if = else 0:>r=int8:r,eq:
r = 1 if = else 0:>r=int16:r,eq:
r = 1 if = else 0:>r=int32:r,eq:
r = 1 if = else 0:>r=int64:r,eq:
r = 1 if signed< else 0:>r=int8:r,lt:
r = 1 if signed< else 0:>r=int16:r,lt:
r = 1 if signed< else 0:>r=int32:r,lt:
r = 1 if signed< else 0:>r=int64:r,lt:
r = 1 if signed> else 0:>r=int8:r,gt:
r = 1 if signed> else 0:>r=int16:r,gt:
r = 1 if signed> else 0:>r=int32:r,gt:
r = 1 if signed> else 0:>r=int64:r,gt:
r = 1 if signed<= else 0:>r=int8:r,le:
r = 1 if signed<= else 0:>r=int16:r,le:
r = 1 if signed<= else 0:>r=int32:r,le:
r = 1 if signed<= else 0:>r=int64:r,le:
r = 1 if unsigned< else 0:>r=int8:r,lo:
r = 1 if unsigned< else 0:>r=int16:r,lo:
r = 1 if unsigned< else 0:>r=int32:r,lo:
r = 1 if unsigned< else 0:>r=int64:r,lo:
r = 1 if unsigned<= else 0:>r=int8:r,ls:
r = 1 if unsigned<= else 0:>r=int16:r,ls:
r = 1 if unsigned<= else 0:>r=int32:r,ls:
r = 1 if unsigned<= else 0:>r=int64:r,ls:
r = s if signed< else t:>r=int8:r,r=int16:r,r=int32:r,r=int64:r,r=int8:r,r=int16:r,r=int32:r,r=int64:r,r=int8:r,r=int16:r,r=int32:r,r=int64:r,r=int8:r,r=int16:r,r=int32:r,r=int64:r,> n)):>r=int8:r,> n)):>r=int16:r,> n)):>r=int32:r,> n)):>r=int64:r,> n):>r=int8:r,> n):>r=int16:r,